From 45c44989c8fb6e24badd18bb83ac5f68de0aceaf Mon Sep 17 00:00:00 2001 From: kibigo! Date: Fri, 17 Nov 2017 19:11:18 -0800 Subject: Forking glitch theme --- app/javascript/glitch/actions/local_settings.js | 93 - app/javascript/glitch/components/account/header.js | 227 - .../column/notif_cleaning_widget/container.js | 80 - .../notification_purge_buttons.js | 62 - .../compose/advanced_options/container.js | 66 - .../components/compose/advanced_options/index.js | 163 - .../components/compose/advanced_options/toggle.js | 103 - .../components/compose/attach_options/index.js | 133 - .../glitch/components/compose/dropdown/index.js | 77 - .../glitch/components/local_settings/container.js | 24 - .../glitch/components/local_settings/index.js | 50 - .../components/local_settings/navigation/index.js | 74 - .../local_settings/navigation/item/index.js | 69 - .../local_settings/navigation/item/style.scss | 27 - .../local_settings/navigation/style.scss | 10 - .../glitch/components/local_settings/page/index.js | 212 - .../components/local_settings/page/item/index.js | 90 - .../components/local_settings/page/item/style.scss | 7 - .../components/local_settings/page/style.scss | 9 - .../glitch/components/local_settings/style.scss | 34 - .../glitch/components/notification/container.js | 48 - .../glitch/components/notification/follow.js | 72 - .../glitch/components/notification/index.js | 82 - .../components/notification/overlay/container.js | 49 - .../notification/overlay/notification_overlay.js | 61 - .../glitch/components/status/action_bar.js | 187 - .../glitch/components/status/container.js | 263 -- app/javascript/glitch/components/status/content.js | 241 - .../glitch/components/status/gallery/index.js | 79 - .../glitch/components/status/gallery/item.js | 158 - app/javascript/glitch/components/status/header.js | 146 - app/javascript/glitch/components/status/index.js | 760 --- app/javascript/glitch/components/status/player.js | 203 - app/javascript/glitch/components/status/prepend.js | 159 - .../glitch/components/status/visibility_icon.js | 48 - app/javascript/glitch/reducers/local_settings.js | 126 - app/javascript/glitch/util/bio_metadata.js | 331 -- app/javascript/mastodon/actions/accounts.js | 661 --- app/javascript/mastodon/actions/alerts.js | 24 - app/javascript/mastodon/actions/blocks.js | 82 - app/javascript/mastodon/actions/bundles.js | 25 - app/javascript/mastodon/actions/cards.js | 52 - app/javascript/mastodon/actions/columns.js | 40 - app/javascript/mastodon/actions/compose.js | 398 -- app/javascript/mastodon/actions/domain_blocks.js | 117 - app/javascript/mastodon/actions/emojis.js | 14 - app/javascript/mastodon/actions/favourites.js | 83 - app/javascript/mastodon/actions/height_cache.js | 17 - app/javascript/mastodon/actions/interactions.js | 313 -- app/javascript/mastodon/actions/modal.js | 16 - app/javascript/mastodon/actions/mutes.js | 103 - app/javascript/mastodon/actions/notifications.js | 265 -- app/javascript/mastodon/actions/onboarding.js | 14 - app/javascript/mastodon/actions/pin_statuses.js | 40 - .../mastodon/actions/push_notifications.js | 52 - app/javascript/mastodon/actions/reports.js | 80 - app/javascript/mastodon/actions/search.js | 73 - app/javascript/mastodon/actions/settings.js | 31 - app/javascript/mastodon/actions/statuses.js | 217 - app/javascript/mastodon/actions/store.js | 17 - app/javascript/mastodon/actions/streaming.js | 54 - app/javascript/mastodon/actions/timelines.js | 208 - app/javascript/mastodon/api.js | 26 - app/javascript/mastodon/base_polyfills.js | 18 - .../__tests__/__snapshots__/avatar-test.js.snap | 35 - .../__snapshots__/avatar_overlay-test.js.snap | 26 - .../__tests__/__snapshots__/button-test.js.snap | 130 - .../__snapshots__/display_name-test.js.snap | 23 - .../mastodon/components/__tests__/avatar-test.js | 36 - .../components/__tests__/avatar_overlay-test.js | 29 - .../mastodon/components/__tests__/button-test.js | 82 - .../components/__tests__/display_name-test.js | 18 - app/javascript/mastodon/components/account.js | 116 - .../mastodon/components/attachment_list.js | 33 - .../mastodon/components/autosuggest_emoji.js | 42 - .../mastodon/components/autosuggest_textarea.js | 222 - app/javascript/mastodon/components/avatar.js | 72 - .../mastodon/components/avatar_overlay.js | 30 - app/javascript/mastodon/components/button.js | 64 - app/javascript/mastodon/components/collapsable.js | 22 - app/javascript/mastodon/components/column.js | 54 - .../mastodon/components/column_back_button.js | 29 - .../mastodon/components/column_back_button_slim.js | 31 - .../mastodon/components/column_header.js | 214 - app/javascript/mastodon/components/display_name.js | 20 - .../mastodon/components/dropdown_menu.js | 211 - .../mastodon/components/extended_video_player.js | 54 - app/javascript/mastodon/components/icon_button.js | 137 - .../components/intersection_observer_article.js | 130 - app/javascript/mastodon/components/load_more.js | 26 - .../mastodon/components/loading_indicator.js | 11 - .../mastodon/components/media_gallery.js | 281 -- .../mastodon/components/missing_indicator.js | 12 - app/javascript/mastodon/components/permalink.js | 34 - .../mastodon/components/relative_timestamp.js | 147 - .../mastodon/components/scrollable_list.js | 198 - app/javascript/mastodon/components/setting_text.js | 34 - app/javascript/mastodon/components/status.js | 249 - .../mastodon/components/status_action_bar.js | 191 - .../mastodon/components/status_content.js | 188 - app/javascript/mastodon/components/status_list.js | 72 - .../mastodon/containers/account_container.js | 72 - .../mastodon/containers/card_container.js | 18 - .../mastodon/containers/compose_container.js | 38 - .../mastodon/containers/dropdown_menu_container.js | 16 - .../intersection_observer_article_container.js | 17 - app/javascript/mastodon/containers/mastodon.js | 70 - .../mastodon/containers/media_gallery_container.js | 34 - .../mastodon/containers/status_container.js | 136 - .../mastodon/containers/timeline_container.js | 48 - .../mastodon/containers/video_container.js | 26 - app/javascript/mastodon/extra_polyfills.js | 5 - .../features/account/components/action_bar.js | 145 - .../mastodon/features/account/components/header.js | 131 - .../account_gallery/components/media_item.js | 39 - .../mastodon/features/account_gallery/index.js | 111 - .../features/account_timeline/components/header.js | 95 - .../containers/header_container.js | 104 - .../mastodon/features/account_timeline/index.js | 77 - app/javascript/mastodon/features/blocks/index.js | 70 - .../components/column_settings.js | 35 - .../containers/column_settings_container.js | 17 - .../mastodon/features/community_timeline/index.js | 107 - .../compose/components/autosuggest_account.js | 24 - .../compose/components/character_counter.js | 25 - .../features/compose/components/compose_form.js | 286 -- .../compose/components/emoji_picker_dropdown.js | 376 -- .../features/compose/components/navigation_bar.js | 38 - .../compose/components/privacy_dropdown.js | 200 - .../features/compose/components/reply_indicator.js | 63 - .../mastodon/features/compose/components/search.js | 129 - .../features/compose/components/search_results.js | 65 - .../compose/components/text_icon_button.js | 29 - .../mastodon/features/compose/components/upload.js | 96 - .../features/compose/components/upload_button.js | 77 - .../features/compose/components/upload_form.js | 29 - .../features/compose/components/upload_progress.js | 42 - .../features/compose/components/warning.js | 26 - .../containers/autosuggest_account_container.js | 15 - .../compose/containers/compose_form_container.js | 71 - .../containers/emoji_picker_dropdown_container.js | 82 - .../compose/containers/navigation_container.js | 11 - .../containers/privacy_dropdown_container.js | 24 - .../containers/reply_indicator_container.js | 24 - .../compose/containers/search_container.js | 35 - .../compose/containers/search_results_container.js | 8 - .../containers/sensitive_button_container.js | 71 - .../compose/containers/spoiler_button_container.js | 25 - .../compose/containers/upload_button_container.js | 18 - .../compose/containers/upload_container.js | 21 - .../compose/containers/upload_form_container.js | 8 - .../containers/upload_progress_container.js | 9 - .../compose/containers/warning_container.js | 24 - app/javascript/mastodon/features/compose/index.js | 126 - .../mastodon/features/compose/util/counter.js | 9 - .../mastodon/features/compose/util/url_regex.js | 196 - .../containers/column_settings_container.js | 17 - .../mastodon/features/direct_timeline/index.js | 107 - .../features/emoji/__tests__/emoji-test.js | 77 - .../features/emoji/__tests__/emoji_index-test.js | 130 - app/javascript/mastodon/features/emoji/emoji.js | 95 - .../mastodon/features/emoji/emoji_compressed.js | 93 - .../mastodon/features/emoji/emoji_map.json | 1 - .../features/emoji/emoji_mart_data_light.js | 41 - .../features/emoji/emoji_mart_search_light.js | 157 - .../mastodon/features/emoji/emoji_picker.js | 7 - .../features/emoji/emoji_unicode_mapping_light.js | 35 - .../mastodon/features/emoji/emoji_utils.js | 258 -- .../mastodon/features/emoji/unicode_to_filename.js | 26 - .../features/emoji/unicode_to_unified_name.js | 17 - .../mastodon/features/favourited_statuses/index.js | 94 - .../mastodon/features/favourites/index.js | 60 - .../components/account_authorize.js | 49 - .../containers/account_authorize_container.js | 26 - .../mastodon/features/follow_requests/index.js | 71 - .../mastodon/features/followers/index.js | 93 - .../mastodon/features/following/index.js | 93 - .../mastodon/features/generic_not_found/index.js | 11 - .../mastodon/features/getting_started/index.js | 145 - .../mastodon/features/hashtag_timeline/index.js | 118 - .../home_timeline/components/column_settings.js | 46 - .../containers/column_settings_container.js | 21 - .../mastodon/features/home_timeline/index.js | 90 - app/javascript/mastodon/features/mutes/index.js | 70 - .../components/clear_column_button.js | 17 - .../notifications/components/column_settings.js | 86 - .../notifications/components/notification.js | 155 - .../notifications/components/setting_toggle.js | 34 - .../containers/column_settings_container.js | 44 - .../containers/notification_container.js | 25 - .../mastodon/features/notifications/index.js | 193 - .../mastodon/features/pinned_statuses/index.js | 59 - .../containers/column_settings_container.js | 17 - .../mastodon/features/public_timeline/index.js | 107 - app/javascript/mastodon/features/reblogs/index.js | 60 - .../features/report/components/status_check_box.js | 37 - .../containers/status_check_box_container.js | 19 - .../mastodon/features/standalone/compose/index.js | 20 - .../features/standalone/hashtag_timeline/index.js | 70 - .../features/standalone/public_timeline/index.js | 76 - .../features/status/components/action_bar.js | 129 - .../mastodon/features/status/components/card.js | 125 - .../features/status/components/detailed_status.js | 132 - .../features/status/containers/card_container.js | 8 - app/javascript/mastodon/features/status/index.js | 343 -- .../ui/components/__tests__/column-test.js | 34 - .../features/ui/components/actions_modal.js | 74 - .../mastodon/features/ui/components/boost_modal.js | 84 - .../mastodon/features/ui/components/bundle.js | 102 - .../features/ui/components/bundle_column_error.js | 44 - .../features/ui/components/bundle_modal_error.js | 53 - .../mastodon/features/ui/components/column.js | 74 - .../features/ui/components/column_header.js | 35 - .../mastodon/features/ui/components/column_link.js | 39 - .../features/ui/components/column_loading.js | 30 - .../features/ui/components/column_subheading.js | 16 - .../features/ui/components/columns_area.js | 174 - .../features/ui/components/confirmation_modal.js | 53 - .../features/ui/components/doodle_modal.js | 614 --- .../features/ui/components/drawer_loading.js | 11 - .../mastodon/features/ui/components/embed_modal.js | 84 - .../features/ui/components/image_loader.js | 152 - .../mastodon/features/ui/components/media_modal.js | 126 - .../features/ui/components/modal_loading.js | 20 - .../mastodon/features/ui/components/modal_root.js | 131 - .../mastodon/features/ui/components/mute_modal.js | 105 - .../features/ui/components/onboarding_modal.js | 323 -- .../features/ui/components/report_modal.js | 105 - .../mastodon/features/ui/components/tabs_bar.js | 84 - .../mastodon/features/ui/components/upload_area.js | 52 - .../mastodon/features/ui/components/video_modal.js | 33 - .../features/ui/containers/bundle_container.js | 19 - .../ui/containers/columns_area_container.js | 8 - .../ui/containers/loading_bar_container.js | 8 - .../features/ui/containers/modal_container.js | 16 - .../ui/containers/notifications_container.js | 18 - .../ui/containers/status_list_container.js | 73 - app/javascript/mastodon/features/ui/index.js | 442 -- .../mastodon/features/ui/util/async-components.js | 118 - .../mastodon/features/ui/util/fullscreen.js | 46 - .../features/ui/util/get_rect_from_entry.js | 21 - .../ui/util/intersection_observer_wrapper.js | 57 - .../mastodon/features/ui/util/optional_motion.js | 5 - .../features/ui/util/react_router_helpers.js | 64 - .../mastodon/features/ui/util/reduced_motion.js | 44 - .../features/ui/util/schedule_idle_task.js | 29 - app/javascript/mastodon/features/video/index.js | 286 -- app/javascript/mastodon/initial_state.js | 21 - app/javascript/mastodon/is_mobile.js | 34 - app/javascript/mastodon/link_header.js | 33 - app/javascript/mastodon/load_polyfills.js | 39 - app/javascript/mastodon/main.js | 39 - app/javascript/mastodon/middleware/errors.js | 31 - app/javascript/mastodon/middleware/loading_bar.js | 25 - app/javascript/mastodon/middleware/sounds.js | 46 - app/javascript/mastodon/performance.js | 31 - app/javascript/mastodon/ready.js | 7 - app/javascript/mastodon/reducers/accounts.js | 135 - .../mastodon/reducers/accounts_counters.js | 136 - app/javascript/mastodon/reducers/alerts.js | 25 - app/javascript/mastodon/reducers/cards.js | 14 - app/javascript/mastodon/reducers/compose.js | 307 -- app/javascript/mastodon/reducers/contexts.js | 61 - app/javascript/mastodon/reducers/custom_emojis.js | 16 - app/javascript/mastodon/reducers/height_cache.js | 23 - app/javascript/mastodon/reducers/index.js | 54 - .../mastodon/reducers/media_attachments.js | 15 - app/javascript/mastodon/reducers/meta.js | 16 - app/javascript/mastodon/reducers/modal.js | 17 - app/javascript/mastodon/reducers/mutes.js | 29 - app/javascript/mastodon/reducers/notifications.js | 191 - .../mastodon/reducers/push_notifications.js | 51 - app/javascript/mastodon/reducers/relationships.js | 46 - app/javascript/mastodon/reducers/reports.js | 60 - app/javascript/mastodon/reducers/search.js | 42 - app/javascript/mastodon/reducers/settings.js | 119 - app/javascript/mastodon/reducers/status_lists.js | 75 - app/javascript/mastodon/reducers/statuses.js | 148 - app/javascript/mastodon/reducers/timelines.js | 149 - app/javascript/mastodon/reducers/user_lists.js | 80 - app/javascript/mastodon/rtl.js | 31 - app/javascript/mastodon/scroll.js | 30 - app/javascript/mastodon/selectors/index.js | 87 - app/javascript/mastodon/service_worker/entry.js | 10 - .../service_worker/web_push_notifications.js | 159 - app/javascript/mastodon/store/configureStore.js | 15 - app/javascript/mastodon/stream.js | 73 - app/javascript/mastodon/test_setup.js | 5 - app/javascript/mastodon/uuid.js | 3 - app/javascript/mastodon/web_push_subscription.js | 105 - app/javascript/packs/about.js | 6 +- app/javascript/packs/application.js | 4 + app/javascript/packs/common.js | 3 - app/javascript/packs/public.js | 16 +- app/javascript/packs/share.js | 6 +- app/javascript/styles/application.scss | 23 - app/javascript/styles/doodle.scss | 86 - app/javascript/styles/mastodon/_mixins.scss | 42 - app/javascript/styles/mastodon/about.scss | 822 ---- app/javascript/styles/mastodon/accounts.scss | 589 --- app/javascript/styles/mastodon/admin.scss | 349 -- app/javascript/styles/mastodon/basics.scss | 122 - app/javascript/styles/mastodon/boost.scss | 28 - app/javascript/styles/mastodon/compact_header.scss | 34 - app/javascript/styles/mastodon/components.scss | 4828 -------------------- app/javascript/styles/mastodon/containers.scss | 116 - app/javascript/styles/mastodon/emoji_picker.scss | 199 - app/javascript/styles/mastodon/footer.scss | 30 - app/javascript/styles/mastodon/forms.scss | 540 --- app/javascript/styles/mastodon/landing_strip.scss | 36 - app/javascript/styles/mastodon/lists.scss | 19 - app/javascript/styles/mastodon/reset.scss | 91 - app/javascript/styles/mastodon/rtl.scss | 254 - app/javascript/styles/mastodon/stream_entries.scss | 335 -- app/javascript/styles/mastodon/tables.scss | 76 - app/javascript/styles/mastodon/variables.scss | 32 - app/javascript/styles/variables-glitch.scss | 3 - app/javascript/themes/default/theme.yml | 18 - app/javascript/themes/glitch/actions/accounts.js | 661 +++ app/javascript/themes/glitch/actions/alerts.js | 24 + app/javascript/themes/glitch/actions/blocks.js | 82 + app/javascript/themes/glitch/actions/bundles.js | 25 + app/javascript/themes/glitch/actions/cards.js | 52 + app/javascript/themes/glitch/actions/columns.js | 40 + app/javascript/themes/glitch/actions/compose.js | 398 ++ .../themes/glitch/actions/domain_blocks.js | 117 + app/javascript/themes/glitch/actions/emojis.js | 14 + app/javascript/themes/glitch/actions/favourites.js | 83 + .../themes/glitch/actions/height_cache.js | 17 + .../themes/glitch/actions/interactions.js | 313 ++ .../themes/glitch/actions/local_settings.js | 24 + app/javascript/themes/glitch/actions/modal.js | 16 + app/javascript/themes/glitch/actions/mutes.js | 103 + .../themes/glitch/actions/notifications.js | 265 ++ app/javascript/themes/glitch/actions/onboarding.js | 14 + .../themes/glitch/actions/pin_statuses.js | 40 + .../themes/glitch/actions/push_notifications.js | 52 + app/javascript/themes/glitch/actions/reports.js | 80 + app/javascript/themes/glitch/actions/search.js | 73 + app/javascript/themes/glitch/actions/settings.js | 31 + app/javascript/themes/glitch/actions/statuses.js | 217 + app/javascript/themes/glitch/actions/store.js | 17 + app/javascript/themes/glitch/actions/streaming.js | 54 + app/javascript/themes/glitch/actions/timelines.js | 208 + .../__tests__/__snapshots__/avatar-test.js.snap | 35 + .../__snapshots__/avatar_overlay-test.js.snap | 26 + .../__tests__/__snapshots__/button-test.js.snap | 130 + .../__snapshots__/display_name-test.js.snap | 23 + .../glitch/components/__tests__/avatar-test.js | 36 + .../components/__tests__/avatar_overlay-test.js | 29 + .../glitch/components/__tests__/button-test.js | 82 + .../components/__tests__/display_name-test.js | 18 + app/javascript/themes/glitch/components/account.js | 116 + .../themes/glitch/components/attachment_list.js | 33 + .../themes/glitch/components/autosuggest_emoji.js | 42 + .../glitch/components/autosuggest_textarea.js | 222 + app/javascript/themes/glitch/components/avatar.js | 72 + .../themes/glitch/components/avatar_overlay.js | 30 + app/javascript/themes/glitch/components/button.js | 64 + .../themes/glitch/components/collapsable.js | 22 + app/javascript/themes/glitch/components/column.js | 54 + .../themes/glitch/components/column_back_button.js | 29 + .../glitch/components/column_back_button_slim.js | 31 + .../themes/glitch/components/column_header.js | 214 + .../themes/glitch/components/display_name.js | 20 + .../themes/glitch/components/dropdown_menu.js | 211 + .../glitch/components/extended_video_player.js | 54 + .../themes/glitch/components/icon_button.js | 137 + .../components/intersection_observer_article.js | 130 + .../themes/glitch/components/load_more.js | 26 + .../themes/glitch/components/loading_indicator.js | 11 + .../themes/glitch/components/media_gallery.js | 256 ++ .../themes/glitch/components/missing_indicator.js | 12 + .../components/notification_purge_buttons.js | 58 + .../themes/glitch/components/permalink.js | 34 + .../themes/glitch/components/relative_timestamp.js | 147 + .../themes/glitch/components/scrollable_list.js | 198 + .../themes/glitch/components/setting_text.js | 34 + app/javascript/themes/glitch/components/status.js | 436 ++ .../themes/glitch/components/status_action_bar.js | 188 + .../themes/glitch/components/status_content.js | 245 + .../themes/glitch/components/status_header.js | 120 + .../themes/glitch/components/status_list.js | 72 + .../themes/glitch/components/status_prepend.js | 83 + .../glitch/components/status_visibility_icon.js | 48 + .../themes/glitch/containers/account_container.js | 72 + .../themes/glitch/containers/card_container.js | 18 + .../themes/glitch/containers/compose_container.js | 38 + .../glitch/containers/dropdown_menu_container.js | 16 + .../intersection_observer_article_container.js | 17 + .../themes/glitch/containers/mastodon.js | 70 + .../glitch/containers/media_gallery_container.js | 34 + .../notification_purge_buttons_container.js | 49 + .../themes/glitch/containers/status_container.js | 150 + .../themes/glitch/containers/timeline_container.js | 48 + .../themes/glitch/containers/video_container.js | 26 + .../features/account/components/action_bar.js | 145 + .../glitch/features/account/components/header.js | 99 + .../account_gallery/components/media_item.js | 39 + .../glitch/features/account_gallery/index.js | 111 + .../features/account_timeline/components/header.js | 95 + .../containers/header_container.js | 104 + .../glitch/features/account_timeline/index.js | 77 + .../themes/glitch/features/blocks/index.js | 70 + .../components/column_settings.js | 35 + .../containers/column_settings_container.js | 17 + .../glitch/features/community_timeline/index.js | 107 + .../compose/components/advanced_options.js | 62 + .../compose/components/advanced_options_toggle.js | 35 + .../features/compose/components/attach_options.js | 131 + .../compose/components/autosuggest_account.js | 24 + .../compose/components/character_counter.js | 25 + .../features/compose/components/compose_form.js | 286 ++ .../glitch/features/compose/components/dropdown.js | 77 + .../compose/components/emoji_picker_dropdown.js | 376 ++ .../features/compose/components/navigation_bar.js | 38 + .../compose/components/privacy_dropdown.js | 200 + .../features/compose/components/reply_indicator.js | 63 + .../glitch/features/compose/components/search.js | 129 + .../features/compose/components/search_results.js | 65 + .../compose/components/text_icon_button.js | 29 + .../glitch/features/compose/components/upload.js | 96 + .../features/compose/components/upload_button.js | 77 + .../features/compose/components/upload_form.js | 29 + .../features/compose/components/upload_progress.js | 42 + .../glitch/features/compose/components/warning.js | 26 + .../containers/advanced_options_container.js | 20 + .../containers/autosuggest_account_container.js | 15 + .../compose/containers/compose_form_container.js | 71 + .../containers/emoji_picker_dropdown_container.js | 82 + .../compose/containers/navigation_container.js | 11 + .../containers/privacy_dropdown_container.js | 24 + .../containers/reply_indicator_container.js | 24 + .../compose/containers/search_container.js | 35 + .../compose/containers/search_results_container.js | 8 + .../containers/sensitive_button_container.js | 71 + .../compose/containers/spoiler_button_container.js | 25 + .../compose/containers/upload_button_container.js | 18 + .../compose/containers/upload_container.js | 21 + .../compose/containers/upload_form_container.js | 8 + .../containers/upload_progress_container.js | 9 + .../compose/containers/warning_container.js | 24 + .../themes/glitch/features/compose/index.js | 126 + .../containers/column_settings_container.js | 17 + .../glitch/features/direct_timeline/index.js | 107 + .../glitch/features/favourited_statuses/index.js | 94 + .../themes/glitch/features/favourites/index.js | 60 + .../components/account_authorize.js | 49 + .../containers/account_authorize_container.js | 26 + .../glitch/features/follow_requests/index.js | 71 + .../themes/glitch/features/followers/index.js | 93 + .../themes/glitch/features/following/index.js | 93 + .../glitch/features/generic_not_found/index.js | 11 + .../glitch/features/getting_started/index.js | 145 + .../glitch/features/hashtag_timeline/index.js | 118 + .../home_timeline/components/column_settings.js | 46 + .../containers/column_settings_container.js | 21 + .../themes/glitch/features/home_timeline/index.js | 90 + .../themes/glitch/features/local_settings/index.js | 68 + .../features/local_settings/navigation/index.js | 74 + .../local_settings/navigation/item/index.js | 69 + .../local_settings/navigation/item/style.scss | 27 + .../features/local_settings/navigation/style.scss | 10 + .../glitch/features/local_settings/page/index.js | 212 + .../features/local_settings/page/item/index.js | 90 + .../features/local_settings/page/item/style.scss | 7 + .../glitch/features/local_settings/page/style.scss | 9 + .../glitch/features/local_settings/style.scss | 34 + .../themes/glitch/features/mutes/index.js | 70 + .../components/clear_column_button.js | 17 + .../notifications/components/column_settings.js | 86 + .../features/notifications/components/follow.js | 97 + .../notifications/components/notification.js | 88 + .../features/notifications/components/overlay.js | 57 + .../notifications/components/setting_toggle.js | 34 + .../containers/column_settings_container.js | 44 + .../containers/notification_container.js | 27 + .../notifications/containers/overlay_container.js | 18 + .../themes/glitch/features/notifications/index.js | 193 + .../glitch/features/pinned_statuses/index.js | 59 + .../containers/column_settings_container.js | 17 + .../glitch/features/public_timeline/index.js | 107 + .../themes/glitch/features/reblogs/index.js | 60 + .../features/report/components/status_check_box.js | 37 + .../containers/status_check_box_container.js | 19 + .../glitch/features/standalone/compose/index.js | 20 + .../features/standalone/hashtag_timeline/index.js | 70 + .../features/standalone/public_timeline/index.js | 76 + .../features/status/components/action_bar.js | 129 + .../glitch/features/status/components/card.js | 125 + .../features/status/components/detailed_status.js | 128 + .../features/status/containers/card_container.js | 8 + .../themes/glitch/features/status/index.js | 343 ++ .../ui/components/__tests__/column-test.js | 34 + .../glitch/features/ui/components/actions_modal.js | 74 + .../glitch/features/ui/components/boost_modal.js | 84 + .../themes/glitch/features/ui/components/bundle.js | 102 + .../features/ui/components/bundle_column_error.js | 44 + .../features/ui/components/bundle_modal_error.js | 53 + .../themes/glitch/features/ui/components/column.js | 74 + .../glitch/features/ui/components/column_header.js | 35 + .../glitch/features/ui/components/column_link.js | 39 + .../features/ui/components/column_loading.js | 30 + .../features/ui/components/column_subheading.js | 16 + .../glitch/features/ui/components/columns_area.js | 174 + .../features/ui/components/confirmation_modal.js | 53 + .../glitch/features/ui/components/doodle_modal.js | 614 +++ .../features/ui/components/drawer_loading.js | 11 + .../glitch/features/ui/components/embed_modal.js | 84 + .../glitch/features/ui/components/image_loader.js | 152 + .../glitch/features/ui/components/media_modal.js | 126 + .../glitch/features/ui/components/modal_loading.js | 20 + .../glitch/features/ui/components/modal_root.js | 131 + .../glitch/features/ui/components/mute_modal.js | 105 + .../features/ui/components/onboarding_modal.js | 323 ++ .../glitch/features/ui/components/report_modal.js | 105 + .../glitch/features/ui/components/tabs_bar.js | 84 + .../glitch/features/ui/components/upload_area.js | 52 + .../glitch/features/ui/components/video_modal.js | 33 + .../features/ui/containers/bundle_container.js | 19 + .../ui/containers/columns_area_container.js | 8 + .../ui/containers/loading_bar_container.js | 8 + .../features/ui/containers/modal_container.js | 16 + .../ui/containers/notifications_container.js | 18 + .../ui/containers/status_list_container.js | 73 + app/javascript/themes/glitch/features/ui/index.js | 442 ++ .../themes/glitch/features/video/index.js | 288 ++ app/javascript/themes/glitch/index.js | 14 + app/javascript/themes/glitch/middleware/errors.js | 31 + .../themes/glitch/middleware/loading_bar.js | 25 + app/javascript/themes/glitch/middleware/sounds.js | 46 + app/javascript/themes/glitch/reducers/accounts.js | 135 + .../themes/glitch/reducers/accounts_counters.js | 138 + app/javascript/themes/glitch/reducers/alerts.js | 25 + app/javascript/themes/glitch/reducers/cards.js | 14 + app/javascript/themes/glitch/reducers/compose.js | 307 ++ app/javascript/themes/glitch/reducers/contexts.js | 61 + .../themes/glitch/reducers/custom_emojis.js | 16 + .../themes/glitch/reducers/height_cache.js | 23 + app/javascript/themes/glitch/reducers/index.js | 54 + .../themes/glitch/reducers/local_settings.js | 45 + .../themes/glitch/reducers/media_attachments.js | 15 + app/javascript/themes/glitch/reducers/meta.js | 16 + app/javascript/themes/glitch/reducers/modal.js | 17 + app/javascript/themes/glitch/reducers/mutes.js | 29 + .../themes/glitch/reducers/notifications.js | 191 + .../themes/glitch/reducers/push_notifications.js | 51 + .../themes/glitch/reducers/relationships.js | 46 + app/javascript/themes/glitch/reducers/reports.js | 60 + app/javascript/themes/glitch/reducers/search.js | 42 + app/javascript/themes/glitch/reducers/settings.js | 119 + .../themes/glitch/reducers/status_lists.js | 75 + app/javascript/themes/glitch/reducers/statuses.js | 148 + app/javascript/themes/glitch/reducers/timelines.js | 149 + .../themes/glitch/reducers/user_lists.js | 80 + app/javascript/themes/glitch/selectors/index.js | 87 + .../themes/glitch/service_worker/entry.js | 10 + .../service_worker/web_push_notifications.js | 159 + .../themes/glitch/store/configureStore.js | 15 + app/javascript/themes/glitch/styles/_mixins.scss | 42 + app/javascript/themes/glitch/styles/about.scss | 822 ++++ app/javascript/themes/glitch/styles/accounts.scss | 589 +++ app/javascript/themes/glitch/styles/admin.scss | 349 ++ app/javascript/themes/glitch/styles/basics.scss | 122 + app/javascript/themes/glitch/styles/boost.scss | 28 + .../themes/glitch/styles/compact_header.scss | 34 + .../themes/glitch/styles/components.scss | 4827 +++++++++++++++++++ .../themes/glitch/styles/containers.scss | 116 + app/javascript/themes/glitch/styles/doodle.scss | 86 + .../themes/glitch/styles/emoji_picker.scss | 199 + app/javascript/themes/glitch/styles/footer.scss | 30 + app/javascript/themes/glitch/styles/forms.scss | 540 +++ app/javascript/themes/glitch/styles/index.scss | 22 + .../themes/glitch/styles/landing_strip.scss | 36 + app/javascript/themes/glitch/styles/lists.scss | 19 + .../themes/glitch/styles/reset copy.scss | 91 + app/javascript/themes/glitch/styles/reset.scss | 91 + app/javascript/themes/glitch/styles/rtl.scss | 254 + .../themes/glitch/styles/stream_entries.scss | 335 ++ app/javascript/themes/glitch/styles/tables.scss | 76 + app/javascript/themes/glitch/styles/variables.scss | 35 + app/javascript/themes/glitch/theme.yml | 18 + app/javascript/themes/glitch/util/api.js | 26 + .../themes/glitch/util/async-components.js | 115 + .../themes/glitch/util/base_polyfills.js | 18 + app/javascript/themes/glitch/util/bio_metadata.js | 331 ++ app/javascript/themes/glitch/util/counter.js | 9 + .../glitch/util/emoji/__tests__/emoji-test.js | 77 + .../util/emoji/__tests__/emoji_index-test.js | 130 + .../themes/glitch/util/emoji/emoji_compressed.js | 93 + .../themes/glitch/util/emoji/emoji_map.json | 1 + .../glitch/util/emoji/emoji_mart_data_light.js | 41 + .../glitch/util/emoji/emoji_mart_search_light.js | 157 + .../themes/glitch/util/emoji/emoji_picker.js | 7 + .../util/emoji/emoji_unicode_mapping_light.js | 35 + .../themes/glitch/util/emoji/emoji_utils.js | 258 ++ app/javascript/themes/glitch/util/emoji/index.js | 95 + .../glitch/util/emoji/unicode_to_filename.js | 26 + .../glitch/util/emoji/unicode_to_unified_name.js | 17 + .../themes/glitch/util/extra_polyfills.js | 5 + app/javascript/themes/glitch/util/fullscreen.js | 46 + .../themes/glitch/util/get_rect_from_entry.js | 21 + app/javascript/themes/glitch/util/initial_state.js | 21 + .../glitch/util/intersection_observer_wrapper.js | 57 + app/javascript/themes/glitch/util/is_mobile.js | 34 + app/javascript/themes/glitch/util/link_header.js | 33 + .../themes/glitch/util/load_polyfills.js | 39 + app/javascript/themes/glitch/util/main.js | 39 + .../themes/glitch/util/optional_motion.js | 5 + app/javascript/themes/glitch/util/performance.js | 31 + .../themes/glitch/util/react_router_helpers.js | 64 + app/javascript/themes/glitch/util/ready.js | 7 + .../themes/glitch/util/reduced_motion.js | 44 + app/javascript/themes/glitch/util/rtl.js | 31 + .../themes/glitch/util/schedule_idle_task.js | 29 + app/javascript/themes/glitch/util/scroll.js | 30 + app/javascript/themes/glitch/util/stream.js | 73 + app/javascript/themes/glitch/util/url_regex.js | 196 + app/javascript/themes/glitch/util/uuid.js | 3 + .../themes/glitch/util/web_push_subscription.js | 105 + app/javascript/themes/vanilla/theme.yml | 18 + 621 files changed, 31170 insertions(+), 33691 deletions(-) delete mode 100644 app/javascript/glitch/actions/local_settings.js delete mode 100644 app/javascript/glitch/components/account/header.js delete mode 100644 app/javascript/glitch/components/column/notif_cleaning_widget/container.js delete mode 100644 app/javascript/glitch/components/column/notif_cleaning_widget/notification_purge_buttons.js delete mode 100644 app/javascript/glitch/components/compose/advanced_options/container.js delete mode 100644 app/javascript/glitch/components/compose/advanced_options/index.js delete mode 100644 app/javascript/glitch/components/compose/advanced_options/toggle.js delete mode 100644 app/javascript/glitch/components/compose/attach_options/index.js delete mode 100644 app/javascript/glitch/components/compose/dropdown/index.js delete mode 100644 app/javascript/glitch/components/local_settings/container.js delete mode 100644 app/javascript/glitch/components/local_settings/index.js delete mode 100644 app/javascript/glitch/components/local_settings/navigation/index.js delete mode 100644 app/javascript/glitch/components/local_settings/navigation/item/index.js delete mode 100644 app/javascript/glitch/components/local_settings/navigation/item/style.scss delete mode 100644 app/javascript/glitch/components/local_settings/navigation/style.scss delete mode 100644 app/javascript/glitch/components/local_settings/page/index.js delete mode 100644 app/javascript/glitch/components/local_settings/page/item/index.js delete mode 100644 app/javascript/glitch/components/local_settings/page/item/style.scss delete mode 100644 app/javascript/glitch/components/local_settings/page/style.scss delete mode 100644 app/javascript/glitch/components/local_settings/style.scss delete mode 100644 app/javascript/glitch/components/notification/container.js delete mode 100644 app/javascript/glitch/components/notification/follow.js delete mode 100644 app/javascript/glitch/components/notification/index.js delete mode 100644 app/javascript/glitch/components/notification/overlay/container.js delete mode 100644 app/javascript/glitch/components/notification/overlay/notification_overlay.js delete mode 100644 app/javascript/glitch/components/status/action_bar.js delete mode 100644 app/javascript/glitch/components/status/container.js delete mode 100644 app/javascript/glitch/components/status/content.js delete mode 100644 app/javascript/glitch/components/status/gallery/index.js delete mode 100644 app/javascript/glitch/components/status/gallery/item.js delete mode 100644 app/javascript/glitch/components/status/header.js delete mode 100644 app/javascript/glitch/components/status/index.js delete mode 100644 app/javascript/glitch/components/status/player.js delete mode 100644 app/javascript/glitch/components/status/prepend.js delete mode 100644 app/javascript/glitch/components/status/visibility_icon.js delete mode 100644 app/javascript/glitch/reducers/local_settings.js delete mode 100644 app/javascript/glitch/util/bio_metadata.js delete mode 100644 app/javascript/mastodon/actions/accounts.js delete mode 100644 app/javascript/mastodon/actions/alerts.js delete mode 100644 app/javascript/mastodon/actions/blocks.js delete mode 100644 app/javascript/mastodon/actions/bundles.js delete mode 100644 app/javascript/mastodon/actions/cards.js delete mode 100644 app/javascript/mastodon/actions/columns.js delete mode 100644 app/javascript/mastodon/actions/compose.js delete mode 100644 app/javascript/mastodon/actions/domain_blocks.js delete mode 100644 app/javascript/mastodon/actions/emojis.js delete mode 100644 app/javascript/mastodon/actions/favourites.js delete mode 100644 app/javascript/mastodon/actions/height_cache.js delete mode 100644 app/javascript/mastodon/actions/interactions.js delete mode 100644 app/javascript/mastodon/actions/modal.js delete mode 100644 app/javascript/mastodon/actions/mutes.js delete mode 100644 app/javascript/mastodon/actions/notifications.js delete mode 100644 app/javascript/mastodon/actions/onboarding.js delete mode 100644 app/javascript/mastodon/actions/pin_statuses.js delete mode 100644 app/javascript/mastodon/actions/push_notifications.js delete mode 100644 app/javascript/mastodon/actions/reports.js delete mode 100644 app/javascript/mastodon/actions/search.js delete mode 100644 app/javascript/mastodon/actions/settings.js delete mode 100644 app/javascript/mastodon/actions/statuses.js delete mode 100644 app/javascript/mastodon/actions/store.js delete mode 100644 app/javascript/mastodon/actions/streaming.js delete mode 100644 app/javascript/mastodon/actions/timelines.js delete mode 100644 app/javascript/mastodon/api.js delete mode 100644 app/javascript/mastodon/base_polyfills.js delete mode 100644 app/javascript/mastodon/components/__tests__/__snapshots__/avatar-test.js.snap delete mode 100644 app/javascript/mastodon/components/__tests__/__snapshots__/avatar_overlay-test.js.snap delete mode 100644 app/javascript/mastodon/components/__tests__/__snapshots__/button-test.js.snap delete mode 100644 app/javascript/mastodon/components/__tests__/__snapshots__/display_name-test.js.snap delete mode 100644 app/javascript/mastodon/components/__tests__/avatar-test.js delete mode 100644 app/javascript/mastodon/components/__tests__/avatar_overlay-test.js delete mode 100644 app/javascript/mastodon/components/__tests__/button-test.js delete mode 100644 app/javascript/mastodon/components/__tests__/display_name-test.js delete mode 100644 app/javascript/mastodon/components/account.js delete mode 100644 app/javascript/mastodon/components/attachment_list.js delete mode 100644 app/javascript/mastodon/components/autosuggest_emoji.js delete mode 100644 app/javascript/mastodon/components/autosuggest_textarea.js delete mode 100644 app/javascript/mastodon/components/avatar.js delete mode 100644 app/javascript/mastodon/components/avatar_overlay.js delete mode 100644 app/javascript/mastodon/components/button.js delete mode 100644 app/javascript/mastodon/components/collapsable.js delete mode 100644 app/javascript/mastodon/components/column.js delete mode 100644 app/javascript/mastodon/components/column_back_button.js delete mode 100644 app/javascript/mastodon/components/column_back_button_slim.js delete mode 100644 app/javascript/mastodon/components/column_header.js delete mode 100644 app/javascript/mastodon/components/display_name.js delete mode 100644 app/javascript/mastodon/components/dropdown_menu.js delete mode 100644 app/javascript/mastodon/components/extended_video_player.js delete mode 100644 app/javascript/mastodon/components/icon_button.js delete mode 100644 app/javascript/mastodon/components/intersection_observer_article.js delete mode 100644 app/javascript/mastodon/components/load_more.js delete mode 100644 app/javascript/mastodon/components/loading_indicator.js delete mode 100644 app/javascript/mastodon/components/media_gallery.js delete mode 100644 app/javascript/mastodon/components/missing_indicator.js delete mode 100644 app/javascript/mastodon/components/permalink.js delete mode 100644 app/javascript/mastodon/components/relative_timestamp.js delete mode 100644 app/javascript/mastodon/components/scrollable_list.js delete mode 100644 app/javascript/mastodon/components/setting_text.js delete mode 100644 app/javascript/mastodon/components/status.js delete mode 100644 app/javascript/mastodon/components/status_action_bar.js delete mode 100644 app/javascript/mastodon/components/status_content.js delete mode 100644 app/javascript/mastodon/components/status_list.js delete mode 100644 app/javascript/mastodon/containers/account_container.js delete mode 100644 app/javascript/mastodon/containers/card_container.js delete mode 100644 app/javascript/mastodon/containers/compose_container.js delete mode 100644 app/javascript/mastodon/containers/dropdown_menu_container.js delete mode 100644 app/javascript/mastodon/containers/intersection_observer_article_container.js delete mode 100644 app/javascript/mastodon/containers/mastodon.js delete mode 100644 app/javascript/mastodon/containers/media_gallery_container.js delete mode 100644 app/javascript/mastodon/containers/status_container.js delete mode 100644 app/javascript/mastodon/containers/timeline_container.js delete mode 100644 app/javascript/mastodon/containers/video_container.js delete mode 100644 app/javascript/mastodon/extra_polyfills.js delete mode 100644 app/javascript/mastodon/features/account/components/action_bar.js delete mode 100644 app/javascript/mastodon/features/account/components/header.js delete mode 100644 app/javascript/mastodon/features/account_gallery/components/media_item.js delete mode 100644 app/javascript/mastodon/features/account_gallery/index.js delete mode 100644 app/javascript/mastodon/features/account_timeline/components/header.js delete mode 100644 app/javascript/mastodon/features/account_timeline/containers/header_container.js delete mode 100644 app/javascript/mastodon/features/account_timeline/index.js delete mode 100644 app/javascript/mastodon/features/blocks/index.js delete mode 100644 app/javascript/mastodon/features/community_timeline/components/column_settings.js delete mode 100644 app/javascript/mastodon/features/community_timeline/containers/column_settings_container.js delete mode 100644 app/javascript/mastodon/features/community_timeline/index.js delete mode 100644 app/javascript/mastodon/features/compose/components/autosuggest_account.js delete mode 100644 app/javascript/mastodon/features/compose/components/character_counter.js delete mode 100644 app/javascript/mastodon/features/compose/components/compose_form.js delete mode 100644 app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js delete mode 100644 app/javascript/mastodon/features/compose/components/navigation_bar.js delete mode 100644 app/javascript/mastodon/features/compose/components/privacy_dropdown.js delete mode 100644 app/javascript/mastodon/features/compose/components/reply_indicator.js delete mode 100644 app/javascript/mastodon/features/compose/components/search.js delete mode 100644 app/javascript/mastodon/features/compose/components/search_results.js delete mode 100644 app/javascript/mastodon/features/compose/components/text_icon_button.js delete mode 100644 app/javascript/mastodon/features/compose/components/upload.js delete mode 100644 app/javascript/mastodon/features/compose/components/upload_button.js delete mode 100644 app/javascript/mastodon/features/compose/components/upload_form.js delete mode 100644 app/javascript/mastodon/features/compose/components/upload_progress.js delete mode 100644 app/javascript/mastodon/features/compose/components/warning.js delete mode 100644 app/javascript/mastodon/features/compose/containers/autosuggest_account_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/compose_form_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/emoji_picker_dropdown_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/navigation_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/privacy_dropdown_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/reply_indicator_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/search_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/search_results_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/sensitive_button_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/spoiler_button_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/upload_button_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/upload_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/upload_form_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/upload_progress_container.js delete mode 100644 app/javascript/mastodon/features/compose/containers/warning_container.js delete mode 100644 app/javascript/mastodon/features/compose/index.js delete mode 100644 app/javascript/mastodon/features/compose/util/counter.js delete mode 100644 app/javascript/mastodon/features/compose/util/url_regex.js delete mode 100644 app/javascript/mastodon/features/direct_timeline/containers/column_settings_container.js delete mode 100644 app/javascript/mastodon/features/direct_timeline/index.js delete mode 100644 app/javascript/mastodon/features/emoji/__tests__/emoji-test.js delete mode 100644 app/javascript/mastodon/features/emoji/__tests__/emoji_index-test.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji_compressed.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji_map.json delete mode 100644 app/javascript/mastodon/features/emoji/emoji_mart_data_light.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji_mart_search_light.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji_picker.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji_unicode_mapping_light.js delete mode 100644 app/javascript/mastodon/features/emoji/emoji_utils.js delete mode 100644 app/javascript/mastodon/features/emoji/unicode_to_filename.js delete mode 100644 app/javascript/mastodon/features/emoji/unicode_to_unified_name.js delete mode 100644 app/javascript/mastodon/features/favourited_statuses/index.js delete mode 100644 app/javascript/mastodon/features/favourites/index.js delete mode 100644 app/javascript/mastodon/features/follow_requests/components/account_authorize.js delete mode 100644 app/javascript/mastodon/features/follow_requests/containers/account_authorize_container.js delete mode 100644 app/javascript/mastodon/features/follow_requests/index.js delete mode 100644 app/javascript/mastodon/features/followers/index.js delete mode 100644 app/javascript/mastodon/features/following/index.js delete mode 100644 app/javascript/mastodon/features/generic_not_found/index.js delete mode 100644 app/javascript/mastodon/features/getting_started/index.js delete mode 100644 app/javascript/mastodon/features/hashtag_timeline/index.js delete mode 100644 app/javascript/mastodon/features/home_timeline/components/column_settings.js delete mode 100644 app/javascript/mastodon/features/home_timeline/containers/column_settings_container.js delete mode 100644 app/javascript/mastodon/features/home_timeline/index.js delete mode 100644 app/javascript/mastodon/features/mutes/index.js delete mode 100644 app/javascript/mastodon/features/notifications/components/clear_column_button.js delete mode 100644 app/javascript/mastodon/features/notifications/components/column_settings.js delete mode 100644 app/javascript/mastodon/features/notifications/components/notification.js delete mode 100644 app/javascript/mastodon/features/notifications/components/setting_toggle.js delete mode 100644 app/javascript/mastodon/features/notifications/containers/column_settings_container.js delete mode 100644 app/javascript/mastodon/features/notifications/containers/notification_container.js delete mode 100644 app/javascript/mastodon/features/notifications/index.js delete mode 100644 app/javascript/mastodon/features/pinned_statuses/index.js delete mode 100644 app/javascript/mastodon/features/public_timeline/containers/column_settings_container.js delete mode 100644 app/javascript/mastodon/features/public_timeline/index.js delete mode 100644 app/javascript/mastodon/features/reblogs/index.js delete mode 100644 app/javascript/mastodon/features/report/components/status_check_box.js delete mode 100644 app/javascript/mastodon/features/report/containers/status_check_box_container.js delete mode 100644 app/javascript/mastodon/features/standalone/compose/index.js delete mode 100644 app/javascript/mastodon/features/standalone/hashtag_timeline/index.js delete mode 100644 app/javascript/mastodon/features/standalone/public_timeline/index.js delete mode 100644 app/javascript/mastodon/features/status/components/action_bar.js delete mode 100644 app/javascript/mastodon/features/status/components/card.js delete mode 100644 app/javascript/mastodon/features/status/components/detailed_status.js delete mode 100644 app/javascript/mastodon/features/status/containers/card_container.js delete mode 100644 app/javascript/mastodon/features/status/index.js delete mode 100644 app/javascript/mastodon/features/ui/components/__tests__/column-test.js delete mode 100644 app/javascript/mastodon/features/ui/components/actions_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/boost_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/bundle.js delete mode 100644 app/javascript/mastodon/features/ui/components/bundle_column_error.js delete mode 100644 app/javascript/mastodon/features/ui/components/bundle_modal_error.js delete mode 100644 app/javascript/mastodon/features/ui/components/column.js delete mode 100644 app/javascript/mastodon/features/ui/components/column_header.js delete mode 100644 app/javascript/mastodon/features/ui/components/column_link.js delete mode 100644 app/javascript/mastodon/features/ui/components/column_loading.js delete mode 100644 app/javascript/mastodon/features/ui/components/column_subheading.js delete mode 100644 app/javascript/mastodon/features/ui/components/columns_area.js delete mode 100644 app/javascript/mastodon/features/ui/components/confirmation_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/doodle_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/drawer_loading.js delete mode 100644 app/javascript/mastodon/features/ui/components/embed_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/image_loader.js delete mode 100644 app/javascript/mastodon/features/ui/components/media_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/modal_loading.js delete mode 100644 app/javascript/mastodon/features/ui/components/modal_root.js delete mode 100644 app/javascript/mastodon/features/ui/components/mute_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/onboarding_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/report_modal.js delete mode 100644 app/javascript/mastodon/features/ui/components/tabs_bar.js delete mode 100644 app/javascript/mastodon/features/ui/components/upload_area.js delete mode 100644 app/javascript/mastodon/features/ui/components/video_modal.js delete mode 100644 app/javascript/mastodon/features/ui/containers/bundle_container.js delete mode 100644 app/javascript/mastodon/features/ui/containers/columns_area_container.js delete mode 100644 app/javascript/mastodon/features/ui/containers/loading_bar_container.js delete mode 100644 app/javascript/mastodon/features/ui/containers/modal_container.js delete mode 100644 app/javascript/mastodon/features/ui/containers/notifications_container.js delete mode 100644 app/javascript/mastodon/features/ui/containers/status_list_container.js delete mode 100644 app/javascript/mastodon/features/ui/index.js delete mode 100644 app/javascript/mastodon/features/ui/util/async-components.js delete mode 100644 app/javascript/mastodon/features/ui/util/fullscreen.js delete mode 100644 app/javascript/mastodon/features/ui/util/get_rect_from_entry.js delete mode 100644 app/javascript/mastodon/features/ui/util/intersection_observer_wrapper.js delete mode 100644 app/javascript/mastodon/features/ui/util/optional_motion.js delete mode 100644 app/javascript/mastodon/features/ui/util/react_router_helpers.js delete mode 100644 app/javascript/mastodon/features/ui/util/reduced_motion.js delete mode 100644 app/javascript/mastodon/features/ui/util/schedule_idle_task.js delete mode 100644 app/javascript/mastodon/features/video/index.js delete mode 100644 app/javascript/mastodon/initial_state.js delete mode 100644 app/javascript/mastodon/is_mobile.js delete mode 100644 app/javascript/mastodon/link_header.js delete mode 100644 app/javascript/mastodon/load_polyfills.js delete mode 100644 app/javascript/mastodon/main.js delete mode 100644 app/javascript/mastodon/middleware/errors.js delete mode 100644 app/javascript/mastodon/middleware/loading_bar.js delete mode 100644 app/javascript/mastodon/middleware/sounds.js delete mode 100644 app/javascript/mastodon/performance.js delete mode 100644 app/javascript/mastodon/ready.js delete mode 100644 app/javascript/mastodon/reducers/accounts.js delete mode 100644 app/javascript/mastodon/reducers/accounts_counters.js delete mode 100644 app/javascript/mastodon/reducers/alerts.js delete mode 100644 app/javascript/mastodon/reducers/cards.js delete mode 100644 app/javascript/mastodon/reducers/compose.js delete mode 100644 app/javascript/mastodon/reducers/contexts.js delete mode 100644 app/javascript/mastodon/reducers/custom_emojis.js delete mode 100644 app/javascript/mastodon/reducers/height_cache.js delete mode 100644 app/javascript/mastodon/reducers/index.js delete mode 100644 app/javascript/mastodon/reducers/media_attachments.js delete mode 100644 app/javascript/mastodon/reducers/meta.js delete mode 100644 app/javascript/mastodon/reducers/modal.js delete mode 100644 app/javascript/mastodon/reducers/mutes.js delete mode 100644 app/javascript/mastodon/reducers/notifications.js delete mode 100644 app/javascript/mastodon/reducers/push_notifications.js delete mode 100644 app/javascript/mastodon/reducers/relationships.js delete mode 100644 app/javascript/mastodon/reducers/reports.js delete mode 100644 app/javascript/mastodon/reducers/search.js delete mode 100644 app/javascript/mastodon/reducers/settings.js delete mode 100644 app/javascript/mastodon/reducers/status_lists.js delete mode 100644 app/javascript/mastodon/reducers/statuses.js delete mode 100644 app/javascript/mastodon/reducers/timelines.js delete mode 100644 app/javascript/mastodon/reducers/user_lists.js delete mode 100644 app/javascript/mastodon/rtl.js delete mode 100644 app/javascript/mastodon/scroll.js delete mode 100644 app/javascript/mastodon/selectors/index.js delete mode 100644 app/javascript/mastodon/service_worker/entry.js delete mode 100644 app/javascript/mastodon/service_worker/web_push_notifications.js delete mode 100644 app/javascript/mastodon/store/configureStore.js delete mode 100644 app/javascript/mastodon/stream.js delete mode 100644 app/javascript/mastodon/test_setup.js delete mode 100644 app/javascript/mastodon/uuid.js delete mode 100644 app/javascript/mastodon/web_push_subscription.js delete mode 100644 app/javascript/styles/application.scss delete mode 100644 app/javascript/styles/doodle.scss delete mode 100644 app/javascript/styles/mastodon/_mixins.scss delete mode 100644 app/javascript/styles/mastodon/about.scss delete mode 100644 app/javascript/styles/mastodon/accounts.scss delete mode 100644 app/javascript/styles/mastodon/admin.scss delete mode 100644 app/javascript/styles/mastodon/basics.scss delete mode 100644 app/javascript/styles/mastodon/boost.scss delete mode 100644 app/javascript/styles/mastodon/compact_header.scss delete mode 100644 app/javascript/styles/mastodon/components.scss delete mode 100644 app/javascript/styles/mastodon/containers.scss delete mode 100644 app/javascript/styles/mastodon/emoji_picker.scss delete mode 100644 app/javascript/styles/mastodon/footer.scss delete mode 100644 app/javascript/styles/mastodon/forms.scss delete mode 100644 app/javascript/styles/mastodon/landing_strip.scss delete mode 100644 app/javascript/styles/mastodon/lists.scss delete mode 100644 app/javascript/styles/mastodon/reset.scss delete mode 100644 app/javascript/styles/mastodon/rtl.scss delete mode 100644 app/javascript/styles/mastodon/stream_entries.scss delete mode 100644 app/javascript/styles/mastodon/tables.scss delete mode 100644 app/javascript/styles/mastodon/variables.scss delete mode 100644 app/javascript/styles/variables-glitch.scss delete mode 100644 app/javascript/themes/default/theme.yml create mode 100644 app/javascript/themes/glitch/actions/accounts.js create mode 100644 app/javascript/themes/glitch/actions/alerts.js create mode 100644 app/javascript/themes/glitch/actions/blocks.js create mode 100644 app/javascript/themes/glitch/actions/bundles.js create mode 100644 app/javascript/themes/glitch/actions/cards.js create mode 100644 app/javascript/themes/glitch/actions/columns.js create mode 100644 app/javascript/themes/glitch/actions/compose.js create mode 100644 app/javascript/themes/glitch/actions/domain_blocks.js create mode 100644 app/javascript/themes/glitch/actions/emojis.js create mode 100644 app/javascript/themes/glitch/actions/favourites.js create mode 100644 app/javascript/themes/glitch/actions/height_cache.js create mode 100644 app/javascript/themes/glitch/actions/interactions.js create mode 100644 app/javascript/themes/glitch/actions/local_settings.js create mode 100644 app/javascript/themes/glitch/actions/modal.js create mode 100644 app/javascript/themes/glitch/actions/mutes.js create mode 100644 app/javascript/themes/glitch/actions/notifications.js create mode 100644 app/javascript/themes/glitch/actions/onboarding.js create mode 100644 app/javascript/themes/glitch/actions/pin_statuses.js create mode 100644 app/javascript/themes/glitch/actions/push_notifications.js create mode 100644 app/javascript/themes/glitch/actions/reports.js create mode 100644 app/javascript/themes/glitch/actions/search.js create mode 100644 app/javascript/themes/glitch/actions/settings.js create mode 100644 app/javascript/themes/glitch/actions/statuses.js create mode 100644 app/javascript/themes/glitch/actions/store.js create mode 100644 app/javascript/themes/glitch/actions/streaming.js create mode 100644 app/javascript/themes/glitch/actions/timelines.js create mode 100644 app/javascript/themes/glitch/components/__tests__/__snapshots__/avatar-test.js.snap create mode 100644 app/javascript/themes/glitch/components/__tests__/__snapshots__/avatar_overlay-test.js.snap create mode 100644 app/javascript/themes/glitch/components/__tests__/__snapshots__/button-test.js.snap create mode 100644 app/javascript/themes/glitch/components/__tests__/__snapshots__/display_name-test.js.snap create mode 100644 app/javascript/themes/glitch/components/__tests__/avatar-test.js create mode 100644 app/javascript/themes/glitch/components/__tests__/avatar_overlay-test.js create mode 100644 app/javascript/themes/glitch/components/__tests__/button-test.js create mode 100644 app/javascript/themes/glitch/components/__tests__/display_name-test.js create mode 100644 app/javascript/themes/glitch/components/account.js create mode 100644 app/javascript/themes/glitch/components/attachment_list.js create mode 100644 app/javascript/themes/glitch/components/autosuggest_emoji.js create mode 100644 app/javascript/themes/glitch/components/autosuggest_textarea.js create mode 100644 app/javascript/themes/glitch/components/avatar.js create mode 100644 app/javascript/themes/glitch/components/avatar_overlay.js create mode 100644 app/javascript/themes/glitch/components/button.js create mode 100644 app/javascript/themes/glitch/components/collapsable.js create mode 100644 app/javascript/themes/glitch/components/column.js create mode 100644 app/javascript/themes/glitch/components/column_back_button.js create mode 100644 app/javascript/themes/glitch/components/column_back_button_slim.js create mode 100644 app/javascript/themes/glitch/components/column_header.js create mode 100644 app/javascript/themes/glitch/components/display_name.js create mode 100644 app/javascript/themes/glitch/components/dropdown_menu.js create mode 100644 app/javascript/themes/glitch/components/extended_video_player.js create mode 100644 app/javascript/themes/glitch/components/icon_button.js create mode 100644 app/javascript/themes/glitch/components/intersection_observer_article.js create mode 100644 app/javascript/themes/glitch/components/load_more.js create mode 100644 app/javascript/themes/glitch/components/loading_indicator.js create mode 100644 app/javascript/themes/glitch/components/media_gallery.js create mode 100644 app/javascript/themes/glitch/components/missing_indicator.js create mode 100644 app/javascript/themes/glitch/components/notification_purge_buttons.js create mode 100644 app/javascript/themes/glitch/components/permalink.js create mode 100644 app/javascript/themes/glitch/components/relative_timestamp.js create mode 100644 app/javascript/themes/glitch/components/scrollable_list.js create mode 100644 app/javascript/themes/glitch/components/setting_text.js create mode 100644 app/javascript/themes/glitch/components/status.js create mode 100644 app/javascript/themes/glitch/components/status_action_bar.js create mode 100644 app/javascript/themes/glitch/components/status_content.js create mode 100644 app/javascript/themes/glitch/components/status_header.js create mode 100644 app/javascript/themes/glitch/components/status_list.js create mode 100644 app/javascript/themes/glitch/components/status_prepend.js create mode 100644 app/javascript/themes/glitch/components/status_visibility_icon.js create mode 100644 app/javascript/themes/glitch/containers/account_container.js create mode 100644 app/javascript/themes/glitch/containers/card_container.js create mode 100644 app/javascript/themes/glitch/containers/compose_container.js create mode 100644 app/javascript/themes/glitch/containers/dropdown_menu_container.js create mode 100644 app/javascript/themes/glitch/containers/intersection_observer_article_container.js create mode 100644 app/javascript/themes/glitch/containers/mastodon.js create mode 100644 app/javascript/themes/glitch/containers/media_gallery_container.js create mode 100644 app/javascript/themes/glitch/containers/notification_purge_buttons_container.js create mode 100644 app/javascript/themes/glitch/containers/status_container.js create mode 100644 app/javascript/themes/glitch/containers/timeline_container.js create mode 100644 app/javascript/themes/glitch/containers/video_container.js create mode 100644 app/javascript/themes/glitch/features/account/components/action_bar.js create mode 100644 app/javascript/themes/glitch/features/account/components/header.js create mode 100644 app/javascript/themes/glitch/features/account_gallery/components/media_item.js create mode 100644 app/javascript/themes/glitch/features/account_gallery/index.js create mode 100644 app/javascript/themes/glitch/features/account_timeline/components/header.js create mode 100644 app/javascript/themes/glitch/features/account_timeline/containers/header_container.js create mode 100644 app/javascript/themes/glitch/features/account_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/blocks/index.js create mode 100644 app/javascript/themes/glitch/features/community_timeline/components/column_settings.js create mode 100644 app/javascript/themes/glitch/features/community_timeline/containers/column_settings_container.js create mode 100644 app/javascript/themes/glitch/features/community_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/compose/components/advanced_options.js create mode 100644 app/javascript/themes/glitch/features/compose/components/advanced_options_toggle.js create mode 100644 app/javascript/themes/glitch/features/compose/components/attach_options.js create mode 100644 app/javascript/themes/glitch/features/compose/components/autosuggest_account.js create mode 100644 app/javascript/themes/glitch/features/compose/components/character_counter.js create mode 100644 app/javascript/themes/glitch/features/compose/components/compose_form.js create mode 100644 app/javascript/themes/glitch/features/compose/components/dropdown.js create mode 100644 app/javascript/themes/glitch/features/compose/components/emoji_picker_dropdown.js create mode 100644 app/javascript/themes/glitch/features/compose/components/navigation_bar.js create mode 100644 app/javascript/themes/glitch/features/compose/components/privacy_dropdown.js create mode 100644 app/javascript/themes/glitch/features/compose/components/reply_indicator.js create mode 100644 app/javascript/themes/glitch/features/compose/components/search.js create mode 100644 app/javascript/themes/glitch/features/compose/components/search_results.js create mode 100644 app/javascript/themes/glitch/features/compose/components/text_icon_button.js create mode 100644 app/javascript/themes/glitch/features/compose/components/upload.js create mode 100644 app/javascript/themes/glitch/features/compose/components/upload_button.js create mode 100644 app/javascript/themes/glitch/features/compose/components/upload_form.js create mode 100644 app/javascript/themes/glitch/features/compose/components/upload_progress.js create mode 100644 app/javascript/themes/glitch/features/compose/components/warning.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/advanced_options_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/autosuggest_account_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/compose_form_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/emoji_picker_dropdown_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/navigation_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/privacy_dropdown_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/reply_indicator_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/search_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/search_results_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/sensitive_button_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/spoiler_button_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/upload_button_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/upload_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/upload_form_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/upload_progress_container.js create mode 100644 app/javascript/themes/glitch/features/compose/containers/warning_container.js create mode 100644 app/javascript/themes/glitch/features/compose/index.js create mode 100644 app/javascript/themes/glitch/features/direct_timeline/containers/column_settings_container.js create mode 100644 app/javascript/themes/glitch/features/direct_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/favourited_statuses/index.js create mode 100644 app/javascript/themes/glitch/features/favourites/index.js create mode 100644 app/javascript/themes/glitch/features/follow_requests/components/account_authorize.js create mode 100644 app/javascript/themes/glitch/features/follow_requests/containers/account_authorize_container.js create mode 100644 app/javascript/themes/glitch/features/follow_requests/index.js create mode 100644 app/javascript/themes/glitch/features/followers/index.js create mode 100644 app/javascript/themes/glitch/features/following/index.js create mode 100644 app/javascript/themes/glitch/features/generic_not_found/index.js create mode 100644 app/javascript/themes/glitch/features/getting_started/index.js create mode 100644 app/javascript/themes/glitch/features/hashtag_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/home_timeline/components/column_settings.js create mode 100644 app/javascript/themes/glitch/features/home_timeline/containers/column_settings_container.js create mode 100644 app/javascript/themes/glitch/features/home_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/local_settings/index.js create mode 100644 app/javascript/themes/glitch/features/local_settings/navigation/index.js create mode 100644 app/javascript/themes/glitch/features/local_settings/navigation/item/index.js create mode 100644 app/javascript/themes/glitch/features/local_settings/navigation/item/style.scss create mode 100644 app/javascript/themes/glitch/features/local_settings/navigation/style.scss create mode 100644 app/javascript/themes/glitch/features/local_settings/page/index.js create mode 100644 app/javascript/themes/glitch/features/local_settings/page/item/index.js create mode 100644 app/javascript/themes/glitch/features/local_settings/page/item/style.scss create mode 100644 app/javascript/themes/glitch/features/local_settings/page/style.scss create mode 100644 app/javascript/themes/glitch/features/local_settings/style.scss create mode 100644 app/javascript/themes/glitch/features/mutes/index.js create mode 100644 app/javascript/themes/glitch/features/notifications/components/clear_column_button.js create mode 100644 app/javascript/themes/glitch/features/notifications/components/column_settings.js create mode 100644 app/javascript/themes/glitch/features/notifications/components/follow.js create mode 100644 app/javascript/themes/glitch/features/notifications/components/notification.js create mode 100644 app/javascript/themes/glitch/features/notifications/components/overlay.js create mode 100644 app/javascript/themes/glitch/features/notifications/components/setting_toggle.js create mode 100644 app/javascript/themes/glitch/features/notifications/containers/column_settings_container.js create mode 100644 app/javascript/themes/glitch/features/notifications/containers/notification_container.js create mode 100644 app/javascript/themes/glitch/features/notifications/containers/overlay_container.js create mode 100644 app/javascript/themes/glitch/features/notifications/index.js create mode 100644 app/javascript/themes/glitch/features/pinned_statuses/index.js create mode 100644 app/javascript/themes/glitch/features/public_timeline/containers/column_settings_container.js create mode 100644 app/javascript/themes/glitch/features/public_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/reblogs/index.js create mode 100644 app/javascript/themes/glitch/features/report/components/status_check_box.js create mode 100644 app/javascript/themes/glitch/features/report/containers/status_check_box_container.js create mode 100644 app/javascript/themes/glitch/features/standalone/compose/index.js create mode 100644 app/javascript/themes/glitch/features/standalone/hashtag_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/standalone/public_timeline/index.js create mode 100644 app/javascript/themes/glitch/features/status/components/action_bar.js create mode 100644 app/javascript/themes/glitch/features/status/components/card.js create mode 100644 app/javascript/themes/glitch/features/status/components/detailed_status.js create mode 100644 app/javascript/themes/glitch/features/status/containers/card_container.js create mode 100644 app/javascript/themes/glitch/features/status/index.js create mode 100644 app/javascript/themes/glitch/features/ui/components/__tests__/column-test.js create mode 100644 app/javascript/themes/glitch/features/ui/components/actions_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/boost_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/bundle.js create mode 100644 app/javascript/themes/glitch/features/ui/components/bundle_column_error.js create mode 100644 app/javascript/themes/glitch/features/ui/components/bundle_modal_error.js create mode 100644 app/javascript/themes/glitch/features/ui/components/column.js create mode 100644 app/javascript/themes/glitch/features/ui/components/column_header.js create mode 100644 app/javascript/themes/glitch/features/ui/components/column_link.js create mode 100644 app/javascript/themes/glitch/features/ui/components/column_loading.js create mode 100644 app/javascript/themes/glitch/features/ui/components/column_subheading.js create mode 100644 app/javascript/themes/glitch/features/ui/components/columns_area.js create mode 100644 app/javascript/themes/glitch/features/ui/components/confirmation_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/doodle_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/drawer_loading.js create mode 100644 app/javascript/themes/glitch/features/ui/components/embed_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/image_loader.js create mode 100644 app/javascript/themes/glitch/features/ui/components/media_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/modal_loading.js create mode 100644 app/javascript/themes/glitch/features/ui/components/modal_root.js create mode 100644 app/javascript/themes/glitch/features/ui/components/mute_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/onboarding_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/report_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/components/tabs_bar.js create mode 100644 app/javascript/themes/glitch/features/ui/components/upload_area.js create mode 100644 app/javascript/themes/glitch/features/ui/components/video_modal.js create mode 100644 app/javascript/themes/glitch/features/ui/containers/bundle_container.js create mode 100644 app/javascript/themes/glitch/features/ui/containers/columns_area_container.js create mode 100644 app/javascript/themes/glitch/features/ui/containers/loading_bar_container.js create mode 100644 app/javascript/themes/glitch/features/ui/containers/modal_container.js create mode 100644 app/javascript/themes/glitch/features/ui/containers/notifications_container.js create mode 100644 app/javascript/themes/glitch/features/ui/containers/status_list_container.js create mode 100644 app/javascript/themes/glitch/features/ui/index.js create mode 100644 app/javascript/themes/glitch/features/video/index.js create mode 100644 app/javascript/themes/glitch/index.js create mode 100644 app/javascript/themes/glitch/middleware/errors.js create mode 100644 app/javascript/themes/glitch/middleware/loading_bar.js create mode 100644 app/javascript/themes/glitch/middleware/sounds.js create mode 100644 app/javascript/themes/glitch/reducers/accounts.js create mode 100644 app/javascript/themes/glitch/reducers/accounts_counters.js create mode 100644 app/javascript/themes/glitch/reducers/alerts.js create mode 100644 app/javascript/themes/glitch/reducers/cards.js create mode 100644 app/javascript/themes/glitch/reducers/compose.js create mode 100644 app/javascript/themes/glitch/reducers/contexts.js create mode 100644 app/javascript/themes/glitch/reducers/custom_emojis.js create mode 100644 app/javascript/themes/glitch/reducers/height_cache.js create mode 100644 app/javascript/themes/glitch/reducers/index.js create mode 100644 app/javascript/themes/glitch/reducers/local_settings.js create mode 100644 app/javascript/themes/glitch/reducers/media_attachments.js create mode 100644 app/javascript/themes/glitch/reducers/meta.js create mode 100644 app/javascript/themes/glitch/reducers/modal.js create mode 100644 app/javascript/themes/glitch/reducers/mutes.js create mode 100644 app/javascript/themes/glitch/reducers/notifications.js create mode 100644 app/javascript/themes/glitch/reducers/push_notifications.js create mode 100644 app/javascript/themes/glitch/reducers/relationships.js create mode 100644 app/javascript/themes/glitch/reducers/reports.js create mode 100644 app/javascript/themes/glitch/reducers/search.js create mode 100644 app/javascript/themes/glitch/reducers/settings.js create mode 100644 app/javascript/themes/glitch/reducers/status_lists.js create mode 100644 app/javascript/themes/glitch/reducers/statuses.js create mode 100644 app/javascript/themes/glitch/reducers/timelines.js create mode 100644 app/javascript/themes/glitch/reducers/user_lists.js create mode 100644 app/javascript/themes/glitch/selectors/index.js create mode 100644 app/javascript/themes/glitch/service_worker/entry.js create mode 100644 app/javascript/themes/glitch/service_worker/web_push_notifications.js create mode 100644 app/javascript/themes/glitch/store/configureStore.js create mode 100644 app/javascript/themes/glitch/styles/_mixins.scss create mode 100644 app/javascript/themes/glitch/styles/about.scss create mode 100644 app/javascript/themes/glitch/styles/accounts.scss create mode 100644 app/javascript/themes/glitch/styles/admin.scss create mode 100644 app/javascript/themes/glitch/styles/basics.scss create mode 100644 app/javascript/themes/glitch/styles/boost.scss create mode 100644 app/javascript/themes/glitch/styles/compact_header.scss create mode 100644 app/javascript/themes/glitch/styles/components.scss create mode 100644 app/javascript/themes/glitch/styles/containers.scss create mode 100644 app/javascript/themes/glitch/styles/doodle.scss create mode 100644 app/javascript/themes/glitch/styles/emoji_picker.scss create mode 100644 app/javascript/themes/glitch/styles/footer.scss create mode 100644 app/javascript/themes/glitch/styles/forms.scss create mode 100644 app/javascript/themes/glitch/styles/index.scss create mode 100644 app/javascript/themes/glitch/styles/landing_strip.scss create mode 100644 app/javascript/themes/glitch/styles/lists.scss create mode 100644 app/javascript/themes/glitch/styles/reset copy.scss create mode 100644 app/javascript/themes/glitch/styles/reset.scss create mode 100644 app/javascript/themes/glitch/styles/rtl.scss create mode 100644 app/javascript/themes/glitch/styles/stream_entries.scss create mode 100644 app/javascript/themes/glitch/styles/tables.scss create mode 100644 app/javascript/themes/glitch/styles/variables.scss create mode 100644 app/javascript/themes/glitch/theme.yml create mode 100644 app/javascript/themes/glitch/util/api.js create mode 100644 app/javascript/themes/glitch/util/async-components.js create mode 100644 app/javascript/themes/glitch/util/base_polyfills.js create mode 100644 app/javascript/themes/glitch/util/bio_metadata.js create mode 100644 app/javascript/themes/glitch/util/counter.js create mode 100644 app/javascript/themes/glitch/util/emoji/__tests__/emoji-test.js create mode 100644 app/javascript/themes/glitch/util/emoji/__tests__/emoji_index-test.js create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_compressed.js create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_map.json create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_mart_data_light.js create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_mart_search_light.js create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_picker.js create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_unicode_mapping_light.js create mode 100644 app/javascript/themes/glitch/util/emoji/emoji_utils.js create mode 100644 app/javascript/themes/glitch/util/emoji/index.js create mode 100644 app/javascript/themes/glitch/util/emoji/unicode_to_filename.js create mode 100644 app/javascript/themes/glitch/util/emoji/unicode_to_unified_name.js create mode 100644 app/javascript/themes/glitch/util/extra_polyfills.js create mode 100644 app/javascript/themes/glitch/util/fullscreen.js create mode 100644 app/javascript/themes/glitch/util/get_rect_from_entry.js create mode 100644 app/javascript/themes/glitch/util/initial_state.js create mode 100644 app/javascript/themes/glitch/util/intersection_observer_wrapper.js create mode 100644 app/javascript/themes/glitch/util/is_mobile.js create mode 100644 app/javascript/themes/glitch/util/link_header.js create mode 100644 app/javascript/themes/glitch/util/load_polyfills.js create mode 100644 app/javascript/themes/glitch/util/main.js create mode 100644 app/javascript/themes/glitch/util/optional_motion.js create mode 100644 app/javascript/themes/glitch/util/performance.js create mode 100644 app/javascript/themes/glitch/util/react_router_helpers.js create mode 100644 app/javascript/themes/glitch/util/ready.js create mode 100644 app/javascript/themes/glitch/util/reduced_motion.js create mode 100644 app/javascript/themes/glitch/util/rtl.js create mode 100644 app/javascript/themes/glitch/util/schedule_idle_task.js create mode 100644 app/javascript/themes/glitch/util/scroll.js create mode 100644 app/javascript/themes/glitch/util/stream.js create mode 100644 app/javascript/themes/glitch/util/url_regex.js create mode 100644 app/javascript/themes/glitch/util/uuid.js create mode 100644 app/javascript/themes/glitch/util/web_push_subscription.js create mode 100644 app/javascript/themes/vanilla/theme.yml (limited to 'app') diff --git a/app/javascript/glitch/actions/local_settings.js b/app/javascript/glitch/actions/local_settings.js deleted file mode 100644 index 93c5a9a17..000000000 --- a/app/javascript/glitch/actions/local_settings.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - -`actions/local_settings` -======================== - -> For more information on the contents of this file, please contact: -> -> - kibigo! [@kibi@glitch.social] - -This file provides our Redux actions related to local settings. It -consists of the following: - - - __`changesLocalSetting(key, value)` :__ - Changes the local setting with the given `key` to the given - `value`. `key` **MUST** be an array of strings, as required by - `Immutable.Map.prototype.getIn()`. - - - __`saveLocalSettings()` :__ - Saves the local settings to `localStorage` as a JSON object. We - shouldn't ever need to call this ourselves. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Constants: ----------- - -We provide the following constants: - - - __`LOCAL_SETTING_CHANGE` :__ - This string constant is used to dispatch a setting change to our - reducer in `reducers/local_settings`, where the setting is - actually changed. - -*/ - -export const LOCAL_SETTING_CHANGE = 'LOCAL_SETTING_CHANGE'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -`changeLocalSetting(key, value)`: ---------------------------------- - -Changes the local setting with the given `key` to the given `value`. -`key` **MUST** be an array of strings, as required by -`Immutable.Map.prototype.getIn()`. - -To accomplish this, we just dispatch a `LOCAL_SETTING_CHANGE` to our -reducer in `reducers/local_settings`. - -*/ - -export function changeLocalSetting(key, value) { - return dispatch => { - dispatch({ - type: LOCAL_SETTING_CHANGE, - key, - value, - }); - - dispatch(saveLocalSettings()); - }; -}; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -`saveLocalSettings()`: ----------------------- - -Saves the local settings to `localStorage` as a JSON object. -`changeLocalSetting()` calls this whenever it changes a setting. We -shouldn't ever need to call this ourselves. - -> __TODO :__ -> Right now `saveLocalSettings()` doesn't keep track of which user -> is currently signed in, but it might be better to give each user -> their *own* local settings. - -*/ - -export function saveLocalSettings() { - return (_, getState) => { - const localSettings = getState().get('local_settings').toJS(); - localStorage.setItem('mastodon-settings', JSON.stringify(localSettings)); - }; -}; diff --git a/app/javascript/glitch/components/account/header.js b/app/javascript/glitch/components/account/header.js deleted file mode 100644 index 7bc1a2189..000000000 --- a/app/javascript/glitch/components/account/header.js +++ /dev/null @@ -1,227 +0,0 @@ -/* - -`` -================= - -> For more information on the contents of this file, please contact: -> -> - kibigo! [@kibi@glitch.social] - -Original file by @gargron@mastodon.social et al as part of -tootsuite/mastodon. We've expanded it in order to handle user bio -frontmatter. - -The `` component provides the header for account -timelines. It is a fairly simple component which mostly just consists -of a `render()` method. - -__Props:__ - - - __`account` (`ImmutablePropTypes.map`) :__ - The account to render a header for. - - - __`me` (`PropTypes.number.isRequired`) :__ - The id of the currently-signed-in account. - - - __`onFollow` (`PropTypes.func.isRequired`) :__ - The function to call when the user clicks the "follow" button. - - - __`intl` (`PropTypes.object.isRequired`) :__ - Our internationalization object, inserted by `@injectIntl`. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import React from 'react'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -// Mastodon imports // -import emojify from '../../../mastodon/features/emoji/emoji'; -import IconButton from '../../../mastodon/components/icon_button'; -import Avatar from '../../../mastodon/components/avatar'; -import { me } from '../../../mastodon/initial_state'; - -// Our imports // -import { processBio } from '../../util/bio_metadata'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Inital setup: -------------- - -The `messages` constant is used to define any messages that we need -from inside props. In our case, these are the `unfollow`, `follow`, and -`requested` messages used in the `title` of our buttons. - -*/ - -const messages = defineMessages({ - unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, - follow: { id: 'account.follow', defaultMessage: 'Follow' }, - requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' }, -}); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Implementation: ---------------- - -*/ - -@injectIntl -export default class AccountHeader extends ImmutablePureComponent { - - static propTypes = { - account : ImmutablePropTypes.map, - onFollow : PropTypes.func.isRequired, - intl : PropTypes.object.isRequired, - }; - -/* - -### `render()` - -The `render()` function is used to render our component. - -*/ - - render () { - const { account, intl } = this.props; - -/* - -If no `account` is provided, then we can't render a header. Otherwise, -we get the `displayName` for the account, if available. If it's blank, -then we set the `displayName` to just be the `username` of the account. - -*/ - - if (!account) { - return null; - } - - let displayName = account.get('display_name_html'); - let info = ''; - let actionBtn = ''; - let following = false; - -/* - -Next, we handle the account relationships. If the account follows the -user, then we add an `info` message. If the user has requested a -follow, then we disable the `actionBtn` and display an hourglass. -Otherwise, if the account isn't blocked, we set the `actionBtn` to the -appropriate icon. - -*/ - - if (me !== account.get('id')) { - if (account.getIn(['relationship', 'followed_by'])) { - info = ( - - - - ); - } - if (account.getIn(['relationship', 'requested'])) { - actionBtn = ( -
- -
- ); - } else if (!account.getIn(['relationship', 'blocking'])) { - following = account.getIn(['relationship', 'following']); - actionBtn = ( -
- -
- ); - } - } - -/* - we extract the `text` and -`metadata` from our account's `note` using `processBio()`. - -*/ - - const { text, metadata } = processBio(account.get('note')); - -/* - -Here, we render our component using all the things we've defined above. - -*/ - - return ( -
-
-
- - - - - - - - @{account.get('acct')} - {account.get('locked') ? : null} - -
- - {info} - {actionBtn} -
-
- - {metadata.length && ( - - - {(() => { - let data = []; - for (let i = 0; i < metadata.length; i++) { - data.push( - - - - - ); - } - return data; - })()} - -
- ) || null} -
- ); - } - -} diff --git a/app/javascript/glitch/components/column/notif_cleaning_widget/container.js b/app/javascript/glitch/components/column/notif_cleaning_widget/container.js deleted file mode 100644 index d3507d752..000000000 --- a/app/javascript/glitch/components/column/notif_cleaning_widget/container.js +++ /dev/null @@ -1,80 +0,0 @@ -/* - -`` -========================= - -This container connects ``s to the Redux store. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import { connect } from 'react-redux'; - -// Our imports // -import NotificationPurgeButtons from './notification_purge_buttons'; -import { - deleteMarkedNotifications, - enterNotificationClearingMode, - markAllNotifications, -} from '../../../../mastodon/actions/notifications'; -import { defineMessages, injectIntl } from 'react-intl'; -import { openModal } from '../../../../mastodon/actions/modal'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Dispatch mapping: ------------------ - -The `mapDispatchToProps()` function maps dispatches to our store to the -various props of our component. We only need to provide a dispatch for -deleting notifications. - -*/ - -const messages = defineMessages({ - clearMessage: { id: 'notifications.marked_clear_confirmation', defaultMessage: 'Are you sure you want to permanently clear all selected notifications?' }, - clearConfirm: { id: 'notifications.marked_clear', defaultMessage: 'Clear selected notifications' }, -}); - -const mapDispatchToProps = (dispatch, { intl }) => ({ - onEnterCleaningMode(yes) { - dispatch(enterNotificationClearingMode(yes)); - }, - - onDeleteMarked() { - dispatch(openModal('CONFIRM', { - message: intl.formatMessage(messages.clearMessage), - confirm: intl.formatMessage(messages.clearConfirm), - onConfirm: () => dispatch(deleteMarkedNotifications()), - })); - }, - - onMarkAll() { - dispatch(markAllNotifications(true)); - }, - - onMarkNone() { - dispatch(markAllNotifications(false)); - }, - - onInvert() { - dispatch(markAllNotifications(null)); - }, -}); - -const mapStateToProps = state => ({ - markNewForDelete: state.getIn(['notifications', 'markNewForDelete']), -}); - -export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(NotificationPurgeButtons)); diff --git a/app/javascript/glitch/components/column/notif_cleaning_widget/notification_purge_buttons.js b/app/javascript/glitch/components/column/notif_cleaning_widget/notification_purge_buttons.js deleted file mode 100644 index 62c887fb7..000000000 --- a/app/javascript/glitch/components/column/notif_cleaning_widget/notification_purge_buttons.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Buttons widget for controlling the notification clearing mode. - * In idle state, the cleaning mode button is shown. When the mode is active, - * a Confirm and Abort buttons are shown in its place. - */ - - -// Package imports // -import React from 'react'; -import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -// Mastodon imports // - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -const messages = defineMessages({ - btnAll : { id: 'notification_purge.btn_all', defaultMessage: 'Select\nall' }, - btnNone : { id: 'notification_purge.btn_none', defaultMessage: 'Select\nnone' }, - btnInvert : { id: 'notification_purge.btn_invert', defaultMessage: 'Invert\nselection' }, - btnApply : { id: 'notification_purge.btn_apply', defaultMessage: 'Clear\nselected' }, -}); - -@injectIntl -export default class NotificationPurgeButtons extends ImmutablePureComponent { - - static propTypes = { - onDeleteMarked : PropTypes.func.isRequired, - onMarkAll : PropTypes.func.isRequired, - onMarkNone : PropTypes.func.isRequired, - onInvert : PropTypes.func.isRequired, - intl: PropTypes.object.isRequired, - markNewForDelete: PropTypes.bool, - }; - - render () { - const { intl, markNewForDelete } = this.props; - - //className='active' - return ( -
- - - - - - - -
- ); - } - -} diff --git a/app/javascript/glitch/components/compose/advanced_options/container.js b/app/javascript/glitch/components/compose/advanced_options/container.js deleted file mode 100644 index 160f22737..000000000 --- a/app/javascript/glitch/components/compose/advanced_options/container.js +++ /dev/null @@ -1,66 +0,0 @@ -/* - -`` -=================================== - -This container connects `` to the Redux store. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import { connect } from 'react-redux'; - -// Mastodon imports // -import { toggleComposeAdvancedOption } from '../../../../mastodon/actions/compose'; - -// Our imports // -import ComposeAdvancedOptions from '.'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -State mapping: --------------- - -The `mapStateToProps()` function maps various state properties to the -props of our component. The only property we care about is -`compose.advanced_options`. - -*/ - -const mapStateToProps = state => ({ - values: state.getIn(['compose', 'advanced_options']), -}); - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Dispatch mapping: ------------------ - -The `mapDispatchToProps()` function maps dispatches to our store to the -various props of our component. We just need to provide a dispatch for -when an advanced option toggle changes. - -*/ - -const mapDispatchToProps = dispatch => ({ - - onChange (option) { - dispatch(toggleComposeAdvancedOption(option)); - }, - -}); - -export default connect(mapStateToProps, mapDispatchToProps)(ComposeAdvancedOptions); diff --git a/app/javascript/glitch/components/compose/advanced_options/index.js b/app/javascript/glitch/components/compose/advanced_options/index.js deleted file mode 100644 index 8251baf4d..000000000 --- a/app/javascript/glitch/components/compose/advanced_options/index.js +++ /dev/null @@ -1,163 +0,0 @@ -/* - -`` -========================== - -> For more information on the contents of this file, please contact: -> -> - surinna [@srn@dev.glitch.social] - -This adds an advanced options dropdown to the toot compose box, for -toggles that don't necessarily fit elsewhere. - -__Props:__ - - - __`values` (`ImmutablePropTypes.contains(…).isRequired`) :__ - An Immutable map with the following values: - - - __`do_not_federate` (`PropTypes.bool.isRequired`) :__ - Specifies whether or not to federate the status. - - - __`onChange` (`PropTypes.func.isRequired`) :__ - The function to call when a toggle is changed. We pass this from - our container to the toggle. - - - __`intl` (`PropTypes.object.isRequired`) :__ - Our internationalization object, inserted by `@injectIntl`. - -__State:__ - - - __`open` :__ - This tells whether the dropdown is currently open or closed. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import { injectIntl, defineMessages } from 'react-intl'; - -// Our imports // -import ComposeAdvancedOptionsToggle from './toggle'; -import ComposeDropdown from '../dropdown/index'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Inital setup: -------------- - -The `messages` constant is used to define any messages that we need -from inside props. These are the various titles and labels on our -toggles. - -`iconStyle` styles the icon used for the dropdown button. - -*/ - -const messages = defineMessages({ - local_only_short : - { id: 'advanced-options.local-only.short', defaultMessage: 'Local-only' }, - local_only_long : - { id: 'advanced-options.local-only.long', defaultMessage: 'Do not post to other instances' }, - advanced_options_icon_title : - { id: 'advanced_options.icon_title', defaultMessage: 'Advanced options' }, -}); - -/* - -Implementation: ---------------- - -*/ - -@injectIntl -export default class ComposeAdvancedOptions extends React.PureComponent { - - static propTypes = { - values : ImmutablePropTypes.contains({ - do_not_federate : PropTypes.bool.isRequired, - }).isRequired, - onChange : PropTypes.func.isRequired, - intl : PropTypes.object.isRequired, - }; - - -/* - -### `render()` - -`render()` actually puts our component on the screen. - -*/ - - render () { - const { intl, values } = this.props; - -/* - -The `options` array provides all of the available advanced options -alongside their icon, text, and name. - -*/ - const options = [ - { icon: 'wifi', shortText: messages.local_only_short, longText: messages.local_only_long, name: 'do_not_federate' }, - ]; - -/* - -`anyEnabled` tells us if any of our advanced options have been enabled. - -*/ - - const anyEnabled = values.some((enabled) => enabled); - -/* - -`optionElems` takes our `options` and creates -``s out of them. We use the `name` of the -toggle as its `key` so that React can keep track of it. - -*/ - - const optionElems = options.map((option) => { - return ( - - ); - }); - -/* - -Finally, we can render our component. - -*/ - return ( - - {optionElems} - - ); - } - -} diff --git a/app/javascript/glitch/components/compose/advanced_options/toggle.js b/app/javascript/glitch/components/compose/advanced_options/toggle.js deleted file mode 100644 index d6907472a..000000000 --- a/app/javascript/glitch/components/compose/advanced_options/toggle.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - -`` -================================ - -> For more information on the contents of this file, please contact: -> -> - surinna [@srn@dev.glitch.social] - -This creates the toggle used by ``. - -__Props:__ - - - __`onChange` (`PropTypes.func`) :__ - This provides the function to call when the toggle is - (de-?)activated. - - - __`active` (`PropTypes.bool`) :__ - This prop controls whether the toggle is currently active or not. - - - __`name` (`PropTypes.string`) :__ - This identifies the toggle, and is sent to `onChange()` when it is - called. - - - __`shortText` (`PropTypes.string`) :__ - This is a short string used as the title of the toggle. - - - __`longText` (`PropTypes.string`) :__ - This is a longer string used as a subtitle for the toggle. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import React from 'react'; -import PropTypes from 'prop-types'; -import Toggle from 'react-toggle'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Implementation: ---------------- - -*/ - -export default class ComposeAdvancedOptionsToggle extends React.PureComponent { - - static propTypes = { - onChange: PropTypes.func.isRequired, - active: PropTypes.bool.isRequired, - name: PropTypes.string.isRequired, - shortText: PropTypes.string.isRequired, - longText: PropTypes.string.isRequired, - } - -/* - -### `onToggle()` - -The `onToggle()` function simply calls the `onChange()` prop with the -toggle's `name`. - -*/ - - onToggle = () => { - this.props.onChange(this.props.name); - } - -/* - -### `render()` - -The `render()` function is used to render our component. We just render -a `` and place next to it our text. - -*/ - - render() { - const { active, shortText, longText } = this.props; - return ( -
-
- -
-
- {shortText} - {longText} -
-
- ); - } - -} diff --git a/app/javascript/glitch/components/compose/attach_options/index.js b/app/javascript/glitch/components/compose/attach_options/index.js deleted file mode 100644 index 4340972f0..000000000 --- a/app/javascript/glitch/components/compose/attach_options/index.js +++ /dev/null @@ -1,133 +0,0 @@ -// Package imports // -import React from 'react'; -import PropTypes from 'prop-types'; -import { connect } from 'react-redux'; -import { injectIntl, defineMessages } from 'react-intl'; - -// Our imports // -import ComposeDropdown from '../dropdown/index'; -import { uploadCompose } from '../../../../mastodon/actions/compose'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { openModal } from '../../../../mastodon/actions/modal'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -const messages = defineMessages({ - upload : - { id: 'compose.attach.upload', defaultMessage: 'Upload a file' }, - doodle : - { id: 'compose.attach.doodle', defaultMessage: 'Draw something' }, - attach : - { id: 'compose.attach', defaultMessage: 'Attach...' }, -}); - -const mapStateToProps = state => ({ - // This horrible expression is copied from vanilla upload_button_container - disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size > 3 || state.getIn(['compose', 'media_attachments']).some(m => m.get('type') === 'video')), - resetFileKey: state.getIn(['compose', 'resetFileKey']), - acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']), -}); - -const mapDispatchToProps = dispatch => ({ - onSelectFile (files) { - dispatch(uploadCompose(files)); - }, - onOpenDoodle () { - dispatch(openModal('DOODLE', { noEsc: true })); - }, -}); - -@injectIntl -@connect(mapStateToProps, mapDispatchToProps) -export default class ComposeAttachOptions extends ImmutablePureComponent { - - static propTypes = { - intl : PropTypes.object.isRequired, - resetFileKey: PropTypes.number, - acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired, - disabled: PropTypes.bool, - onSelectFile: PropTypes.func.isRequired, - onOpenDoodle: PropTypes.func.isRequired, - }; - - handleItemClick = bt => { - if (bt === 'upload') { - this.fileElement.click(); - } - - if (bt === 'doodle') { - this.props.onOpenDoodle(); - } - - this.dropdown.setState({ open: false }); - }; - - handleFileChange = (e) => { - if (e.target.files.length > 0) { - this.props.onSelectFile(e.target.files); - } - } - - setFileRef = (c) => { - this.fileElement = c; - } - - setDropdownRef = (c) => { - this.dropdown = c; - } - - render () { - const { intl, resetFileKey, disabled, acceptContentTypes } = this.props; - - const options = [ - { icon: 'cloud-upload', text: messages.upload, name: 'upload' }, - { icon: 'paint-brush', text: messages.doodle, name: 'doodle' }, - ]; - - const optionElems = options.map((item) => { - const hdl = () => this.handleItemClick(item.name); - return ( -
-
- -
- -
- {intl.formatMessage(item.text)} -
-
- ); - }); - - return ( -
- - {optionElems} - - -
- ); - } - -} diff --git a/app/javascript/glitch/components/compose/dropdown/index.js b/app/javascript/glitch/components/compose/dropdown/index.js deleted file mode 100644 index 5f6467155..000000000 --- a/app/javascript/glitch/components/compose/dropdown/index.js +++ /dev/null @@ -1,77 +0,0 @@ -// Package imports // -import React from 'react'; -import PropTypes from 'prop-types'; - -// Mastodon imports // -import IconButton from '../../../../mastodon/components/icon_button'; - -const iconStyle = { - height : null, - lineHeight : '27px', -}; - -export default class ComposeDropdown extends React.PureComponent { - - static propTypes = { - title: PropTypes.string.isRequired, - icon: PropTypes.string, - highlight: PropTypes.bool, - disabled: PropTypes.bool, - children: PropTypes.arrayOf(PropTypes.node).isRequired, - }; - - state = { - open: false, - }; - - onGlobalClick = (e) => { - if (e.target !== this.node && !this.node.contains(e.target) && this.state.open) { - this.setState({ open: false }); - } - }; - - componentDidMount () { - window.addEventListener('click', this.onGlobalClick); - window.addEventListener('touchstart', this.onGlobalClick); - } - componentWillUnmount () { - window.removeEventListener('click', this.onGlobalClick); - window.removeEventListener('touchstart', this.onGlobalClick); - } - - onToggleDropdown = () => { - if (this.props.disabled) return; - this.setState({ open: !this.state.open }); - }; - - setRef = (c) => { - this.node = c; - }; - - render () { - const { open } = this.state; - let { highlight, title, icon, disabled } = this.props; - - if (!icon) icon = 'ellipsis-h'; - - return ( -
-
- -
-
- {this.props.children} -
-
- ); - } - -} diff --git a/app/javascript/glitch/components/local_settings/container.js b/app/javascript/glitch/components/local_settings/container.js deleted file mode 100644 index 4569db99f..000000000 --- a/app/javascript/glitch/components/local_settings/container.js +++ /dev/null @@ -1,24 +0,0 @@ -// Package imports // -import { connect } from 'react-redux'; - -// Mastodon imports // -import { closeModal } from '../../../mastodon/actions/modal'; - -// Our imports // -import { changeLocalSetting } from '../../../glitch/actions/local_settings'; -import LocalSettings from '.'; - -const mapStateToProps = state => ({ - settings: state.get('local_settings'), -}); - -const mapDispatchToProps = dispatch => ({ - onChange (setting, value) { - dispatch(changeLocalSetting(setting, value)); - }, - onClose () { - dispatch(closeModal()); - }, -}); - -export default connect(mapStateToProps, mapDispatchToProps)(LocalSettings); diff --git a/app/javascript/glitch/components/local_settings/index.js b/app/javascript/glitch/components/local_settings/index.js deleted file mode 100644 index ef711229a..000000000 --- a/app/javascript/glitch/components/local_settings/index.js +++ /dev/null @@ -1,50 +0,0 @@ -// Package imports -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; - -// Our imports -import LocalSettingsPage from './page'; -import LocalSettingsNavigation from './navigation'; - -// Stylesheet imports -import './style.scss'; - -export default class LocalSettings extends React.PureComponent { - - static propTypes = { - onChange: PropTypes.func.isRequired, - onClose: PropTypes.func.isRequired, - settings: ImmutablePropTypes.map.isRequired, - }; - - state = { - currentIndex: 0, - }; - - navigateTo = (index) => - this.setState({ currentIndex: +index }); - - render () { - - const { navigateTo } = this; - const { onChange, onClose, settings } = this.props; - const { currentIndex } = this.state; - - return ( -
- - -
- ); - } - -} diff --git a/app/javascript/glitch/components/local_settings/navigation/index.js b/app/javascript/glitch/components/local_settings/navigation/index.js deleted file mode 100644 index fa35e83c7..000000000 --- a/app/javascript/glitch/components/local_settings/navigation/index.js +++ /dev/null @@ -1,74 +0,0 @@ -// Package imports -import React from 'react'; -import PropTypes from 'prop-types'; -import { injectIntl, defineMessages } from 'react-intl'; - -// Our imports -import LocalSettingsNavigationItem from './item'; - -// Stylesheet imports -import './style.scss'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -const messages = defineMessages({ - general: { id: 'settings.general', defaultMessage: 'General' }, - collapsed: { id: 'settings.collapsed_statuses', defaultMessage: 'Collapsed toots' }, - media: { id: 'settings.media', defaultMessage: 'Media' }, - preferences: { id: 'settings.preferences', defaultMessage: 'Preferences' }, - close: { id: 'settings.close', defaultMessage: 'Close' }, -}); - -@injectIntl -export default class LocalSettingsNavigation extends React.PureComponent { - - static propTypes = { - index : PropTypes.number, - intl : PropTypes.object.isRequired, - onClose : PropTypes.func.isRequired, - onNavigate : PropTypes.func.isRequired, - }; - - render () { - - const { index, intl, onClose, onNavigate } = this.props; - - return ( - - ); - } - -} diff --git a/app/javascript/glitch/components/local_settings/navigation/item/index.js b/app/javascript/glitch/components/local_settings/navigation/item/index.js deleted file mode 100644 index a352d5fb2..000000000 --- a/app/javascript/glitch/components/local_settings/navigation/item/index.js +++ /dev/null @@ -1,69 +0,0 @@ -// Package imports -import React from 'react'; -import PropTypes from 'prop-types'; -import classNames from 'classnames'; - -// Stylesheet imports -import './style.scss'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -export default class LocalSettingsPage extends React.PureComponent { - - static propTypes = { - active: PropTypes.bool, - className: PropTypes.string, - href: PropTypes.string, - icon: PropTypes.string, - index: PropTypes.number.isRequired, - onNavigate: PropTypes.func, - title: PropTypes.string, - }; - - handleClick = (e) => { - const { index, onNavigate } = this.props; - if (onNavigate) { - onNavigate(index); - e.preventDefault(); - } - } - - render () { - const { handleClick } = this; - const { - active, - className, - href, - icon, - onNavigate, - title, - } = this.props; - - const finalClassName = classNames('glitch', 'local-settings__navigation__item', { - active, - }, className); - - const iconElem = icon ? : null; - - if (href) return ( - - {iconElem} {title} - - ); - else if (onNavigate) return ( - - {iconElem} {title} - - ); - else return null; - } - -} diff --git a/app/javascript/glitch/components/local_settings/navigation/item/style.scss b/app/javascript/glitch/components/local_settings/navigation/item/style.scss deleted file mode 100644 index 7f7371993..000000000 --- a/app/javascript/glitch/components/local_settings/navigation/item/style.scss +++ /dev/null @@ -1,27 +0,0 @@ -@import 'styles/mastodon/variables'; - -.glitch.local-settings__navigation__item { - display: block; - padding: 15px 20px; - color: inherit; - background: $primary-text-color; - border-bottom: 1px $ui-primary-color solid; - cursor: pointer; - text-decoration: none; - outline: none; - transition: background .3s; - - &:hover { - background: $ui-secondary-color; - } - - &.active { - background: $ui-highlight-color; - color: $primary-text-color; - } - - &.close, &.close:hover { - background: $error-value-color; - color: $primary-text-color; - } -} diff --git a/app/javascript/glitch/components/local_settings/navigation/style.scss b/app/javascript/glitch/components/local_settings/navigation/style.scss deleted file mode 100644 index 0336f943b..000000000 --- a/app/javascript/glitch/components/local_settings/navigation/style.scss +++ /dev/null @@ -1,10 +0,0 @@ -@import 'styles/mastodon/variables'; - -.glitch.local-settings__navigation { - background: $primary-text-color; - color: $ui-base-color; - width: 200px; - font-size: 15px; - line-height: 20px; - overflow-y: auto; -} diff --git a/app/javascript/glitch/components/local_settings/page/index.js b/app/javascript/glitch/components/local_settings/page/index.js deleted file mode 100644 index 498230f7b..000000000 --- a/app/javascript/glitch/components/local_settings/page/index.js +++ /dev/null @@ -1,212 +0,0 @@ -// Package imports -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; - -// Our imports -import LocalSettingsPageItem from './item'; - -// Stylesheet imports -import './style.scss'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -const messages = defineMessages({ - layout_auto: { id: 'layout.auto', defaultMessage: 'Auto' }, - layout_desktop: { id: 'layout.desktop', defaultMessage: 'Desktop' }, - layout_mobile: { id: 'layout.single', defaultMessage: 'Mobile' }, - side_arm_none: { id: 'settings.side_arm.none', defaultMessage: 'None' }, -}); - -@injectIntl -export default class LocalSettingsPage extends React.PureComponent { - - static propTypes = { - index : PropTypes.number, - intl : PropTypes.object.isRequired, - onChange : PropTypes.func.isRequired, - settings : ImmutablePropTypes.map.isRequired, - }; - - pages = [ - ({ intl, onChange, settings }) => ( -
-

- - - - - - - - - -
-

- - - -
-
- ), - ({ onChange, settings }) => ( -
-

- - - -
-

- - - - - - - - - - - - - - - - - - -
-
-

- - - - - - -
-
- ), - ({ onChange, settings }) => ( -
-

- - - - - - -
- ), - ]; - - render () { - const { pages } = this; - const { index, intl, onChange, settings } = this.props; - const CurrentPage = pages[index] || pages[0]; - - return ; - } - -} diff --git a/app/javascript/glitch/components/local_settings/page/item/index.js b/app/javascript/glitch/components/local_settings/page/item/index.js deleted file mode 100644 index 37e28c084..000000000 --- a/app/javascript/glitch/components/local_settings/page/item/index.js +++ /dev/null @@ -1,90 +0,0 @@ -// Package imports -import React from 'react'; -import PropTypes from 'prop-types'; -import ImmutablePropTypes from 'react-immutable-proptypes'; - -// Stylesheet imports -import './style.scss'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -export default class LocalSettingsPageItem extends React.PureComponent { - - static propTypes = { - children: PropTypes.element.isRequired, - dependsOn: PropTypes.array, - dependsOnNot: PropTypes.array, - id: PropTypes.string.isRequired, - item: PropTypes.array.isRequired, - onChange: PropTypes.func.isRequired, - options: PropTypes.arrayOf(PropTypes.shape({ - value: PropTypes.string.isRequired, - message: PropTypes.string.isRequired, - })), - settings: ImmutablePropTypes.map.isRequired, - }; - - handleChange = e => { - const { target } = e; - const { item, onChange, options } = this.props; - if (options && options.length > 0) onChange(item, target.value); - else onChange(item, target.checked); - } - - render () { - const { handleChange } = this; - const { settings, item, id, options, children, dependsOn, dependsOnNot } = this.props; - let enabled = true; - - if (dependsOn) { - for (let i = 0; i < dependsOn.length; i++) { - enabled = enabled && settings.getIn(dependsOn[i]); - } - } - if (dependsOnNot) { - for (let i = 0; i < dependsOnNot.length; i++) { - enabled = enabled && !settings.getIn(dependsOnNot[i]); - } - } - - if (options && options.length > 0) { - const currentValue = settings.getIn(item); - const optionElems = options && options.length > 0 && options.map((opt) => ( - - )); - return ( - - ); - } else return ( - - ); - } - -} diff --git a/app/javascript/glitch/components/local_settings/page/item/style.scss b/app/javascript/glitch/components/local_settings/page/item/style.scss deleted file mode 100644 index b2d8f7185..000000000 --- a/app/javascript/glitch/components/local_settings/page/item/style.scss +++ /dev/null @@ -1,7 +0,0 @@ -@import 'styles/mastodon/variables'; - -.glitch.local-settings__page__item { - select { - margin-bottom: 5px; - } -} diff --git a/app/javascript/glitch/components/local_settings/page/style.scss b/app/javascript/glitch/components/local_settings/page/style.scss deleted file mode 100644 index e9eedcad0..000000000 --- a/app/javascript/glitch/components/local_settings/page/style.scss +++ /dev/null @@ -1,9 +0,0 @@ -@import 'styles/mastodon/variables'; - -.glitch.local-settings__page { - display: block; - flex: auto; - padding: 15px 20px 15px 20px; - width: 360px; - overflow-y: auto; -} diff --git a/app/javascript/glitch/components/local_settings/style.scss b/app/javascript/glitch/components/local_settings/style.scss deleted file mode 100644 index 765294607..000000000 --- a/app/javascript/glitch/components/local_settings/style.scss +++ /dev/null @@ -1,34 +0,0 @@ -@import 'styles/mastodon/variables'; - -.glitch.local-settings { - position: relative; - display: flex; - flex-direction: row; - background: $ui-secondary-color; - color: $ui-base-color; - border-radius: 8px; - height: 80vh; - width: 80vw; - max-width: 740px; - max-height: 450px; - overflow: hidden; - - label { - display: block; - } - - h1 { - font-size: 18px; - font-weight: 500; - line-height: 24px; - margin-bottom: 20px; - } - - h2 { - font-size: 15px; - font-weight: 500; - line-height: 20px; - margin-top: 20px; - margin-bottom: 10px; - } -} diff --git a/app/javascript/glitch/components/notification/container.js b/app/javascript/glitch/components/notification/container.js deleted file mode 100644 index dc4c2168a..000000000 --- a/app/javascript/glitch/components/notification/container.js +++ /dev/null @@ -1,48 +0,0 @@ -/* - -`` -========================= - -This container connects ``s to the Redux store. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import { connect } from 'react-redux'; - -// Our imports // -import Notification from '.'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -const mapStateToProps = (state, props) => { - // replace account id with object - let leNotif = props.notification.set('account', state.getIn(['accounts', props.notification.get('account')])); - - // populate markedForDelete from state - is mysteriously lost somewhere - for (let n of state.getIn(['notifications', 'items'])) { - if (n.get('id') === props.notification.get('id')) { - leNotif = leNotif.set('markedForDelete', n.get('markedForDelete')); - break; - } - } - - return ({ - notification: leNotif, - settings: state.get('local_settings'), - notifCleaning: state.getIn(['notifications', 'cleaningMode']), - }); -}; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -export default connect(mapStateToProps)(Notification); diff --git a/app/javascript/glitch/components/notification/follow.js b/app/javascript/glitch/components/notification/follow.js deleted file mode 100644 index e2c21bf35..000000000 --- a/app/javascript/glitch/components/notification/follow.js +++ /dev/null @@ -1,72 +0,0 @@ -// `` -// ====================== - -// * * * * * * * // - -// Imports -// ------- - -// Package imports. -import React from 'react'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -// Mastodon imports. -import Permalink from '../../../mastodon/components/permalink'; -import AccountContainer from '../../../mastodon/containers/account_container'; - -// Our imports. -import NotificationOverlayContainer from '../notification/overlay/container'; - -// * * * * * * * // - -// Implementation -// -------------- - -export default class NotificationFollow extends ImmutablePureComponent { - - static propTypes = { - id : PropTypes.string.isRequired, - account : ImmutablePropTypes.map.isRequired, - notification : ImmutablePropTypes.map.isRequired, - }; - - render () { - const { account, notification } = this.props; - - // Links to the display name. - const displayName = account.get('display_name_html') || account.get('username'); - const link = ( - - ); - - // Renders. - return ( -
-
-
- -
- - -
- - - -
- ); - } - -} diff --git a/app/javascript/glitch/components/notification/index.js b/app/javascript/glitch/components/notification/index.js deleted file mode 100644 index b2e55aad5..000000000 --- a/app/javascript/glitch/components/notification/index.js +++ /dev/null @@ -1,82 +0,0 @@ -// Package imports // -import React from 'react'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -// Mastodon imports // - -// Our imports // -import StatusContainer from '../status/container'; -import NotificationFollow from './follow'; - -export default class Notification extends ImmutablePureComponent { - - static propTypes = { - notification: ImmutablePropTypes.map.isRequired, - settings: ImmutablePropTypes.map.isRequired, - }; - - renderFollow (notification) { - return ( - - ); - } - - renderMention (notification) { - return ( - - ); - } - - renderFavourite (notification) { - return ( - - ); - } - - renderReblog (notification) { - return ( - - ); - } - - render () { - const { notification } = this.props; - - switch(notification.get('type')) { - case 'follow': - return this.renderFollow(notification); - case 'mention': - return this.renderMention(notification); - case 'favourite': - return this.renderFavourite(notification); - case 'reblog': - return this.renderReblog(notification); - } - - return null; - } - -} diff --git a/app/javascript/glitch/components/notification/overlay/container.js b/app/javascript/glitch/components/notification/overlay/container.js deleted file mode 100644 index 089f615f0..000000000 --- a/app/javascript/glitch/components/notification/overlay/container.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - -`` -========================= - -This container connects ``s to the Redux store. - -*/ - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Imports: --------- - -*/ - -// Package imports // -import { connect } from 'react-redux'; - -// Our imports // -import NotificationOverlay from './notification_overlay'; -import { markNotificationForDelete } from '../../../../mastodon/actions/notifications'; - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -/* - -Dispatch mapping: ------------------ - -The `mapDispatchToProps()` function maps dispatches to our store to the -various props of our component. We only need to provide a dispatch for -deleting notifications. - -*/ - -const mapDispatchToProps = dispatch => ({ - onMarkForDelete(id, yes) { - dispatch(markNotificationForDelete(id, yes)); - }, -}); - -const mapStateToProps = state => ({ - show: state.getIn(['notifications', 'cleaningMode']), -}); - -export default connect(mapStateToProps, mapDispatchToProps)(NotificationOverlay); diff --git a/app/javascript/glitch/components/notification/overlay/notification_overlay.js b/app/javascript/glitch/components/notification/overlay/notification_overlay.js deleted file mode 100644 index aaca95cac..000000000 --- a/app/javascript/glitch/components/notification/overlay/notification_overlay.js +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Notification overlay - */ - - -// Package imports // -import React from 'react'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { defineMessages, injectIntl } from 'react-intl'; - -// Mastodon imports // - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -const messages = defineMessages({ - markForDeletion: { id: 'notification.markForDeletion', defaultMessage: 'Mark for deletion' }, -}); - -@injectIntl -export default class NotificationOverlay extends ImmutablePureComponent { - - static propTypes = { - notification : ImmutablePropTypes.map.isRequired, - onMarkForDelete : PropTypes.func.isRequired, - show : PropTypes.bool.isRequired, - intl : PropTypes.object.isRequired, - }; - - onToggleMark = () => { - const mark = !this.props.notification.get('markedForDelete'); - const id = this.props.notification.get('id'); - this.props.onMarkForDelete(id, mark); - } - - render () { - const { notification, show, intl } = this.props; - - const active = notification.get('markedForDelete'); - const label = intl.formatMessage(messages.markForDeletion); - - return show ? ( -
-
- -
-
- ) : null; - } - -} diff --git a/app/javascript/glitch/components/status/action_bar.js b/app/javascript/glitch/components/status/action_bar.js deleted file mode 100644 index 34588b008..000000000 --- a/app/javascript/glitch/components/status/action_bar.js +++ /dev/null @@ -1,187 +0,0 @@ -// Package imports // -import React from 'react'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import { defineMessages, injectIntl } from 'react-intl'; -import ImmutablePureComponent from 'react-immutable-pure-component'; - -// Mastodon imports // -import RelativeTimestamp from '../../../mastodon/components/relative_timestamp'; -import IconButton from '../../../mastodon/components/icon_button'; -import DropdownMenuContainer from '../../../mastodon/containers/dropdown_menu_container'; -import { me } from '../../../mastodon/initial_state'; - -const messages = defineMessages({ - delete: { id: 'status.delete', defaultMessage: 'Delete' }, - mention: { id: 'status.mention', defaultMessage: 'Mention @{name}' }, - mute: { id: 'account.mute', defaultMessage: 'Mute @{name}' }, - block: { id: 'account.block', defaultMessage: 'Block @{name}' }, - reply: { id: 'status.reply', defaultMessage: 'Reply' }, - share: { id: 'status.share', defaultMessage: 'Share' }, - replyAll: { id: 'status.replyAll', defaultMessage: 'Reply to thread' }, - reblog: { id: 'status.reblog', defaultMessage: 'Boost' }, - cannot_reblog: { id: 'status.cannot_reblog', defaultMessage: 'This post cannot be boosted' }, - favourite: { id: 'status.favourite', defaultMessage: 'Favourite' }, - open: { id: 'status.open', defaultMessage: 'Expand this status' }, - report: { id: 'status.report', defaultMessage: 'Report @{name}' }, - muteConversation: { id: 'status.mute_conversation', defaultMessage: 'Mute conversation' }, - unmuteConversation: { id: 'status.unmute_conversation', defaultMessage: 'Unmute conversation' }, - pin: { id: 'status.pin', defaultMessage: 'Pin on profile' }, - unpin: { id: 'status.unpin', defaultMessage: 'Unpin from profile' }, - embed: { id: 'status.embed', defaultMessage: 'Embed' }, -}); - -@injectIntl -export default class StatusActionBar extends ImmutablePureComponent { - - static contextTypes = { - router: PropTypes.object, - }; - - static propTypes = { - status: ImmutablePropTypes.map.isRequired, - onReply: PropTypes.func, - onFavourite: PropTypes.func, - onReblog: PropTypes.func, - onDelete: PropTypes.func, - onMention: PropTypes.func, - onMute: PropTypes.func, - onBlock: PropTypes.func, - onReport: PropTypes.func, - onEmbed: PropTypes.func, - onMuteConversation: PropTypes.func, - onPin: PropTypes.func, - withDismiss: PropTypes.bool, - intl: PropTypes.object.isRequired, - }; - - // Avoid checking props that are functions (and whose equality will always - // evaluate to false. See react-immutable-pure-component for usage. - updateOnProps = [ - 'status', - 'withDismiss', - ] - - handleReplyClick = () => { - this.props.onReply(this.props.status, this.context.router.history); - } - - handleShareClick = () => { - navigator.share({ - text: this.props.status.get('search_index'), - url: this.props.status.get('url'), - }); - } - - handleFavouriteClick = () => { - this.props.onFavourite(this.props.status); - } - - handleReblogClick = (e) => { - this.props.onReblog(this.props.status, e); - } - - handleDeleteClick = () => { - this.props.onDelete(this.props.status); - } - - handlePinClick = () => { - this.props.onPin(this.props.status); - } - - handleMentionClick = () => { - this.props.onMention(this.props.status.get('account'), this.context.router.history); - } - - handleMuteClick = () => { - this.props.onMute(this.props.status.get('account')); - } - - handleBlockClick = () => { - this.props.onBlock(this.props.status.get('account')); - } - - handleOpen = () => { - this.context.router.history.push(`/statuses/${this.props.status.get('id')}`); - } - - handleEmbed = () => { - this.props.onEmbed(this.props.status); - } - - handleReport = () => { - this.props.onReport(this.props.status); - } - - handleConversationMuteClick = () => { - this.props.onMuteConversation(this.props.status); - } - - render () { - const { status, intl, withDismiss } = this.props; - - const mutingConversation = status.get('muted'); - const anonymousAccess = !me; - const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); - - let menu = []; - let reblogIcon = 'retweet'; - let replyIcon; - let replyTitle; - - menu.push({ text: intl.formatMessage(messages.open), action: this.handleOpen }); - - if (publicStatus) { - menu.push({ text: intl.formatMessage(messages.embed), action: this.handleEmbed }); - } - - menu.push(null); - - if (status.getIn(['account', 'id']) === me || withDismiss) { - menu.push({ text: intl.formatMessage(mutingConversation ? messages.unmuteConversation : messages.muteConversation), action: this.handleConversationMuteClick }); - menu.push(null); - } - - if (status.getIn(['account', 'id']) === me) { - if (publicStatus) { - menu.push({ text: intl.formatMessage(status.get('pinned') ? messages.unpin : messages.pin), action: this.handlePinClick }); - } - - menu.push({ text: intl.formatMessage(messages.delete), action: this.handleDeleteClick }); - } else { - menu.push({ text: intl.formatMessage(messages.mention, { name: status.getIn(['account', 'username']) }), action: this.handleMentionClick }); - menu.push(null); - menu.push({ text: intl.formatMessage(messages.mute, { name: status.getIn(['account', 'username']) }), action: this.handleMuteClick }); - menu.push({ text: intl.formatMessage(messages.block, { name: status.getIn(['account', 'username']) }), action: this.handleBlockClick }); - menu.push({ text: intl.formatMessage(messages.report, { name: status.getIn(['account', 'username']) }), action: this.handleReport }); - } - - if (status.get('in_reply_to_id', null) === null) { - replyIcon = 'reply'; - replyTitle = intl.formatMessage(messages.reply); - } else { - replyIcon = 'reply-all'; - replyTitle = intl.formatMessage(messages.replyAll); - } - - const shareButton = ('share' in navigator) && status.get('visibility') === 'public' && ( - - ); - - return ( -
- - - - {shareButton} - -
- -
- - -
- ); - } - -} diff --git a/app/javascript/glitch/components/status/container.js b/app/javascript/glitch/components/status/container.js deleted file mode 100644 index 0054abd14..000000000 --- a/app/javascript/glitch/components/status/container.js +++ /dev/null @@ -1,263 +0,0 @@ -/* - -`` -=================== - -Original file by @gargron@mastodon.social et al as part of -tootsuite/mastodon. Documentation by @kibi@glitch.social. The code -detecting reblogs has been moved here from . - -*/ - - /* * * * */ - -/* - -Imports: --------- - -*/ - -// Package imports // -import React from 'react'; -import { connect } from 'react-redux'; -import { - defineMessages, - injectIntl, - FormattedMessage, -} from 'react-intl'; - -// Mastodon imports // -import { makeGetStatus } from '../../../mastodon/selectors'; -import { - replyCompose, - mentionCompose, -} from '../../../mastodon/actions/compose'; -import { - reblog, - favourite, - unreblog, - unfavourite, - pin, - unpin, -} from '../../../mastodon/actions/interactions'; -import { blockAccount } from '../../../mastodon/actions/accounts'; -import { initMuteModal } from '../../../mastodon/actions/mutes'; -import { - muteStatus, - unmuteStatus, - deleteStatus, -} from '../../../mastodon/actions/statuses'; -import { initReport } from '../../../mastodon/actions/reports'; -import { openModal } from '../../../mastodon/actions/modal'; - -// Our imports // -import Status from '.'; - - /* * * * */ - -/* - -Inital setup: -------------- - -The `messages` constant is used to define any messages that we will -need in our component. In our case, these are the various confirmation -messages used with statuses. - -*/ - -const messages = defineMessages({ - deleteConfirm : { - id : 'confirmations.delete.confirm', - defaultMessage : 'Delete', - }, - deleteMessage : { - id : 'confirmations.delete.message', - defaultMessage : 'Are you sure you want to delete this status?', - }, - blockConfirm : { - id : 'confirmations.block.confirm', - defaultMessage : 'Block', - }, -}); - - /* * * * */ - -/* - -State mapping: --------------- - -The `mapStateToProps()` function maps various state properties to the -props of our component. We wrap this in a `makeMapStateToProps()` -function to give us closure and preserve `getStatus()` across function -calls. - -*/ - -const makeMapStateToProps = () => { - const getStatus = makeGetStatus(); - - const mapStateToProps = (state, ownProps) => { - - let status = getStatus(state, ownProps.id); - - if(status === null) { - console.error(`ERROR! NULL STATUS! ${ownProps.id}`); - // work-around: find first good status - for (let k of state.get('statuses').keys()) { - status = getStatus(state, k); - if (status !== null) break; - } - } - - let reblogStatus = status.get('reblog', null); - let account = undefined; - let prepend = undefined; - -/* - -Here we process reblogs. If our status is a reblog, then we create a -`prependMessage` to pass along to our `` along with the -reblogger's `account`, and set `coreStatus` (the one we will actually -render) to the status which has been reblogged. - -*/ - - if (reblogStatus !== null && typeof reblogStatus === 'object') { - account = status.get('account'); - status = reblogStatus; - prepend = 'reblogged_by'; - } - -/* - -Here are the props we pass to ``. - -*/ - - return { - status : status, - account : account || ownProps.account, - settings : state.get('local_settings'), - prepend : prepend || ownProps.prepend, - reblogModal : state.getIn(['meta', 'boost_modal']), - deleteModal : state.getIn(['meta', 'delete_modal']), - }; - }; - - return mapStateToProps; -}; - - /* * * * */ - -/* - -Dispatch mapping: ------------------ - -The `mapDispatchToProps()` function maps dispatches to our store to the -various props of our component. We need to provide dispatches for all -of the things you can do with a status: reply, reblog, favourite, et -cetera. - -For a few of these dispatches, we open up confirmation modals; the rest -just immediately execute their corresponding actions. - -*/ - -const mapDispatchToProps = (dispatch, { intl }) => ({ - - onReply (status, router) { - dispatch(replyCompose(status, router)); - }, - - onModalReblog (status) { - dispatch(reblog(status)); - }, - - onReblog (status, e) { - if (status.get('reblogged')) { - dispatch(unreblog(status)); - } else { - if (e.shiftKey || !this.reblogModal) { - this.onModalReblog(status); - } else { - dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog })); - } - } - }, - - onFavourite (status) { - if (status.get('favourited')) { - dispatch(unfavourite(status)); - } else { - dispatch(favourite(status)); - } - }, - - onPin (status) { - if (status.get('pinned')) { - dispatch(unpin(status)); - } else { - dispatch(pin(status)); - } - }, - - onEmbed (status) { - dispatch(openModal('EMBED', { url: status.get('url') })); - }, - - onDelete (status) { - if (!this.deleteModal) { - dispatch(deleteStatus(status.get('id'))); - } else { - dispatch(openModal('CONFIRM', { - message: intl.formatMessage(messages.deleteMessage), - confirm: intl.formatMessage(messages.deleteConfirm), - onConfirm: () => dispatch(deleteStatus(status.get('id'))), - })); - } - }, - - onMention (account, router) { - dispatch(mentionCompose(account, router)); - }, - - onOpenMedia (media, index) { - dispatch(openModal('MEDIA', { media, index })); - }, - - onOpenVideo (media, time) { - dispatch(openModal('VIDEO', { media, time })); - }, - - onBlock (account) { - dispatch(openModal('CONFIRM', { - message: @{account.get('acct')} }} />, - confirm: intl.formatMessage(messages.blockConfirm), - onConfirm: () => dispatch(blockAccount(account.get('id'))), - })); - }, - - onReport (status) { - dispatch(initReport(status.get('account'), status)); - }, - - onMute (account) { - dispatch(initMuteModal(account)); - }, - - onMuteConversation (status) { - if (status.get('muted')) { - dispatch(unmuteStatus(status.get('id'))); - } else { - dispatch(muteStatus(status.get('id'))); - } - }, -}); - -export default injectIntl( - connect(makeMapStateToProps, mapDispatchToProps)(Status) -); diff --git a/app/javascript/glitch/components/status/content.js b/app/javascript/glitch/components/status/content.js deleted file mode 100644 index 06015619b..000000000 --- a/app/javascript/glitch/components/status/content.js +++ /dev/null @@ -1,241 +0,0 @@ -// Package imports // -import React from 'react'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import { FormattedMessage } from 'react-intl'; -import classnames from 'classnames'; - -// Mastodon imports // -import { isRtl } from '../../../mastodon/rtl'; -import Permalink from '../../../mastodon/components/permalink'; - -export default class StatusContent extends React.PureComponent { - - static propTypes = { - status: ImmutablePropTypes.map.isRequired, - expanded: PropTypes.oneOf([true, false, null]), - setExpansion: PropTypes.func, - onHeightUpdate: PropTypes.func, - media: PropTypes.element, - mediaIcon: PropTypes.string, - parseClick: PropTypes.func, - disabled: PropTypes.bool, - }; - - state = { - hidden: true, - }; - - componentDidMount () { - const node = this.node; - const links = node.querySelectorAll('a'); - - for (let i = 0; i < links.length; ++i) { - let link = links[i]; - let mention = this.props.status.get('mentions').find(item => link.href === item.get('url')); - - if (mention) { - link.addEventListener('click', this.onMentionClick.bind(this, mention), false); - link.setAttribute('title', mention.get('acct')); - } else if (link.textContent[0] === '#' || (link.previousSibling && link.previousSibling.textContent && link.previousSibling.textContent[link.previousSibling.textContent.length - 1] === '#')) { - link.addEventListener('click', this.onHashtagClick.bind(this, link.text), false); - } else { - link.addEventListener('click', this.onLinkClick.bind(this), false); - link.setAttribute('title', link.href); - } - - link.setAttribute('target', '_blank'); - link.setAttribute('rel', 'noopener'); - } - } - - componentDidUpdate () { - if (this.props.onHeightUpdate) { - this.props.onHeightUpdate(); - } - } - - onLinkClick = (e) => { - if (this.props.expanded === false) { - if (this.props.parseClick) this.props.parseClick(e); - } - } - - onMentionClick = (mention, e) => { - if (this.props.parseClick) { - this.props.parseClick(e, `/accounts/${mention.get('id')}`); - } - } - - onHashtagClick = (hashtag, e) => { - hashtag = hashtag.replace(/^#/, '').toLowerCase(); - - if (this.props.parseClick) { - this.props.parseClick(e, `/timelines/tag/${hashtag}`); - } - } - - handleMouseDown = (e) => { - this.startXY = [e.clientX, e.clientY]; - } - - handleMouseUp = (e) => { - const { parseClick } = this.props; - - if (!this.startXY) { - return; - } - - const [ startX, startY ] = this.startXY; - const [ deltaX, deltaY ] = [Math.abs(e.clientX - startX), Math.abs(e.clientY - startY)]; - - if (e.target.localName === 'button' || e.target.localName === 'a' || (e.target.parentNode && (e.target.parentNode.localName === 'button' || e.target.parentNode.localName === 'a'))) { - return; - } - - if (deltaX + deltaY < 5 && e.button === 0 && parseClick) { - parseClick(e); - } - - this.startXY = null; - } - - handleSpoilerClick = (e) => { - e.preventDefault(); - - if (this.props.setExpansion) { - this.props.setExpansion(this.props.expanded ? null : true); - } else { - this.setState({ hidden: !this.state.hidden }); - } - } - - setRef = (c) => { - this.node = c; - } - - render () { - const { - status, - media, - mediaIcon, - parseClick, - disabled, - } = this.props; - - const hidden = ( - this.props.setExpansion ? - !this.props.expanded : - this.state.hidden - ); - - const content = { __html: status.get('contentHtml') }; - const spoilerContent = { __html: status.get('spoilerHtml') }; - const directionStyle = { direction: 'ltr' }; - const classNames = classnames('status__content', { - 'status__content--with-action': parseClick && !disabled, - }); - - if (isRtl(status.get('search_index'))) { - directionStyle.direction = 'rtl'; - } - - if (status.get('spoiler_text').length > 0) { - let mentionsPlaceholder = ''; - - const mentionLinks = status.get('mentions').map(item => ( - - @{item.get('username')} - - )).reduce((aggregate, item) => [...aggregate, item, ' '], []); - - const toggleText = hidden ? [ - , - mediaIcon ? ( -