From 595208780e0ce3b6b7db258caa2e6c15683f1afd Mon Sep 17 00:00:00 2001 From: mgabdev <> Date: Sat, 11 Apr 2020 18:29:19 -0400 Subject: [PATCH] Progress --- .../v1/accounts/identity_proofs_controller.rb | 1 - app/javascript/gabsocial/actions/accounts.js | 2 +- .../gabsocial/actions/notifications.js | 11 +- .../gabsocial/actions/suggestions.js | 14 +- .../gabsocial/components/account.js | 62 ++ .../components/account_action_button.js | 2 +- .../autosuggest_account.js | 8 +- .../components/autosuggest_account/index.js | 1 - .../autosuggest_emoji.js | 31 +- .../autosuggest_emoji/autosuggest_emoji.scss | 28 - .../components/autosuggest_emoji/index.js | 1 - .../autosuggest_textbox.js | 12 +- .../autosuggest_textbox.scss | 83 --- .../components/autosuggest_textbox/index.js | 1 - .../gabsocial/components/composer.js | 8 +- .../gabsocial/components/display_name.js | 2 +- .../extended_video_player.js | 10 + .../extended_video_player.scss | 8 - .../components/extended_video_player/index.js | 1 - .../components/floating_action_button.js | 9 +- .../gabsocial/components/group_header.js | 121 ++++ .../{image_loader => }/image_loader.js | 26 +- .../components/image_loader/image_loader.scss | 23 - .../components/image_loader/index.js | 1 - .../loading_bar.js} | 2 +- .../{media_gallery => }/media_gallery.js | 12 +- .../components/media_gallery/index.js | 1 - .../media_gallery/media_gallery.scss | 144 ----- .../components/modal/block_account_modal.js | 12 +- .../components/modal/block_domain_modal.js | 12 +- .../community_timeline_settings_modal.js | 2 +- .../components/modal/compose_modal.js | 8 +- .../components/modal/group_delete_modal.js | 12 +- .../components/modal/group_editor_modal.js | 22 +- .../modal/hashtag_timeline_settings_modal.js | 2 +- .../modal/home_timeline_settings_modal.js | 2 +- .../components/modal/list_delete_modal.js | 12 +- .../components/modal/list_editor_modal.js | 22 +- .../modal/list_timeline_settings_modal.js | 2 +- .../gabsocial/components/modal/modal_base.js | 2 +- .../gabsocial/components/modal/modal_root.js | 2 +- .../gabsocial/components/modal/mute_modal.js | 12 +- .../components/modal/report_modal.js | 6 +- .../modal/status_revisions_modal.js | 5 +- .../components/modal/unfollow_modal.js | 22 +- .../gabsocial/components/moved_note.js | 11 +- .../components/panel/hashtags_panel.js | 10 +- .../components/panel/list_details_panel.js | 10 +- .../components/panel/media_gallery_panel.js | 2 +- .../panel/notification_filter_panel.js | 26 +- .../components/panel/profile_info_panel.js | 10 +- .../components/panel/trends_panel.js | 10 +- .../gabsocial/components/panel/user_panel.js | 10 +- .../components/panel/who_to_follow_panel.js | 16 +- .../components/popover/date_picker_popover.js | 4 +- .../popover/emoji_picker_popover.js | 2 +- .../components/popover/popover_base.js | 2 +- .../components/popover/popover_root.js | 2 +- .../popover/status_visibility_popover.js | 4 +- .../gabsocial/components/profile_header.js | 9 +- app/javascript/gabsocial/components/search.js | 25 +- .../gabsocial/components/sidebar.js | 2 +- .../gabsocial/components/sidebar_header.js | 2 +- .../components/sidebar_section_item.js | 14 +- .../components/{status => }/status.js | 25 +- .../gabsocial/components/status/index.js | 1 - .../gabsocial/components/status/status.scss | 254 -------- .../components/status_action_bar_item.js | 5 +- .../{status_content => }/status_content.js | 16 +- .../components/status_content/index.js | 1 - .../status_content/status_content.scss | 128 ---- .../gabsocial/components/status_list.js | 68 ++- .../components/status_revision_item.js | 42 -- .../gabsocial/components/tab_bar_item.js | 1 + .../components/timeline_compose_block.js | 10 +- .../timeline_queue_button_header.js | 42 +- .../{zoomable_image => }/zoomable_image.js | 15 + .../components/zoomable_image/index.js | 1 - .../zoomable_image/zoomable_image.scss | 13 - .../gabsocial/containers/account_container.js | 68 --- .../gabsocial/containers/domain_container.js | 18 - .../gabsocial/containers/gabsocial.js | 6 +- .../containers/recursive_status_container.js | 9 - .../containers/status_list_container.js | 64 -- .../gabsocial/features/account_gallery.js | 2 +- .../gabsocial/features/blocked_accounts.js | 6 +- .../gabsocial/features/blocked_domains.js | 2 +- .../gabsocial/features/community_timeline.js | 14 +- .../components/compose_form/compose_form.js | 2 +- .../compose/components/emoji_picker_button.js | 4 +- .../compose/components/media_upload_button.js | 8 +- .../compose/components/media_upload_item.js | 2 +- .../navigation_bar/navigation_bar.js | 8 +- .../compose/components/poll_button.js | 4 +- .../components/rich_text_editor_button.js | 2 +- .../components/schedule_post_button.js | 4 +- .../search_results/search_results.js | 5 +- .../components/sensitive_media_button.js | 4 +- .../compose/components/spoiler_button.js | 2 +- .../components/upload_form/upload_form.js | 2 +- .../gabsocial/features/compose/compose.js | 2 +- .../compose/containers/poll_form_container.js | 4 +- .../containers/search_results_container.js | 4 +- .../gabsocial/features/favorites.js | 4 +- .../follow_requests/follow_requests.js | 2 +- .../gabsocial/features/followers.js | 4 +- .../gabsocial/features/following.js | 4 +- .../gabsocial/features/group_create.js | 2 +- .../gabsocial/features/group_members.js | 4 +- .../features/group_removed_accounts.js | 4 +- .../gabsocial/features/group_timeline.js | 3 +- .../containers/column_settings_container.js | 4 +- .../gabsocial/features/hashtag_timeline.js | 4 +- .../gabsocial/features/home_timeline.js | 6 +- .../features/list_create-old/list_adder.js | 2 +- .../gabsocial/features/list_create.js | 4 +- .../edit_list_form/edit_list_form.js | 4 +- .../list_editor_search/list_editor_search.js | 4 +- .../gabsocial/features/list_edit/list_edit.js | 2 +- .../gabsocial/features/list_timeline.js | 4 +- .../gabsocial/features/lists_directory.js | 2 +- app/javascript/gabsocial/features/mutes.js | 6 +- .../notifications/components/notification.js | 333 +++-------- .../containers/notification_container.js | 2 +- .../features/notifications/notifications.js | 21 +- app/javascript/gabsocial/features/reposts.js | 4 +- .../gabsocial/features/status/status.js | 2 +- app/javascript/gabsocial/features/ui/ui.js | 16 +- .../features/ui/util/async_components.js | 169 ++---- .../gabsocial/features/ui/util/bundle.js | 2 +- .../gabsocial/features/ui/util/page_title.js | 41 ++ .../gabsocial/layouts/default_layout.js | 87 +-- .../gabsocial/layouts/group_layout.js | 142 +---- app/javascript/gabsocial/layouts/layout.js | 119 ++++ .../gabsocial/layouts/profile_layout.js | 64 +- app/javascript/gabsocial/locales/bg.json | 4 +- app/javascript/gabsocial/locales/en.json | 4 +- app/javascript/gabsocial/locales/hi.json | 4 +- app/javascript/gabsocial/locales/lv.json | 2 +- app/javascript/gabsocial/locales/ms.json | 4 +- app/javascript/gabsocial/locales/sl.json | 2 +- app/javascript/gabsocial/locales/ta.json | 4 +- app/javascript/gabsocial/main.js | 12 +- app/javascript/gabsocial/pages/basic_page.js | 8 +- .../gabsocial/pages/community_page.js | 20 +- app/javascript/gabsocial/pages/error_page.js | 2 + app/javascript/gabsocial/pages/group_page.js | 43 +- app/javascript/gabsocial/pages/groups_page.js | 49 +- .../gabsocial/pages/hashtag_page.js | 28 +- app/javascript/gabsocial/pages/home_page.js | 1 + app/javascript/gabsocial/pages/list_page.js | 1 + app/javascript/gabsocial/pages/lists_page.js | 5 +- app/javascript/gabsocial/pages/modal_page.js | 1 + .../gabsocial/pages/notifications_page.js | 64 +- .../gabsocial/pages/profile_page.js | 29 +- .../gabsocial/reducers/notifications.js | 6 + app/javascript/packs/public.js | 1 + app/javascript/styles/global.css | 16 +- app/models/notification.rb | 16 +- yarn.lock | 563 ++++++++++++++---- 160 files changed, 1678 insertions(+), 2103 deletions(-) rename app/javascript/gabsocial/components/{autosuggest_account => }/autosuggest_account.js (86%) delete mode 100644 app/javascript/gabsocial/components/autosuggest_account/index.js rename app/javascript/gabsocial/components/{autosuggest_emoji => }/autosuggest_emoji.js (56%) delete mode 100644 app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.scss delete mode 100644 app/javascript/gabsocial/components/autosuggest_emoji/index.js rename app/javascript/gabsocial/components/{autosuggest_textbox => }/autosuggest_textbox.js (97%) delete mode 100644 app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.scss delete mode 100644 app/javascript/gabsocial/components/autosuggest_textbox/index.js rename app/javascript/gabsocial/components/{extended_video_player => }/extended_video_player.js (84%) delete mode 100644 app/javascript/gabsocial/components/extended_video_player/extended_video_player.scss delete mode 100644 app/javascript/gabsocial/components/extended_video_player/index.js create mode 100644 app/javascript/gabsocial/components/group_header.js rename app/javascript/gabsocial/components/{image_loader => }/image_loader.js (88%) delete mode 100644 app/javascript/gabsocial/components/image_loader/image_loader.scss delete mode 100644 app/javascript/gabsocial/components/image_loader/index.js rename app/javascript/gabsocial/{containers/loading_bar_container.js => components/loading_bar.js} (98%) rename app/javascript/gabsocial/components/{media_gallery => }/media_gallery.js (98%) delete mode 100644 app/javascript/gabsocial/components/media_gallery/index.js delete mode 100644 app/javascript/gabsocial/components/media_gallery/media_gallery.scss rename app/javascript/gabsocial/components/{status => }/status.js (95%) delete mode 100644 app/javascript/gabsocial/components/status/index.js delete mode 100644 app/javascript/gabsocial/components/status/status.scss rename app/javascript/gabsocial/components/{status_content => }/status_content.js (97%) delete mode 100644 app/javascript/gabsocial/components/status_content/index.js delete mode 100644 app/javascript/gabsocial/components/status_content/status_content.scss delete mode 100644 app/javascript/gabsocial/components/status_revision_item.js rename app/javascript/gabsocial/components/{zoomable_image => }/zoomable_image.js (93%) delete mode 100644 app/javascript/gabsocial/components/zoomable_image/index.js delete mode 100644 app/javascript/gabsocial/components/zoomable_image/zoomable_image.scss delete mode 100644 app/javascript/gabsocial/containers/account_container.js delete mode 100644 app/javascript/gabsocial/containers/domain_container.js delete mode 100644 app/javascript/gabsocial/containers/recursive_status_container.js delete mode 100644 app/javascript/gabsocial/containers/status_list_container.js create mode 100644 app/javascript/gabsocial/features/ui/util/page_title.js create mode 100644 app/javascript/gabsocial/layouts/layout.js diff --git a/app/controllers/api/v1/accounts/identity_proofs_controller.rb b/app/controllers/api/v1/accounts/identity_proofs_controller.rb index bea51ae1..dee28977 100644 --- a/app/controllers/api/v1/accounts/identity_proofs_controller.rb +++ b/app/controllers/api/v1/accounts/identity_proofs_controller.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class Api::V1::Accounts::IdentityProofsController < Api::BaseController - before_action :require_user! before_action :set_account respond_to :json diff --git a/app/javascript/gabsocial/actions/accounts.js b/app/javascript/gabsocial/actions/accounts.js index a3c9b711..4c2f3fa3 100644 --- a/app/javascript/gabsocial/actions/accounts.js +++ b/app/javascript/gabsocial/actions/accounts.js @@ -102,7 +102,7 @@ export function fetchAccount(id) { return (dispatch, getState) => { dispatch(fetchRelationships([id])); - if (getState().getIn(['accounts', id], null) !== null) { + if (id === -1 || getState().getIn(['accounts', id], null) !== null) { return; } diff --git a/app/javascript/gabsocial/actions/notifications.js b/app/javascript/gabsocial/actions/notifications.js index 8de231eb..d0c516d1 100644 --- a/app/javascript/gabsocial/actions/notifications.js +++ b/app/javascript/gabsocial/actions/notifications.js @@ -165,9 +165,12 @@ export function expandNotifications({ maxId } = {}, done = noOp) { // filter verified and following here too const params = { max_id: maxId, - only_verified: onlyVerified, - only_following: onlyFollowing, - exclude_types: activeFilter === 'all' ? [] : excludeTypesFromFilter(activeFilter), + // only_verified: onlyVerified, + // only_following: onlyFollowing, + exclude_types: activeFilter === 'all' ? null : excludeTypesFromFilter(activeFilter), + // exclude_types: activeFilter === 'all' + // ? excludeTypesFromSettings(getState()) + // : excludeTypesFromFilter(activeFilter), }; if (!maxId && notifications.get('items').size > 0) { @@ -176,6 +179,8 @@ export function expandNotifications({ maxId } = {}, done = noOp) { dispatch(expandNotificationsRequest(isLoadingMore)); + console.log("params:", params) + api(getState).get('/api/v1/notifications', { params }).then(response => { const next = getLinks(response).refs.find(link => link.rel === 'next'); diff --git a/app/javascript/gabsocial/actions/suggestions.js b/app/javascript/gabsocial/actions/suggestions.js index 022cc297..6f0c8e59 100644 --- a/app/javascript/gabsocial/actions/suggestions.js +++ b/app/javascript/gabsocial/actions/suggestions.js @@ -1,15 +1,17 @@ -import api from '../api'; -import { importFetchedAccounts } from './importer'; -import { me } from '../initial_state'; +import api from '../api' +import { importFetchedAccounts } from './importer' +import { me } from '../initial_state' -export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST'; -export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS'; -export const SUGGESTIONS_FETCH_FAIL = 'SUGGESTIONS_FETCH_FAIL'; +export const SUGGESTIONS_FETCH_REQUEST = 'SUGGESTIONS_FETCH_REQUEST' +export const SUGGESTIONS_FETCH_SUCCESS = 'SUGGESTIONS_FETCH_SUCCESS' +export const SUGGESTIONS_FETCH_FAIL = 'SUGGESTIONS_FETCH_FAIL' export const SUGGESTIONS_DISMISS = 'SUGGESTIONS_DISMISS'; export function fetchSuggestions() { return (dispatch, getState) => { + if (!me) return false + dispatch(fetchSuggestionsRequest()); api(getState).get('/api/v1/suggestions').then(response => { diff --git a/app/javascript/gabsocial/components/account.js b/app/javascript/gabsocial/components/account.js index 3b5374d6..0c2421fb 100644 --- a/app/javascript/gabsocial/components/account.js +++ b/app/javascript/gabsocial/components/account.js @@ -4,6 +4,18 @@ import ImmutablePropTypes from 'react-immutable-proptypes' import { defineMessages, injectIntl } from 'react-intl' import ImmutablePureComponent from 'react-immutable-pure-component' import { me } from '../initial_state' +import { + followAccount, + unfollowAccount, + blockAccount, + unblockAccount, + muteAccount, + unmuteAccount, +} from '../actions/accounts' +import { openModal } from '../actions/modal' +import { initMuteModal } from '../actions/mutes' +import { unfollowModal } from '../initial_state' +import { makeGetAccount } from '../selectors' import Avatar from './avatar' import DisplayName from './display_name' import Button from './button' @@ -17,10 +29,60 @@ const messages = defineMessages({ unmute: { id: 'unmute', defaultMessage: 'Unmute' }, mute_notifications: { id: 'account.mute_notifications', defaultMessage: 'Mute notifications from @{name}' }, unmute_notifications: { id: 'account.unmute_notifications', defaultMessage: 'Unmute notifications from @{name}' }, + unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' }, +}) + +const makeMapStateToProps = () => { + const getAccount = makeGetAccount() + + const mapStateToProps = (state, props) => ({ + account: getAccount(state, props.id), + }) + + return mapStateToProps +} + +const mapDispatchToProps = (dispatch, { intl }) => ({ + + onFollow (account) { + if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { + if (unfollowModal) { + dispatch(openModal('UNFOLLOW', { + accountId: account.get('id'), + })) + } else { + dispatch(unfollowAccount(account.get('id'))) + } + } else { + dispatch(followAccount(account.get('id'))) + } + }, + + onBlock (account) { + if (account.getIn(['relationship', 'blocking'])) { + dispatch(unblockAccount(account.get('id'))) + } else { + dispatch(blockAccount(account.get('id'))) + } + }, + + onMute (account) { + if (account.getIn(['relationship', 'muting'])) { + dispatch(unmuteAccount(account.get('id'))) + } else { + dispatch(initMuteModal(account)) + } + }, + + + onMuteNotifications (account, notifications) { + dispatch(muteAccount(account.get('id'), notifications)) + }, }) export default @injectIntl +@connect(makeMapStateToProps, mapDispatchToProps) class Account extends ImmutablePureComponent { static propTypes = { diff --git a/app/javascript/gabsocial/components/account_action_button.js b/app/javascript/gabsocial/components/account_action_button.js index 41078261..06b1eaec 100644 --- a/app/javascript/gabsocial/components/account_action_button.js +++ b/app/javascript/gabsocial/components/account_action_button.js @@ -1,4 +1,4 @@ -import classNames from 'classnames/bind' +wimport classNames from 'classnames/bind' const cx = classNames.bind(_s) diff --git a/app/javascript/gabsocial/components/autosuggest_account/autosuggest_account.js b/app/javascript/gabsocial/components/autosuggest_account.js similarity index 86% rename from app/javascript/gabsocial/components/autosuggest_account/autosuggest_account.js rename to app/javascript/gabsocial/components/autosuggest_account.js index 28510322..19e89792 100644 --- a/app/javascript/gabsocial/components/autosuggest_account/autosuggest_account.js +++ b/app/javascript/gabsocial/components/autosuggest_account.js @@ -1,8 +1,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; -import { makeGetAccount } from '../../selectors'; -import Avatar from '../avatar'; -import DisplayName from '../display_name'; +import { makeGetAccount } from '../selectors'; +import Avatar from './avatar'; +import DisplayName from './display_name'; const makeMapStateToProps = () => { const getAccount = makeGetAccount(); @@ -20,7 +20,7 @@ class AutosuggestAccount extends ImmutablePureComponent { static propTypes = { account: ImmutablePropTypes.map.isRequired, - }; + } render () { const { account } = this.props; diff --git a/app/javascript/gabsocial/components/autosuggest_account/index.js b/app/javascript/gabsocial/components/autosuggest_account/index.js deleted file mode 100644 index a50aa7ef..00000000 --- a/app/javascript/gabsocial/components/autosuggest_account/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './autosuggest_account' \ No newline at end of file diff --git a/app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.js b/app/javascript/gabsocial/components/autosuggest_emoji.js similarity index 56% rename from app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.js rename to app/javascript/gabsocial/components/autosuggest_emoji.js index a8ced018..7fe7cc53 100644 --- a/app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.js +++ b/app/javascript/gabsocial/components/autosuggest_emoji.js @@ -1,7 +1,36 @@ -import unicodeMapping from '../emoji/emoji_unicode_mapping_light' +import unicodeMapping from './emoji/emoji_unicode_mapping_light' const assetHost = process.env.CDN_HOST || '' +// .autosuggest-emoji { +// display: flex; +// justify-items: center; +// align-content: flex-start; +// flex-direction: row; + +// @include text-sizing(14px, 400, 18px); + +// img { +// display: block; +// margin-right: 8px; + +// @include size(16px); +// } +// } + +// .emojione { +// font-size: inherit; +// vertical-align: middle; +// object-fit: contain; +// margin: -.2ex .15em .2ex; + +// @include size(16px); + +// img { +// width: auto; +// } +// } + export default class AutosuggestEmoji extends PureComponent { static propTypes = { diff --git a/app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.scss b/app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.scss deleted file mode 100644 index e27cb140..00000000 --- a/app/javascript/gabsocial/components/autosuggest_emoji/autosuggest_emoji.scss +++ /dev/null @@ -1,28 +0,0 @@ -.autosuggest-emoji { - display: flex; - justify-items: center; - align-content: flex-start; - flex-direction: row; - - @include text-sizing(14px, 400, 18px); - - img { - display: block; - margin-right: 8px; - - @include size(16px); - } -} - -.emojione { - font-size: inherit; - vertical-align: middle; - object-fit: contain; - margin: -.2ex .15em .2ex; - - @include size(16px); - - img { - width: auto; - } -} \ No newline at end of file diff --git a/app/javascript/gabsocial/components/autosuggest_emoji/index.js b/app/javascript/gabsocial/components/autosuggest_emoji/index.js deleted file mode 100644 index d9021fa3..00000000 --- a/app/javascript/gabsocial/components/autosuggest_emoji/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './autosuggest_emoji' \ No newline at end of file diff --git a/app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.js b/app/javascript/gabsocial/components/autosuggest_textbox.js similarity index 97% rename from app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.js rename to app/javascript/gabsocial/components/autosuggest_textbox.js index 3006fcd2..fe4985ef 100644 --- a/app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.js +++ b/app/javascript/gabsocial/components/autosuggest_textbox.js @@ -2,12 +2,12 @@ import { Fragment } from 'react' import ImmutablePropTypes from 'react-immutable-proptypes' import classNames from 'classnames/bind' import ImmutablePureComponent from 'react-immutable-pure-component' -import { isRtl } from '../../utils/rtl' -import { textAtCursorMatchesToken } from '../../utils/cursor_token_match' -import AutosuggestAccount from '../autosuggest_account' -import AutosuggestEmoji from '../autosuggest_emoji' -import Input from '../input' -import Composer from '../composer' +import { isRtl } from '../utils/rtl' +import { textAtCursorMatchesToken } from '../utils/cursor_token_match' +import AutosuggestAccount from './autosuggest_account' +import AutosuggestEmoji from './autosuggest_emoji' +import Input from './input' +import Composer from './composer' const cx = classNames.bind(_s) diff --git a/app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.scss b/app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.scss deleted file mode 100644 index 07058d5e..00000000 --- a/app/javascript/gabsocial/components/autosuggest_textbox/autosuggest_textbox.scss +++ /dev/null @@ -1,83 +0,0 @@ -.autosuggest-input { - position: relative; -} - -.autosuggest-textarea { - &__suggestions-wrapper { - position: relative; - height: 0; - } - - &__wrapper { - position: relative; - } - - &__textarea { - display: block; - box-sizing: border-box; - min-height: 100px; - border-radius: 5px 5px 0 0; - resize: none; - scrollbar-color: initial; - padding: 14px 32px 13px 10px !important; - width: 100%; - margin: 0; - color: $inverted-text-color; - background: $simple-background-color; - font-family: inherit; - font-size: 14px; - resize: vertical; - border: 0; - outline: 0; - - body.theme-gabsocial-light & { - background: $gab-background-base-light; - } - - &:focus { - outline: 0; - } - - &::-webkit-scrollbar { - all: unset; - } - - @include breakpoint(sm) { - max-height: 100px !important; // prevent auto-resize textarea - resize: vertical; - font-size: 16px; - } - } - - &__suggestions { - display: none; - box-sizing: border-box; - position: absolute; - top: 100%; - width: 100%; - z-index: 9999; - box-shadow: 4px 4px 6px rgba($base-shadow-color, 0.4); - background: $ui-secondary-color; - color: $inverted-text-color; - border-radius: 0 0 4px 4px; - font-size: 14px; - padding: 6px; - - &--visible { - display: block; - } - - &__item { - padding: 10px; - cursor: pointer; - border-radius: 4px; - - &:hover, - &:focus, - &:active, - &.selected { - background: darken($ui-secondary-color, 10%); - } - } - } -} \ No newline at end of file diff --git a/app/javascript/gabsocial/components/autosuggest_textbox/index.js b/app/javascript/gabsocial/components/autosuggest_textbox/index.js deleted file mode 100644 index 97a6350a..00000000 --- a/app/javascript/gabsocial/components/autosuggest_textbox/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './autosuggest_textbox' \ No newline at end of file diff --git a/app/javascript/gabsocial/components/composer.js b/app/javascript/gabsocial/components/composer.js index f0e6d60e..aa3f25f5 100644 --- a/app/javascript/gabsocial/components/composer.js +++ b/app/javascript/gabsocial/components/composer.js @@ -137,7 +137,7 @@ const compositeDecorator = new CompositeDecorator([ const HANDLE_REGEX = /\@[\w]+/g; const HASHTAG_REGEX = /\#[\w\u0590-\u05ff]+/g; -const mapStateToProps = state => { +const mapStateToProps = (state) => { const getAccount = makeGetAccount() const account = getAccount(state, me) const isPro = account.get('is_pro') @@ -148,11 +148,9 @@ const mapStateToProps = state => { } } -const mapDispatchToProps = dispatch => { - return { +const mapDispatchToProps = (dispatch) => ({ - } -} +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/display_name.js b/app/javascript/gabsocial/components/display_name.js index dcbe4da6..b98385d0 100644 --- a/app/javascript/gabsocial/components/display_name.js +++ b/app/javascript/gabsocial/components/display_name.js @@ -7,7 +7,7 @@ import Icon from './icon' const cx = classNames.bind(_s) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ openUserInfoPopover(props) { dispatch(openPopover('USER_INFO', props)) }, diff --git a/app/javascript/gabsocial/components/extended_video_player/extended_video_player.js b/app/javascript/gabsocial/components/extended_video_player.js similarity index 84% rename from app/javascript/gabsocial/components/extended_video_player/extended_video_player.js rename to app/javascript/gabsocial/components/extended_video_player.js index ed22c44b..d40ceb68 100644 --- a/app/javascript/gabsocial/components/extended_video_player/extended_video_player.js +++ b/app/javascript/gabsocial/components/extended_video_player.js @@ -38,6 +38,16 @@ export default class ExtendedVideoPlayer extends PureComponent { render () { const { src, muted, controls, alt } = this.props; + // .extended-video-player { + // @include size(100%); + // @include flex(center, center); + + // video { + // @include max-size($media-modal-media-max-width, $media-modal-media-max-height); + // } + // } + + return (
+ + + + + + ) + } + +} \ No newline at end of file diff --git a/app/javascript/gabsocial/components/image_loader/image_loader.js b/app/javascript/gabsocial/components/image_loader.js similarity index 88% rename from app/javascript/gabsocial/components/image_loader/image_loader.js rename to app/javascript/gabsocial/components/image_loader.js index be67c793..9e9dac13 100644 --- a/app/javascript/gabsocial/components/image_loader/image_loader.js +++ b/app/javascript/gabsocial/components/image_loader.js @@ -1,6 +1,30 @@ import classNames from 'classnames'; import { LoadingBar } from 'react-redux-loading-bar'; -import ZoomableImage from '../zoomable_image'; +import ZoomableImage from './zoomable_image'; + +// .image-loader { +// position: relative; + +// @include flex(center, center, column); +// @include size(100%); + +// &__preview-canvas { +// object-fit: contain; + +// @include max-size($media-modal-media-max-width, $media-modal-media-max-height); +// @include background-image("", contain, center, repeat); +// } + +// &--amorphous & { +// &__preview-canvas { +// display: none; +// } +// } + +// .loading-bar { +// position: relative; +// } +// } export default class ImageLoader extends PureComponent { diff --git a/app/javascript/gabsocial/components/image_loader/image_loader.scss b/app/javascript/gabsocial/components/image_loader/image_loader.scss deleted file mode 100644 index 98638082..00000000 --- a/app/javascript/gabsocial/components/image_loader/image_loader.scss +++ /dev/null @@ -1,23 +0,0 @@ -.image-loader { - position: relative; - - @include flex(center, center, column); - @include size(100%); - - &__preview-canvas { - object-fit: contain; - - @include max-size($media-modal-media-max-width, $media-modal-media-max-height); - @include background-image("", contain, center, repeat); - } - - &--amorphous & { - &__preview-canvas { - display: none; - } - } - - .loading-bar { - position: relative; - } -} \ No newline at end of file diff --git a/app/javascript/gabsocial/components/image_loader/index.js b/app/javascript/gabsocial/components/image_loader/index.js deleted file mode 100644 index 7eea1c1d..00000000 --- a/app/javascript/gabsocial/components/image_loader/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './image_loader' \ No newline at end of file diff --git a/app/javascript/gabsocial/containers/loading_bar_container.js b/app/javascript/gabsocial/components/loading_bar.js similarity index 98% rename from app/javascript/gabsocial/containers/loading_bar_container.js rename to app/javascript/gabsocial/components/loading_bar.js index 8ad2048a..39d54802 100644 --- a/app/javascript/gabsocial/containers/loading_bar_container.js +++ b/app/javascript/gabsocial/components/loading_bar.js @@ -2,6 +2,6 @@ import LoadingBar from 'react-redux-loading-bar' const mapStateToProps = (state, ownProps) => ({ loading: state.get('loadingBar')[ownProps.scope || 'default'], -}); +}) export default connect(mapStateToProps)(LoadingBar.WrappedComponent) diff --git a/app/javascript/gabsocial/components/media_gallery/media_gallery.js b/app/javascript/gabsocial/components/media_gallery.js similarity index 98% rename from app/javascript/gabsocial/components/media_gallery/media_gallery.js rename to app/javascript/gabsocial/components/media_gallery.js index 9964a489..18b4150d 100644 --- a/app/javascript/gabsocial/components/media_gallery/media_gallery.js +++ b/app/javascript/gabsocial/components/media_gallery.js @@ -4,12 +4,12 @@ import { is } from 'immutable'; import { defineMessages, injectIntl } from 'react-intl'; import classNames from 'classnames/bind' import { decode } from 'blurhash'; -import { autoPlayGif, displayMedia } from '../../initial_state'; -import { isIOS } from '../../utils/is_mobile'; -import { isPanoramic, isPortrait, isNonConformingRatio, minimumAspectRatio, maximumAspectRatio } from '../../utils/media_aspect_ratio'; -import Button from '../button' -import SensitiveMediaItem from '../../components/sensitive_media_item' -import Text from '../text' +import { autoPlayGif, displayMedia } from '../initial_state'; +import { isIOS } from '../utils/is_mobile'; +import { isPanoramic, isPortrait, isNonConformingRatio, minimumAspectRatio, maximumAspectRatio } from '../utils/media_aspect_ratio'; +import Button from './button' +import SensitiveMediaItem from './sensitive_media_item' +import Text from './text' const messages = defineMessages({ toggle_visible: { id: 'media_gallery.toggle_visible', defaultMessage: 'Toggle visibility' }, diff --git a/app/javascript/gabsocial/components/media_gallery/index.js b/app/javascript/gabsocial/components/media_gallery/index.js deleted file mode 100644 index 129745e5..00000000 --- a/app/javascript/gabsocial/components/media_gallery/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './media_gallery' \ No newline at end of file diff --git a/app/javascript/gabsocial/components/media_gallery/media_gallery.scss b/app/javascript/gabsocial/components/media_gallery/media_gallery.scss deleted file mode 100644 index 936dffd7..00000000 --- a/app/javascript/gabsocial/components/media_gallery/media_gallery.scss +++ /dev/null @@ -1,144 +0,0 @@ -.media-item { - display: block; - float: left; - border: none; - box-sizing: border-box; - position: relative; - overflow: hidden; - - &.standalone { - media-item-gifv-thumbnail { - transform: none; - top: 0; - } - } - - &__thumbnail { - display: block; - cursor: zoom-in; - text-decoration: none; - color: $secondary-text-color; - line-height: 0; - position: relative; - z-index: 1; - - &, - img { - @include size(100%); - } - - img { - object-fit: cover; - } - } - - &__gifv { - cursor: zoom-in; - object-fit: cover; - position: relative; - top: 50%; - transform: translateY(-50%); - z-index: 1; - - @include size(100%); - } -} - -.media-gallery { - box-sizing: border-box; - margin-top: 8px; - overflow: hidden; - position: relative; - width: 100%; - - &__preview { - object-fit: cover; - z-index: 0; - background: $base-overlay-background; - - @include size(100%); - @include abs-position(0, auto, auto, 0); - - &--hidden { - display: none; - } - } - - &__gifv { - overflow: hidden; - position: relative; - - @include size(100%); - - &.autoplay { - .media-gallery__gifv__label { - display: none; - } - } - - &:hover { - .media-gallery__gifv__label { - opacity: 1; - } - } - - &__label { - display: block; - color: $primary-text-color; - background: rgba($base-overlay-background, 0.5); - padding: 2px 6px; - border-radius: 2px; - z-index: 1; - pointer-events: none; - opacity: 0.9; - transition: opacity 0.1s ease; - - @include text-sizing(11px, 600, 18px); - @include abs-position(auto, auto, 6px, 6px); - } - } -} - -.spoiler-button { - z-index: 100; - - @include size(100%); - @include abs-position(0, auto, auto, 0); - - &--minified { - display: block; - - @include size(auto); - @include abs-position(4px, auto, auto, 4px, false); - } - - &--hidden { - display: none; - } - - &__overlay { - display: block; - background: transparent; - border: 0; - - @include size(100%); - - &__label { - display: inline-block; - background: rgba($base-overlay-background, 0.5); - border-radius: 8px; - padding: 8px 12px; - color: $primary-text-color; - - @include text-sizing(14px, 500); - } - - &:hover, - &:focus, - &:active { - .spoiler-button__overlay__label { - background: rgba($base-overlay-background, 0.8); - } - } - } -} \ No newline at end of file diff --git a/app/javascript/gabsocial/components/modal/block_account_modal.js b/app/javascript/gabsocial/components/modal/block_account_modal.js index 8ac66ef2..52d7b43d 100644 --- a/app/javascript/gabsocial/components/modal/block_account_modal.js +++ b/app/javascript/gabsocial/components/modal/block_account_modal.js @@ -17,13 +17,11 @@ const mapStateToProps = (state, { accountId }) => { } } -const mapDispatchToProps = dispatch => { - return { - onConfirm(account) { - dispatch(blockAccount(account.get('id'))) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account) { + dispatch(blockAccount(account.get('id'))) + }, +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/block_domain_modal.js b/app/javascript/gabsocial/components/modal/block_domain_modal.js index 02034262..f24841ca 100644 --- a/app/javascript/gabsocial/components/modal/block_domain_modal.js +++ b/app/javascript/gabsocial/components/modal/block_domain_modal.js @@ -9,13 +9,11 @@ const messages = defineMessages({ cancel: { id: 'confirmation_modal.cancel', defaultMessage: 'Cancel' }, }) -const mapDispatchToProps = dispatch => { - return { - onConfirm(domain) { - dispatch(blockDomain(domain)) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(domain) { + dispatch(blockDomain(domain)) + }, +}) export default @connect(null, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/community_timeline_settings_modal.js b/app/javascript/gabsocial/components/modal/community_timeline_settings_modal.js index 4c78749b..2b06a266 100644 --- a/app/javascript/gabsocial/components/modal/community_timeline_settings_modal.js +++ b/app/javascript/gabsocial/components/modal/community_timeline_settings_modal.js @@ -14,7 +14,7 @@ const messages = defineMessages({ showInSidebar: { id: 'show_in_sidebar', defaultMessage: 'Show in Sidebar' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ settings: state.getIn(['settings', 'community']), }) diff --git a/app/javascript/gabsocial/components/modal/compose_modal.js b/app/javascript/gabsocial/components/modal/compose_modal.js index 72db8453..0639ad5d 100644 --- a/app/javascript/gabsocial/components/modal/compose_modal.js +++ b/app/javascript/gabsocial/components/modal/compose_modal.js @@ -10,11 +10,9 @@ const messages = defineMessages({ title: { id: 'navigation_bar.compose', defaultMessage: 'Compose new gab' }, }) -const mapStateToProps = state => { - return { - composeText: state.getIn(['compose', 'text']), - }; -} +const mapStateToProps = (state) => ({ + composeText: state.getIn(['compose', 'text']), +}) export default @connect(mapStateToProps) diff --git a/app/javascript/gabsocial/components/modal/group_delete_modal.js b/app/javascript/gabsocial/components/modal/group_delete_modal.js index 1b7541d5..880093f0 100644 --- a/app/javascript/gabsocial/components/modal/group_delete_modal.js +++ b/app/javascript/gabsocial/components/modal/group_delete_modal.js @@ -9,13 +9,11 @@ const messages = defineMessages({ delete: { id: 'delete', defaultMessage: 'Delete' }, }) -const mapDispatchToProps = dispatch => { - return { - onConfirm(account) { - // dispatch(blockAccount(account.get('id'))) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account) { + // dispatch(blockAccount(account.get('id'))) + }, +}) export default @connect(null, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/group_editor_modal.js b/app/javascript/gabsocial/components/modal/group_editor_modal.js index c878e233..723ad7e0 100644 --- a/app/javascript/gabsocial/components/modal/group_editor_modal.js +++ b/app/javascript/gabsocial/components/modal/group_editor_modal.js @@ -7,20 +7,16 @@ const messages = defineMessages({ confirm: { id: 'confirmations.mute.confirm', defaultMessage: 'Mute' }, }) -const mapStateToProps = state => { - return { - isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), - account: state.getIn(['mutes', 'new', 'account']), - } -} +const mapStateToProps = (state) => ({ + isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), + account: state.getIn(['mutes', 'new', 'account']), +}) -const mapDispatchToProps = dispatch => { - return { - onConfirm(account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account, notifications) { + dispatch(muteAccount(account.get('id'), notifications)) + }, +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/hashtag_timeline_settings_modal.js b/app/javascript/gabsocial/components/modal/hashtag_timeline_settings_modal.js index 8c39005a..a357f86d 100644 --- a/app/javascript/gabsocial/components/modal/hashtag_timeline_settings_modal.js +++ b/app/javascript/gabsocial/components/modal/hashtag_timeline_settings_modal.js @@ -14,7 +14,7 @@ const messages = defineMessages({ showInSidebar: { id: 'show_in_sidebar', defaultMessage: 'Show in Sidebar' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ settings: state.getIn(['settings', 'community']), }) diff --git a/app/javascript/gabsocial/components/modal/home_timeline_settings_modal.js b/app/javascript/gabsocial/components/modal/home_timeline_settings_modal.js index 103c65a5..eeecf8dd 100644 --- a/app/javascript/gabsocial/components/modal/home_timeline_settings_modal.js +++ b/app/javascript/gabsocial/components/modal/home_timeline_settings_modal.js @@ -17,7 +17,7 @@ const messages = defineMessages({ showReplies: { id: 'home.column_settings.show_replies', defaultMessage: 'Show replies' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ settings: state.getIn(['settings', 'home']), }) diff --git a/app/javascript/gabsocial/components/modal/list_delete_modal.js b/app/javascript/gabsocial/components/modal/list_delete_modal.js index 213561ba..9b5b66bd 100644 --- a/app/javascript/gabsocial/components/modal/list_delete_modal.js +++ b/app/javascript/gabsocial/components/modal/list_delete_modal.js @@ -9,13 +9,11 @@ const messages = defineMessages({ delete: { id: 'delete', defaultMessage: 'Delete' }, }) -const mapDispatchToProps = dispatch => { - return { - onConfirm(account) { - // dispatch(blockAccount(account.get('id'))) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account) { + // dispatch(blockAccount(account.get('id'))) + }, +}) export default @connect(null, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/list_editor_modal.js b/app/javascript/gabsocial/components/modal/list_editor_modal.js index c878e233..723ad7e0 100644 --- a/app/javascript/gabsocial/components/modal/list_editor_modal.js +++ b/app/javascript/gabsocial/components/modal/list_editor_modal.js @@ -7,20 +7,16 @@ const messages = defineMessages({ confirm: { id: 'confirmations.mute.confirm', defaultMessage: 'Mute' }, }) -const mapStateToProps = state => { - return { - isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), - account: state.getIn(['mutes', 'new', 'account']), - } -} +const mapStateToProps = (state) => ({ + isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), + account: state.getIn(['mutes', 'new', 'account']), +}) -const mapDispatchToProps = dispatch => { - return { - onConfirm(account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account, notifications) { + dispatch(muteAccount(account.get('id'), notifications)) + }, +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/list_timeline_settings_modal.js b/app/javascript/gabsocial/components/modal/list_timeline_settings_modal.js index 2b615b43..1ca5ea31 100644 --- a/app/javascript/gabsocial/components/modal/list_timeline_settings_modal.js +++ b/app/javascript/gabsocial/components/modal/list_timeline_settings_modal.js @@ -17,7 +17,7 @@ const messages = defineMessages({ showReplies: { id: 'home.column_settings.show_replies', defaultMessage: 'Show replies' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ settings: state.getIn(['settings', 'list']), }) diff --git a/app/javascript/gabsocial/components/modal/modal_base.js b/app/javascript/gabsocial/components/modal/modal_base.js index 04bec67d..84fd21aa 100644 --- a/app/javascript/gabsocial/components/modal/modal_base.js +++ b/app/javascript/gabsocial/components/modal/modal_base.js @@ -9,7 +9,7 @@ const messages = defineMessages({ delete: { id: 'confirmations.delete.message', defaultMessage: 'Are you sure you want to delete this status?' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ composeId: state.getIn(['compose', 'id']), composeText: state.getIn(['compose', 'text']), }) diff --git a/app/javascript/gabsocial/components/modal/modal_root.js b/app/javascript/gabsocial/components/modal/modal_root.js index a0298484..0f41d031 100644 --- a/app/javascript/gabsocial/components/modal/modal_root.js +++ b/app/javascript/gabsocial/components/modal/modal_root.js @@ -68,7 +68,7 @@ const MODAL_COMPONENTS = { VIDEO: () => Promise.resolve({ default: VideoModal }), } -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ type: state.getIn(['modal', 'modalType']), props: state.getIn(['modal', 'modalProps'], {}), }) diff --git a/app/javascript/gabsocial/components/modal/mute_modal.js b/app/javascript/gabsocial/components/modal/mute_modal.js index d381bbdb..da529464 100644 --- a/app/javascript/gabsocial/components/modal/mute_modal.js +++ b/app/javascript/gabsocial/components/modal/mute_modal.js @@ -17,13 +17,11 @@ const mapStateToProps = (state, { accountId }) => { } } -const mapDispatchToProps = dispatch => { - return { - onConfirm(account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account, notifications) { + dispatch(muteAccount(account.get('id'), notifications)) + }, +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/modal/report_modal.js b/app/javascript/gabsocial/components/modal/report_modal.js index e29fbf74..5b3f0a28 100644 --- a/app/javascript/gabsocial/components/modal/report_modal.js +++ b/app/javascript/gabsocial/components/modal/report_modal.js @@ -25,7 +25,7 @@ const messages = defineMessages({ const makeMapStateToProps = () => { const getAccount = makeGetAccount() - const mapStateToProps = state => { + const mapStateToProps = (state) => { const accountId = state.getIn(['reports', 'new', 'account_id']) return { @@ -125,14 +125,14 @@ class ReportModal extends ImmutablePureComponent { /> - { + { /** : todo : */ domain &&
{intl.formatMessage(messages.forwardHint)} -
+
({ +const mapStateToProps = (state) => ({ loading: state.getIn(['status_revisions', 'loading']), error: state.getIn(['status_revisions', 'error']), revisions: state.getIn(['status_revisions', 'revisions']), }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onLoadStatusRevisions(statusId) { dispatch(loadStatusRevisions(statusId)) }, diff --git a/app/javascript/gabsocial/components/modal/unfollow_modal.js b/app/javascript/gabsocial/components/modal/unfollow_modal.js index 63dbe9c2..2b00c501 100644 --- a/app/javascript/gabsocial/components/modal/unfollow_modal.js +++ b/app/javascript/gabsocial/components/modal/unfollow_modal.js @@ -7,20 +7,16 @@ const messages = defineMessages({ confirm: { id: 'confirmations.mute.confirm', defaultMessage: 'Mute' }, }) -const mapStateToProps = state => { - return { - isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), - account: state.getIn(['mutes', 'new', 'account']), - } -} +const mapStateToProps = (state) => ({ + isSubmitting: state.getIn(['reports', 'new', 'isSubmitting']), + account: state.getIn(['mutes', 'new', 'account']), +}) -const mapDispatchToProps = dispatch => { - return { - onConfirm(account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onConfirm(account, notifications) { + dispatch(muteAccount(account.get('id'), notifications)) + }, +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/moved_note.js b/app/javascript/gabsocial/components/moved_note.js index e8b8bc13..74c9518e 100644 --- a/app/javascript/gabsocial/components/moved_note.js +++ b/app/javascript/gabsocial/components/moved_note.js @@ -12,12 +12,13 @@ export default class MovedNote extends ImmutablePureComponent { } static propTypes = { + fromAcct: ImmutablePropTypes.map.isRequired, to: ImmutablePropTypes.map.isRequired, } render () { - const { to } = this.props; - const displayNameHtml = { __html: from.get('display_name_html') } + const { fromAcct, toAcct } = this.props; + const displayNameHtml = { __html: fromAcct.get('display_name_html') } return (
@@ -34,11 +35,11 @@ export default class MovedNote extends ImmutablePureComponent { />
- +
- +
- +
); diff --git a/app/javascript/gabsocial/components/panel/hashtags_panel.js b/app/javascript/gabsocial/components/panel/hashtags_panel.js index 7e778e53..eefaf00c 100644 --- a/app/javascript/gabsocial/components/panel/hashtags_panel.js +++ b/app/javascript/gabsocial/components/panel/hashtags_panel.js @@ -11,15 +11,13 @@ const messages = defineMessages({ show_all: { id: 'groups.sidebar-panel.show_all', defaultMessage: 'Show all' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ hashtags: state.getIn(['hashtags', 'items']), }) -const mapDispatchToProps = dispatch => { - return { - fetchHashtags: () => dispatch(fetchHashtags()), - } -} +const mapDispatchToProps = (dispatch) => ({ + fetchHashtags: () => dispatch(fetchHashtags()), +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/panel/list_details_panel.js b/app/javascript/gabsocial/components/panel/list_details_panel.js index 4e43fedc..b8bf00ed 100644 --- a/app/javascript/gabsocial/components/panel/list_details_panel.js +++ b/app/javascript/gabsocial/components/panel/list_details_panel.js @@ -17,15 +17,13 @@ const messages = defineMessages({ edit: { id: 'edit', defaultMessage: 'Edit' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ // accountIds: state.getIn(['listEditor', 'accounts', 'items']), }) -const mapDispatchToProps = dispatch => { - return { +const mapDispatchToProps = (dispatch) => ({ - } -} +}) export default @connect(mapStateToProps, mapDispatchToProps) @@ -96,7 +94,7 @@ class ListDetailsPanel extends ImmutablePureComponent { { [1, 2, 3, 4, 5, 6, 7, 8, 9].map(item => (
- +
)) } diff --git a/app/javascript/gabsocial/components/panel/media_gallery_panel.js b/app/javascript/gabsocial/components/panel/media_gallery_panel.js index 71a667a6..b7ee9111 100644 --- a/app/javascript/gabsocial/components/panel/media_gallery_panel.js +++ b/app/javascript/gabsocial/components/panel/media_gallery_panel.js @@ -36,7 +36,7 @@ class MediaGalleryPanel extends ImmutablePureComponent { componentDidMount() { const { accountId } = this.props - if (accountId) { + if (accountId && accountId !== -1) { this.props.dispatch(expandAccountMediaTimeline(accountId, { limit: 8 })) } } diff --git a/app/javascript/gabsocial/components/panel/notification_filter_panel.js b/app/javascript/gabsocial/components/panel/notification_filter_panel.js index 1890d995..ba1eec29 100644 --- a/app/javascript/gabsocial/components/panel/notification_filter_panel.js +++ b/app/javascript/gabsocial/components/panel/notification_filter_panel.js @@ -1,6 +1,7 @@ import { defineMessages, injectIntl } from 'react-intl' import ImmutablePureComponent from 'react-immutable-pure-component' import ImmutablePropTypes from 'react-immutable-proptypes' +import { me } from '../../initial_state' import { setFilter } from '../../actions/notifications' import PanelLayout from './panel_layout' import SettingSwitch from '../setting_switch' @@ -11,17 +12,16 @@ const messages = defineMessages({ onlyFollowing: { id: 'notification_only_following', defaultMessage: 'Only People I Follow' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ settings: state.getIn(['notifications', 'filter']), + isPro: state.getIn(['accounts', me, 'is_pro']), }) -const mapDispatchToProps = (dispatch) => { - return { - onChange(path, value) { - dispatch(setFilter(path, value)) - }, - } -} +const mapDispatchToProps = (dispatch) => ({ + onChange(path, value) { + dispatch(setFilter(path, value)) + }, +}) export default @injectIntl @@ -32,10 +32,18 @@ class NotificationFilterPanel extends ImmutablePureComponent { intl: PropTypes.object.isRequired, onChange: PropTypes.func.isRequired, settings: ImmutablePropTypes.map.isRequired, + isPro: PropTypes.bool.isRequired, } render() { - const { intl, onChange, settings } = this.props + const { + intl, + onChange, + settings, + isPro + } = this.props + + if (!isPro) return null return ( diff --git a/app/javascript/gabsocial/components/panel/profile_info_panel.js b/app/javascript/gabsocial/components/panel/profile_info_panel.js index 7a6bf20e..e18d78da 100644 --- a/app/javascript/gabsocial/components/panel/profile_info_panel.js +++ b/app/javascript/gabsocial/components/panel/profile_info_panel.js @@ -25,12 +25,10 @@ const mapStateToProps = (state, { account }) => { } } -const mapDispatchToProps = dispatch => { - return { - fetchSuggestions: () => dispatch(fetchSuggestions()), - dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))), - } -} +const mapDispatchToProps = (dispatch) => ({ + fetchSuggestions: () => dispatch(fetchSuggestions()), + dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))), +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/panel/trends_panel.js b/app/javascript/gabsocial/components/panel/trends_panel.js index 1d3635b7..48dbce52 100644 --- a/app/javascript/gabsocial/components/panel/trends_panel.js +++ b/app/javascript/gabsocial/components/panel/trends_panel.js @@ -10,15 +10,13 @@ const messages = defineMessages({ title: { id: 'trends.title', defaultMessage: 'Trending right now' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ gabtrends: state.getIn(['gab_trends', 'items']), }) -const mapDispatchToProps = dispatch => { - return { - onFetchGabTrends: () => dispatch(fetchGabTrends()), - } -} +const mapDispatchToProps = (dispatch) => ({ + onFetchGabTrends: () => dispatch(fetchGabTrends()), +}) export default @connect(mapStateToProps, mapDispatchToProps) diff --git a/app/javascript/gabsocial/components/panel/user_panel.js b/app/javascript/gabsocial/components/panel/user_panel.js index e66a4563..6776f75a 100644 --- a/app/javascript/gabsocial/components/panel/user_panel.js +++ b/app/javascript/gabsocial/components/panel/user_panel.js @@ -22,11 +22,9 @@ const messages = defineMessages({ edit_profile: { id: 'account.edit_profile', defaultMessage: 'Edit profile' }, }) -const mapStateToProps = state => { - return { - account: makeGetAccount()(state, me), - } -} +const mapStateToProps = (state) => ({ + account: makeGetAccount()(state, me), +}) export default @connect(mapStateToProps) @@ -72,7 +70,7 @@ class UserPanel extends ImmutablePureComponent { + />
) } diff --git a/app/javascript/gabsocial/components/zoomable_image/zoomable_image.js b/app/javascript/gabsocial/components/zoomable_image.js similarity index 93% rename from app/javascript/gabsocial/components/zoomable_image/zoomable_image.js rename to app/javascript/gabsocial/components/zoomable_image.js index c9e97842..646da32d 100644 --- a/app/javascript/gabsocial/components/zoomable_image/zoomable_image.js +++ b/app/javascript/gabsocial/components/zoomable_image.js @@ -11,6 +11,21 @@ const getDistance = (p1, p2) => const clamp = (min, max, value) => Math.min(max, Math.max(min, value)); +// .zoomable-image { +// position: relative; + +// @include flex(center, center); +// @include size(100%); + +// img { +// object-fit: contain; + +// @include size(auto); +// @include max-size($media-modal-media-max-width, $media-modal-media-max-height); +// } +// } + + export default class ZoomableImage extends PureComponent { static propTypes = { diff --git a/app/javascript/gabsocial/components/zoomable_image/index.js b/app/javascript/gabsocial/components/zoomable_image/index.js deleted file mode 100644 index f1ec8498..00000000 --- a/app/javascript/gabsocial/components/zoomable_image/index.js +++ /dev/null @@ -1 +0,0 @@ -export { default } from './zoomable_image' \ No newline at end of file diff --git a/app/javascript/gabsocial/components/zoomable_image/zoomable_image.scss b/app/javascript/gabsocial/components/zoomable_image/zoomable_image.scss deleted file mode 100644 index e52bc0f6..00000000 --- a/app/javascript/gabsocial/components/zoomable_image/zoomable_image.scss +++ /dev/null @@ -1,13 +0,0 @@ -.zoomable-image { - position: relative; - - @include flex(center, center); - @include size(100%); - - img { - object-fit: contain; - - @include size(auto); - @include max-size($media-modal-media-max-width, $media-modal-media-max-height); - } -} \ No newline at end of file diff --git a/app/javascript/gabsocial/containers/account_container.js b/app/javascript/gabsocial/containers/account_container.js deleted file mode 100644 index 67427c9e..00000000 --- a/app/javascript/gabsocial/containers/account_container.js +++ /dev/null @@ -1,68 +0,0 @@ -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl' -import { - followAccount, - unfollowAccount, - blockAccount, - unblockAccount, - muteAccount, - unmuteAccount, -} from '../actions/accounts' -import { openModal } from '../actions/modal' -import { initMuteModal } from '../actions/mutes' -import { unfollowModal } from '../initial_state' -import { makeGetAccount } from '../selectors' -import Account from '../components/account' - -const messages = defineMessages({ - unfollowConfirm: { id: 'confirmations.unfollow.confirm', defaultMessage: 'Unfollow' }, -}) - -const makeMapStateToProps = () => { - const getAccount = makeGetAccount() - - const mapStateToProps = (state, props) => ({ - account: getAccount(state, props.id), - }) - - return mapStateToProps -} - -const mapDispatchToProps = (dispatch, { intl }) => ({ - - onFollow (account) { - if (account.getIn(['relationship', 'following']) || account.getIn(['relationship', 'requested'])) { - if (unfollowModal) { - dispatch(openModal('UNFOLLOW', { - accountId: account.get('id'), - })) - } else { - dispatch(unfollowAccount(account.get('id'))) - } - } else { - dispatch(followAccount(account.get('id'))) - } - }, - - onBlock (account) { - if (account.getIn(['relationship', 'blocking'])) { - dispatch(unblockAccount(account.get('id'))) - } else { - dispatch(blockAccount(account.get('id'))) - } - }, - - onMute (account) { - if (account.getIn(['relationship', 'muting'])) { - dispatch(unmuteAccount(account.get('id'))) - } else { - dispatch(initMuteModal(account)) - } - }, - - - onMuteNotifications (account, notifications) { - dispatch(muteAccount(account.get('id'), notifications)) - }, -}) - -export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(Account)) diff --git a/app/javascript/gabsocial/containers/domain_container.js b/app/javascript/gabsocial/containers/domain_container.js deleted file mode 100644 index 2370992b..00000000 --- a/app/javascript/gabsocial/containers/domain_container.js +++ /dev/null @@ -1,18 +0,0 @@ -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl' -import { unblockDomain } from '../actions/domain_blocks' -import { openModal } from '../actions/modal' -import Domain from '../components/domain' - -const mapDispatchToProps = (dispatch, { intl }) => ({ - onBlockDomain (domain) { - dispatch(openModal('BLOCK_DOMAIN', { - domain, - })) - }, - - onUnblockDomain (domain) { - dispatch(unblockDomain(domain)) - }, -}) - -export default injectIntl(connect(null, mapDispatchToProps)(Domain)) diff --git a/app/javascript/gabsocial/containers/gabsocial.js b/app/javascript/gabsocial/containers/gabsocial.js index 1e172f72..cec38e0e 100644 --- a/app/javascript/gabsocial/containers/gabsocial.js +++ b/app/javascript/gabsocial/containers/gabsocial.js @@ -70,8 +70,10 @@ export default class GabSocial extends PureComponent { }; componentDidMount() { - this.disconnect = store.dispatch(connectUserStream()); - store.dispatch(connectStatusUpdateStream()); + if (!!me) { + this.disconnect = store.dispatch(connectUserStream()); + store.dispatch(connectStatusUpdateStream()); + } } componentWillUnmount () { diff --git a/app/javascript/gabsocial/containers/recursive_status_container.js b/app/javascript/gabsocial/containers/recursive_status_container.js deleted file mode 100644 index 68cf9084..00000000 --- a/app/javascript/gabsocial/containers/recursive_status_container.js +++ /dev/null @@ -1,9 +0,0 @@ -// import StatusContainer from './status_container' - -// export default class RecursiveStatusContainer extends PureComponent { -// render() { -// return ( -// -// ) -// } -// } \ No newline at end of file diff --git a/app/javascript/gabsocial/containers/status_list_container.js b/app/javascript/gabsocial/containers/status_list_container.js deleted file mode 100644 index 69b3c8b0..00000000 --- a/app/javascript/gabsocial/containers/status_list_container.js +++ /dev/null @@ -1,64 +0,0 @@ -import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; -import { createSelector } from 'reselect'; -import { sample } from 'lodash'; -import debounce from 'lodash.debounce' -import { dequeueTimeline } from '../actions/timelines'; -import { scrollTopTimeline } from '../actions/timelines'; -import { fetchStatus } from '../actions/statuses'; -import { me, promotions } from '../initial_state'; -import StatusList from '../components/status_list'; - -const makeGetStatusIds = () => createSelector([ - (state, { type, id }) => state.getIn(['settings', type], ImmutableMap()), - (state, { type, id }) => state.getIn(['timelines', id, 'items'], ImmutableList()), - (state) => state.get('statuses'), -], (columnSettings, statusIds, statuses) => { - return statusIds.filter(id => { - if (id === null) return true; - - const statusForId = statuses.get(id); - let showStatus = true; - - if (columnSettings.getIn(['shows', 'reblog']) === false) { - showStatus = showStatus && statusForId.get('reblog') === null; - } - - if (columnSettings.getIn(['shows', 'reply']) === false) { - showStatus = showStatus && (statusForId.get('in_reply_to_id') === null || statusForId.get('in_reply_to_account_id') === me); - } - - return showStatus; - }); -}); - -const mapStateToProps = (state, {timelineId}) => { - const getStatusIds = makeGetStatusIds(); - const promotion = promotions.length > 0 && sample(promotions.filter(p => p.timeline_id === timelineId)); - - return { - statusIds: getStatusIds(state, { type: timelineId.substring(0,5) === 'group' ? 'group' : timelineId, id: timelineId }), - isLoading: state.getIn(['timelines', timelineId, 'isLoading'], true), - isPartial: state.getIn(['timelines', timelineId, 'isPartial'], false), - hasMore: state.getIn(['timelines', timelineId, 'hasMore']), - totalQueuedItemsCount: state.getIn(['timelines', timelineId, 'totalQueuedItemsCount']), - promotion: promotion, - promotedStatus: promotion && state.getIn(['statuses', promotion.status_id]) - }; -}; - -const mapDispatchToProps = (dispatch, ownProps) => ({ - onDequeueTimeline(timelineId) { - dispatch(dequeueTimeline(timelineId, ownProps.onLoadMore)); - }, - onScrollToTop: debounce(() => { - dispatch(scrollTopTimeline(ownProps.timelineId, true)); - }, 100), - onScroll: debounce(() => { - dispatch(scrollTopTimeline(ownProps.timelineId, false)); - }, 100), - fetchStatus(id) { - dispatch(fetchStatus(id)); - } -}); - -export default connect(mapStateToProps, mapDispatchToProps)(StatusList); diff --git a/app/javascript/gabsocial/features/account_gallery.js b/app/javascript/gabsocial/features/account_gallery.js index 15a24cf4..20466d2f 100644 --- a/app/javascript/gabsocial/features/account_gallery.js +++ b/app/javascript/gabsocial/features/account_gallery.js @@ -41,7 +41,7 @@ class AccountGallery extends ImmutablePureComponent { componentDidMount() { const { accountId } = this.props - if (accountId) { + if (accountId && accountId !== -1) { this.props.dispatch(expandAccountMediaTimeline(accountId)) } } diff --git a/app/javascript/gabsocial/features/blocked_accounts.js b/app/javascript/gabsocial/features/blocked_accounts.js index 1b6fa400..ec51b9d0 100644 --- a/app/javascript/gabsocial/features/blocked_accounts.js +++ b/app/javascript/gabsocial/features/blocked_accounts.js @@ -3,7 +3,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component' import ImmutablePropTypes from 'react-immutable-proptypes' import debounce from 'lodash.debounce' import { fetchBlocks, expandBlocks } from '../actions/blocks' -import AccountContainer from '../containers/account_container' +import Account from '../components/account' import ColumnIndicator from '../components/column_indicator' import ScrollableList from '../components/scrollable_list' @@ -11,7 +11,7 @@ const messages = defineMessages({ empty: { id: 'empty_column.blocks', defaultMessage: 'You haven\'t blocked any users yet.' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ accountIds: state.getIn(['user_lists', 'blocks', 'items']), hasMore: !!state.getIn(['user_lists', 'blocks', 'next']), }) @@ -59,7 +59,7 @@ class Blocks extends ImmutablePureComponent { > { accountIds.map(id => - + ) } diff --git a/app/javascript/gabsocial/features/blocked_domains.js b/app/javascript/gabsocial/features/blocked_domains.js index f48a6ccf..7aeb324e 100644 --- a/app/javascript/gabsocial/features/blocked_domains.js +++ b/app/javascript/gabsocial/features/blocked_domains.js @@ -26,7 +26,7 @@ const mapDispatchToProps = (dispatch) => ({ }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ domains: state.getIn(['domain_lists', 'blocks', 'items']), hasMore: !!state.getIn(['domain_lists', 'blocks', 'next']), }) diff --git a/app/javascript/gabsocial/features/community_timeline.js b/app/javascript/gabsocial/features/community_timeline.js index fb85ce4e..8cf6d65c 100644 --- a/app/javascript/gabsocial/features/community_timeline.js +++ b/app/javascript/gabsocial/features/community_timeline.js @@ -1,19 +1,15 @@ import { defineMessages, injectIntl } from 'react-intl' import { expandCommunityTimeline } from '../actions/timelines' import { connectCommunityStream } from '../actions/streaming' -import StatusListContainer from '../containers/status_list_container' +import StatusList from '../components/status_list' const messages = defineMessages({ empty: { id: 'empty_column.community', defaultMessage: 'The community timeline is empty. Write something publicly to get the ball rolling!' }, }) -const mapStateToProps = state => { - const onlyMedia = state.getIn(['settings', 'community', 'other', 'onlyMedia']) - - return { - onlyMedia, - } -} +const mapStateToProps = (state) => ({ + onlyMedia: state.getIn(['settings', 'community', 'other', 'onlyMedia']) +}) export default @connect(mapStateToProps) @@ -67,7 +63,7 @@ class CommunityTimeline extends PureComponent { const emptyMessage = intl.formatMessage(messages.empty) return ( - - +
} diff --git a/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js b/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js index 856b1144..eb0f87ee 100644 --- a/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js +++ b/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js @@ -6,11 +6,11 @@ const messages = defineMessages({ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ active: state.getIn(['popover', 'popoverType']) === 'EMOJI_PICKER', }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onClick(targetRef) { dispatch(openPopover('EMOJI_PICKER', { diff --git a/app/javascript/gabsocial/features/compose/components/media_upload_button.js b/app/javascript/gabsocial/features/compose/components/media_upload_button.js index 50d11c81..63892d30 100644 --- a/app/javascript/gabsocial/features/compose/components/media_upload_button.js +++ b/app/javascript/gabsocial/features/compose/components/media_upload_button.js @@ -10,7 +10,7 @@ const messages = defineMessages({ }) const makeMapStateToProps = () => { - const mapStateToProps = state => ({ + const mapStateToProps = (state) => ({ acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']), disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')), unavailable: state.getIn(['compose', 'poll']) !== null, @@ -20,10 +20,8 @@ const makeMapStateToProps = () => { return mapStateToProps } -const mapDispatchToProps = dispatch => ({ - onSelectFile(files) { - dispatch(uploadCompose(files)) - }, +const mapDispatchToProps = (dispatch) => ({ + onSelectFile: (files) => dispatch(uploadCompose(files)), }) export default diff --git a/app/javascript/gabsocial/features/compose/components/media_upload_item.js b/app/javascript/gabsocial/features/compose/components/media_upload_item.js index 1db6e958..a6353c03 100644 --- a/app/javascript/gabsocial/features/compose/components/media_upload_item.js +++ b/app/javascript/gabsocial/features/compose/components/media_upload_item.js @@ -22,7 +22,7 @@ const mapStateToProps = (state, { id, otherProps }) => { } } -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onUndo: id => { dispatch(undoUploadCompose(id)); diff --git a/app/javascript/gabsocial/features/compose/components/navigation_bar/navigation_bar.js b/app/javascript/gabsocial/features/compose/components/navigation_bar/navigation_bar.js index a71c19dc..45e5e91b 100644 --- a/app/javascript/gabsocial/features/compose/components/navigation_bar/navigation_bar.js +++ b/app/javascript/gabsocial/features/compose/components/navigation_bar/navigation_bar.js @@ -5,11 +5,9 @@ import Avatar from '../../../../components/avatar'; import Button from '../../../../components/button' import { me } from '../../../../initial_state'; -const mapStateToProps = state => { - return { - account: state.getIn(['accounts', me]), - }; -}; +const mapStateToProps = (state) => ({ + account: state.getIn(['accounts', me]), +}) export default @connect(mapStateToProps) diff --git a/app/javascript/gabsocial/features/compose/components/poll_button.js b/app/javascript/gabsocial/features/compose/components/poll_button.js index 4f9f78fd..64f058ee 100644 --- a/app/javascript/gabsocial/features/compose/components/poll_button.js +++ b/app/javascript/gabsocial/features/compose/components/poll_button.js @@ -8,12 +8,12 @@ const messages = defineMessages({ remove_poll: { id: 'poll_button.remove_poll', defaultMessage: 'Remove poll' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ unavailable: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 0), active: state.getIn(['compose', 'poll']) !== null, }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onClick() { dispatch((_, getState) => { diff --git a/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js b/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js index 62719ed1..4ae4ba9e 100644 --- a/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js +++ b/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js @@ -12,7 +12,7 @@ const mapStateToProps = (state) => ({ active: state.getIn(['compose', 'rte_controls_visible']), }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onClick (status) { dispatch(changeRichTextEditorControlsVisibility(status)) diff --git a/app/javascript/gabsocial/features/compose/components/schedule_post_button.js b/app/javascript/gabsocial/features/compose/components/schedule_post_button.js index 506f5645..cf87b921 100644 --- a/app/javascript/gabsocial/features/compose/components/schedule_post_button.js +++ b/app/javascript/gabsocial/features/compose/components/schedule_post_button.js @@ -10,11 +10,11 @@ const messages = defineMessages({ schedule_status: { id: 'schedule_status.title', defaultMessage: 'Schedule' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ isPro: state.getIn(['accounts', me, 'is_pro']), }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onOpenDatePickerPopover(targetRef) { dispatch(openPopover('DATE_PICKER', { targetRef, diff --git a/app/javascript/gabsocial/features/compose/components/search_results/search_results.js b/app/javascript/gabsocial/features/compose/components/search_results/search_results.js index c246b211..86876282 100644 --- a/app/javascript/gabsocial/features/compose/components/search_results/search_results.js +++ b/app/javascript/gabsocial/features/compose/components/search_results/search_results.js @@ -10,8 +10,7 @@ import Block from '../../../../components/block' import Heading from '../../../../components/heading' import Button from '../../../../components/button' import Text from '../../../../components/text' - -import AccountContainer from '../../../../containers/account_container' +import Account from '../../../../components/account' export default class SearchResults extends ImmutablePureComponent { @@ -65,7 +64,7 @@ export default class SearchResults extends ImmutablePureComponent { { - results.get('accounts').slice(0, size).map(accountId => ) + results.get('accounts').slice(0, size).map(accountId => ) } ); diff --git a/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js b/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js index ddc33795..a25d9235 100644 --- a/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js +++ b/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js @@ -6,12 +6,12 @@ const messages = defineMessages({ markAsSensitive: { id: 'compose_form.sensitive.hide', defaultMessage: 'Mark media as sensitive' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ active: state.getIn(['compose', 'sensitive']), disabled: state.getIn(['compose', 'spoiler']), }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onClick () { dispatch(changeComposeSensitivity()) diff --git a/app/javascript/gabsocial/features/compose/components/spoiler_button.js b/app/javascript/gabsocial/features/compose/components/spoiler_button.js index 3e833d72..4a062361 100644 --- a/app/javascript/gabsocial/features/compose/components/spoiler_button.js +++ b/app/javascript/gabsocial/features/compose/components/spoiler_button.js @@ -12,7 +12,7 @@ const mapStateToProps = (state) => ({ active: state.getIn(['compose', 'spoiler']), }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onClick () { dispatch(changeComposeSpoilerness()) diff --git a/app/javascript/gabsocial/features/compose/components/upload_form/upload_form.js b/app/javascript/gabsocial/features/compose/components/upload_form/upload_form.js index 85835571..c5ed1cec 100644 --- a/app/javascript/gabsocial/features/compose/components/upload_form/upload_form.js +++ b/app/javascript/gabsocial/features/compose/components/upload_form/upload_form.js @@ -4,7 +4,7 @@ import ProgressBar from '../../../../components/progress_bar' import Upload from '../media_upload_item' import SensitiveMediaButton from '../sensitive_media_button' -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')), isUploading: state.getIn(['compose', 'is_uploading']), uploadProgress: state.getIn(['compose', 'progress']), diff --git a/app/javascript/gabsocial/features/compose/compose.js b/app/javascript/gabsocial/features/compose/compose.js index 0c003550..175e933e 100644 --- a/app/javascript/gabsocial/features/compose/compose.js +++ b/app/javascript/gabsocial/features/compose/compose.js @@ -20,7 +20,7 @@ const messages = defineMessages({ home_timeline: { id: 'tabs_bar.home', defaultMessage: 'Home' }, notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, public: { id: 'navigation_bar.public_timeline', defaultMessage: 'Federated timeline' }, - community: { id: 'navigation_bar.community_timeline', defaultMessage: 'Local timeline' }, + community: { id: 'navigation_bar.community_timeline', defaultMessage: 'Community timeline' }, preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' }, logout: { id: 'navigation_bar.logout', defaultMessage: 'Logout' }, compose: { id: 'navigation_bar.compose', defaultMessage: 'Compose new gab' }, diff --git a/app/javascript/gabsocial/features/compose/containers/poll_form_container.js b/app/javascript/gabsocial/features/compose/containers/poll_form_container.js index 7b6cc021..8188ca4c 100644 --- a/app/javascript/gabsocial/features/compose/containers/poll_form_container.js +++ b/app/javascript/gabsocial/features/compose/containers/poll_form_container.js @@ -6,14 +6,14 @@ import { selectComposeSuggestion, } from '../../../actions/compose'; -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ suggestions: state.getIn(['compose', 'suggestions']), options: state.getIn(['compose', 'poll', 'options']), expiresIn: state.getIn(['compose', 'poll', 'expires_in']), isMultiple: state.getIn(['compose', 'poll', 'multiple']), }); -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onAddOption(title) { dispatch(addPollOption(title)); }, diff --git a/app/javascript/gabsocial/features/compose/containers/search_results_container.js b/app/javascript/gabsocial/features/compose/containers/search_results_container.js index e7464371..b077d260 100644 --- a/app/javascript/gabsocial/features/compose/containers/search_results_container.js +++ b/app/javascript/gabsocial/features/compose/containers/search_results_container.js @@ -2,12 +2,12 @@ import SearchResults from '../components/search_results'; import { fetchSuggestions, dismissSuggestion } from '../../../actions/suggestions'; import { withRouter } from 'react-router-dom'; -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ results: state.getIn(['search', 'results']), suggestions: state.getIn(['suggestions', 'items']), }); -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ fetchSuggestions: () => dispatch(fetchSuggestions()), dismissSuggestion: account => dispatch(dismissSuggestion(account.get('id'))), }); diff --git a/app/javascript/gabsocial/features/favorites.js b/app/javascript/gabsocial/features/favorites.js index 07cb8068..67388e20 100644 --- a/app/javascript/gabsocial/features/favorites.js +++ b/app/javascript/gabsocial/features/favorites.js @@ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl'; import { fetchReposts } from '../actions/interactions'; import { fetchStatus } from '../actions/statuses'; import { makeGetStatus } from '../selectors'; -import AccountContainer from '../containers/account_container'; +import Account from '../components/account'; import ColumnIndicator from '../components/column_indicator'; import ScrollableList from '../components/scrollable_list'; @@ -60,7 +60,7 @@ class Favorites extends ImmutablePureComponent { > { accountIds.map(id => - + ) } diff --git a/app/javascript/gabsocial/features/follow_requests/follow_requests.js b/app/javascript/gabsocial/features/follow_requests/follow_requests.js index e4a3571b..ac7962c1 100644 --- a/app/javascript/gabsocial/features/follow_requests/follow_requests.js +++ b/app/javascript/gabsocial/features/follow_requests/follow_requests.js @@ -11,7 +11,7 @@ const messages = defineMessages({ heading: { id: 'column.follow_requests', defaultMessage: 'Follow requests' }, }); -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ accountIds: state.getIn(['user_lists', 'follow_requests', 'items']), hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']), }); diff --git a/app/javascript/gabsocial/features/followers.js b/app/javascript/gabsocial/features/followers.js index 2051d06a..977e2a39 100644 --- a/app/javascript/gabsocial/features/followers.js +++ b/app/javascript/gabsocial/features/followers.js @@ -6,7 +6,7 @@ import { fetchFollowers, expandFollowers, } from '../actions/accounts' -import AccountContainer from '../containers/account_container' +import Account from '../components/account' import ScrollableList from '../components/scrollable_list' import Block from '../components/block' import Heading from '../components/heading' @@ -88,7 +88,7 @@ class Followers extends ImmutablePureComponent { > { !!accountIds && accountIds.map((id) => ( - + )) } diff --git a/app/javascript/gabsocial/features/following.js b/app/javascript/gabsocial/features/following.js index e8fbf5a7..86c3dcd3 100644 --- a/app/javascript/gabsocial/features/following.js +++ b/app/javascript/gabsocial/features/following.js @@ -6,7 +6,7 @@ import { fetchFollowing, expandFollowing, } from '../actions/accounts' -import AccountContainer from '../containers/account_container' +import Account from '../components/account' import ScrollableList from '../components/scrollable_list' import Block from '../components/block' import Heading from '../components/heading' @@ -88,7 +88,7 @@ class Following extends ImmutablePureComponent { > { !!accountIds && accountIds.map((id) => ( - + )) } diff --git a/app/javascript/gabsocial/features/group_create.js b/app/javascript/gabsocial/features/group_create.js index 24cdac21..ea118d00 100644 --- a/app/javascript/gabsocial/features/group_create.js +++ b/app/javascript/gabsocial/features/group_create.js @@ -34,7 +34,7 @@ const mapStateToProps = (state, { params }) => { } } -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onTitleChange: value => dispatch(changeValue('title', value)), onDescriptionChange: value => dispatch(changeValue('description', value)), onCoverImageChange: value => dispatch(changeValue('coverImage', value)), diff --git a/app/javascript/gabsocial/features/group_members.js b/app/javascript/gabsocial/features/group_members.js index 19cf1f36..bf7f1a20 100644 --- a/app/javascript/gabsocial/features/group_members.js +++ b/app/javascript/gabsocial/features/group_members.js @@ -8,7 +8,7 @@ import { createRemovedAccount, } from '../actions/groups'; import { FormattedMessage } from 'react-intl'; -import AccountContainer from '../containers/account_container'; +import Account from '../components/account'; import ScrollableList from '../components/scrollable_list'; const mapStateToProps = (state, { params: { id } }) => ({ @@ -71,7 +71,7 @@ class GroupMembers extends ImmutablePureComponent { return (
- true} /> + true} /> { /* menu.length > 0 && */ diff --git a/app/javascript/gabsocial/features/group_removed_accounts.js b/app/javascript/gabsocial/features/group_removed_accounts.js index 1b6314ae..30aef3bd 100644 --- a/app/javascript/gabsocial/features/group_removed_accounts.js +++ b/app/javascript/gabsocial/features/group_removed_accounts.js @@ -8,7 +8,7 @@ import { removeRemovedAccount, } from '../actions/groups'; import { FormattedMessage } from 'react-intl'; -import AccountContainer from '../containers/account_container'; +import Account from '../components/account'; import ScrollableList from '../components/scrollable_list'; import { defineMessages, injectIntl } from 'react-intl'; @@ -64,7 +64,7 @@ class GroupRemovedAccounts extends ImmutablePureComponent { onLoadMore={this.handleLoadMore} emptyMessage={} > - {accountIds.map(id => ( ( ({ +const mapStateToProps = (state) => ({ settings: state.getIn(['settings', 'group']), }); -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onChange (key, checked) { dispatch(changeSetting(['group', ...key], checked)); diff --git a/app/javascript/gabsocial/features/hashtag_timeline.js b/app/javascript/gabsocial/features/hashtag_timeline.js index 403ec40f..205bc436 100644 --- a/app/javascript/gabsocial/features/hashtag_timeline.js +++ b/app/javascript/gabsocial/features/hashtag_timeline.js @@ -2,7 +2,7 @@ import { FormattedMessage } from 'react-intl' import isEqual from 'lodash.isequal' import { expandHashtagTimeline, clearTimeline } from '../actions/timelines' import { connectHashtagStream } from '../actions/streaming' -import StatusListContainer from '../containers/status_list_container' +import StatusList from '../components/status_list' const mapStateToProps = (state, props) => ({ hasUnread: state.getIn(['timelines', `hashtag:${props.params.id}`, 'unread']) > 0, @@ -128,7 +128,7 @@ class HashtagTimeline extends PureComponent { const { id } = this.props.params return ( - ({ +const mapStateToProps = (state) => ({ isPartial: state.getIn(['timelines', 'home', 'isPartial']), }) @@ -63,7 +63,7 @@ class HomeTimeline extends PureComponent { const emptyMessage = intl.formatMessage(messages.empty) return ( - ({ account: state.getIn(['accounts', accountId]), }); -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onInitialize: accountId => dispatch(setupListAdder(accountId)), onReset: () => dispatch(resetListAdder()), }); diff --git a/app/javascript/gabsocial/features/list_create.js b/app/javascript/gabsocial/features/list_create.js index 69cb9e21..84ce9e26 100644 --- a/app/javascript/gabsocial/features/list_create.js +++ b/app/javascript/gabsocial/features/list_create.js @@ -9,12 +9,12 @@ const messages = defineMessages({ create: { id: 'lists.new.create_title', defaultMessage: 'Create' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ value: state.getIn(['listEditor', 'title']), disabled: state.getIn(['listEditor', 'isSubmitting']), }) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onChange: value => dispatch(changeListEditorTitle(value)), onSubmit: () => dispatch(submitListEditor(true)), }) diff --git a/app/javascript/gabsocial/features/list_edit/components/edit_list_form/edit_list_form.js b/app/javascript/gabsocial/features/list_edit/components/edit_list_form/edit_list_form.js index 3354a4ef..4fa75cb9 100644 --- a/app/javascript/gabsocial/features/list_edit/components/edit_list_form/edit_list_form.js +++ b/app/javascript/gabsocial/features/list_edit/components/edit_list_form/edit_list_form.js @@ -6,12 +6,12 @@ const messages = defineMessages({ save: { id: 'lists.new.save_title', defaultMessage: 'Save Title' }, }); -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ value: state.getIn(['listEditor', 'title']), disabled: !state.getIn(['listEditor', 'isChanged']), }); -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onChange: value => dispatch(changeListEditorTitle(value)), onSubmit: () => dispatch(submitListEditor(false)), }); diff --git a/app/javascript/gabsocial/features/list_edit/components/list_editor_search/list_editor_search.js b/app/javascript/gabsocial/features/list_edit/components/list_editor_search/list_editor_search.js index 0ced4063..66de08c5 100644 --- a/app/javascript/gabsocial/features/list_edit/components/list_editor_search/list_editor_search.js +++ b/app/javascript/gabsocial/features/list_edit/components/list_editor_search/list_editor_search.js @@ -7,11 +7,11 @@ const messages = defineMessages({ searchTitle: { id: 'tabs_bar.search', defaultMessage: 'Search' }, }); -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ value: state.getIn(['listEditor', 'suggestions', 'value']), }); -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onSubmit: value => dispatch(fetchListSuggestions(value)), onClear: () => dispatch(clearListSuggestions()), onChange: value => dispatch(changeListSuggestions(value)), diff --git a/app/javascript/gabsocial/features/list_edit/list_edit.js b/app/javascript/gabsocial/features/list_edit/list_edit.js index 1b6e118d..6c308674 100644 --- a/app/javascript/gabsocial/features/list_edit/list_edit.js +++ b/app/javascript/gabsocial/features/list_edit/list_edit.js @@ -23,7 +23,7 @@ const mapStateToProps = (state, { params }) => { } } -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onInitialize: listId => dispatch(setupListEditor(listId)), onReset: () => dispatch(resetListEditor()), }) diff --git a/app/javascript/gabsocial/features/list_timeline.js b/app/javascript/gabsocial/features/list_timeline.js index 3d17818b..35979143 100644 --- a/app/javascript/gabsocial/features/list_timeline.js +++ b/app/javascript/gabsocial/features/list_timeline.js @@ -5,7 +5,7 @@ import { connectListStream } from '../actions/streaming'; import { expandListTimeline } from '../actions/timelines'; import { fetchList, deleteList } from '../actions/lists'; import { openModal } from '../actions/modal'; -import StatusListContainer from '../containers/status_list_container'; +import StatusList from '../components/status_list'; import ColumnIndicator from '../components/column_indicator'; import Button from '../components/button'; @@ -112,7 +112,7 @@ class ListTimeline extends ImmutablePureComponent { ); return ( - state.get('lists')], lists => { return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))) }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ lists: getOrderedLists(state), }) diff --git a/app/javascript/gabsocial/features/mutes.js b/app/javascript/gabsocial/features/mutes.js index 860107be..eb3012d1 100644 --- a/app/javascript/gabsocial/features/mutes.js +++ b/app/javascript/gabsocial/features/mutes.js @@ -3,11 +3,11 @@ import ImmutablePureComponent from 'react-immutable-pure-component' import ImmutablePropTypes from 'react-immutable-proptypes' import debounce from 'lodash.debounce' import { fetchMutes, expandMutes } from '../actions/mutes' -import AccountContainer from '../containers/account_container' +import Account from '../components/account' import ColumnIndicator from '../components/column_indicator' import ScrollableList from '../components/scrollable_list' -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ accountIds: state.getIn(['user_lists', 'mutes', 'items']), hasMore: !!state.getIn(['user_lists', 'mutes', 'next']), }) @@ -48,7 +48,7 @@ class Mutes extends ImmutablePureComponent { > { accountIds.map(id => - + ) } diff --git a/app/javascript/gabsocial/features/notifications/components/notification.js b/app/javascript/gabsocial/features/notifications/components/notification.js index ed2434bb..c937292e 100644 --- a/app/javascript/gabsocial/features/notifications/components/notification.js +++ b/app/javascript/gabsocial/features/notifications/components/notification.js @@ -4,7 +4,6 @@ import ImmutablePureComponent from 'react-immutable-pure-component' import { HotKeys } from 'react-hotkeys' import ImmutablePropTypes from 'react-immutable-proptypes' import StatusContainer from '../../../containers/status_container' -import AccountContainer from '../../../containers/account_container' import Avatar from '../../../components/avatar' import Icon from '../../../components/icon' import Text from '../../../components/text' @@ -46,269 +45,95 @@ class Notification extends ImmutablePureComponent { type: PropTypes.string.isRequired, } - renderMention = () => { - const { intl, accounts, createdAt, statusId } = this.props - - if (accounts.size === 0) return null - const account = accounts.get(0) - - // : todo : render statuscontainer or commentcontainer - - return ( -
-
-
- - - -
-
- - - -
-
-
-
- -
- - {' '} - {intl.formatMessage(messages.mentionedInPost)} - -
-
- -
- -
-
- -
-
-
- ) - } - - renderPoll = () => { - const { intl, statusId } = this.props - - return ( -
-
-
- - - -
-
- - {intl.formatMessage(messages.poll)} - -
- -
- -
-
- -
-
-
- ) - } - - renderFollow = () => { - const { intl, accounts, statusId } = this.props - - const count = accounts.size - if (count === 0) return null - - return ( -
-
-
- - - -
-
- { - accounts.slice(0, 8).map((account, i) => ( - - - - )) - } -
-
-
-
- { - accounts.slice(0, 1).map((account, i) => ( - - )) - } -
- - {' '} - {intl.formatMessage(count > 1 ? messages.followedYouMultiple : messages.followedYouOne, { - count: count - 1, - })} - -
-
-
- -
-
-
- ) - } - - renderLike = () => { - const { intl, accounts, statusId } = this.props - - const count = accounts.size - if (count === 0 || !statusId) return null - - return ( -
-
-
- - - -
-
- { - accounts.slice(0, 8).map((account, i) => ( - - - - )) - } -
-
-
-
- { - accounts.slice(0, 1).map((account, i) => ( - - )) - } -
- - {' '} - {intl.formatMessage(count > 1 ? messages.likedStatusMultiple : messages.likedStatusOne, { - count: count - 1, - })} - -
-
-
- -
-
- -
-
-
- ) - } - - renderRepost = () => { - const { intl, accounts, statusId } = this.props - - const count = accounts.size - if (count === 0 || !statusId) return null - - return ( -
-
-
- - - -
-
- { - accounts.slice(0, 8).map((account, i) => ( - - - - )) - } -
-
-
-
- { - accounts.slice(0, 1).map((account, i) => ( - - )) - } -
- - {' '} - {intl.formatMessage(count > 1 ? messages.repostedStatusMultiple : messages.repostedStatusOne, { - count: count - 1, - })} - -
-
-
- -
-
- -
-
-
- ) - } - render() { - const { type } = this.props + const { intl, accounts, createdAt, type, statusId } = this.props + + const count = !!accounts ? accounts.size : 0 + let message + let icon switch (type) { case 'follow': - return this.renderFollow() + icon = 'group' + message = intl.formatMessage(count > 1 ? messages.followedYouMultiple : messages.followedYouOne, { + count: count - 1, + }) + break case 'mention': - return this.renderMention() + icon = 'comment' + message = intl.formatMessage(messages.mentionedInPost) + break case 'like': - return this.renderLike() + icon = 'like' + message = intl.formatMessage(count > 1 ? messages.likedStatusMultiple : messages.likedStatusOne, { + count: count - 1, + }) + break case 'repost': - return this.renderRepost(); + icon = 'repost' + message = intl.formatMessage(count > 1 ? messages.repostedStatusMultiple : messages.repostedStatusOne, { + count: count - 1, + }) + break case 'poll': - return this.renderPoll() + icon = 'poll' + message = intl.formatMessage(messages.poll) + break + default: + return null } - return null + return ( +
+
+
+ + + +
+
+ { + accounts.slice(0, 8).map((account, i) => ( + + + + )) + } +
+
+
+
+ { + accounts.slice(0, 1).map((account, i) => ( + + )) + } +
+ + {' '} + {message} + +
+
+ { + !!statusId && +
+ +
+ } +
+ +
+
+
+ ) } } diff --git a/app/javascript/gabsocial/features/notifications/containers/notification_container.js b/app/javascript/gabsocial/features/notifications/containers/notification_container.js index dc2fec89..ce513a92 100644 --- a/app/javascript/gabsocial/features/notifications/containers/notification_container.js +++ b/app/javascript/gabsocial/features/notifications/containers/notification_container.js @@ -79,7 +79,7 @@ const makeMapStateToProps = () => { return mapStateToProps } -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onMention: (account, router) => { dispatch(mentionCompose(account, router)) }, diff --git a/app/javascript/gabsocial/features/notifications/notifications.js b/app/javascript/gabsocial/features/notifications/notifications.js index a7a28b49..71a4cb12 100644 --- a/app/javascript/gabsocial/features/notifications/notifications.js +++ b/app/javascript/gabsocial/features/notifications/notifications.js @@ -16,22 +16,8 @@ import LoadMore from '../../components/load_more' import TimelineQueueButtonHeader from '../../components/timeline_queue_button_header' import Block from '../../components/block' -const getNotifications = createSelector([ - state => state.getIn(['notifications', 'filter', 'active']), - state => ImmutableList(state.getIn(['settings', 'notifications', 'shows']).filter(item => !item).keys()), - state => state.getIn(['notifications', 'items']), -], (allowedType, excludedTypes, notifications) => { - if (allowedType === 'all') { - // used if user changed the notification settings after loading the notifications from the server - // otherwise a list of notifications will come pre-filtered from the backend - // we need to turn it off for FilterBar in order not to block ourselves from seeing a specific category - return notifications.filterNot(item => item !== null && excludedTypes.includes(item.get('type'))) - } - return notifications.filter(item => item !== null && allowedType === item.get('type')) -}) - -const mapStateToProps = state => ({ - notifications: getNotifications(state), +const mapStateToProps = (state) => ({ + notifications: state.getIn(['notifications', 'items']), isLoading: state.getIn(['notifications', 'isLoading'], true), isUnread: state.getIn(['notifications', 'unread']) > 0, hasMore: state.getIn(['notifications', 'hasMore']), @@ -112,6 +98,7 @@ class Notifications extends ImmutablePureComponent { } handleDequeueNotifications = () => { + window.scrollTo(0, 0) this.props.dispatch(dequeueNotifications()) } @@ -129,7 +116,7 @@ class Notifications extends ImmutablePureComponent { // : todo : include follow requests - // console.log('notifications:', notifications) + console.log('--0--notifications:', notifications) if (isLoading && this.scrollableContent) { scrollableContent = this.scrollableContent diff --git a/app/javascript/gabsocial/features/reposts.js b/app/javascript/gabsocial/features/reposts.js index 60e83400..1ee22d7f 100644 --- a/app/javascript/gabsocial/features/reposts.js +++ b/app/javascript/gabsocial/features/reposts.js @@ -4,7 +4,7 @@ import { FormattedMessage } from 'react-intl' import { fetchReposts } from '../actions/interactions' import { fetchStatus } from '../actions/statuses' import { makeGetStatus } from '../selectors' -import AccountContainer from '../containers/account_container' +import Account from '../components/account' import ColumnIndicator from '../components/column_indicator' import ScrollableList from '../components/scrollable_list' @@ -60,7 +60,7 @@ class Reposts extends ImmutablePureComponent { > { accountIds.map(id => - + ) } diff --git a/app/javascript/gabsocial/features/status/status.js b/app/javascript/gabsocial/features/status/status.js index b0627f4b..892c118e 100644 --- a/app/javascript/gabsocial/features/status/status.js +++ b/app/javascript/gabsocial/features/status/status.js @@ -30,7 +30,7 @@ import { openModal } from '../../actions/modal' import { boostModal, deleteModal, me } from '../../initial_state' import { makeGetStatus } from '../../selectors' import StatusContainer from '../../containers/status_container' -import { textForScreenReader, defaultMediaVisibility } from '../../components/status/status' +import { textForScreenReader, defaultMediaVisibility } from '../../components/status' import ColumnIndicator from '../../components/column_indicator' import Block from '../../components/block' import CommentList from '../../components/comment_list' diff --git a/app/javascript/gabsocial/features/ui/ui.js b/app/javascript/gabsocial/features/ui/ui.js index 69992629..9c6318a4 100644 --- a/app/javascript/gabsocial/features/ui/ui.js +++ b/app/javascript/gabsocial/features/ui/ui.js @@ -3,14 +3,14 @@ import { HotKeys } from 'react-hotkeys' import { defineMessages, injectIntl } from 'react-intl' import { Switch, Redirect, withRouter } from 'react-router-dom' -import { debounce } from 'lodash' +import debounce from 'lodash.debounce' import { uploadCompose, resetCompose } from '../../actions/compose' import { expandHomeTimeline } from '../../actions/timelines' import { initializeNotifications, expandNotifications, } from '../../actions/notifications' -import LoadingBarContainer from '../../containers/loading_bar_container' +import LoadingBar from '../../components/loading_bar' import { fetchFilters } from '../../actions/filters' import { clearHeight } from '../../actions/height_cache' import { openModal } from '../../actions/modal' @@ -37,9 +37,9 @@ import SettingsPage from '../../pages/settings_page' import { AccountGallery, AccountTimeline, - Blocks, + BlockedAccounts, + BlockedDomains, CommunityTimeline, - DomainBlocks, // Favorites, // Filters, Followers, @@ -78,7 +78,7 @@ const messages = defineMessages({ publish: { id: 'compose_form.publish', defaultMessage: 'Gab' }, }) -const mapStateToProps = state => ({ +const mapStateToProps = (state) => ({ isComposing: state.getIn(['compose', 'is_composing']), hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0, hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, @@ -182,8 +182,8 @@ class SwitchingArea extends PureComponent { */ } - - + + { /* */ } @@ -496,7 +496,7 @@ class UI extends PureComponent { return (
- + {children} diff --git a/app/javascript/gabsocial/features/ui/util/async_components.js b/app/javascript/gabsocial/features/ui/util/async_components.js index ba72f2ce..f340a34c 100644 --- a/app/javascript/gabsocial/features/ui/util/async_components.js +++ b/app/javascript/gabsocial/features/ui/util/async_components.js @@ -1,135 +1,34 @@ -export function AccountTimeline() { - return import(/* webpackChunkName: "features/account_timeline" */'../../account_timeline') -} - -export function AccountGallery() { - return import(/* webpackChunkName: "features/account_gallery" */'../../account_gallery') -} - -export function Blocks() { - return import(/* webpackChunkName: "features/blocks" */'../../blocked_accounts') -} - -export function CommunityTimeline() { - return import(/* webpackChunkName: "features/community_timeline" */'../../community_timeline') -} - -export function Compose() { - return import(/* webpackChunkName: "features/compose" */'../../compose') -} - -export function DomainBlocks() { - return import(/* webpackChunkName: "features/domain_blocks" */'../../blocked_domains') -} - -export function EmbedModal() { - return import(/* webpackChunkName: "modals/embed_modal" */'../../../components/modal/embed_modal') -} - -export function EmojiPicker() { - return import(/* webpackChunkName: "emoji_picker" */'../../../components/emoji/emoji_picker') -} - -export function Followers() { - return import(/* webpackChunkName: "features/followers" */'../../followers') -} - -export function Following() { - return import(/* webpackChunkName: "features/following" */'../../following') -} - -export function FollowRequests() { - return import(/* webpackChunkName: "features/follow_requests" */'../../follow_requests') -} - -export function LikedStatuses() { - return import(/* webpackChunkName: "features/liked_statuses" */'../../liked_statuses') -} - -export function GenericNotFound() { - return import(/* webpackChunkName: "features/generic_not_found" */'../../generic_not_found') -} - -export function GroupsCollection() { - return import(/* webpackChunkName: "features/groups_collection" */'../../g../../groups_collection') -} - -export function GroupCreate() { - return import(/* webpackChunkName: "features/group_create" */'../../group_create') -} - -export function GroupMembers() { - return import(/* webpackChunkName: "features/group_members" */'../../group_members') -} - -export function GroupRemovedAccounts() { - return import(/* webpackChunkName: "features/group_removed_accounts" */'../../group_removed_accounts') -} - -export function GroupTimeline() { - return import(/* webpackChunkName: "features/group_timeline" */'../../group_timeline') -} - -export function HashtagTimeline() { - return import(/* webpackChunkName: "features/hashtag_timeline" */'../../hashtag_timeline') -} - -export function HomeTimeline() { - return import(/* webpackChunkName: "features/home_timeline" */'../../home_timeline') -} - -export function ListCreate() { - return import(/* webpackChunkName: "features/list_create" */'../../list_create') -} - -export function ListsDirectory() { - return import(/* webpackChunkName: "features/lists_directory" */'../../lists_directory') -} - -export function ListEdit() { - return import(/* webpackChunkName: "features/list_editor" */'../../list_edit') -} - -export function ListTimeline() { - return import(/* webpackChunkName: "features/list_timeline" */'../../list_timeline') -} - -export function MediaGallery() { - return import(/* webpackChunkName: "status/media_gallery" */'../../../components/media_gallery') -} - -export function Mutes() { - return import(/* webpackChunkName: "features/mutes" */'../../mutes') -} - -export function MuteModal() { - return import(/* webpackChunkName: "modals/mute_modal" */'../../../components/modal/mute_modal') -} - -export function Notifications() { - return import(/* webpackChunkName: "features/notifications" */'../../notifications') -} - -export function Reposts() { - return import(/* webpackChunkName: "features/reposts" */'../../reposts') -} - -export function ReportModal() { - return import(/* webpackChunkName: "modals/report_modal" */'../../../components/modal/report_modal') -} - -export function Search() { - return import(/*webpackChunkName: "features/search" */'../../search') -} - -export function Status() { - return import(/* webpackChunkName: "features/status" */'../../status') -} - -export function StatusRevisionsModal() { - return import(/* webpackChunkName: "modals/status_revisions_modal" */'../../../components/modal/status_revisions_modal') -} - -export function Video() { - return import(/* webpackChunkName: "features/video" */'../../../components/video') -} +export function AccountTimeline() { return import(/* webpackChunkName: "features/account_timeline" */'../../account_timeline') } +export function AccountGallery() { return import(/* webpackChunkName: "features/account_gallery" */'../../account_gallery') } +export function BlockedAccounts() { return import(/* webpackChunkName: "features/blocked_accounts" */'../../blocked_accounts') } +export function BlockedDomains() { return import(/* webpackChunkName: "features/blocked_domains" */'../../blocked_domains') } +export function CommunityTimeline() { return import(/* webpackChunkName: "features/community_timeline" */'../../community_timeline') } +export function Compose() { return import(/* webpackChunkName: "features/compose" */'../../compose') } +export function EmbedModal() { return import(/* webpackChunkName: "modals/embed_modal" */'../../../components/modal/embed_modal') } +export function EmojiPicker() { return import(/* webpackChunkName: "emoji_picker" */'../../../components/emoji/emoji_picker') } +export function Followers() { return import(/* webpackChunkName: "features/followers" */'../../followers') } +export function Following() { return import(/* webpackChunkName: "features/following" */'../../following') } +export function FollowRequests() { return import(/* webpackChunkName: "features/follow_requests" */'../../follow_requests') } +export function LikedStatuses() { return import(/* webpackChunkName: "features/liked_statuses" */'../../liked_statuses') } +export function GenericNotFound() { return import(/* webpackChunkName: "features/generic_not_found" */'../../generic_not_found') } +export function GroupsCollection() { return import(/* webpackChunkName: "features/groups_collection" */'../../groups_collection') } +export function GroupCreate() { return import(/* webpackChunkName: "features/group_create" */'../../group_create') } +export function GroupMembers() { return import(/* webpackChunkName: "features/group_members" */'../../group_members') } +export function GroupRemovedAccounts() { return import(/* webpackChunkName: "features/group_removed_accounts" */'../../group_removed_accounts') } +export function GroupTimeline() { return import(/* webpackChunkName: "features/group_timeline" */'../../group_timeline') } +export function HashtagTimeline() { return import(/* webpackChunkName: "features/hashtag_timeline" */'../../hashtag_timeline') } +export function HomeTimeline() { return import(/* webpackChunkName: "features/home_timeline" */'../../home_timeline') } +export function ListCreate() { return import(/* webpackChunkName: "features/list_create" */'../../list_create') } +export function ListsDirectory() { return import(/* webpackChunkName: "features/lists_directory" */'../../lists_directory') } +export function ListEdit() { return import(/* webpackChunkName: "features/list_editor" */'../../list_edit') } +export function ListTimeline() { return import(/* webpackChunkName: "features/list_timeline" */'../../list_timeline') } +export function MediaGallery() { return import(/* webpackChunkName: "components/media_gallery" */'../../../components/media_gallery') } +export function Mutes() { return import(/* webpackChunkName: "features/mutes" */'../../mutes') } +export function MuteModal() { return import(/* webpackChunkName: "modals/mute_modal" */'../../../components/modal/mute_modal') } +export function Notifications() { return import(/* webpackChunkName: "features/notifications" */'../../notifications') } +export function Reposts() { return import(/* webpackChunkName: "features/reposts" */'../../reposts') } +export function ReportModal() { return import(/* webpackChunkName: "modals/report_modal" */'../../../components/modal/report_modal') } +export function Search() { return import(/*webpackChunkName: "features/search" */'../../search') } +export function Status() { return import(/* webpackChunkName: "features/status" */'../../status') } +export function StatusRevisionsModal() { return import(/* webpackChunkName: "modals/status_revisions_modal" */'../../../components/modal/status_revisions_modal') } +export function Video() { return import(/* webpackChunkName: "components/video" */'../../../components/video') } diff --git a/app/javascript/gabsocial/features/ui/util/bundle.js b/app/javascript/gabsocial/features/ui/util/bundle.js index 18e4496f..5217c3e8 100644 --- a/app/javascript/gabsocial/features/ui/util/bundle.js +++ b/app/javascript/gabsocial/features/ui/util/bundle.js @@ -4,7 +4,7 @@ import { fetchBundleFail } from '../../../actions/bundles' -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onFetch() { dispatch(fetchBundleRequest()) }, diff --git a/app/javascript/gabsocial/features/ui/util/page_title.js b/app/javascript/gabsocial/features/ui/util/page_title.js new file mode 100644 index 00000000..f7502b60 --- /dev/null +++ b/app/javascript/gabsocial/features/ui/util/page_title.js @@ -0,0 +1,41 @@ +import isEqual from 'lodash.isequal' + +export default class PageTitle extends PureComponent { + static propTypes = { + badge: PropTypes.oneOf([ + PropTypes.number, + PropTypes.string, + ]), + path: PropTypes.oneOf([ + PropTypes.sting, + PropTypes.array, + ]), + } + + componentDidMount() { + this.updatePageTitle(this.props) + } + + componentDidUpdate(prevProps) { + if (this.props.badge !== prevProps.badge || !isEqual(this.props.path, prevProps.path)) { + this.updatePageTitle(this.props) + } + } + + updatePageTitle = ({ badge, path}) => { + const site = 'Gab' + + let realPath = Array.isArray(path) ? path.join(' / ') : path + realPath = realPath.trim() + + const realBadge = !!badge ? `(${badge})` : '' + + const title = `${realBadge} ${realPath} / ${site}`.trim() + + document.title = title + } + + render() { + return null + } +} diff --git a/app/javascript/gabsocial/layouts/default_layout.js b/app/javascript/gabsocial/layouts/default_layout.js index 7535a799..949c7af3 100644 --- a/app/javascript/gabsocial/layouts/default_layout.js +++ b/app/javascript/gabsocial/layouts/default_layout.js @@ -1,82 +1,35 @@ -import Sticky from 'react-stickynode' -import * as Constants from '../constants' -import Search from '../components/search' -import ColumnHeader from '../components/column_header' -import Sidebar from '../components/sidebar' -// import Header from '../components/header' -// import Footer from '../components/footer' -import FloatingActionButton from '../components/floating_action_button' -import Responsive from '../features/ui/util/responsive_component' +import Layout from './layout' export default class DefaultLayout extends PureComponent { static propTypes = { actions: PropTypes.array, tabs: PropTypes.array, layout: PropTypes.object, - title: PropTypes.string, showBackBtn: PropTypes.bool, + title: PropTypes.string.isRequired, + children: PropTypes.node.isRequired, } render() { - const { children, title, showBackBtn, layout, actions, tabs } = this.props - - console.log("Constants.BREAKPOINT_EXTRA_SMALL:", Constants.BREAKPOINT_EXTRA_SMALL) + const { + children, + title, + showBackBtn, + layout, + actions, + tabs, + } = this.props return ( -
- - - - - -
- -
-
-
- -
- -
- -
-
-
-
- -
- -
-
-
- {children} -
-
- - -
- -
- {layout} -
-
-
-
- - - - - -
- -
- -
+ + {children} + ) } diff --git a/app/javascript/gabsocial/layouts/group_layout.js b/app/javascript/gabsocial/layouts/group_layout.js index 24f69c2b..737a7625 100644 --- a/app/javascript/gabsocial/layouts/group_layout.js +++ b/app/javascript/gabsocial/layouts/group_layout.js @@ -1,15 +1,8 @@ import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import Sticky from 'react-stickynode' -import Sidebar from '../components/sidebar' -import Search from '../components/search' -import Image from '../components/image' -import Text from '../components/text' -import Button from '../components/button' -import DisplayName from '../components/display_name' -import TabBar from '../components/tab_bar' -import Block from '../components/block' -import ColumnHeader from '../components/column_header' +import Layout from './layout' +import GroupHeader from '../components/group_header' export default class GroupLayout extends ImmutablePureComponent { static propTypes = { @@ -21,117 +14,46 @@ export default class GroupLayout extends ImmutablePureComponent { } render() { - const { group, children, layout, showBackBtn, actions, relationships } = this.props - - const tabs = !group ? null : [ - { - to: `/groups/${group.get('id')}`, - title: 'Latest', - }, - { - to: `/groups/${group.get('id')}/pinned`, - title: 'Pinned', - }, - { - to: `/groups/${group.get('id')}/popular`, - title: 'Popular', - }, - ] + const { + group, + children, + layout, + showBackBtn, + actions, + relationships, + } = this.props const title = !!group ? group.get('title') : undefined - console.log("relationships:", relationships) - // const !!relationships && relationships.get('member') - return ( -
+ +
- + -
- -
-
-
- -
-
- +
+
+
+ {children}
+ +
+ +
+ {layout} +
+
+
-
- -
- -
- -
- -
-
- -
- - -
-
-
-
-
-
- -
-
-
- {children} -
-
- -
- -
- {layout} -
-
-
-
- -
- -
- -
+
+ ) } diff --git a/app/javascript/gabsocial/layouts/layout.js b/app/javascript/gabsocial/layouts/layout.js new file mode 100644 index 00000000..d12b660a --- /dev/null +++ b/app/javascript/gabsocial/layouts/layout.js @@ -0,0 +1,119 @@ +import Sticky from 'react-stickynode' +import * as Constants from '../constants' +import Search from '../components/search' +import ColumnHeader from '../components/column_header' +import Sidebar from '../components/sidebar' +// import Header from '../components/header' +// import Footer from '../components/footer' +import FloatingActionButton from '../components/floating_action_button' +import Responsive from '../features/ui/util/responsive_component' + +export default class Layout extends PureComponent { + static propTypes = { + actions: PropTypes.array, + tabs: PropTypes.array, + layout: PropTypes.object, + title: PropTypes.string, + showBackBtn: PropTypes.bool, + noSidebar: PropTypes.bool, + noRightSidebar: PropTypes.bool, + noHeader: PropTypes.bool, + noComposeButton: PropTypes.bool, + } + + render() { + const { + children, + title, + showBackBtn, + layout, + actions, + tabs, + noSidebar, + noRightSidebar, + noHeader, + noComposeButton, + } = this.props + + return ( +
+ + { + !noSidebar && + + + + } + +
+ + { + !noHeader && +
+
+
+ +
+ +
+ +
+
+
+
+ } + + { + !noHeader && +
+ } + +
+ + { + noRightSidebar && children + } + + { + !noRightSidebar && +
+
+ {children} +
+
+ } + + { + !noRightSidebar && + +
+ +
+ {layout} +
+
+
+
+ } + + { + !noComposeButton && + + + + } + +
+ +
+ +
+ ) + } + +} diff --git a/app/javascript/gabsocial/layouts/profile_layout.js b/app/javascript/gabsocial/layouts/profile_layout.js index d3326be2..c1c0cb0b 100644 --- a/app/javascript/gabsocial/layouts/profile_layout.js +++ b/app/javascript/gabsocial/layouts/profile_layout.js @@ -1,20 +1,12 @@ import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import Sticky from 'react-stickynode' -import classNames from 'classnames/bind' -import Sidebar from '../components/sidebar' -import Avatar from '../components/avatar' -import Image from '../components/image' -import Text from '../components/text' -import Button from '../components/button' -import DisplayName from '../components/display_name' -import TabBar from '../components/tab_bar' +import Layout from './layout' import ProfileHeader from '../components/profile_header' -const cx = classNames.bind(_s) - export default class ProfileLayout extends ImmutablePureComponent { static propTypes = { + children: PropTypes.node.isRequired, account: ImmutablePropTypes.map, layout: PropTypes.object, title: PropTypes.string, @@ -22,42 +14,44 @@ export default class ProfileLayout extends ImmutablePureComponent { } render() { - const { account, children, layout } = this.props + const { + account, + children, + layout, + } = this.props return ( -
+ - +
+
-
+ -
-
- - - -
-
-
- {children} -
-
- -
- -
- {layout} -
-
+
+
+
+ {children}
+
+ +
+ {layout} +
+
+
+
+
-
- -
+ ) } diff --git a/app/javascript/gabsocial/locales/bg.json b/app/javascript/gabsocial/locales/bg.json index 3bee99fd..bccd4744 100644 --- a/app/javascript/gabsocial/locales/bg.json +++ b/app/javascript/gabsocial/locales/bg.json @@ -45,7 +45,7 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", - "column.community": "Local timeline", + "column.community": "Community timeline", "column.direct": "Direct messages", "column.domain_blocks": "Hidden domains", "column.favorites": "Favorites", @@ -228,7 +228,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/locales/en.json b/app/javascript/gabsocial/locales/en.json index e12ebf67..24225f5d 100644 --- a/app/javascript/gabsocial/locales/en.json +++ b/app/javascript/gabsocial/locales/en.json @@ -45,7 +45,7 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", - "column.community": "Local timeline", + "column.community": "Community timeline", "column.direct": "Direct messages", "column.domain_blocks": "Hidden domains", "column.favorites": "Favorites", @@ -230,7 +230,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new gab", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/locales/hi.json b/app/javascript/gabsocial/locales/hi.json index 2f7e59f9..337453aa 100644 --- a/app/javascript/gabsocial/locales/hi.json +++ b/app/javascript/gabsocial/locales/hi.json @@ -45,7 +45,7 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", - "column.community": "Local timeline", + "column.community": "Community timeline", "column.direct": "Direct messages", "column.domain_blocks": "Hidden domains", "column.favorites": "Favorites", @@ -228,7 +228,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/locales/lv.json b/app/javascript/gabsocial/locales/lv.json index be558391..182a347b 100644 --- a/app/javascript/gabsocial/locales/lv.json +++ b/app/javascript/gabsocial/locales/lv.json @@ -228,7 +228,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/locales/ms.json b/app/javascript/gabsocial/locales/ms.json index 1aaffe7d..072fdbc6 100644 --- a/app/javascript/gabsocial/locales/ms.json +++ b/app/javascript/gabsocial/locales/ms.json @@ -45,7 +45,7 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", - "column.community": "Local timeline", + "column.community": "Community timeline", "column.direct": "Direct messages", "column.domain_blocks": "Hidden domains", "column.favorites": "Favorites", @@ -228,7 +228,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/locales/sl.json b/app/javascript/gabsocial/locales/sl.json index 420fe8e3..4040b9c5 100644 --- a/app/javascript/gabsocial/locales/sl.json +++ b/app/javascript/gabsocial/locales/sl.json @@ -228,7 +228,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/locales/ta.json b/app/javascript/gabsocial/locales/ta.json index 90c591fc..ed4250bf 100644 --- a/app/javascript/gabsocial/locales/ta.json +++ b/app/javascript/gabsocial/locales/ta.json @@ -45,7 +45,7 @@ "bundle_modal_error.message": "Something went wrong while loading this component.", "bundle_modal_error.retry": "Try again", "column.blocks": "Blocked users", - "column.community": "Local timeline", + "column.community": "Community timeline", "column.direct": "Direct messages", "column.domain_blocks": "Hidden domains", "column.favorites": "Favorites", @@ -228,7 +228,7 @@ "mute_modal.hide_notifications": "Hide notifications from this user?", "navigation_bar.apps": "Mobile apps", "navigation_bar.blocks": "Blocked users", - "navigation_bar.community_timeline": "Local timeline", + "navigation_bar.community_timeline": "Community timeline", "navigation_bar.compose": "Compose new toot", "navigation_bar.direct": "Direct messages", "navigation_bar.discover": "Discover", diff --git a/app/javascript/gabsocial/main.js b/app/javascript/gabsocial/main.js index d427cb26..5cfa6526 100644 --- a/app/javascript/gabsocial/main.js +++ b/app/javascript/gabsocial/main.js @@ -6,23 +6,13 @@ import ReactDOM from 'react-dom'; import ready from './ready'; function main() { - // : todo : - // if (window.history && history.replaceState) { - // const { pathname, search, hash } = window.location; - // const path = pathname + search + hash; - // if (!(/^\/[$/]/).test(path)) { - // console.log('redirecting you to hell'); - // history.replaceState(null, document.title, `${path}`); - // } - // } - ready(() => { const mountNode = document.getElementById('gabsocial'); const props = JSON.parse(mountNode.getAttribute('data-props')); ReactDOM.render(, mountNode); if (process.env.NODE_ENV === 'production') { - // avoid offline in dev mode because it's harder to debug + // Avoid offline in dev mode because it's harder to debug require('offline-plugin/runtime').install(); store.dispatch(registerPushNotifications.register()); } diff --git a/app/javascript/gabsocial/pages/basic_page.js b/app/javascript/gabsocial/pages/basic_page.js index 0c6385ad..af647f44 100644 --- a/app/javascript/gabsocial/pages/basic_page.js +++ b/app/javascript/gabsocial/pages/basic_page.js @@ -1,4 +1,5 @@ import { Fragment } from 'react' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' import TrendsPanel from '../components/panel/trends_panel' @@ -6,8 +7,8 @@ import DefaultLayout from '../layouts/default_layout' export default class BasicPage extends PureComponent { static propTypes = { - title: PropTypes.string, - children: PropTypes.node, + title: PropTypes.string.isRequired, + children: PropTypes.node.isRequired, } render() { @@ -15,6 +16,7 @@ export default class BasicPage extends PureComponent { return ( @@ -23,8 +25,8 @@ export default class BasicPage extends PureComponent { )} - showBackBtn > + {children} ) diff --git a/app/javascript/gabsocial/pages/community_page.js b/app/javascript/gabsocial/pages/community_page.js index 0f928007..8e087700 100644 --- a/app/javascript/gabsocial/pages/community_page.js +++ b/app/javascript/gabsocial/pages/community_page.js @@ -1,5 +1,7 @@ import { Fragment } from 'react' +import { defineMessages, injectIntl } from 'react-intl' import { openModal } from '../actions/modal' +import PageTitle from '../features/ui/util/page_title' import GroupSidebarPanel from '../components/panel/groups_panel' import LinkFooter from '../components/link_footer' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' @@ -10,6 +12,10 @@ import DefaultLayout from '../layouts/default_layout' import TimelineComposeBlock from '../components/timeline_compose_block' import Divider from '../components/divider' +const messages = defineMessages({ + community: { 'id': 'column.community', 'defaultMessage': 'Community timeline' }, +}) + const mapDispatchToProps = (dispatch) => ({ onOpenCommunityPageSettingsModal() { dispatch(openModal('COMMUNITY_TIMELINE_SETTINGS')) @@ -17,23 +23,24 @@ const mapDispatchToProps = (dispatch) => ({ }) export default +@injectIntl @connect(null, mapDispatchToProps) class CommunityPage extends PureComponent { static propTypes = { + intl: PropTypes.object.isRequired, + children: PropTypes.node.isRequired, onOpenCommunityPageSettingsModal: PropTypes.func.isRequired, } - componentDidMount() { - document.title = '(1) Community - Gab' - } - render() { - const { children, onOpenCommunityPageSettingsModal } = this.props + const { intl, children, onOpenCommunityPageSettingsModal } = this.props + + const title = intl.formatMessage(messages.community) return ( )} > + {children} diff --git a/app/javascript/gabsocial/pages/error_page.js b/app/javascript/gabsocial/pages/error_page.js index 206c6d4e..07d84e85 100644 --- a/app/javascript/gabsocial/pages/error_page.js +++ b/app/javascript/gabsocial/pages/error_page.js @@ -3,6 +3,8 @@ export default class ErrorPage extends PureComponent { render() { const { children } = this.props; + // : todo : + return (
{children} diff --git a/app/javascript/gabsocial/pages/group_page.js b/app/javascript/gabsocial/pages/group_page.js index efb7dcc5..dbec86b9 100644 --- a/app/javascript/gabsocial/pages/group_page.js +++ b/app/javascript/gabsocial/pages/group_page.js @@ -1,7 +1,9 @@ import { Fragment } from 'react' +import { defineMessages, injectIntl } from 'react-intl' import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import { fetchGroup } from '../actions/groups' +import PageTitle from '../features/ui/util/page_title' import GroupInfoPanel from '../components/panel/group_info_panel' import GroupLayout from '../layouts/group_layout' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' @@ -10,35 +12,43 @@ import LinkFooter from '../components/link_footer' import TimelineComposeBlock from '../components/timeline_compose_block' import Divider from '../components/divider' +const messages = defineMessages({ + group: { id: 'group', defaultMessage: 'Group' }, +}) + const mapStateToProps = (state, { params: { id } }) => ({ group: state.getIn(['groups', id]), relationships: state.getIn(['group_relationships', id]), }) +const mapDispatchToProps = () => ({ + fetchGroup, +}) + export default -@connect(mapStateToProps) +@injectIntl +@connect(mapStateToProps, mapDispatchToProps) class GroupPage extends ImmutablePureComponent { static propTypes = { + intl: PropTypes.object.isRequired, group: ImmutablePropTypes.map, + chilren: PropTypes.node.isRequired, relationships: ImmutablePropTypes.map, - dispatch: PropTypes.func.isRequired, - } - - componentDidMount() { - const { group } = this.props - const groupTitle = !group ? '...' : group.get('title') - document.title = `Group / ${groupTitle} - Gab` + fetchGroup: PropTypes.func.isRequired, } - componentWillMount() { - const { params: { id }, dispatch } = this.props - - dispatch(fetchGroup(id)) + componentDidMount() { + this.props.fetchGroup(this.props.params.id) } render() { - const { children, group, relationships } = this.props + const { + intl, + children, + group, + relationships, + } = this.props //
//

@@ -65,8 +75,11 @@ class GroupPage extends ImmutablePureComponent { //

} //
+ const groupTitle = !!group ? group.get('title') : '' + return ( )} - showBackBtn > + + { !!relationships && relationships.get('member') && @@ -92,6 +106,7 @@ class GroupPage extends ImmutablePureComponent { } + {children} ) diff --git a/app/javascript/gabsocial/pages/groups_page.js b/app/javascript/gabsocial/pages/groups_page.js index 53f1ae0a..050a2c72 100644 --- a/app/javascript/gabsocial/pages/groups_page.js +++ b/app/javascript/gabsocial/pages/groups_page.js @@ -1,53 +1,63 @@ import { Fragment } from 'react' import { me } from '../initial_state' +import { defineMessages, injectIntl } from 'react-intl' import { openModal } from '../actions/modal' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import GroupsPanel from '../components/panel/groups_panel' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' import DefaultLayout from '../layouts/default_layout' -const mapStateToProps = (state) => { - const account = state.getIn(['accounts', me]) +const messages = defineMessages({ + groups: { id: 'groups', defaultMessage: 'Groups' }, + featured: { id: 'featured', defaultMessage: 'Featured' }, + new: { id: 'new', defaultMessage: 'New' }, + myGroups: { id: 'my_groups', defaultMessage: 'My Groups' }, + admin: { id: 'admin', defaultMessage: 'Admin' }, +}) - return { - isPro: account.get('is_pro'), - } -} +const mapStateToProps = (state) => ({ + isPro: state.getIn(['accounts', me, 'is_pro']), +}) -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onOpenGroupCreateModal() { dispatch(openModal('GROUP_CREATE')) }, }) export default +@injectIntl @connect(mapStateToProps, mapDispatchToProps) class GroupsPage extends PureComponent { static propTypes = { + intl: PropTypes.object.isRequired, + children: PropTypes.node.isRequired, isPro: PropTypes.bool, onOpenGroupCreateModal: PropTypes.func.isRequired, } - componentDidMount() { - document.title = 'Groups - Gab' - } - render() { - const { children, isPro, onOpenGroupCreateModal } = this.props + const { + intl, + children, + isPro, + onOpenGroupCreateModal, + } = this.props const actions = [] const tabs = [ { - title: 'Featured', + title: intl.formatMessage(messages.groups), to: '/groups', }, { - title: 'New', + title: intl.formatMessage(messages.new), to: '/groups/new', }, { - title: 'My Groups', + title: intl.formatMessage(messages.myGroups), to: '/groups/browse/member', }, ] @@ -59,14 +69,17 @@ class GroupsPage extends PureComponent { }) tabs.push({ - title: 'Admin', + title: intl.formatMessage(messages.admin), to: '/groups/browse/admin', }) } + const title = intl.formatMessage(messages.groups) + return ( @@ -76,8 +89,8 @@ class GroupsPage extends PureComponent { )} tabs={tabs} - showBackBtn > + { children } ) diff --git a/app/javascript/gabsocial/pages/hashtag_page.js b/app/javascript/gabsocial/pages/hashtag_page.js index 19d6f248..927d5d8c 100644 --- a/app/javascript/gabsocial/pages/hashtag_page.js +++ b/app/javascript/gabsocial/pages/hashtag_page.js @@ -1,15 +1,18 @@ import { Fragment } from 'react' import { openModal } from '../actions/modal' -import GroupSidebarPanel from '../components/panel/groups_panel' +import { defineMessages, injectIntl } from 'react-intl' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' import ProgressPanel from '../components/panel/progress_panel' -import UserPanel from '../components/panel/user_panel' import TrendsPanel from '../components/panel/trends_panel' import HashtagsPanel from '../components/panel/hashtags_panel' import DefaultLayout from '../layouts/default_layout' -import TimelineComposeBlock from '../components/timeline_compose_block' -import Divider from '../components/divider' + +const messages = defineMessages({ + hashtag: { id: 'hashtag', defaultMessage: 'Hashtag' }, + hashtagTimeline: { id: 'hashtag_timeline', defaultMessage: 'Hashtag timeline' }, +}) const mapDispatchToProps = (dispatch) => ({ onOpenHashtagPageSettingsModal(hashtag) { @@ -20,23 +23,26 @@ const mapDispatchToProps = (dispatch) => ({ }) export default +@injectIntl @connect(null, mapDispatchToProps) class HashtagPage extends PureComponent { static propTypes = { + intl: PropTypes.object.isRequired, + children: PropTypes.node.isRequired, onOpenHashtagPageSettingsModal: PropTypes.func.isRequired, } - componentDidMount() { - document.title = '(1) Tag - Gab' - } - render() { - const { children, onOpenHashtagPageSettingsModal } = this.props + const { + intl, + children, + onOpenHashtagPageSettingsModal, + } = this.props return ( - )} > + {children} ) diff --git a/app/javascript/gabsocial/pages/home_page.js b/app/javascript/gabsocial/pages/home_page.js index 7241ca59..e7a6cab5 100644 --- a/app/javascript/gabsocial/pages/home_page.js +++ b/app/javascript/gabsocial/pages/home_page.js @@ -1,5 +1,6 @@ import { Fragment } from 'react' import { openModal } from '../actions/modal' +import PageTitle from '../features/ui/util/page_title' import GroupsPanel from '../components/panel/groups_panel' import ListsPanel from '../components/panel/lists_panel' import LinkFooter from '../components/link_footer' diff --git a/app/javascript/gabsocial/pages/list_page.js b/app/javascript/gabsocial/pages/list_page.js index 663c1ce0..4ad614b6 100644 --- a/app/javascript/gabsocial/pages/list_page.js +++ b/app/javascript/gabsocial/pages/list_page.js @@ -2,6 +2,7 @@ import { Fragment } from 'react' import ImmutablePropTypes from 'react-immutable-proptypes' import ImmutablePureComponent from 'react-immutable-pure-component' import { openModal } from '../actions/modal' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import DefaultLayout from '../layouts/default_layout' import ListDetailsPanel from '../components/panel/list_details_panel' diff --git a/app/javascript/gabsocial/pages/lists_page.js b/app/javascript/gabsocial/pages/lists_page.js index f5618455..92e3c568 100644 --- a/app/javascript/gabsocial/pages/lists_page.js +++ b/app/javascript/gabsocial/pages/lists_page.js @@ -1,11 +1,12 @@ import { Fragment } from 'react' -import { openModal } from '../actions/modal'; +import { openModal } from '../actions/modal' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' import TrendsPanel from '../components/panel/trends_panel' import DefaultLayout from '../layouts/default_layout' -const mapDispatchToProps = dispatch => ({ +const mapDispatchToProps = (dispatch) => ({ onOpenListCreateModal() { dispatch(openModal('LIST_CREATE')) }, diff --git a/app/javascript/gabsocial/pages/modal_page.js b/app/javascript/gabsocial/pages/modal_page.js index dbc5c5c5..10457a83 100644 --- a/app/javascript/gabsocial/pages/modal_page.js +++ b/app/javascript/gabsocial/pages/modal_page.js @@ -1,4 +1,5 @@ import { Fragment } from 'react' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' // import TrendsPanel from '../components/panel/trends_panel' diff --git a/app/javascript/gabsocial/pages/notifications_page.js b/app/javascript/gabsocial/pages/notifications_page.js index 3ec8ade5..8efc4f2b 100644 --- a/app/javascript/gabsocial/pages/notifications_page.js +++ b/app/javascript/gabsocial/pages/notifications_page.js @@ -1,6 +1,7 @@ import { Fragment } from 'react' -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl } from 'react-intl' import { setFilter } from '../actions/notifications' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import WhoToFollowPanel from '../components/panel/who_to_follow_panel' import NotificationFilterPanel from '../components/panel/notification_filter_panel' @@ -8,28 +9,29 @@ import TrendsPanel from '../components/panel/trends_panel' import DefaultLayout from '../layouts/default_layout' const messages = defineMessages({ + notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' }, mentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' }, - favorites: { id: 'notifications.filter.favorites', defaultMessage: 'Favorites' }, - boosts: { id: 'notifications.filter.boosts', defaultMessage: 'Reposts' }, - polls: { id: 'notifications.filter.polls', defaultMessage: 'Poll results' }, + likes: { id: 'likes', defaultMessage: 'Likes' }, + reposts: { id: 'reposts', defaultMessage: 'Reposts' }, + polls: { id: 'polls', defaultMessage: 'Poll' }, follows: { id: 'notifications.filter.follows', defaultMessage: 'Follows' }, - filterAll: { id: 'notifications.filter.all', defaultMessage: 'All' }, - filterMentions: { id: 'notifications.filter.mentions', defaultMessage: 'Mentions' }, -}); + all: { id: 'notifications.filter.all', defaultMessage: 'All' }, +}) -const makeMapStateToProps = state => ({ +const mapStateToProps = (state) => ({ selectedFilter: state.getIn(['notifications', 'filter', 'active']), -}); + notificationCount: state.getIn(['notifications', 'unread']), +}) const mapDispatchToProps = (dispatch) => ({ - selectFilter(value) { + setFilter(value) { dispatch(setFilter('active', value)) }, -}); +}) export default @injectIntl -@connect(makeMapStateToProps, mapDispatchToProps) +@connect(mapStateToProps, mapDispatchToProps) class NotificationsPage extends PureComponent { static contextTypes = { @@ -37,60 +39,60 @@ class NotificationsPage extends PureComponent { } static propTypes = { - selectFilter: PropTypes.func.isRequired, + setFilter: PropTypes.func.isRequired, selectedFilter: PropTypes.string.isRequired, intl: PropTypes.object.isRequired, - } - - componentDidMount() { - document.title = 'Notifications - Gab' + notificationCount: PropTypes.number.isRequired, } // : todo : on pop change filter active type onClick(notificationType) { - this.props.selectFilter(notificationType) + this.props.setFilter('active', notificationType) if (notificationType === 'all') { this.context.router.history.push('/notifications') } else { - this.context.router.history.push(`/notifications?only=${notificationType}`) + this.context.router.history.push(`/notifications?view=${notificationType}`) } } render() { - const { children, selectedFilter } = this.props - - console.log("selectedFilter:", selectedFilter) + const { + intl, + children, + selectedFilter, + notificationCount + } = this.props const tabs = [ { - title: 'All', + title: intl.formatMessage(messages.all), onClick: () => this.onClick('all'), active: selectedFilter === 'all', }, { - title: 'Mentions', + title: intl.formatMessage(messages.mentions), onClick: () => this.onClick('mention'), active: selectedFilter === 'mention', }, { - title: 'Likes', + title: intl.formatMessage(messages.likes), onClick: () => this.onClick('favourite'), active: selectedFilter === 'favourite', }, { - title: 'Reposts', + title: intl.formatMessage(messages.reposts), onClick: () => this.onClick('reblog'), active: selectedFilter === 'reblog', }, { - title: 'Polls', + title: intl.formatMessage(messages.polls), onClick: () => this.onClick('poll'), active: selectedFilter === 'poll', }, { - title: 'Follows', + title: intl.formatMessage(messages.follows), onClick: () => this.onClick('follow'), active: selectedFilter === 'follow', }, @@ -98,7 +100,7 @@ class NotificationsPage extends PureComponent { return ( @@ -109,6 +111,10 @@ class NotificationsPage extends PureComponent { )} tabs={tabs} > + {children} ) diff --git a/app/javascript/gabsocial/pages/profile_page.js b/app/javascript/gabsocial/pages/profile_page.js index 45d30ef5..3015b45d 100644 --- a/app/javascript/gabsocial/pages/profile_page.js +++ b/app/javascript/gabsocial/pages/profile_page.js @@ -4,6 +4,7 @@ import ImmutablePureComponent from 'react-immutable-pure-component' import { fetchAccountByUsername } from '../actions/accounts' import { makeGetAccount } from '../selectors' import { me } from '../initial_state' +import PageTitle from '../features/ui/util/page_title' import LinkFooter from '../components/link_footer' import ProfileStatsPanel from '../components/panel/profile_stats_panel' import ProfileInfoPanel from '../components/panel/profile_info_panel' @@ -30,30 +31,26 @@ const mapStateToProps = (state, { params: { username } }) => { } } +const mapDispatchToProps = (dispatch) => ({ + onFetchAccountByUsername(username) { + dispatch(fetchAccountByUsername(username)) + }, +}) + export default -@connect(mapStateToProps) +@connect(mapStateToProps, mapDispatchToProps) class ProfilePage extends ImmutablePureComponent { static propTypes = { children: PropTypes.node, params: PropTypes.object.isRequired, account: ImmutablePropTypes.map, - dispatch: PropTypes.func.isRequired, + onFetchAccountByUsername: PropTypes.func.isRequired, unavailable: PropTypes.bool.isRequired, } componentDidMount() { - const { account, params: { username } } = this.props - if (!!account) { - document.title = `${account.get('display_name')} (@${username}) - Gab` - } else { - document.title = `@${username} - Gab` - } - } - - componentWillMount() { - const { dispatch, params: { username } } = this.props - dispatch(fetchAccountByUsername(username)) + this.props.onFetchAccountByUsername(this.props.params.username) } render() { @@ -61,8 +58,13 @@ class ProfilePage extends ImmutablePureComponent { account, children, unavailable, + params: { username }, } = this.props + console.log("acount:", account) + + const title = !!account ? account.get('display_name') : username + return ( )} > + { !account && } diff --git a/app/javascript/gabsocial/reducers/notifications.js b/app/javascript/gabsocial/reducers/notifications.js index b3f7fe1e..ee16ed0a 100644 --- a/app/javascript/gabsocial/reducers/notifications.js +++ b/app/javascript/gabsocial/reducers/notifications.js @@ -149,8 +149,12 @@ const expandNormalizedNotifications = (state, notifications, next) => { item => item !== null && compareId(item.get('id'), items.first().get('id')) > 0 ) + // console.log("firstIndex, lastIndex: ", firstIndex, lastIndex) + const pop = list.take(firstIndex).concat(items, list.skip(lastIndex)) + // console.log("pop:", pop) + return pop }) } @@ -183,6 +187,7 @@ const updateNotificationsQueue = (state, notification, intlMessages, intlLocale) const queuedNotifications = state.getIn(['queuedNotifications'], ImmutableList()); const listedNotifications = state.getIn(['items'], ImmutableList()); const totalQueuedNotificationsCount = state.getIn(['totalQueuedNotificationsCount'], 0); + const unread = state.getIn(['unread'], 0) let alreadyExists = queuedNotifications.find(existingQueuedNotification => existingQueuedNotification.id === notification.id); if (!alreadyExists) alreadyExists = listedNotifications.find(existingListedNotification => existingListedNotification.get('id') === notification.id); @@ -202,6 +207,7 @@ const updateNotificationsQueue = (state, notification, intlMessages, intlLocale) })); } mutable.set('totalQueuedNotificationsCount', totalQueuedNotificationsCount + 1); + mutable.set('unread', unread + 1); }); }; diff --git a/app/javascript/packs/public.js b/app/javascript/packs/public.js index 124b52d6..50b89662 100644 --- a/app/javascript/packs/public.js +++ b/app/javascript/packs/public.js @@ -81,6 +81,7 @@ function main ( ) { }); const reactComponents = document.querySelectorAll('[data-component]'); + console.log("reactComponents:", reactComponents) if (reactComponents.length > 0) { import(/* webpackChunkName: "containers/media_container" */ '../gabsocial/containers/media_container') diff --git a/app/javascript/styles/global.css b/app/javascript/styles/global.css index b476b456..e6554fee 100644 --- a/app/javascript/styles/global.css +++ b/app/javascript/styles/global.css @@ -428,10 +428,6 @@ body { right: auto; } -.top0 { - top: 0px; -} - .lineHeight125 { line-height: 1.25em; } @@ -580,6 +576,14 @@ body { width: 240px; } +.width160PX { + width: 160px; +} + +.center160PX { + left: calc(100vw / 2 - 80px); +} + .width72PX { width: 72px; } @@ -708,6 +712,10 @@ body { top: 0; } +.top80PX { + top: 80px; +} + .top60PC { top: 60%; } diff --git a/app/models/notification.rb b/app/models/notification.rb index f952825b..26364696 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -43,11 +43,17 @@ class Notification < ApplicationRecord scope :browserable, ->(exclude_types = [], account_id = nil) { types = TYPE_CLASS_MAP.values - activity_types_from_types(exclude_types + [:follow_request]) - if account_id.nil? - where(activity_type: types) - else - where(activity_type: types, from_account_id: account_id) - end + # if account_id.nil? + puts "-----VERTS------" + Notification.includes(:from_account).where(activity_type: types, accounts: { + is_verified: true + }) + # joins(:account).where({ 'from_account.id' => 6 }) + # is_verified: false + # ) + # els + # where(activity_type: types, from_account_id: account_id) + # end } cache_associated :from_account, status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account, poll: [status: STATUS_INCLUDES] diff --git a/yarn.lock b/yarn.lock index 7b465fa3..84fbf1de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,12 +40,12 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" - integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== +"@babel/generator@^7.4.0", "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" + integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== dependencies: - "@babel/types" "^7.9.0" + "@babel/types" "^7.9.5" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" @@ -66,13 +66,13 @@ "@babel/types" "^7.8.3" "@babel/helper-builder-react-jsx-experimental@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz#066d80262ade488f9c1b1823ce5db88a4cedaa43" - integrity sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ== + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz#0b4b3e04e6123f03b404ca4dfd6528fe6bb92fe3" + integrity sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-module-imports" "^7.8.3" - "@babel/types" "^7.9.0" + "@babel/types" "^7.9.5" "@babel/helper-builder-react-jsx@^7.9.0": version "7.9.0" @@ -94,11 +94,11 @@ semver "^5.5.0" "@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" - integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg== + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.5.tgz#79753d44017806b481017f24b02fd4113c7106ea" + integrity sha512-IipaxGaQmW4TfWoXdqjY0TzoXQ1HRS0kPpEgvjosb3u7Uedcq297xFqDQiCcQtRRwzIMif+N1MLVI8C5a4/PAA== dependencies: - "@babel/helper-function-name" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-member-expression-to-functions" "^7.8.3" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -131,14 +131,14 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== +"@babel/helper-function-name@^7.8.3", "@babel/helper-function-name@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c" + integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.9.5" "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" @@ -236,10 +236,10 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-validator-identifier@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" - integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== +"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80" + integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g== "@babel/helper-wrap-function@^7.8.3": version "7.8.3" @@ -332,13 +332,14 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@^7.3.4", "@babel/plugin-proposal-object-rest-spread@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" - integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow== +"@babel/plugin-proposal-object-rest-spread@^7.3.4", "@babel/plugin-proposal-object-rest-spread@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz#3fd65911306d8746014ec0d0cf78f0e39a149116" + integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.9.5" "@babel/plugin-proposal-optional-catch-binding@^7.8.3": version "7.8.3" @@ -472,14 +473,14 @@ "@babel/helper-plugin-utils" "^7.8.3" lodash "^4.17.13" -"@babel/plugin-transform-classes@^7.9.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" - integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ== +"@babel/plugin-transform-classes@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz#800597ddb8aefc2c293ed27459c1fcc935a26c2c" + integrity sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg== dependencies: "@babel/helper-annotate-as-pure" "^7.8.3" "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-optimise-call-expression" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.6" @@ -493,10 +494,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" - integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ== +"@babel/plugin-transform-destructuring@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz#72c97cf5f38604aea3abf3b935b0e17b1db76a50" + integrity sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" @@ -611,10 +612,10 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-replace-supers" "^7.8.3" -"@babel/plugin-transform-parameters@^7.8.7": - version "7.9.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a" - integrity sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg== +"@babel/plugin-transform-parameters@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz#173b265746f5e15b2afe527eeda65b73623a0795" + integrity sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA== dependencies: "@babel/helper-get-function-arity" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3" @@ -746,9 +747,9 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/preset-env@^7.3.4": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" - integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.5.tgz#8ddc76039bc45b774b19e2fc548f6807d8a8919f" + integrity sha512-eWGYeADTlPJH+wq1F0wNfPbVS1w1wtmMJiYk55Td5Yu28AsdR9AsC97sZ0Qq8fHqQuslVSIYSGJMcblr345GfQ== dependencies: "@babel/compat-data" "^7.9.0" "@babel/helper-compilation-targets" "^7.8.7" @@ -759,7 +760,7 @@ "@babel/plugin-proposal-json-strings" "^7.8.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.0" + "@babel/plugin-proposal-object-rest-spread" "^7.9.5" "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-optional-chaining" "^7.9.0" "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" @@ -776,9 +777,9 @@ "@babel/plugin-transform-async-to-generator" "^7.8.3" "@babel/plugin-transform-block-scoped-functions" "^7.8.3" "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.0" + "@babel/plugin-transform-classes" "^7.9.5" "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" + "@babel/plugin-transform-destructuring" "^7.9.5" "@babel/plugin-transform-dotall-regex" "^7.8.3" "@babel/plugin-transform-duplicate-keys" "^7.8.3" "@babel/plugin-transform-exponentiation-operator" "^7.8.3" @@ -793,7 +794,7 @@ "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" "@babel/plugin-transform-new-target" "^7.8.3" "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" + "@babel/plugin-transform-parameters" "^7.9.5" "@babel/plugin-transform-property-literals" "^7.8.3" "@babel/plugin-transform-regenerator" "^7.8.7" "@babel/plugin-transform-reserved-words" "^7.8.3" @@ -804,7 +805,7 @@ "@babel/plugin-transform-typeof-symbol" "^7.8.4" "@babel/plugin-transform-unicode-regex" "^7.8.3" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.0" + "@babel/types" "^7.9.5" browserslist "^4.9.1" core-js-compat "^3.6.2" invariant "^2.2.2" @@ -858,26 +859,26 @@ "@babel/types" "^7.8.6" "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" - integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" + integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== dependencies: "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-function-name" "^7.8.3" + "@babel/generator" "^7.9.5" + "@babel/helper-function-name" "^7.9.5" "@babel/helper-split-export-declaration" "^7.8.3" "@babel/parser" "^7.9.0" - "@babel/types" "^7.9.0" + "@babel/types" "^7.9.5" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" - integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5": + version "7.9.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.5.tgz#89231f82915a8a566a703b3b20133f73da6b9444" + integrity sha512-XjnvNqenk818r5zMaba+sLQjnbda31UfUURv3ei0qPQw4u+j2jMyJ5b11y8ZHYTRSI3NnInQkkkRT4fLqqPdHg== dependencies: - "@babel/helper-validator-identifier" "^7.9.0" + "@babel/helper-validator-identifier" "^7.9.5" lodash "^4.17.13" to-fast-properties "^2.0.0" @@ -1115,9 +1116,9 @@ integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*": - version "13.11.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.0.tgz#390ea202539c61c8fa6ba4428b57e05bc36dc47b" - integrity sha512-uM4mnmsIIPK/yeO+42F2RQhGUIs39K2RFmugcJANppXe6J1nvH87PvzPZYpza7Xhhs8Yn9yIAVdLZ84z61+0xQ== + version "13.11.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.11.1.tgz#49a2a83df9d26daacead30d0ccc8762b128d53c7" + integrity sha512-eWQGP3qtxwL8FGneRrC5DwrJLGN4/dH1clNTuLfN81HCrxVtxRjygDTUoZJ5ASlDEeo0ppYFQjQIlXhtXpOn6g== "@types/parse-json@^4.0.0": version "4.0.0" @@ -1313,6 +1314,11 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1450,6 +1456,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1614,7 +1628,7 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@^2.6.2: +async@^2.1.4, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -1853,6 +1867,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1932,6 +1951,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -2008,7 +2034,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.8.3, browserslist@^4.9.1: +browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.8.5, browserslist@^4.9.1: version "4.11.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.1.tgz#92f855ee88d6e050e7e7311d987992014f1a1f1b" integrity sha512-DCTr3kDrKEYNw6Jb9HFxVLQNaue8z+0ZfRBRjmCunKDEXEBajKDj2Y+Uelg+Pi29OnvaSGwjOsnRyNEkXzHg5g== @@ -2165,9 +2191,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001038, caniuse-lite@^1.0.30001039: - version "1.0.30001039" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001039.tgz#b3814a1c38ffeb23567f8323500c09526a577bbe" - integrity sha512-SezbWCTT34eyFoWHgx8UWso7YtvtM7oosmFoXbCkdC6qJzRfBTeTgE9REtKtiuKXuMwWTZEvdnFNGAyVMorv8Q== + version "1.0.30001040" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001040.tgz#103fc8e6eb1d7397e95134cd0e996743353d58ea" + integrity sha512-Ep0tEPeI5wCvmJNrXjE3etgfI+lkl1fTDU6Y3ZH1mhrjkPlVI9W4pcKbMo+BQLpEWKVYYp2EmYaRsqpPC3k7lQ== capture-exit@^2.0.0: version "2.0.0" @@ -2223,6 +2249,21 @@ cheerio@^1.0.0-rc.3: lodash "^4.15.0" parse5 "^3.0.1" +"chokidar@>=2.0.0 <4.0.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2312,6 +2353,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2513,11 +2563,11 @@ copy-descriptor@^0.1.0: integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== dependencies: - browserslist "^4.8.3" + browserslist "^4.8.5" semver "7.0.0" core-js@^2.4.0, core-js@^2.4.1: @@ -2590,6 +2640,13 @@ create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" +cron@^1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/cron/-/cron-1.8.2.tgz#4ac5e3c55ba8c163d84f3407bde94632da8370ce" + integrity sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg== + dependencies: + moment-timezone "^0.5.x" + cross-env@^5.1.4: version "5.2.1" resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.2.1.tgz#b2c76c1ca7add66dc874d11798466094f551b34d" @@ -2875,9 +2932,9 @@ data-urls@^1.0.0: whatwg-url "^7.0.0" date-fns@^2.0.1: - version "2.11.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.11.1.tgz#197b8be1bbf5c5e6fe8bea817f0fe111820e7a12" - integrity sha512-3RdUoinZ43URd2MJcquzBbDQo+J87cSzB8NkXdZiN5ia1UNyep0oCyitfiL88+R7clGTeq/RniXAc16gWyAu1w== + version "2.12.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.12.0.tgz#01754c8a2f3368fc1119cf4625c3dad8c1845ee6" + integrity sha512-qJgn99xxKnFgB1qL4jpxU7Q2t0LOn1p8KMIveef3UZD7kqjT3tpFNNdXJelEHhE+rUgffriXriw/sOSU+cS1Hw== debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" @@ -2893,7 +2950,7 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.0.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -2934,6 +2991,11 @@ deep-extend@^0.5.1: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" integrity sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w== +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3022,6 +3084,11 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -3105,7 +3172,7 @@ dom-helpers@^3.4.0: dependencies: "@babel/runtime" "^7.1.2" -dom-serializer@0: +dom-serializer@0, dom-serializer@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== @@ -3150,6 +3217,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9" + integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw== + dependencies: + domelementtype "^2.0.1" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -3166,6 +3240,15 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08" + integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg== + dependencies: + dom-serializer "^0.2.1" + domelementtype "^2.0.1" + domhandler "^3.0.0" + dot-prop@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" @@ -3226,9 +3309,9 @@ ejs@^2.3.4, ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.390: - version "1.3.398" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.398.tgz#4c01e29091bf39e578ac3f66c1f157d92fa5725d" - integrity sha512-BJjxuWLKFbM5axH3vES7HKMQgAknq9PZHBkMK/rEXUQG9i1Iw5R+6hGkm6GtsQSANjSUrh/a6m32nzCNDNo/+w== + version "1.3.403" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.403.tgz#c8bab4e2e72bf78bc28bad1cc355c061f9cc1918" + integrity sha512-JaoxV4RzdBAZOnsF4dAlZ2ijJW72MbqO5lNfOBHUWiBQl3Rwe+mk2RCUMrRI3rSClLJ8HSNQNqcry12H+0ZjFw== elliptic@^6.0.0: version "6.5.2" @@ -3923,6 +4006,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -4058,6 +4148,13 @@ fs-extra@^8.0.1: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -4081,6 +4178,11 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -4166,6 +4268,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -4447,9 +4556,9 @@ html-encoding-sniffer@^1.0.2: whatwg-encoding "^1.0.1" html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== html-escaper@^2.0.0: version "2.0.2" @@ -4468,6 +4577,16 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -4548,7 +4667,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -4577,6 +4696,13 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -4676,7 +4802,7 @@ inherits@2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.4, ini@^1.3.5: +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -4825,6 +4951,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" @@ -4942,7 +5075,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -4968,6 +5101,11 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -5780,7 +5918,7 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.0.4, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -5805,6 +5943,11 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5820,6 +5963,11 @@ lodash.escape@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c= + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -5850,11 +5998,26 @@ lodash.isobject@^3.0.2: resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" integrity sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0= +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" @@ -6103,6 +6266,21 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + mississippi@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" @@ -6127,13 +6305,25 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: +mkdirp@^0.5, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: minimist "^1.2.5" +moment-timezone@^0.5.x: + version "0.5.28" + resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.28.tgz#f093d789d091ed7b055d82aa81a82467f72e4338" + integrity sha512-TDJkZvAyKIVWg5EtVqRzU97w0Rb0YVbfpqyjgu6GwXCAohVRqwZjf4fOzDE6p1Ch98Sro/8hQQi65WDXW5STPw== + dependencies: + moment ">= 2.9.0" + +"moment@>= 2.9.0": + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" + integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== + moo@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" @@ -6227,6 +6417,15 @@ nearley@^2.7.10: randexp "0.4.6" semver "^5.4.1" +needle@^2.2.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" + integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -6310,11 +6509,35 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" +node-pre-gyp@*: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + node-releases@^1.1.53: version "1.1.53" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6332,7 +6555,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -6357,6 +6580,27 @@ normalize-url@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== +npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -6364,7 +6608,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.1.2: +npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -6580,6 +6824,11 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -6589,11 +6838,19 @@ os-locale@^3.0.0, os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -6918,6 +7175,11 @@ pgpass@1.*: dependencies: split "^1.0.0" +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -7623,6 +7885,16 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-datepicker@^2.14.1: version "2.14.1" resolved "https://registry.yarnpkg.com/react-datepicker/-/react-datepicker-2.14.1.tgz#83463beb85235a575475955f554290a95f89c65b" @@ -7914,6 +8186,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== + dependencies: + picomatch "^2.0.7" + realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -8222,7 +8501,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.5.4, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -8308,6 +8587,50 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" +sanitize-html@^1.22.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.23.0.tgz#e7a5ce7427cd2844dae5b9961cd372e349f91fb5" + integrity sha512-7MgUrbZpaig6zHwuHjpNqhkiuutFPWWoFY/RmdtEnvrFKMLafzSHfFyOozVpKWytkZIUhbYu3VQ/93OmYdo3ag== + dependencies: + chalk "^2.4.1" + htmlparser2 "^4.1.0" + lodash.clonedeep "^4.5.0" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.mergewith "^4.6.2" + postcss "^7.0.27" + srcset "^2.0.1" + xtend "^4.0.1" + +sass-loader@^7.0.3: + version "7.3.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.3.1.tgz#a5bf68a04bcea1c13ff842d747150f7ab7d0d23f" + integrity sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA== + dependencies: + clone-deep "^4.0.1" + loader-utils "^1.0.1" + neo-async "^2.5.0" + pify "^4.0.1" + semver "^6.3.0" + +sass-resources-loader@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sass-resources-loader/-/sass-resources-loader-2.0.1.tgz#c8427f3760bf7992f24f27d3889a1c797e971d3a" + integrity sha512-UsjQWm01xglINC1kPidYwKOBBzOElVupm9RwtOkRlY0hPA4GKi2KFsn4BZypRD1kudaXgUnGnfbiVOE7c+ybAg== + dependencies: + async "^2.1.4" + chalk "^1.1.3" + glob "^7.1.1" + loader-utils "^1.0.4" + +sass@^1.20.3: + version "1.26.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" + integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw== + dependencies: + chokidar ">=2.0.0 <4.0.0" + sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -8358,7 +8681,7 @@ selfsigned@^1.10.7: dependencies: node-forge "0.9.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -8468,6 +8791,13 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + shallow-equal@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" @@ -8695,6 +9025,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +srcset@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/srcset/-/srcset-2.0.1.tgz#8f842d357487eb797f413d9c309de7a5149df5ac" + integrity sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ== + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" @@ -8826,9 +9161,9 @@ string.prototype.trim@^1.2.1: function-bind "^1.1.1" string.prototype.trimend@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" - integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA== + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" + integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== dependencies: define-properties "^1.1.3" es-abstract "^1.17.5" @@ -8852,9 +9187,9 @@ string.prototype.trimright@^2.1.1: string.prototype.trimend "^1.0.0" string.prototype.trimstart@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" - integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w== + version "1.0.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" + integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== dependencies: define-properties "^1.1.3" es-abstract "^1.17.5" @@ -8911,7 +9246,7 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@^2.0.1: +strip-json-comments@^2.0.1, 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" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -9009,6 +9344,19 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tar@^4.4.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + tcomb@^2.5.0: version "2.7.0" resolved "https://registry.yarnpkg.com/tcomb/-/tcomb-2.7.0.tgz#10d62958041669a5d53567b9a4ee8cde22b1c2b0" @@ -9030,9 +9378,9 @@ terser-webpack-plugin@^1.4.3: worker-farm "^1.7.0" terser@^4.1.2: - version "4.6.10" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.10.tgz#90f5bd069ff456ddbc9503b18e52f9c493d3b7c2" - integrity sha512-qbF/3UOo11Hggsbsqm2hPa6+L4w7bkr+09FNseEe8xrcVD3APGLFqE+Oz1ZKAxjYnFsj80rLOfgAtJ0LNJjtTA== + version "4.6.11" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.11.tgz#12ff99fdd62a26de2a82f508515407eb6ccd8a9f" + integrity sha512-76Ynm7OXUG5xhOpblhytE7X58oeNSmC8xnNhjWVo8CksHit0U0kO4hfNbPrrYwowLWFgM2n9L176VNx2QaHmtA== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -9147,6 +9495,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -9552,7 +9907,7 @@ webpack-bundle-analyzer@^3.1.0: opener "^1.5.1" ws "^6.0.0" -webpack-cli@^3.3.11: +webpack-cli@^3.3.2: version "3.3.11" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.11.tgz#3bf21889bf597b5d82c38f215135a411edfdc631" integrity sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g== @@ -9815,7 +10170,7 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xtend@^4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== @@ -9825,7 +10180,7 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^3.0.2: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==