From f5bf5ebb82e3af420dcd23d602b1be6cc86838e1 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Wed, 3 May 2017 02:04:16 +0200 Subject: Replace sprockets/browserify with Webpack (#2617) * Replace browserify with webpack * Add react-intl-translations-manager * Do not minify in development, add offline-plugin for ServiceWorker background cache updates * Adjust tests and dependencies * Fix production deployments * Fix tests * More optimizations * Improve travis cache for npm stuff * Re-run travis * Add back support for custom.scss as before * Remove offline-plugin and babili * Fix issue with Immutable.List().unshift(...values) not working as expected * Make travis load schema instead of running all migrations in sequence * Fix missing React import in WarningContainer. Optimize rendering performance by using ImmutablePureComponent instead of React.PureComponent. ImmutablePureComponent uses Immutable.is() to compare props. Replace dynamic callback bindings in * Add react definitions to places that use JSX * Add Procfile.dev for running rails, webpack and streaming API at the same time --- .babelrc | 22 +- .foreman | 1 + .gitignore | 4 +- .postcssrc.yml | 4 + .travis.yml | 7 +- Dockerfile | 15 +- Gemfile | 28 +- Gemfile.lock | 43 +- Procfile.dev | 3 + app/assets/fonts/montserrat/Montserrat-Regular.eot | Bin 75826 -> 0 bytes app/assets/fonts/montserrat/Montserrat-Regular.ttf | Bin 191860 -> 0 bytes .../fonts/montserrat/Montserrat-Regular.woff | Bin 81244 -> 0 bytes .../fonts/montserrat/Montserrat-Regular.woff2 | Bin 61840 -> 0 bytes .../roboto-mono/robotomono-regular-webfont.eot | Bin 57291 -> 0 bytes .../roboto-mono/robotomono-regular-webfont.svg | 1051 -- .../roboto-mono/robotomono-regular-webfont.ttf | Bin 113716 -> 0 bytes .../roboto-mono/robotomono-regular-webfont.woff | Bin 66384 -> 0 bytes .../roboto-mono/robotomono-regular-webfont.woff2 | Bin 51156 -> 0 bytes app/assets/fonts/roboto/roboto-bold-webfont.eot | Bin 229925 -> 0 bytes app/assets/fonts/roboto/roboto-bold-webfont.svg | 16273 ------------------- app/assets/fonts/roboto/roboto-bold-webfont.ttf | Bin 571400 -> 0 bytes app/assets/fonts/roboto/roboto-bold-webfont.woff | Bin 282780 -> 0 bytes app/assets/fonts/roboto/roboto-bold-webfont.woff2 | Bin 192436 -> 0 bytes app/assets/fonts/roboto/roboto-italic-webfont.eot | Bin 255774 -> 0 bytes app/assets/fonts/roboto/roboto-italic-webfont.svg | 15513 ------------------ app/assets/fonts/roboto/roboto-italic-webfont.ttf | Bin 588464 -> 0 bytes app/assets/fonts/roboto/roboto-italic-webfont.woff | Bin 306528 -> 0 bytes .../fonts/roboto/roboto-italic-webfont.woff2 | Bin 215192 -> 0 bytes app/assets/fonts/roboto/roboto-medium-webfont.eot | Bin 228395 -> 0 bytes app/assets/fonts/roboto/roboto-medium-webfont.svg | 16273 ------------------- app/assets/fonts/roboto/roboto-medium-webfont.ttf | Bin 568816 -> 0 bytes app/assets/fonts/roboto/roboto-medium-webfont.woff | Bin 279900 -> 0 bytes .../fonts/roboto/roboto-medium-webfont.woff2 | Bin 190880 -> 0 bytes app/assets/fonts/roboto/roboto-regular-webfont.eot | Bin 228773 -> 0 bytes app/assets/fonts/roboto/roboto-regular-webfont.svg | 15513 ------------------ app/assets/fonts/roboto/roboto-regular-webfont.ttf | Bin 570352 -> 0 bytes .../fonts/roboto/roboto-regular-webfont.woff | Bin 280372 -> 0 bytes .../fonts/roboto/roboto-regular-webfont.woff2 | Bin 191468 -> 0 bytes app/assets/images/.keep | 0 app/assets/images/background-photo.jpg | Bin 264344 -> 0 bytes app/assets/images/boost_sprite.png | Bin 1326 -> 0 bytes app/assets/images/elephant-friend.png | Bin 24466 -> 0 bytes app/assets/images/fluffy-elephant-friend.png | Bin 60667 -> 0 bytes app/assets/images/logo.png | Bin 7752 -> 0 bytes app/assets/images/logo.svg | 1 - app/assets/images/mastodon-getting-started.png | Bin 34539 -> 0 bytes app/assets/images/mastodon-not-found.png | Bin 19560 -> 0 bytes app/assets/images/mastodon.jpg | Bin 133743 -> 0 bytes app/assets/images/mastodon_small.jpg | Bin 25199 -> 0 bytes app/assets/images/screenshot.png | Bin 249637 -> 0 bytes app/assets/images/void.png | Bin 174 -> 0 bytes app/assets/javascripts/application.js | 15 - app/assets/javascripts/application_public.js | 9 - app/assets/javascripts/components.js | 15 - app/assets/javascripts/components/.gitkeep | 0 .../javascripts/components/actions/accounts.jsx | 762 - .../javascripts/components/actions/alerts.jsx | 24 - .../javascripts/components/actions/blocks.jsx | 82 - .../javascripts/components/actions/cards.jsx | 52 - .../javascripts/components/actions/compose.jsx | 279 - .../javascripts/components/actions/favourites.jsx | 83 - .../components/actions/interactions.jsx | 235 - .../javascripts/components/actions/modal.jsx | 16 - .../javascripts/components/actions/mutes.jsx | 82 - .../components/actions/notifications.jsx | 165 - .../javascripts/components/actions/onboarding.jsx | 14 - .../javascripts/components/actions/reports.jsx | 72 - .../javascripts/components/actions/search.jsx | 73 - .../javascripts/components/actions/settings.jsx | 19 - .../javascripts/components/actions/statuses.jsx | 141 - .../javascripts/components/actions/store.jsx | 17 - .../javascripts/components/actions/timelines.jsx | 186 - app/assets/javascripts/components/api.jsx | 26 - .../javascripts/components/components/account.jsx | 91 - .../components/components/attachment_list.jsx | 32 - .../components/components/autosuggest_textarea.jsx | 211 - .../javascripts/components/components/avatar.jsx | 63 - .../javascripts/components/components/button.jsx | 49 - .../components/components/collapsable.jsx | 20 - .../components/components/column_back_button.jsx | 31 - .../components/column_back_button_slim.jsx | 31 - .../components/components/column_collapsable.jsx | 56 - .../components/components/display_name.jsx | 24 - .../components/components/dropdown_menu.jsx | 78 - .../components/extended_video_player.jsx | 53 - .../components/components/icon_button.jsx | 95 - .../components/components/load_more.jsx | 14 - .../components/components/loading_indicator.jsx | 9 - .../components/components/media_gallery.jsx | 195 - .../components/components/missing_indicator.jsx | 9 - .../components/components/permalink.jsx | 36 - .../components/components/relative_timestamp.jsx | 19 - .../javascripts/components/components/status.jsx | 121 - .../components/components/status_action_bar.jsx | 137 - .../components/components/status_content.jsx | 157 - .../components/components/status_list.jsx | 128 - .../components/components/video_player.jsx | 198 - .../components/containers/account_container.jsx | 50 - .../javascripts/components/containers/mastodon.jsx | 320 - .../components/containers/status_container.jsx | 117 - app/assets/javascripts/components/emoji.jsx | 35 - .../features/account/components/action_bar.jsx | 92 - .../features/account/components/header.jsx | 148 - .../account_timeline/components/header.jsx | 81 - .../containers/header_container.jsx | 75 - .../components/features/account_timeline/index.jsx | 87 - .../components/features/blocks/index.jsx | 72 - .../features/community_timeline/index.jsx | 95 - .../compose/components/autosuggest_account.jsx | 16 - .../compose/components/autosuggest_status.jsx | 15 - .../compose/components/character_counter.jsx | 26 - .../features/compose/components/compose_form.jsx | 209 - .../compose/components/emoji_picker_dropdown.jsx | 114 - .../features/compose/components/navigation_bar.jsx | 32 - .../compose/components/privacy_dropdown.jsx | 104 - .../compose/components/reply_indicator.jsx | 69 - .../features/compose/components/search.jsx | 82 - .../features/compose/components/search_results.jsx | 65 - .../compose/components/text_icon_button.jsx | 35 - .../features/compose/components/upload_button.jsx | 60 - .../features/compose/components/upload_form.jsx | 45 - .../compose/components/upload_progress.jsx | 42 - .../features/compose/components/warning.jsx | 25 - .../containers/autosuggest_account_container.jsx | 15 - .../containers/autosuggest_status_container.jsx | 15 - .../compose/containers/compose_form_container.jsx | 64 - .../compose/containers/navigation_container.jsx | 10 - .../containers/privacy_dropdown_container.jsx | 17 - .../containers/reply_indicator_container.jsx | 24 - .../compose/containers/search_container.jsx | 35 - .../containers/search_results_container.jsx | 8 - .../containers/sensitive_button_container.jsx | 50 - .../containers/spoiler_button_container.jsx | 25 - .../compose/containers/upload_button_container.jsx | 18 - .../compose/containers/upload_form_container.jsx | 17 - .../containers/upload_progress_container.jsx | 9 - .../compose/containers/warning_container.jsx | 48 - .../components/features/compose/index.jsx | 85 - .../features/favourited_statuses/index.jsx | 66 - .../components/features/favourites/index.jsx | 59 - .../components/account_authorize.jsx | 44 - .../containers/account_authorize_container.jsx | 26 - .../components/features/follow_requests/index.jsx | 72 - .../components/features/followers/index.jsx | 90 - .../components/features/following/index.jsx | 90 - .../features/generic_not_found/index.jsx | 10 - .../components/features/getting_started/index.jsx | 66 - .../components/features/hashtag_timeline/index.jsx | 89 - .../home_timeline/components/column_settings.jsx | 50 - .../home_timeline/components/setting_text.jsx | 37 - .../containers/column_settings_container.jsx | 21 - .../components/features/home_timeline/index.jsx | 37 - .../components/features/mutes/index.jsx | 73 - .../components/clear_column_button.jsx | 26 - .../notifications/components/column_settings.jsx | 70 - .../notifications/components/notification.jsx | 88 - .../notifications/components/setting_toggle.jsx | 20 - .../containers/column_settings_container.jsx | 21 - .../containers/notification_container.jsx | 15 - .../components/features/notifications/index.jsx | 142 - .../components/features/public_timeline/index.jsx | 95 - .../components/features/reblogs/index.jsx | 59 - .../report/components/status_check_box.jsx | 39 - .../containers/status_check_box_container.jsx | 19 - .../components/features/report/index.jsx | 130 - .../features/status/components/action_bar.jsx | 101 - .../components/features/status/components/card.jsx | 95 - .../features/status/components/detailed_status.jsx | 94 - .../features/status/containers/card_container.jsx | 8 - .../components/features/status/index.jsx | 197 - .../features/ui/components/boost_modal.jsx | 82 - .../components/features/ui/components/column.jsx | 82 - .../features/ui/components/column_header.jsx | 42 - .../features/ui/components/column_link.jsx | 31 - .../features/ui/components/column_subheading.jsx | 15 - .../features/ui/components/columns_area.jsx | 19 - .../features/ui/components/confirmation_modal.jsx | 50 - .../features/ui/components/media_modal.jsx | 101 - .../features/ui/components/modal_root.jsx | 92 - .../features/ui/components/onboarding_modal.jsx | 263 - .../components/features/ui/components/tabs_bar.jsx | 23 - .../features/ui/components/upload_area.jsx | 59 - .../features/ui/components/video_modal.jsx | 38 - .../ui/containers/loading_bar_container.jsx | 8 - .../features/ui/containers/modal_container.jsx | 16 - .../ui/containers/notifications_container.jsx | 21 - .../ui/containers/status_list_container.jsx | 74 - .../javascripts/components/features/ui/index.jsx | 166 - app/assets/javascripts/components/is_mobile.jsx | 11 - app/assets/javascripts/components/link_header.jsx | 33 - app/assets/javascripts/components/locales/ar.jsx | 131 - app/assets/javascripts/components/locales/bg.jsx | 68 - app/assets/javascripts/components/locales/de.jsx | 126 - app/assets/javascripts/components/locales/en.jsx | 177 - app/assets/javascripts/components/locales/eo.jsx | 68 - app/assets/javascripts/components/locales/es.jsx | 93 - app/assets/javascripts/components/locales/fa.jsx | 136 - app/assets/javascripts/components/locales/fi.jsx | 68 - app/assets/javascripts/components/locales/fr.jsx | 155 - app/assets/javascripts/components/locales/he.jsx | 177 - app/assets/javascripts/components/locales/hr.jsx | 121 - app/assets/javascripts/components/locales/hu.jsx | 57 - app/assets/javascripts/components/locales/id.jsx | 167 - .../javascripts/components/locales/index.jsx | 57 - app/assets/javascripts/components/locales/io.jsx | 126 - app/assets/javascripts/components/locales/it.jsx | 125 - app/assets/javascripts/components/locales/ja.jsx | 167 - app/assets/javascripts/components/locales/nl.jsx | 130 - app/assets/javascripts/components/locales/no.jsx | 130 - app/assets/javascripts/components/locales/oc.jsx | 128 - .../javascripts/components/locales/pt-br.jsx | 125 - app/assets/javascripts/components/locales/pt.jsx | 125 - app/assets/javascripts/components/locales/ru.jsx | 138 - app/assets/javascripts/components/locales/uk.jsx | 57 - .../javascripts/components/locales/zh-cn.jsx | 157 - .../javascripts/components/locales/zh-hk.jsx | 150 - .../javascripts/components/middleware/errors.jsx | 33 - .../components/middleware/loading_bar.jsx | 25 - .../javascripts/components/middleware/sounds.jsx | 22 - .../javascripts/components/reducers/accounts.jsx | 131 - .../javascripts/components/reducers/alerts.jsx | 25 - .../javascripts/components/reducers/cards.jsx | 14 - .../javascripts/components/reducers/compose.jsx | 232 - .../javascripts/components/reducers/index.jsx | 36 - .../javascripts/components/reducers/meta.jsx | 17 - .../javascripts/components/reducers/modal.jsx | 18 - .../components/reducers/notifications.jsx | 104 - .../components/reducers/relationships.jsx | 38 - .../javascripts/components/reducers/reports.jsx | 60 - .../javascripts/components/reducers/search.jsx | 96 - .../javascripts/components/reducers/settings.jsx | 48 - .../components/reducers/status_lists.jsx | 39 - .../javascripts/components/reducers/statuses.jsx | 124 - .../javascripts/components/reducers/timelines.jsx | 317 - .../javascripts/components/reducers/user_lists.jsx | 80 - app/assets/javascripts/components/rtl.jsx | 27 - .../javascripts/components/selectors/index.jsx | 72 - .../components/store/configureStore.jsx | 16 - app/assets/javascripts/components/stream.jsx | 22 - app/assets/javascripts/components/uuid.jsx | 3 - app/assets/javascripts/extras.jsx | 49 - app/assets/stylesheets/.gitkeep | 0 app/assets/stylesheets/about.scss | 374 - app/assets/stylesheets/accounts.scss | 391 - app/assets/stylesheets/admin.scss | 245 - app/assets/stylesheets/application.scss | 21 - app/assets/stylesheets/basics.scss | 58 - app/assets/stylesheets/boost.scss | 11 - app/assets/stylesheets/compact_header.scss | 28 - app/assets/stylesheets/components.scss | 3180 ---- app/assets/stylesheets/containers.scss | 71 - app/assets/stylesheets/fonts/montserrat.scss | 11 - app/assets/stylesheets/fonts/roboto-mono.scss | 12 - app/assets/stylesheets/fonts/roboto.scss | 52 - app/assets/stylesheets/footer.scss | 29 - app/assets/stylesheets/forms.scss | 335 - app/assets/stylesheets/landing_strip.scss | 17 - app/assets/stylesheets/lists.scss | 20 - app/assets/stylesheets/reset.scss | 91 - app/assets/stylesheets/rtl.scss | 136 - app/assets/stylesheets/stream_entries.scss | 372 - app/assets/stylesheets/tables.scss | 65 - app/assets/stylesheets/variables.scss | 8 - app/helpers/application_helper.rb | 6 +- .../fonts/montserrat/Montserrat-Regular.eot | Bin 0 -> 75826 bytes .../fonts/montserrat/Montserrat-Regular.ttf | Bin 0 -> 191860 bytes .../fonts/montserrat/Montserrat-Regular.woff | Bin 0 -> 81244 bytes .../fonts/montserrat/Montserrat-Regular.woff2 | Bin 0 -> 61840 bytes .../roboto-mono/robotomono-regular-webfont.eot | Bin 0 -> 57291 bytes .../roboto-mono/robotomono-regular-webfont.svg | 1051 ++ .../roboto-mono/robotomono-regular-webfont.ttf | Bin 0 -> 113716 bytes .../roboto-mono/robotomono-regular-webfont.woff | Bin 0 -> 66384 bytes .../roboto-mono/robotomono-regular-webfont.woff2 | Bin 0 -> 51156 bytes .../fonts/roboto/roboto-bold-webfont.eot | Bin 0 -> 229925 bytes .../fonts/roboto/roboto-bold-webfont.svg | 16273 +++++++++++++++++++ .../fonts/roboto/roboto-bold-webfont.ttf | Bin 0 -> 571400 bytes .../fonts/roboto/roboto-bold-webfont.woff | Bin 0 -> 282780 bytes .../fonts/roboto/roboto-bold-webfont.woff2 | Bin 0 -> 192436 bytes .../fonts/roboto/roboto-italic-webfont.eot | Bin 0 -> 255774 bytes .../fonts/roboto/roboto-italic-webfont.svg | 15513 ++++++++++++++++++ .../fonts/roboto/roboto-italic-webfont.ttf | Bin 0 -> 588464 bytes .../fonts/roboto/roboto-italic-webfont.woff | Bin 0 -> 306528 bytes .../fonts/roboto/roboto-italic-webfont.woff2 | Bin 0 -> 215192 bytes .../fonts/roboto/roboto-medium-webfont.eot | Bin 0 -> 228395 bytes .../fonts/roboto/roboto-medium-webfont.svg | 16273 +++++++++++++++++++ .../fonts/roboto/roboto-medium-webfont.ttf | Bin 0 -> 568816 bytes .../fonts/roboto/roboto-medium-webfont.woff | Bin 0 -> 279900 bytes .../fonts/roboto/roboto-medium-webfont.woff2 | Bin 0 -> 190880 bytes .../fonts/roboto/roboto-regular-webfont.eot | Bin 0 -> 228773 bytes .../fonts/roboto/roboto-regular-webfont.svg | 15513 ++++++++++++++++++ .../fonts/roboto/roboto-regular-webfont.ttf | Bin 0 -> 570352 bytes .../fonts/roboto/roboto-regular-webfont.woff | Bin 0 -> 280372 bytes .../fonts/roboto/roboto-regular-webfont.woff2 | Bin 0 -> 191468 bytes app/javascript/images/.keep | 0 app/javascript/images/background-photo.jpg | Bin 0 -> 264344 bytes app/javascript/images/boost_sprite.png | Bin 0 -> 1326 bytes app/javascript/images/elephant-friend.png | Bin 0 -> 24466 bytes app/javascript/images/fluffy-elephant-friend.png | Bin 0 -> 60667 bytes app/javascript/images/logo.png | Bin 0 -> 7752 bytes app/javascript/images/logo.svg | 1 + app/javascript/images/mastodon-getting-started.png | Bin 0 -> 34539 bytes app/javascript/images/mastodon-not-found.png | Bin 0 -> 19560 bytes app/javascript/images/mastodon.jpg | Bin 0 -> 133743 bytes app/javascript/images/mastodon_small.jpg | Bin 0 -> 25199 bytes app/javascript/images/screenshot.png | Bin 0 -> 249637 bytes app/javascript/images/void.png | Bin 0 -> 174 bytes app/javascript/mastodon/.gitkeep | 0 app/javascript/mastodon/actions/accounts.js | 762 + app/javascript/mastodon/actions/alerts.js | 24 + app/javascript/mastodon/actions/blocks.js | 82 + app/javascript/mastodon/actions/cards.js | 52 + app/javascript/mastodon/actions/compose.js | 279 + app/javascript/mastodon/actions/favourites.js | 83 + app/javascript/mastodon/actions/interactions.js | 235 + app/javascript/mastodon/actions/modal.js | 16 + app/javascript/mastodon/actions/mutes.js | 82 + app/javascript/mastodon/actions/notifications.js | 165 + app/javascript/mastodon/actions/onboarding.js | 14 + app/javascript/mastodon/actions/reports.js | 72 + app/javascript/mastodon/actions/search.js | 73 + app/javascript/mastodon/actions/settings.js | 19 + app/javascript/mastodon/actions/statuses.js | 141 + app/javascript/mastodon/actions/store.js | 17 + app/javascript/mastodon/actions/timelines.js | 186 + app/javascript/mastodon/api.js | 26 + app/javascript/mastodon/components/account.js | 93 + .../mastodon/components/attachment_list.js | 33 + .../mastodon/components/autosuggest_textarea.js | 213 + app/javascript/mastodon/components/avatar.js | 68 + app/javascript/mastodon/components/button.js | 50 + app/javascript/mastodon/components/collapsable.js | 21 + .../mastodon/components/column_back_button.js | 32 + .../mastodon/components/column_back_button_slim.js | 32 + .../mastodon/components/column_collapsable.js | 57 + app/javascript/mastodon/components/display_name.js | 25 + .../mastodon/components/dropdown_menu.js | 79 + .../mastodon/components/extended_video_player.js | 54 + app/javascript/mastodon/components/icon_button.js | 96 + app/javascript/mastodon/components/load_more.js | 15 + .../mastodon/components/loading_indicator.js | 10 + .../mastodon/components/media_gallery.js | 196 + .../mastodon/components/missing_indicator.js | 12 + app/javascript/mastodon/components/permalink.js | 41 + .../mastodon/components/relative_timestamp.js | 20 + app/javascript/mastodon/components/status.js | 123 + .../mastodon/components/status_action_bar.js | 138 + .../mastodon/components/status_content.js | 165 + app/javascript/mastodon/components/status_list.js | 130 + app/javascript/mastodon/components/video_player.js | 210 + .../mastodon/containers/account_container.js | 50 + app/javascript/mastodon/containers/mastodon.js | 314 + .../mastodon/containers/status_container.js | 118 + app/javascript/mastodon/emoji.js | 35 + .../features/account/components/action_bar.js | 93 + .../mastodon/features/account/components/header.js | 150 + .../features/account_timeline/components/header.js | 83 + .../containers/header_container.js | 76 + .../mastodon/features/account_timeline/index.js | 89 + app/javascript/mastodon/features/blocks/index.js | 74 + .../mastodon/features/community_timeline/index.js | 96 + .../compose/components/autosuggest_account.js | 26 + .../compose/components/character_counter.js | 27 + .../features/compose/components/compose_form.js | 211 + .../compose/components/emoji_picker_dropdown.js | 115 + .../features/compose/components/navigation_bar.js | 37 + .../compose/components/privacy_dropdown.js | 105 + .../features/compose/components/reply_indicator.js | 71 + .../mastodon/features/compose/components/search.js | 82 + .../features/compose/components/search_results.js | 67 + .../compose/components/text_icon_button.js | 36 + .../features/compose/components/upload_button.js | 61 + .../features/compose/components/upload_form.js | 46 + .../features/compose/components/upload_progress.js | 43 + .../features/compose/components/warning.js | 26 + .../containers/autosuggest_account_container.js | 15 + .../containers/autosuggest_status_container.js | 15 + .../compose/containers/compose_form_container.js | 64 + .../compose/containers/navigation_container.js | 10 + .../containers/privacy_dropdown_container.js | 17 + .../containers/reply_indicator_container.js | 24 + .../compose/containers/search_container.js | 35 + .../compose/containers/search_results_container.js | 8 + .../containers/sensitive_button_container.js | 51 + .../compose/containers/spoiler_button_container.js | 25 + .../compose/containers/upload_button_container.js | 18 + .../compose/containers/upload_form_container.js | 17 + .../containers/upload_progress_container.js | 9 + .../compose/containers/warning_container.js | 49 + app/javascript/mastodon/features/compose/index.js | 86 + .../mastodon/features/favourited_statuses/index.js | 67 + .../mastodon/features/favourites/index.js | 61 + .../components/account_authorize.js | 51 + .../containers/account_authorize_container.js | 26 + .../mastodon/features/follow_requests/index.js | 74 + .../mastodon/features/followers/index.js | 92 + .../mastodon/features/following/index.js | 92 + .../mastodon/features/generic_not_found/index.js | 11 + .../mastodon/features/getting_started/index.js | 73 + .../mastodon/features/hashtag_timeline/index.js | 90 + .../home_timeline/components/column_settings.js | 51 + .../home_timeline/components/setting_text.js | 38 + .../containers/column_settings_container.js | 21 + .../mastodon/features/home_timeline/index.js | 38 + app/javascript/mastodon/features/mutes/index.js | 75 + .../components/clear_column_button.js | 27 + .../notifications/components/column_settings.js | 71 + .../notifications/components/notification.js | 90 + .../notifications/components/setting_toggle.js | 21 + .../containers/column_settings_container.js | 21 + .../containers/notification_container.js | 15 + .../mastodon/features/notifications/index.js | 143 + .../mastodon/features/public_timeline/index.js | 96 + app/javascript/mastodon/features/reblogs/index.js | 61 + .../features/report/components/status_check_box.js | 40 + .../containers/status_check_box_container.js | 19 + app/javascript/mastodon/features/report/index.js | 131 + .../features/status/components/action_bar.js | 102 + .../mastodon/features/status/components/card.js | 96 + .../features/status/components/detailed_status.js | 96 + .../features/status/containers/card_container.js | 8 + app/javascript/mastodon/features/status/index.js | 199 + .../mastodon/features/ui/components/boost_modal.js | 84 + .../mastodon/features/ui/components/column.js | 93 + .../features/ui/components/column_header.js | 43 + .../mastodon/features/ui/components/column_link.js | 32 + .../features/ui/components/column_subheading.js | 16 + .../features/ui/components/columns_area.js | 20 + .../features/ui/components/confirmation_modal.js | 51 + .../mastodon/features/ui/components/media_modal.js | 103 + .../mastodon/features/ui/components/modal_root.js | 93 + .../features/ui/components/onboarding_modal.js | 264 + .../mastodon/features/ui/components/tabs_bar.js | 24 + .../mastodon/features/ui/components/upload_area.js | 60 + .../mastodon/features/ui/components/video_modal.js | 40 + .../ui/containers/loading_bar_container.js | 8 + .../features/ui/containers/modal_container.js | 16 + .../ui/containers/notifications_container.js | 21 + .../ui/containers/status_list_container.js | 74 + app/javascript/mastodon/features/ui/index.js | 169 + app/javascript/mastodon/is_mobile.js | 11 + app/javascript/mastodon/link_header.js | 33 + app/javascript/mastodon/locales/ar.json | 172 + app/javascript/mastodon/locales/bg.json | 163 + app/javascript/mastodon/locales/de.json | 163 + .../mastodon/locales/defaultMessages.json | 1068 ++ app/javascript/mastodon/locales/en.json | 163 + app/javascript/mastodon/locales/eo.json | 163 + app/javascript/mastodon/locales/es.json | 163 + app/javascript/mastodon/locales/fa.json | 163 + app/javascript/mastodon/locales/fi.json | 163 + app/javascript/mastodon/locales/fr.json | 163 + app/javascript/mastodon/locales/he.json | 165 + app/javascript/mastodon/locales/hr.json | 163 + app/javascript/mastodon/locales/hu.json | 163 + app/javascript/mastodon/locales/id.json | 167 + app/javascript/mastodon/locales/index.js | 57 + app/javascript/mastodon/locales/io.json | 163 + app/javascript/mastodon/locales/it.json | 163 + app/javascript/mastodon/locales/ja.json | 163 + app/javascript/mastodon/locales/nl.json | 163 + app/javascript/mastodon/locales/no.json | 163 + app/javascript/mastodon/locales/oc.json | 163 + app/javascript/mastodon/locales/pt-BR.json | 163 + app/javascript/mastodon/locales/pt.json | 163 + app/javascript/mastodon/locales/ru.json | 163 + app/javascript/mastodon/locales/uk.json | 163 + app/javascript/mastodon/locales/whitelist_ar.json | 2 + app/javascript/mastodon/locales/whitelist_bg.json | 2 + app/javascript/mastodon/locales/whitelist_de.json | 2 + app/javascript/mastodon/locales/whitelist_en.json | 2 + app/javascript/mastodon/locales/whitelist_eo.json | 2 + app/javascript/mastodon/locales/whitelist_es.json | 2 + app/javascript/mastodon/locales/whitelist_fa.json | 2 + app/javascript/mastodon/locales/whitelist_fi.json | 2 + app/javascript/mastodon/locales/whitelist_fr.json | 2 + app/javascript/mastodon/locales/whitelist_hr.json | 2 + app/javascript/mastodon/locales/whitelist_hu.json | 2 + app/javascript/mastodon/locales/whitelist_id.json | 2 + app/javascript/mastodon/locales/whitelist_io.json | 2 + app/javascript/mastodon/locales/whitelist_it.json | 2 + app/javascript/mastodon/locales/whitelist_ja.json | 2 + app/javascript/mastodon/locales/whitelist_nl.json | 2 + app/javascript/mastodon/locales/whitelist_no.json | 2 + app/javascript/mastodon/locales/whitelist_oc.json | 2 + .../mastodon/locales/whitelist_pt-BR.json | 2 + app/javascript/mastodon/locales/whitelist_pt.json | 2 + app/javascript/mastodon/locales/whitelist_ru.json | 2 + app/javascript/mastodon/locales/whitelist_uk.json | 2 + .../mastodon/locales/whitelist_zh-CN.json | 2 + .../mastodon/locales/whitelist_zh-HK.json | 2 + app/javascript/mastodon/locales/zh-CN.json | 163 + app/javascript/mastodon/locales/zh-HK.json | 163 + app/javascript/mastodon/middleware/errors.js | 33 + app/javascript/mastodon/middleware/loading_bar.js | 25 + app/javascript/mastodon/middleware/sounds.js | 22 + app/javascript/mastodon/reducers/accounts.js | 133 + .../mastodon/reducers/accounts_counters.js | 135 + app/javascript/mastodon/reducers/alerts.js | 25 + app/javascript/mastodon/reducers/cards.js | 14 + app/javascript/mastodon/reducers/compose.js | 232 + app/javascript/mastodon/reducers/index.js | 38 + app/javascript/mastodon/reducers/meta.js | 17 + app/javascript/mastodon/reducers/modal.js | 18 + app/javascript/mastodon/reducers/notifications.js | 104 + app/javascript/mastodon/reducers/relationships.js | 38 + app/javascript/mastodon/reducers/reports.js | 60 + app/javascript/mastodon/reducers/search.js | 96 + app/javascript/mastodon/reducers/settings.js | 52 + app/javascript/mastodon/reducers/status_lists.js | 39 + app/javascript/mastodon/reducers/statuses.js | 124 + app/javascript/mastodon/reducers/timelines.js | 317 + app/javascript/mastodon/reducers/user_lists.js | 80 + app/javascript/mastodon/rtl.js | 27 + app/javascript/mastodon/selectors/index.js | 73 + app/javascript/mastodon/store/configureStore.js | 16 + app/javascript/mastodon/stream.js | 22 + app/javascript/mastodon/uuid.js | 3 + app/javascript/packs/application.js | 29 + app/javascript/packs/public.js | 53 + app/javascript/styles/about.scss | 374 + app/javascript/styles/accounts.scss | 391 + app/javascript/styles/admin.scss | 245 + app/javascript/styles/application.scss | 20 + app/javascript/styles/basics.scss | 58 + app/javascript/styles/boost.scss | 11 + app/javascript/styles/compact_header.scss | 28 + app/javascript/styles/components.scss | 3189 ++++ app/javascript/styles/containers.scss | 71 + app/javascript/styles/fonts/montserrat.scss | 11 + app/javascript/styles/fonts/roboto-mono.scss | 12 + app/javascript/styles/fonts/roboto.scss | 52 + app/javascript/styles/footer.scss | 29 + app/javascript/styles/forms.scss | 335 + app/javascript/styles/landing_strip.scss | 17 + app/javascript/styles/lists.scss | 20 + app/javascript/styles/reset.scss | 91 + app/javascript/styles/rtl.scss | 136 + app/javascript/styles/stream_entries.scss | 372 + app/javascript/styles/tables.scss | 65 + app/javascript/styles/variables.scss | 8 + app/views/about/show.html.haml | 8 +- app/views/home/index.html.haml | 4 +- app/views/layouts/admin.html.haml | 4 +- app/views/layouts/application.html.haml | 4 +- app/views/layouts/auth.html.haml | 4 +- app/views/layouts/embedded.html.haml | 2 +- app/views/layouts/public.html.haml | 2 +- bin/webpack | 33 + bin/webpack-dev-server | 33 + bin/yarn | 11 + config/application.rb | 4 - config/environments/development.rb | 2 - config/environments/production.rb | 2 - config/initializers/assets.rb | 2 +- config/webpack/configuration.js | 26 + config/webpack/development.js | 16 + config/webpack/development.server.js | 18 + config/webpack/development.server.yml | 17 + config/webpack/loaders/assets.js | 12 + config/webpack/loaders/babel.js | 5 + config/webpack/loaders/coffee.js | 4 + config/webpack/loaders/erb.js | 9 + config/webpack/loaders/sass.js | 14 + config/webpack/paths.yml | 33 + config/webpack/production.js | 44 + config/webpack/shared.js | 59 + config/webpack/test.js | 6 + config/webpack/translationRunner.js | 34 + docker-compose.yml | 17 +- package.json | 58 +- .../controllers/api/v1/accounts_controller_spec.rb | 7 +- spec/features/log_in_spec.rb | 2 +- spec/javascript/components/avatar.test.jsx | 2 +- spec/javascript/components/button.test.jsx | 2 +- spec/javascript/components/display_name.test.jsx | 2 +- spec/javascript/components/dropdown_menu.test.jsx | 2 +- .../features/ui/components/column.test.jsx | 4 +- .../components/loading_indicator.test.jsx | 2 +- yarn.lock | 1762 +- 579 files changed, 89022 insertions(+), 85804 deletions(-) create mode 100644 .foreman create mode 100644 .postcssrc.yml create mode 100644 Procfile.dev delete mode 100644 app/assets/fonts/montserrat/Montserrat-Regular.eot delete mode 100644 app/assets/fonts/montserrat/Montserrat-Regular.ttf delete mode 100644 app/assets/fonts/montserrat/Montserrat-Regular.woff delete mode 100644 app/assets/fonts/montserrat/Montserrat-Regular.woff2 delete mode 100644 app/assets/fonts/roboto-mono/robotomono-regular-webfont.eot delete mode 100644 app/assets/fonts/roboto-mono/robotomono-regular-webfont.svg delete mode 100644 app/assets/fonts/roboto-mono/robotomono-regular-webfont.ttf delete mode 100644 app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff delete mode 100644 app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff2 delete mode 100644 app/assets/fonts/roboto/roboto-bold-webfont.eot delete mode 100644 app/assets/fonts/roboto/roboto-bold-webfont.svg delete mode 100644 app/assets/fonts/roboto/roboto-bold-webfont.ttf delete mode 100644 app/assets/fonts/roboto/roboto-bold-webfont.woff delete mode 100644 app/assets/fonts/roboto/roboto-bold-webfont.woff2 delete mode 100644 app/assets/fonts/roboto/roboto-italic-webfont.eot delete mode 100644 app/assets/fonts/roboto/roboto-italic-webfont.svg delete mode 100644 app/assets/fonts/roboto/roboto-italic-webfont.ttf delete mode 100644 app/assets/fonts/roboto/roboto-italic-webfont.woff delete mode 100644 app/assets/fonts/roboto/roboto-italic-webfont.woff2 delete mode 100644 app/assets/fonts/roboto/roboto-medium-webfont.eot delete mode 100644 app/assets/fonts/roboto/roboto-medium-webfont.svg delete mode 100644 app/assets/fonts/roboto/roboto-medium-webfont.ttf delete mode 100644 app/assets/fonts/roboto/roboto-medium-webfont.woff delete mode 100644 app/assets/fonts/roboto/roboto-medium-webfont.woff2 delete mode 100644 app/assets/fonts/roboto/roboto-regular-webfont.eot delete mode 100644 app/assets/fonts/roboto/roboto-regular-webfont.svg delete mode 100644 app/assets/fonts/roboto/roboto-regular-webfont.ttf delete mode 100644 app/assets/fonts/roboto/roboto-regular-webfont.woff delete mode 100644 app/assets/fonts/roboto/roboto-regular-webfont.woff2 delete mode 100644 app/assets/images/.keep delete mode 100644 app/assets/images/background-photo.jpg delete mode 100644 app/assets/images/boost_sprite.png delete mode 100644 app/assets/images/elephant-friend.png delete mode 100644 app/assets/images/fluffy-elephant-friend.png delete mode 100644 app/assets/images/logo.png delete mode 100644 app/assets/images/logo.svg delete mode 100644 app/assets/images/mastodon-getting-started.png delete mode 100644 app/assets/images/mastodon-not-found.png delete mode 100644 app/assets/images/mastodon.jpg delete mode 100644 app/assets/images/mastodon_small.jpg delete mode 100644 app/assets/images/screenshot.png delete mode 100644 app/assets/images/void.png delete mode 100644 app/assets/javascripts/application.js delete mode 100644 app/assets/javascripts/application_public.js delete mode 100644 app/assets/javascripts/components.js delete mode 100644 app/assets/javascripts/components/.gitkeep delete mode 100644 app/assets/javascripts/components/actions/accounts.jsx delete mode 100644 app/assets/javascripts/components/actions/alerts.jsx delete mode 100644 app/assets/javascripts/components/actions/blocks.jsx delete mode 100644 app/assets/javascripts/components/actions/cards.jsx delete mode 100644 app/assets/javascripts/components/actions/compose.jsx delete mode 100644 app/assets/javascripts/components/actions/favourites.jsx delete mode 100644 app/assets/javascripts/components/actions/interactions.jsx delete mode 100644 app/assets/javascripts/components/actions/modal.jsx delete mode 100644 app/assets/javascripts/components/actions/mutes.jsx delete mode 100644 app/assets/javascripts/components/actions/notifications.jsx delete mode 100644 app/assets/javascripts/components/actions/onboarding.jsx delete mode 100644 app/assets/javascripts/components/actions/reports.jsx delete mode 100644 app/assets/javascripts/components/actions/search.jsx delete mode 100644 app/assets/javascripts/components/actions/settings.jsx delete mode 100644 app/assets/javascripts/components/actions/statuses.jsx delete mode 100644 app/assets/javascripts/components/actions/store.jsx delete mode 100644 app/assets/javascripts/components/actions/timelines.jsx delete mode 100644 app/assets/javascripts/components/api.jsx delete mode 100644 app/assets/javascripts/components/components/account.jsx delete mode 100644 app/assets/javascripts/components/components/attachment_list.jsx delete mode 100644 app/assets/javascripts/components/components/autosuggest_textarea.jsx delete mode 100644 app/assets/javascripts/components/components/avatar.jsx delete mode 100644 app/assets/javascripts/components/components/button.jsx delete mode 100644 app/assets/javascripts/components/components/collapsable.jsx delete mode 100644 app/assets/javascripts/components/components/column_back_button.jsx delete mode 100644 app/assets/javascripts/components/components/column_back_button_slim.jsx delete mode 100644 app/assets/javascripts/components/components/column_collapsable.jsx delete mode 100644 app/assets/javascripts/components/components/display_name.jsx delete mode 100644 app/assets/javascripts/components/components/dropdown_menu.jsx delete mode 100644 app/assets/javascripts/components/components/extended_video_player.jsx delete mode 100644 app/assets/javascripts/components/components/icon_button.jsx delete mode 100644 app/assets/javascripts/components/components/load_more.jsx delete mode 100644 app/assets/javascripts/components/components/loading_indicator.jsx delete mode 100644 app/assets/javascripts/components/components/media_gallery.jsx delete mode 100644 app/assets/javascripts/components/components/missing_indicator.jsx delete mode 100644 app/assets/javascripts/components/components/permalink.jsx delete mode 100644 app/assets/javascripts/components/components/relative_timestamp.jsx delete mode 100644 app/assets/javascripts/components/components/status.jsx delete mode 100644 app/assets/javascripts/components/components/status_action_bar.jsx delete mode 100644 app/assets/javascripts/components/components/status_content.jsx delete mode 100644 app/assets/javascripts/components/components/status_list.jsx delete mode 100644 app/assets/javascripts/components/components/video_player.jsx delete mode 100644 app/assets/javascripts/components/containers/account_container.jsx delete mode 100644 app/assets/javascripts/components/containers/mastodon.jsx delete mode 100644 app/assets/javascripts/components/containers/status_container.jsx delete mode 100644 app/assets/javascripts/components/emoji.jsx delete mode 100644 app/assets/javascripts/components/features/account/components/action_bar.jsx delete mode 100644 app/assets/javascripts/components/features/account/components/header.jsx delete mode 100644 app/assets/javascripts/components/features/account_timeline/components/header.jsx delete mode 100644 app/assets/javascripts/components/features/account_timeline/containers/header_container.jsx delete mode 100644 app/assets/javascripts/components/features/account_timeline/index.jsx delete mode 100644 app/assets/javascripts/components/features/blocks/index.jsx delete mode 100644 app/assets/javascripts/components/features/community_timeline/index.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/autosuggest_account.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/autosuggest_status.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/character_counter.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/compose_form.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/emoji_picker_dropdown.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/navigation_bar.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/privacy_dropdown.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/reply_indicator.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/search.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/search_results.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/text_icon_button.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/upload_button.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/upload_form.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/upload_progress.jsx delete mode 100644 app/assets/javascripts/components/features/compose/components/warning.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/autosuggest_account_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/autosuggest_status_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/compose_form_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/navigation_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/privacy_dropdown_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/reply_indicator_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/search_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/search_results_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/sensitive_button_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/spoiler_button_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/upload_button_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/upload_form_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/upload_progress_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/containers/warning_container.jsx delete mode 100644 app/assets/javascripts/components/features/compose/index.jsx delete mode 100644 app/assets/javascripts/components/features/favourited_statuses/index.jsx delete mode 100644 app/assets/javascripts/components/features/favourites/index.jsx delete mode 100644 app/assets/javascripts/components/features/follow_requests/components/account_authorize.jsx delete mode 100644 app/assets/javascripts/components/features/follow_requests/containers/account_authorize_container.jsx delete mode 100644 app/assets/javascripts/components/features/follow_requests/index.jsx delete mode 100644 app/assets/javascripts/components/features/followers/index.jsx delete mode 100644 app/assets/javascripts/components/features/following/index.jsx delete mode 100644 app/assets/javascripts/components/features/generic_not_found/index.jsx delete mode 100644 app/assets/javascripts/components/features/getting_started/index.jsx delete mode 100644 app/assets/javascripts/components/features/hashtag_timeline/index.jsx delete mode 100644 app/assets/javascripts/components/features/home_timeline/components/column_settings.jsx delete mode 100644 app/assets/javascripts/components/features/home_timeline/components/setting_text.jsx delete mode 100644 app/assets/javascripts/components/features/home_timeline/containers/column_settings_container.jsx delete mode 100644 app/assets/javascripts/components/features/home_timeline/index.jsx delete mode 100644 app/assets/javascripts/components/features/mutes/index.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/components/clear_column_button.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/components/column_settings.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/components/notification.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/components/setting_toggle.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/containers/column_settings_container.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/containers/notification_container.jsx delete mode 100644 app/assets/javascripts/components/features/notifications/index.jsx delete mode 100644 app/assets/javascripts/components/features/public_timeline/index.jsx delete mode 100644 app/assets/javascripts/components/features/reblogs/index.jsx delete mode 100644 app/assets/javascripts/components/features/report/components/status_check_box.jsx delete mode 100644 app/assets/javascripts/components/features/report/containers/status_check_box_container.jsx delete mode 100644 app/assets/javascripts/components/features/report/index.jsx delete mode 100644 app/assets/javascripts/components/features/status/components/action_bar.jsx delete mode 100644 app/assets/javascripts/components/features/status/components/card.jsx delete mode 100644 app/assets/javascripts/components/features/status/components/detailed_status.jsx delete mode 100644 app/assets/javascripts/components/features/status/containers/card_container.jsx delete mode 100644 app/assets/javascripts/components/features/status/index.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/boost_modal.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/column.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/column_header.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/column_link.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/column_subheading.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/columns_area.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/confirmation_modal.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/media_modal.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/modal_root.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/onboarding_modal.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/tabs_bar.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/upload_area.jsx delete mode 100644 app/assets/javascripts/components/features/ui/components/video_modal.jsx delete mode 100644 app/assets/javascripts/components/features/ui/containers/loading_bar_container.jsx delete mode 100644 app/assets/javascripts/components/features/ui/containers/modal_container.jsx delete mode 100644 app/assets/javascripts/components/features/ui/containers/notifications_container.jsx delete mode 100644 app/assets/javascripts/components/features/ui/containers/status_list_container.jsx delete mode 100644 app/assets/javascripts/components/features/ui/index.jsx delete mode 100644 app/assets/javascripts/components/is_mobile.jsx delete mode 100644 app/assets/javascripts/components/link_header.jsx delete mode 100644 app/assets/javascripts/components/locales/ar.jsx delete mode 100644 app/assets/javascripts/components/locales/bg.jsx delete mode 100644 app/assets/javascripts/components/locales/de.jsx delete mode 100644 app/assets/javascripts/components/locales/en.jsx delete mode 100644 app/assets/javascripts/components/locales/eo.jsx delete mode 100644 app/assets/javascripts/components/locales/es.jsx delete mode 100644 app/assets/javascripts/components/locales/fa.jsx delete mode 100644 app/assets/javascripts/components/locales/fi.jsx delete mode 100644 app/assets/javascripts/components/locales/fr.jsx delete mode 100644 app/assets/javascripts/components/locales/he.jsx delete mode 100644 app/assets/javascripts/components/locales/hr.jsx delete mode 100644 app/assets/javascripts/components/locales/hu.jsx delete mode 100644 app/assets/javascripts/components/locales/id.jsx delete mode 100644 app/assets/javascripts/components/locales/index.jsx delete mode 100644 app/assets/javascripts/components/locales/io.jsx delete mode 100644 app/assets/javascripts/components/locales/it.jsx delete mode 100644 app/assets/javascripts/components/locales/ja.jsx delete mode 100644 app/assets/javascripts/components/locales/nl.jsx delete mode 100644 app/assets/javascripts/components/locales/no.jsx delete mode 100644 app/assets/javascripts/components/locales/oc.jsx delete mode 100644 app/assets/javascripts/components/locales/pt-br.jsx delete mode 100644 app/assets/javascripts/components/locales/pt.jsx delete mode 100644 app/assets/javascripts/components/locales/ru.jsx delete mode 100644 app/assets/javascripts/components/locales/uk.jsx delete mode 100644 app/assets/javascripts/components/locales/zh-cn.jsx delete mode 100644 app/assets/javascripts/components/locales/zh-hk.jsx delete mode 100644 app/assets/javascripts/components/middleware/errors.jsx delete mode 100644 app/assets/javascripts/components/middleware/loading_bar.jsx delete mode 100644 app/assets/javascripts/components/middleware/sounds.jsx delete mode 100644 app/assets/javascripts/components/reducers/accounts.jsx delete mode 100644 app/assets/javascripts/components/reducers/alerts.jsx delete mode 100644 app/assets/javascripts/components/reducers/cards.jsx delete mode 100644 app/assets/javascripts/components/reducers/compose.jsx delete mode 100644 app/assets/javascripts/components/reducers/index.jsx delete mode 100644 app/assets/javascripts/components/reducers/meta.jsx delete mode 100644 app/assets/javascripts/components/reducers/modal.jsx delete mode 100644 app/assets/javascripts/components/reducers/notifications.jsx delete mode 100644 app/assets/javascripts/components/reducers/relationships.jsx delete mode 100644 app/assets/javascripts/components/reducers/reports.jsx delete mode 100644 app/assets/javascripts/components/reducers/search.jsx delete mode 100644 app/assets/javascripts/components/reducers/settings.jsx delete mode 100644 app/assets/javascripts/components/reducers/status_lists.jsx delete mode 100644 app/assets/javascripts/components/reducers/statuses.jsx delete mode 100644 app/assets/javascripts/components/reducers/timelines.jsx delete mode 100644 app/assets/javascripts/components/reducers/user_lists.jsx delete mode 100644 app/assets/javascripts/components/rtl.jsx delete mode 100644 app/assets/javascripts/components/selectors/index.jsx delete mode 100644 app/assets/javascripts/components/store/configureStore.jsx delete mode 100644 app/assets/javascripts/components/stream.jsx delete mode 100644 app/assets/javascripts/components/uuid.jsx delete mode 100644 app/assets/javascripts/extras.jsx create mode 100644 app/assets/stylesheets/.gitkeep delete mode 100644 app/assets/stylesheets/about.scss delete mode 100644 app/assets/stylesheets/accounts.scss delete mode 100644 app/assets/stylesheets/admin.scss delete mode 100644 app/assets/stylesheets/application.scss delete mode 100644 app/assets/stylesheets/basics.scss delete mode 100644 app/assets/stylesheets/boost.scss delete mode 100644 app/assets/stylesheets/compact_header.scss delete mode 100644 app/assets/stylesheets/components.scss delete mode 100644 app/assets/stylesheets/containers.scss delete mode 100644 app/assets/stylesheets/fonts/montserrat.scss delete mode 100644 app/assets/stylesheets/fonts/roboto-mono.scss delete mode 100644 app/assets/stylesheets/fonts/roboto.scss delete mode 100644 app/assets/stylesheets/footer.scss delete mode 100644 app/assets/stylesheets/forms.scss delete mode 100644 app/assets/stylesheets/landing_strip.scss delete mode 100644 app/assets/stylesheets/lists.scss delete mode 100644 app/assets/stylesheets/reset.scss delete mode 100644 app/assets/stylesheets/rtl.scss delete mode 100644 app/assets/stylesheets/stream_entries.scss delete mode 100644 app/assets/stylesheets/tables.scss delete mode 100755 app/assets/stylesheets/variables.scss create mode 100644 app/javascript/fonts/montserrat/Montserrat-Regular.eot create mode 100644 app/javascript/fonts/montserrat/Montserrat-Regular.ttf create mode 100644 app/javascript/fonts/montserrat/Montserrat-Regular.woff create mode 100644 app/javascript/fonts/montserrat/Montserrat-Regular.woff2 create mode 100644 app/javascript/fonts/roboto-mono/robotomono-regular-webfont.eot create mode 100644 app/javascript/fonts/roboto-mono/robotomono-regular-webfont.svg create mode 100644 app/javascript/fonts/roboto-mono/robotomono-regular-webfont.ttf create mode 100644 app/javascript/fonts/roboto-mono/robotomono-regular-webfont.woff create mode 100644 app/javascript/fonts/roboto-mono/robotomono-regular-webfont.woff2 create mode 100644 app/javascript/fonts/roboto/roboto-bold-webfont.eot create mode 100644 app/javascript/fonts/roboto/roboto-bold-webfont.svg create mode 100644 app/javascript/fonts/roboto/roboto-bold-webfont.ttf create mode 100644 app/javascript/fonts/roboto/roboto-bold-webfont.woff create mode 100644 app/javascript/fonts/roboto/roboto-bold-webfont.woff2 create mode 100644 app/javascript/fonts/roboto/roboto-italic-webfont.eot create mode 100644 app/javascript/fonts/roboto/roboto-italic-webfont.svg create mode 100644 app/javascript/fonts/roboto/roboto-italic-webfont.ttf create mode 100644 app/javascript/fonts/roboto/roboto-italic-webfont.woff create mode 100644 app/javascript/fonts/roboto/roboto-italic-webfont.woff2 create mode 100644 app/javascript/fonts/roboto/roboto-medium-webfont.eot create mode 100644 app/javascript/fonts/roboto/roboto-medium-webfont.svg create mode 100644 app/javascript/fonts/roboto/roboto-medium-webfont.ttf create mode 100644 app/javascript/fonts/roboto/roboto-medium-webfont.woff create mode 100644 app/javascript/fonts/roboto/roboto-medium-webfont.woff2 create mode 100644 app/javascript/fonts/roboto/roboto-regular-webfont.eot create mode 100644 app/javascript/fonts/roboto/roboto-regular-webfont.svg create mode 100644 app/javascript/fonts/roboto/roboto-regular-webfont.ttf create mode 100644 app/javascript/fonts/roboto/roboto-regular-webfont.woff create mode 100644 app/javascript/fonts/roboto/roboto-regular-webfont.woff2 create mode 100644 app/javascript/images/.keep create mode 100644 app/javascript/images/background-photo.jpg create mode 100644 app/javascript/images/boost_sprite.png create mode 100644 app/javascript/images/elephant-friend.png create mode 100644 app/javascript/images/fluffy-elephant-friend.png create mode 100644 app/javascript/images/logo.png create mode 100644 app/javascript/images/logo.svg create mode 100644 app/javascript/images/mastodon-getting-started.png create mode 100644 app/javascript/images/mastodon-not-found.png create mode 100644 app/javascript/images/mastodon.jpg create mode 100644 app/javascript/images/mastodon_small.jpg create mode 100644 app/javascript/images/screenshot.png create mode 100644 app/javascript/images/void.png create mode 100644 app/javascript/mastodon/.gitkeep create mode 100644 app/javascript/mastodon/actions/accounts.js create mode 100644 app/javascript/mastodon/actions/alerts.js create mode 100644 app/javascript/mastodon/actions/blocks.js create mode 100644 app/javascript/mastodon/actions/cards.js create mode 100644 app/javascript/mastodon/actions/compose.js create mode 100644 app/javascript/mastodon/actions/favourites.js create mode 100644 app/javascript/mastodon/actions/interactions.js create mode 100644 app/javascript/mastodon/actions/modal.js create mode 100644 app/javascript/mastodon/actions/mutes.js create mode 100644 app/javascript/mastodon/actions/notifications.js create mode 100644 app/javascript/mastodon/actions/onboarding.js create mode 100644 app/javascript/mastodon/actions/reports.js create mode 100644 app/javascript/mastodon/actions/search.js create mode 100644 app/javascript/mastodon/actions/settings.js create mode 100644 app/javascript/mastodon/actions/statuses.js create mode 100644 app/javascript/mastodon/actions/store.js create mode 100644 app/javascript/mastodon/actions/timelines.js create mode 100644 app/javascript/mastodon/api.js create mode 100644 app/javascript/mastodon/components/account.js create mode 100644 app/javascript/mastodon/components/attachment_list.js create mode 100644 app/javascript/mastodon/components/autosuggest_textarea.js create mode 100644 app/javascript/mastodon/components/avatar.js create mode 100644 app/javascript/mastodon/components/button.js create mode 100644 app/javascript/mastodon/components/collapsable.js create mode 100644 app/javascript/mastodon/components/column_back_button.js create mode 100644 app/javascript/mastodon/components/column_back_button_slim.js create mode 100644 app/javascript/mastodon/components/column_collapsable.js create mode 100644 app/javascript/mastodon/components/display_name.js create mode 100644 app/javascript/mastodon/components/dropdown_menu.js create mode 100644 app/javascript/mastodon/components/extended_video_player.js create mode 100644 app/javascript/mastodon/components/icon_button.js create mode 100644 app/javascript/mastodon/components/load_more.js create mode 100644 app/javascript/mastodon/components/loading_indicator.js create mode 100644 app/javascript/mastodon/components/media_gallery.js create mode 100644 app/javascript/mastodon/components/missing_indicator.js create mode 100644 app/javascript/mastodon/components/permalink.js create mode 100644 app/javascript/mastodon/components/relative_timestamp.js create mode 100644 app/javascript/mastodon/components/status.js create mode 100644 app/javascript/mastodon/components/status_action_bar.js create mode 100644 app/javascript/mastodon/components/status_content.js create mode 100644 app/javascript/mastodon/components/status_list.js create mode 100644 app/javascript/mastodon/components/video_player.js create mode 100644 app/javascript/mastodon/containers/account_container.js create mode 100644 app/javascript/mastodon/containers/mastodon.js create mode 100644 app/javascript/mastodon/containers/status_container.js create mode 100644 app/javascript/mastodon/emoji.js create mode 100644 app/javascript/mastodon/features/account/components/action_bar.js create mode 100644 app/javascript/mastodon/features/account/components/header.js create mode 100644 app/javascript/mastodon/features/account_timeline/components/header.js create mode 100644 app/javascript/mastodon/features/account_timeline/containers/header_container.js create mode 100644 app/javascript/mastodon/features/account_timeline/index.js create mode 100644 app/javascript/mastodon/features/blocks/index.js create mode 100644 app/javascript/mastodon/features/community_timeline/index.js create mode 100644 app/javascript/mastodon/features/compose/components/autosuggest_account.js create mode 100644 app/javascript/mastodon/features/compose/components/character_counter.js create mode 100644 app/javascript/mastodon/features/compose/components/compose_form.js create mode 100644 app/javascript/mastodon/features/compose/components/emoji_picker_dropdown.js create mode 100644 app/javascript/mastodon/features/compose/components/navigation_bar.js create mode 100644 app/javascript/mastodon/features/compose/components/privacy_dropdown.js create mode 100644 app/javascript/mastodon/features/compose/components/reply_indicator.js create mode 100644 app/javascript/mastodon/features/compose/components/search.js create mode 100644 app/javascript/mastodon/features/compose/components/search_results.js create mode 100644 app/javascript/mastodon/features/compose/components/text_icon_button.js create mode 100644 app/javascript/mastodon/features/compose/components/upload_button.js create mode 100644 app/javascript/mastodon/features/compose/components/upload_form.js create mode 100644 app/javascript/mastodon/features/compose/components/upload_progress.js create mode 100644 app/javascript/mastodon/features/compose/components/warning.js create mode 100644 app/javascript/mastodon/features/compose/containers/autosuggest_account_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/autosuggest_status_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/compose_form_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/navigation_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/privacy_dropdown_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/reply_indicator_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/search_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/search_results_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/sensitive_button_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/spoiler_button_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/upload_button_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/upload_form_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/upload_progress_container.js create mode 100644 app/javascript/mastodon/features/compose/containers/warning_container.js create mode 100644 app/javascript/mastodon/features/compose/index.js create mode 100644 app/javascript/mastodon/features/favourited_statuses/index.js create mode 100644 app/javascript/mastodon/features/favourites/index.js create mode 100644 app/javascript/mastodon/features/follow_requests/components/account_authorize.js create mode 100644 app/javascript/mastodon/features/follow_requests/containers/account_authorize_container.js create mode 100644 app/javascript/mastodon/features/follow_requests/index.js create mode 100644 app/javascript/mastodon/features/followers/index.js create mode 100644 app/javascript/mastodon/features/following/index.js create mode 100644 app/javascript/mastodon/features/generic_not_found/index.js create mode 100644 app/javascript/mastodon/features/getting_started/index.js create mode 100644 app/javascript/mastodon/features/hashtag_timeline/index.js create mode 100644 app/javascript/mastodon/features/home_timeline/components/column_settings.js create mode 100644 app/javascript/mastodon/features/home_timeline/components/setting_text.js create mode 100644 app/javascript/mastodon/features/home_timeline/containers/column_settings_container.js create mode 100644 app/javascript/mastodon/features/home_timeline/index.js create mode 100644 app/javascript/mastodon/features/mutes/index.js create mode 100644 app/javascript/mastodon/features/notifications/components/clear_column_button.js create mode 100644 app/javascript/mastodon/features/notifications/components/column_settings.js create mode 100644 app/javascript/mastodon/features/notifications/components/notification.js create mode 100644 app/javascript/mastodon/features/notifications/components/setting_toggle.js create mode 100644 app/javascript/mastodon/features/notifications/containers/column_settings_container.js create mode 100644 app/javascript/mastodon/features/notifications/containers/notification_container.js create mode 100644 app/javascript/mastodon/features/notifications/index.js create mode 100644 app/javascript/mastodon/features/public_timeline/index.js create mode 100644 app/javascript/mastodon/features/reblogs/index.js create mode 100644 app/javascript/mastodon/features/report/components/status_check_box.js create mode 100644 app/javascript/mastodon/features/report/containers/status_check_box_container.js create mode 100644 app/javascript/mastodon/features/report/index.js create mode 100644 app/javascript/mastodon/features/status/components/action_bar.js create mode 100644 app/javascript/mastodon/features/status/components/card.js create mode 100644 app/javascript/mastodon/features/status/components/detailed_status.js create mode 100644 app/javascript/mastodon/features/status/containers/card_container.js create mode 100644 app/javascript/mastodon/features/status/index.js create mode 100644 app/javascript/mastodon/features/ui/components/boost_modal.js create mode 100644 app/javascript/mastodon/features/ui/components/column.js create mode 100644 app/javascript/mastodon/features/ui/components/column_header.js create mode 100644 app/javascript/mastodon/features/ui/components/column_link.js create mode 100644 app/javascript/mastodon/features/ui/components/column_subheading.js create mode 100644 app/javascript/mastodon/features/ui/components/columns_area.js create mode 100644 app/javascript/mastodon/features/ui/components/confirmation_modal.js create mode 100644 app/javascript/mastodon/features/ui/components/media_modal.js create mode 100644 app/javascript/mastodon/features/ui/components/modal_root.js create mode 100644 app/javascript/mastodon/features/ui/components/onboarding_modal.js create mode 100644 app/javascript/mastodon/features/ui/components/tabs_bar.js create mode 100644 app/javascript/mastodon/features/ui/components/upload_area.js create mode 100644 app/javascript/mastodon/features/ui/components/video_modal.js create mode 100644 app/javascript/mastodon/features/ui/containers/loading_bar_container.js create mode 100644 app/javascript/mastodon/features/ui/containers/modal_container.js create mode 100644 app/javascript/mastodon/features/ui/containers/notifications_container.js create mode 100644 app/javascript/mastodon/features/ui/containers/status_list_container.js create mode 100644 app/javascript/mastodon/features/ui/index.js create mode 100644 app/javascript/mastodon/is_mobile.js create mode 100644 app/javascript/mastodon/link_header.js create mode 100644 app/javascript/mastodon/locales/ar.json create mode 100644 app/javascript/mastodon/locales/bg.json create mode 100644 app/javascript/mastodon/locales/de.json create mode 100644 app/javascript/mastodon/locales/defaultMessages.json create mode 100644 app/javascript/mastodon/locales/en.json create mode 100644 app/javascript/mastodon/locales/eo.json create mode 100644 app/javascript/mastodon/locales/es.json create mode 100644 app/javascript/mastodon/locales/fa.json create mode 100644 app/javascript/mastodon/locales/fi.json create mode 100644 app/javascript/mastodon/locales/fr.json create mode 100644 app/javascript/mastodon/locales/he.json create mode 100644 app/javascript/mastodon/locales/hr.json create mode 100644 app/javascript/mastodon/locales/hu.json create mode 100644 app/javascript/mastodon/locales/id.json create mode 100644 app/javascript/mastodon/locales/index.js create mode 100644 app/javascript/mastodon/locales/io.json create mode 100644 app/javascript/mastodon/locales/it.json create mode 100644 app/javascript/mastodon/locales/ja.json create mode 100644 app/javascript/mastodon/locales/nl.json create mode 100644 app/javascript/mastodon/locales/no.json create mode 100644 app/javascript/mastodon/locales/oc.json create mode 100644 app/javascript/mastodon/locales/pt-BR.json create mode 100644 app/javascript/mastodon/locales/pt.json create mode 100644 app/javascript/mastodon/locales/ru.json create mode 100644 app/javascript/mastodon/locales/uk.json create mode 100644 app/javascript/mastodon/locales/whitelist_ar.json create mode 100644 app/javascript/mastodon/locales/whitelist_bg.json create mode 100644 app/javascript/mastodon/locales/whitelist_de.json create mode 100644 app/javascript/mastodon/locales/whitelist_en.json create mode 100644 app/javascript/mastodon/locales/whitelist_eo.json create mode 100644 app/javascript/mastodon/locales/whitelist_es.json create mode 100644 app/javascript/mastodon/locales/whitelist_fa.json create mode 100644 app/javascript/mastodon/locales/whitelist_fi.json create mode 100644 app/javascript/mastodon/locales/whitelist_fr.json create mode 100644 app/javascript/mastodon/locales/whitelist_hr.json create mode 100644 app/javascript/mastodon/locales/whitelist_hu.json create mode 100644 app/javascript/mastodon/locales/whitelist_id.json create mode 100644 app/javascript/mastodon/locales/whitelist_io.json create mode 100644 app/javascript/mastodon/locales/whitelist_it.json create mode 100644 app/javascript/mastodon/locales/whitelist_ja.json create mode 100644 app/javascript/mastodon/locales/whitelist_nl.json create mode 100644 app/javascript/mastodon/locales/whitelist_no.json create mode 100644 app/javascript/mastodon/locales/whitelist_oc.json create mode 100644 app/javascript/mastodon/locales/whitelist_pt-BR.json create mode 100644 app/javascript/mastodon/locales/whitelist_pt.json create mode 100644 app/javascript/mastodon/locales/whitelist_ru.json create mode 100644 app/javascript/mastodon/locales/whitelist_uk.json create mode 100644 app/javascript/mastodon/locales/whitelist_zh-CN.json create mode 100644 app/javascript/mastodon/locales/whitelist_zh-HK.json create mode 100644 app/javascript/mastodon/locales/zh-CN.json create mode 100644 app/javascript/mastodon/locales/zh-HK.json create mode 100644 app/javascript/mastodon/middleware/errors.js create mode 100644 app/javascript/mastodon/middleware/loading_bar.js create mode 100644 app/javascript/mastodon/middleware/sounds.js create mode 100644 app/javascript/mastodon/reducers/accounts.js create mode 100644 app/javascript/mastodon/reducers/accounts_counters.js create mode 100644 app/javascript/mastodon/reducers/alerts.js create mode 100644 app/javascript/mastodon/reducers/cards.js create mode 100644 app/javascript/mastodon/reducers/compose.js create mode 100644 app/javascript/mastodon/reducers/index.js create mode 100644 app/javascript/mastodon/reducers/meta.js create mode 100644 app/javascript/mastodon/reducers/modal.js create mode 100644 app/javascript/mastodon/reducers/notifications.js create mode 100644 app/javascript/mastodon/reducers/relationships.js create mode 100644 app/javascript/mastodon/reducers/reports.js create mode 100644 app/javascript/mastodon/reducers/search.js create mode 100644 app/javascript/mastodon/reducers/settings.js create mode 100644 app/javascript/mastodon/reducers/status_lists.js create mode 100644 app/javascript/mastodon/reducers/statuses.js create mode 100644 app/javascript/mastodon/reducers/timelines.js create mode 100644 app/javascript/mastodon/reducers/user_lists.js create mode 100644 app/javascript/mastodon/rtl.js create mode 100644 app/javascript/mastodon/selectors/index.js create mode 100644 app/javascript/mastodon/store/configureStore.js create mode 100644 app/javascript/mastodon/stream.js create mode 100644 app/javascript/mastodon/uuid.js create mode 100644 app/javascript/packs/application.js create mode 100644 app/javascript/packs/public.js create mode 100644 app/javascript/styles/about.scss create mode 100644 app/javascript/styles/accounts.scss create mode 100644 app/javascript/styles/admin.scss create mode 100644 app/javascript/styles/application.scss create mode 100644 app/javascript/styles/basics.scss create mode 100644 app/javascript/styles/boost.scss create mode 100644 app/javascript/styles/compact_header.scss create mode 100644 app/javascript/styles/components.scss create mode 100644 app/javascript/styles/containers.scss create mode 100644 app/javascript/styles/fonts/montserrat.scss create mode 100644 app/javascript/styles/fonts/roboto-mono.scss create mode 100644 app/javascript/styles/fonts/roboto.scss create mode 100644 app/javascript/styles/footer.scss create mode 100644 app/javascript/styles/forms.scss create mode 100644 app/javascript/styles/landing_strip.scss create mode 100644 app/javascript/styles/lists.scss create mode 100644 app/javascript/styles/reset.scss create mode 100644 app/javascript/styles/rtl.scss create mode 100644 app/javascript/styles/stream_entries.scss create mode 100644 app/javascript/styles/tables.scss create mode 100755 app/javascript/styles/variables.scss create mode 100755 bin/webpack create mode 100755 bin/webpack-dev-server create mode 100755 bin/yarn create mode 100644 config/webpack/configuration.js create mode 100644 config/webpack/development.js create mode 100644 config/webpack/development.server.js create mode 100644 config/webpack/development.server.yml create mode 100644 config/webpack/loaders/assets.js create mode 100644 config/webpack/loaders/babel.js create mode 100644 config/webpack/loaders/coffee.js create mode 100644 config/webpack/loaders/erb.js create mode 100644 config/webpack/loaders/sass.js create mode 100644 config/webpack/paths.yml create mode 100644 config/webpack/production.js create mode 100644 config/webpack/shared.js create mode 100644 config/webpack/test.js create mode 100644 config/webpack/translationRunner.js diff --git a/.babelrc b/.babelrc index 928d32e3b..2c4d9aab3 100644 --- a/.babelrc +++ b/.babelrc @@ -1,7 +1,25 @@ { - "presets": ["es2015", "react"], + "presets": [ + "es2015", + "react", + [ + "env", + { + "loose": true, + "modules": false + } + ] + ], "plugins": [ + "transform-react-jsx-source", + "transform-react-jsx-self", "transform-decorators-legacy", - "transform-object-rest-spread" + "transform-object-rest-spread", + [ + "react-intl", + { + "messagesDir": "./build/messages" + } + ] ] } diff --git a/.foreman b/.foreman new file mode 100644 index 000000000..722b491f7 --- /dev/null +++ b/.foreman @@ -0,0 +1 @@ +procfile: Procfile.dev diff --git a/.gitignore b/.gitignore index c6c468cc7..a0a7eac9c 100644 --- a/.gitignore +++ b/.gitignore @@ -22,7 +22,7 @@ public/assets .env .env.production node_modules/ -neo4j/ +build/ # Ignore Vagrant files .vagrant/ @@ -43,3 +43,5 @@ redis # Ignore vim files *~ *.swp +/public/packs +/node_modules diff --git a/.postcssrc.yml b/.postcssrc.yml new file mode 100644 index 000000000..bc4f02ab3 --- /dev/null +++ b/.postcssrc.yml @@ -0,0 +1,4 @@ +plugins: + postcss-smart-import: {} + precss: {} + autoprefixer: {} diff --git a/.travis.yml b/.travis.yml index 90a33f51d..58be0908f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,7 @@ language: ruby cache: bundler: true - yarn: true - directories: - - node_modules + yarn: false dist: trusty sudo: false @@ -42,7 +40,8 @@ install: - yarn install before_script: - - bundle exec rails db:create db:migrate + - bundle exec rails db:create db:schema:load + - bundle exec rails assets:precompile script: - bundle exec rspec diff --git a/Dockerfile b/Dockerfile index 9968e8227..3e4727258 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,8 +10,6 @@ EXPOSE 3000 4000 WORKDIR /mastodon -COPY Gemfile Gemfile.lock package.json yarn.lock /mastodon/ - RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \ && BUILD_DEPS=" \ postgresql-dev \ @@ -23,6 +21,7 @@ RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/reposit $BUILD_DEPS \ nodejs@edge \ nodejs-npm@edge \ + git \ libpq \ libxml2 \ libxslt \ @@ -31,14 +30,14 @@ RUN echo "@edge https://nl.alpinelinux.org/alpine/edge/main" >> /etc/apk/reposit imagemagick@edge \ ca-certificates \ && npm install -g npm@3 && npm install -g yarn \ - && bundle install --deployment --without test development \ - && yarn --ignore-optional \ - && yarn cache clean \ - && npm -g cache clean \ && update-ca-certificates \ - && apk del $BUILD_DEPS \ && rm -rf /tmp/* /var/cache/apk/* +COPY Gemfile Gemfile.lock package.json yarn.lock /mastodon/ + +RUN bundle install --deployment --without test development \ + && yarn --ignore-optional --pure-lockfile + COPY . /mastodon -VOLUME /mastodon/public/system /mastodon/public/assets +VOLUME /mastodon/public/system /mastodon/public/assets /mastodon/public/packs diff --git a/Gemfile b/Gemfile index f946440c6..8009e2cbe 100644 --- a/Gemfile +++ b/Gemfile @@ -5,22 +5,19 @@ ruby '>= 2.3.0', '< 2.5.0' gem 'pkg-config' +gem 'puma' gem 'rails', '~> 5.0.2' -gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' -gem 'jquery-rails' -gem 'puma' gem 'hamlit-rails' gem 'pg' gem 'pghero' gem 'dotenv-rails' -gem 'font-awesome-rails' gem 'best_in_place', '~> 3.0.1' +gem 'aws-sdk', '>= 2.0' gem 'paperclip', '~> 5.1' gem 'paperclip-av-transcoder' -gem 'aws-sdk', '>= 2.0' gem 'addressable' gem 'devise' @@ -58,18 +55,18 @@ gem 'sprockets-rails', require: 'sprockets/railtie' gem 'statsd-instrument' gem 'twitter-text' gem 'tzinfo-data' +gem 'webpacker', '~>1.2' gem 'whatlanguage' +# For some reason the view specs start failing without this gem 'react-rails' -gem 'browserify-rails' -gem 'autoprefixer-rails' group :development, :test do - gem 'rspec-rails' - gem 'pry-rails' - gem 'fuubar' gem 'fabrication' + gem 'fuubar' gem 'i18n-tasks', '~> 0.9.6' + gem 'pry-rails' + gem 'rspec-rails' end group :test do @@ -83,24 +80,23 @@ group :test do end group :development do - gem 'rubocop', '0.46.0', require: false + gem 'active_record_query_trace' + gem 'annotate' gem 'better_errors' gem 'binding_of_caller' + gem 'bullet' gem 'letter_opener' gem 'letter_opener_web' - gem 'bullet' - gem 'active_record_query_trace' - gem 'annotate' + gem 'rubocop', '0.46.0', require: false gem 'capistrano', '3.8.0' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-yarn' - gem 'capistrano-faster-assets', '~> 1.0' end group :production do + gem 'lograge' gem 'rails_12factor' gem 'redis-rails' - gem 'lograge' end diff --git a/Gemfile.lock b/Gemfile.lock index acda0d387..ab811bcfd 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -43,15 +43,13 @@ GEM public_suffix (~> 2.0, >= 2.0.2) airbrussh (1.2.0) sshkit (>= 1.6.1, != 1.7.0) - annotate (2.7.1) - activerecord (>= 3.2, < 6.0) - rake (>= 10.4, < 12.0) + annotate (2.6.5) + activerecord (>= 2.3.0) + rake (>= 0.8.7) arel (7.1.4) ast (2.3.0) attr_encrypted (3.0.3) encryptor (~> 3.0.0) - autoprefixer-rails (6.7.7.2) - execjs av (0.9.0) cocaine (~> 0.5.3) aws-sdk (2.9.12) @@ -76,10 +74,6 @@ GEM rack (>= 0.9.0) binding_of_caller (0.7.2) debug_inspector (>= 0.0.1) - browserify-rails (4.1.0) - addressable (>= 2.4.0) - railties (>= 4.0.0, < 5.1) - sprockets (>= 3.6.0) builder (3.2.3) bullet (5.5.1) activesupport (>= 3.0.0) @@ -92,8 +86,6 @@ GEM capistrano-bundler (1.2.0) capistrano (~> 3.1) sshkit (~> 1.2) - capistrano-faster-assets (1.0.2) - capistrano (>= 3.1) capistrano-rails (1.2.3) capistrano (~> 3.1) capistrano-bundler (~> 1.1) @@ -161,8 +153,6 @@ GEM faker (1.7.3) i18n (~> 0.5) fast_blank (1.0.0) - font-awesome-rails (4.7.0.1) - railties (>= 3.2, < 5.1) fuubar (2.2.0) rspec-core (~> 3.0) ruby-progressbar (~> 1.4) @@ -210,10 +200,6 @@ GEM rainbow (~> 2.2) terminal-table (>= 1.5.1) jmespath (1.3.1) - jquery-rails (4.3.1) - rails-dom-testing (>= 1, < 3) - railties (>= 4.2.0) - thor (>= 0.14, < 2.0) json (2.1.0) kaminari (1.0.1) activesupport (>= 4.1.0) @@ -257,6 +243,7 @@ GEM mimemagic (0.3.2) mini_portile2 (2.1.0) minitest (5.10.1) + multi_json (1.12.1) net-scp (1.2.1) net-ssh (>= 2.6.5) net-ssh (4.1.0) @@ -348,8 +335,8 @@ GEM thor (>= 0.18.1, < 2.0) rainbow (2.2.2) rake - rake (11.3.0) - react-rails (1.11.0) + rake (12.0.0) + react-rails (2.1.0) babel-transpiler (>= 0.7.0) connection_pool execjs @@ -410,13 +397,6 @@ GEM crass (~> 1.0.2) nokogiri (>= 1.4.4) nokogumbo (~> 1.4.1) - sass (3.4.23) - sass-rails (5.0.6) - railties (>= 4.0.0, < 6) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) sidekiq (4.2.10) concurrent-ruby (~> 1.0) connection_pool (~> 2.2, >= 2.2.0) @@ -473,6 +453,10 @@ GEM addressable (>= 2.3.6) crack (>= 0.3.2) hashdiff + webpacker (1.2) + activesupport (>= 4.2) + multi_json (~> 1.2) + railties (>= 4.2) websocket-driver (0.6.5) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.2) @@ -487,15 +471,12 @@ DEPENDENCIES active_record_query_trace addressable annotate - autoprefixer-rails aws-sdk (>= 2.0) best_in_place (~> 3.0.1) better_errors binding_of_caller - browserify-rails bullet capistrano (= 3.8.0) - capistrano-faster-assets (~> 1.0) capistrano-rails capistrano-rbenv capistrano-yarn @@ -507,7 +488,6 @@ DEPENDENCIES fabrication faker fast_blank - font-awesome-rails fuubar goldfinger hamlit-rails @@ -517,7 +497,6 @@ DEPENDENCIES http_accept_language httplog i18n-tasks (~> 0.9.6) - jquery-rails kaminari letter_opener letter_opener_web @@ -554,7 +533,6 @@ DEPENDENCIES rubocop (= 0.46.0) ruby-oembed sanitize - sass-rails (~> 5.0) sidekiq sidekiq-unique-jobs simple-navigation @@ -566,6 +544,7 @@ DEPENDENCIES tzinfo-data uglifier (>= 1.3.0) webmock + webpacker (~> 1.2) whatlanguage RUBY VERSION diff --git a/Procfile.dev b/Procfile.dev new file mode 100644 index 000000000..4ecea287c --- /dev/null +++ b/Procfile.dev @@ -0,0 +1,3 @@ +web: bundle exec rails s -p 3000 +stream: yarn run start +webpack: ./bin/webpack-dev-server diff --git a/app/assets/fonts/montserrat/Montserrat-Regular.eot b/app/assets/fonts/montserrat/Montserrat-Regular.eot deleted file mode 100644 index 2421c73cc..000000000 Binary files a/app/assets/fonts/montserrat/Montserrat-Regular.eot and /dev/null differ diff --git a/app/assets/fonts/montserrat/Montserrat-Regular.ttf b/app/assets/fonts/montserrat/Montserrat-Regular.ttf deleted file mode 100644 index 29ca85d4a..000000000 Binary files a/app/assets/fonts/montserrat/Montserrat-Regular.ttf and /dev/null differ diff --git a/app/assets/fonts/montserrat/Montserrat-Regular.woff b/app/assets/fonts/montserrat/Montserrat-Regular.woff deleted file mode 100644 index af3b5ec44..000000000 Binary files a/app/assets/fonts/montserrat/Montserrat-Regular.woff and /dev/null differ diff --git a/app/assets/fonts/montserrat/Montserrat-Regular.woff2 b/app/assets/fonts/montserrat/Montserrat-Regular.woff2 deleted file mode 100644 index 3d75434dd..000000000 Binary files a/app/assets/fonts/montserrat/Montserrat-Regular.woff2 and /dev/null differ diff --git a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.eot b/app/assets/fonts/roboto-mono/robotomono-regular-webfont.eot deleted file mode 100644 index a4b8d961b..000000000 Binary files a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.eot and /dev/null differ diff --git a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.svg b/app/assets/fonts/roboto-mono/robotomono-regular-webfont.svg deleted file mode 100644 index 8b0e15729..000000000 --- a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.svg +++ /dev/null @@ -1,1051 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.ttf b/app/assets/fonts/roboto-mono/robotomono-regular-webfont.ttf deleted file mode 100644 index 1ab663e40..000000000 Binary files a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.ttf and /dev/null differ diff --git a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff b/app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff deleted file mode 100644 index 1ed8af5d0..000000000 Binary files a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff and /dev/null differ diff --git a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff2 b/app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff2 deleted file mode 100644 index 1142739f6..000000000 Binary files a/app/assets/fonts/roboto-mono/robotomono-regular-webfont.woff2 and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-bold-webfont.eot b/app/assets/fonts/roboto/roboto-bold-webfont.eot deleted file mode 100644 index dd8e1f24a..000000000 Binary files a/app/assets/fonts/roboto/roboto-bold-webfont.eot and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-bold-webfont.svg b/app/assets/fonts/roboto/roboto-bold-webfont.svg deleted file mode 100644 index 8b591f99e..000000000 --- a/app/assets/fonts/roboto/roboto-bold-webfont.svg +++ /dev/null @@ -1,16273 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/assets/fonts/roboto/roboto-bold-webfont.ttf b/app/assets/fonts/roboto/roboto-bold-webfont.ttf deleted file mode 100644 index 08f6a72cc..000000000 Binary files a/app/assets/fonts/roboto/roboto-bold-webfont.ttf and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-bold-webfont.woff b/app/assets/fonts/roboto/roboto-bold-webfont.woff deleted file mode 100644 index c70f9410b..000000000 Binary files a/app/assets/fonts/roboto/roboto-bold-webfont.woff and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-bold-webfont.woff2 b/app/assets/fonts/roboto/roboto-bold-webfont.woff2 deleted file mode 100644 index 4ce0bec66..000000000 Binary files a/app/assets/fonts/roboto/roboto-bold-webfont.woff2 and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-italic-webfont.eot b/app/assets/fonts/roboto/roboto-italic-webfont.eot deleted file mode 100644 index 683f6c2cd..000000000 Binary files a/app/assets/fonts/roboto/roboto-italic-webfont.eot and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-italic-webfont.svg b/app/assets/fonts/roboto/roboto-italic-webfont.svg deleted file mode 100644 index 44ffeb077..000000000 --- a/app/assets/fonts/roboto/roboto-italic-webfont.svg +++ /dev/null @@ -1,15513 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/assets/fonts/roboto/roboto-italic-webfont.ttf b/app/assets/fonts/roboto/roboto-italic-webfont.ttf deleted file mode 100644 index f2175cb32..000000000 Binary files a/app/assets/fonts/roboto/roboto-italic-webfont.ttf and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-italic-webfont.woff b/app/assets/fonts/roboto/roboto-italic-webfont.woff deleted file mode 100644 index 05e4efc6a..000000000 Binary files a/app/assets/fonts/roboto/roboto-italic-webfont.woff and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-italic-webfont.woff2 b/app/assets/fonts/roboto/roboto-italic-webfont.woff2 deleted file mode 100644 index 6b8dfd0b5..000000000 Binary files a/app/assets/fonts/roboto/roboto-italic-webfont.woff2 and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-medium-webfont.eot b/app/assets/fonts/roboto/roboto-medium-webfont.eot deleted file mode 100644 index f3acc96f4..000000000 Binary files a/app/assets/fonts/roboto/roboto-medium-webfont.eot and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-medium-webfont.svg b/app/assets/fonts/roboto/roboto-medium-webfont.svg deleted file mode 100644 index 290467b21..000000000 --- a/app/assets/fonts/roboto/roboto-medium-webfont.svg +++ /dev/null @@ -1,16273 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/assets/fonts/roboto/roboto-medium-webfont.ttf b/app/assets/fonts/roboto/roboto-medium-webfont.ttf deleted file mode 100644 index 052420e8e..000000000 Binary files a/app/assets/fonts/roboto/roboto-medium-webfont.ttf and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-medium-webfont.woff b/app/assets/fonts/roboto/roboto-medium-webfont.woff deleted file mode 100644 index ade9ac255..000000000 Binary files a/app/assets/fonts/roboto/roboto-medium-webfont.woff and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-medium-webfont.woff2 b/app/assets/fonts/roboto/roboto-medium-webfont.woff2 deleted file mode 100644 index 030f255eb..000000000 Binary files a/app/assets/fonts/roboto/roboto-medium-webfont.woff2 and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-regular-webfont.eot b/app/assets/fonts/roboto/roboto-regular-webfont.eot deleted file mode 100644 index 5ca8e526c..000000000 Binary files a/app/assets/fonts/roboto/roboto-regular-webfont.eot and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-regular-webfont.svg b/app/assets/fonts/roboto/roboto-regular-webfont.svg deleted file mode 100644 index 1d15b6bce..000000000 --- a/app/assets/fonts/roboto/roboto-regular-webfont.svg +++ /dev/null @@ -1,15513 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/assets/fonts/roboto/roboto-regular-webfont.ttf b/app/assets/fonts/roboto/roboto-regular-webfont.ttf deleted file mode 100644 index 696fd82b8..000000000 Binary files a/app/assets/fonts/roboto/roboto-regular-webfont.ttf and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-regular-webfont.woff b/app/assets/fonts/roboto/roboto-regular-webfont.woff deleted file mode 100644 index b5e69e2b7..000000000 Binary files a/app/assets/fonts/roboto/roboto-regular-webfont.woff and /dev/null differ diff --git a/app/assets/fonts/roboto/roboto-regular-webfont.woff2 b/app/assets/fonts/roboto/roboto-regular-webfont.woff2 deleted file mode 100644 index e01739b21..000000000 Binary files a/app/assets/fonts/roboto/roboto-regular-webfont.woff2 and /dev/null differ diff --git a/app/assets/images/.keep b/app/assets/images/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/assets/images/background-photo.jpg b/app/assets/images/background-photo.jpg deleted file mode 100644 index 03341b8ec..000000000 Binary files a/app/assets/images/background-photo.jpg and /dev/null differ diff --git a/app/assets/images/boost_sprite.png b/app/assets/images/boost_sprite.png deleted file mode 100644 index 564bf2646..000000000 Binary files a/app/assets/images/boost_sprite.png and /dev/null differ diff --git a/app/assets/images/elephant-friend.png b/app/assets/images/elephant-friend.png deleted file mode 100644 index 3c5145ba9..000000000 Binary files a/app/assets/images/elephant-friend.png and /dev/null differ diff --git a/app/assets/images/fluffy-elephant-friend.png b/app/assets/images/fluffy-elephant-friend.png deleted file mode 100644 index f0df29927..000000000 Binary files a/app/assets/images/fluffy-elephant-friend.png and /dev/null differ diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png deleted file mode 100644 index f0c1c46c3..000000000 Binary files a/app/assets/images/logo.png and /dev/null differ diff --git a/app/assets/images/logo.svg b/app/assets/images/logo.svg deleted file mode 100644 index c233db842..000000000 --- a/app/assets/images/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/assets/images/mastodon-getting-started.png b/app/assets/images/mastodon-getting-started.png deleted file mode 100644 index e05dd493f..000000000 Binary files a/app/assets/images/mastodon-getting-started.png and /dev/null differ diff --git a/app/assets/images/mastodon-not-found.png b/app/assets/images/mastodon-not-found.png deleted file mode 100644 index 76108d41f..000000000 Binary files a/app/assets/images/mastodon-not-found.png and /dev/null differ diff --git a/app/assets/images/mastodon.jpg b/app/assets/images/mastodon.jpg deleted file mode 100644 index 2dfeb879f..000000000 Binary files a/app/assets/images/mastodon.jpg and /dev/null differ diff --git a/app/assets/images/mastodon_small.jpg b/app/assets/images/mastodon_small.jpg deleted file mode 100644 index 9c88ce3f7..000000000 Binary files a/app/assets/images/mastodon_small.jpg and /dev/null differ diff --git a/app/assets/images/screenshot.png b/app/assets/images/screenshot.png deleted file mode 100644 index f248fd514..000000000 Binary files a/app/assets/images/screenshot.png and /dev/null differ diff --git a/app/assets/images/void.png b/app/assets/images/void.png deleted file mode 100644 index 10b274f18..000000000 Binary files a/app/assets/images/void.png and /dev/null differ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js deleted file mode 100644 index 441282825..000000000 --- a/app/assets/javascripts/application.js +++ /dev/null @@ -1,15 +0,0 @@ -// This is a manifest file that'll be compiled into application.js, which will include all the files -// listed below. -// -// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, -// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path. -// -// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the -// compiled file. -// -// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details -// about supported directives. -// -//= require jquery2 -//= require jquery_ujs -//= require components diff --git a/app/assets/javascripts/application_public.js b/app/assets/javascripts/application_public.js deleted file mode 100644 index 7df4891e7..000000000 --- a/app/assets/javascripts/application_public.js +++ /dev/null @@ -1,9 +0,0 @@ -//= require jquery2 -//= require jquery_ujs -//= require extras -//= require best_in_place -//= require local_time - -$(function () { - $(".best_in_place").best_in_place(); -}); diff --git a/app/assets/javascripts/components.js b/app/assets/javascripts/components.js deleted file mode 100644 index 1604d5198..000000000 --- a/app/assets/javascripts/components.js +++ /dev/null @@ -1,15 +0,0 @@ -//= require_self -//= require react_ujs - -window.React = require('react'); -window.ReactDOM = require('react-dom'); -window.Perf = require('react-addons-perf'); - -if (!window.Intl) { - require('intl'); - require('intl/locale-data/jsonp/en.js'); -} - -//= require_tree ./components - -window.Mastodon = require('./components/containers/mastodon'); diff --git a/app/assets/javascripts/components/.gitkeep b/app/assets/javascripts/components/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/app/assets/javascripts/components/actions/accounts.jsx b/app/assets/javascripts/components/actions/accounts.jsx deleted file mode 100644 index eac5c78bb..000000000 --- a/app/assets/javascripts/components/actions/accounts.jsx +++ /dev/null @@ -1,762 +0,0 @@ -import api, { getLinks } from '../api' -import Immutable from 'immutable'; - -export const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST'; -export const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS'; -export const ACCOUNT_FETCH_FAIL = 'ACCOUNT_FETCH_FAIL'; - -export const ACCOUNT_FOLLOW_REQUEST = 'ACCOUNT_FOLLOW_REQUEST'; -export const ACCOUNT_FOLLOW_SUCCESS = 'ACCOUNT_FOLLOW_SUCCESS'; -export const ACCOUNT_FOLLOW_FAIL = 'ACCOUNT_FOLLOW_FAIL'; - -export const ACCOUNT_UNFOLLOW_REQUEST = 'ACCOUNT_UNFOLLOW_REQUEST'; -export const ACCOUNT_UNFOLLOW_SUCCESS = 'ACCOUNT_UNFOLLOW_SUCCESS'; -export const ACCOUNT_UNFOLLOW_FAIL = 'ACCOUNT_UNFOLLOW_FAIL'; - -export const ACCOUNT_BLOCK_REQUEST = 'ACCOUNT_BLOCK_REQUEST'; -export const ACCOUNT_BLOCK_SUCCESS = 'ACCOUNT_BLOCK_SUCCESS'; -export const ACCOUNT_BLOCK_FAIL = 'ACCOUNT_BLOCK_FAIL'; - -export const ACCOUNT_UNBLOCK_REQUEST = 'ACCOUNT_UNBLOCK_REQUEST'; -export const ACCOUNT_UNBLOCK_SUCCESS = 'ACCOUNT_UNBLOCK_SUCCESS'; -export const ACCOUNT_UNBLOCK_FAIL = 'ACCOUNT_UNBLOCK_FAIL'; - -export const ACCOUNT_MUTE_REQUEST = 'ACCOUNT_MUTE_REQUEST'; -export const ACCOUNT_MUTE_SUCCESS = 'ACCOUNT_MUTE_SUCCESS'; -export const ACCOUNT_MUTE_FAIL = 'ACCOUNT_MUTE_FAIL'; - -export const ACCOUNT_UNMUTE_REQUEST = 'ACCOUNT_UNMUTE_REQUEST'; -export const ACCOUNT_UNMUTE_SUCCESS = 'ACCOUNT_UNMUTE_SUCCESS'; -export const ACCOUNT_UNMUTE_FAIL = 'ACCOUNT_UNMUTE_FAIL'; - -export const ACCOUNT_TIMELINE_FETCH_REQUEST = 'ACCOUNT_TIMELINE_FETCH_REQUEST'; -export const ACCOUNT_TIMELINE_FETCH_SUCCESS = 'ACCOUNT_TIMELINE_FETCH_SUCCESS'; -export const ACCOUNT_TIMELINE_FETCH_FAIL = 'ACCOUNT_TIMELINE_FETCH_FAIL'; - -export const ACCOUNT_TIMELINE_EXPAND_REQUEST = 'ACCOUNT_TIMELINE_EXPAND_REQUEST'; -export const ACCOUNT_TIMELINE_EXPAND_SUCCESS = 'ACCOUNT_TIMELINE_EXPAND_SUCCESS'; -export const ACCOUNT_TIMELINE_EXPAND_FAIL = 'ACCOUNT_TIMELINE_EXPAND_FAIL'; - -export const FOLLOWERS_FETCH_REQUEST = 'FOLLOWERS_FETCH_REQUEST'; -export const FOLLOWERS_FETCH_SUCCESS = 'FOLLOWERS_FETCH_SUCCESS'; -export const FOLLOWERS_FETCH_FAIL = 'FOLLOWERS_FETCH_FAIL'; - -export const FOLLOWERS_EXPAND_REQUEST = 'FOLLOWERS_EXPAND_REQUEST'; -export const FOLLOWERS_EXPAND_SUCCESS = 'FOLLOWERS_EXPAND_SUCCESS'; -export const FOLLOWERS_EXPAND_FAIL = 'FOLLOWERS_EXPAND_FAIL'; - -export const FOLLOWING_FETCH_REQUEST = 'FOLLOWING_FETCH_REQUEST'; -export const FOLLOWING_FETCH_SUCCESS = 'FOLLOWING_FETCH_SUCCESS'; -export const FOLLOWING_FETCH_FAIL = 'FOLLOWING_FETCH_FAIL'; - -export const FOLLOWING_EXPAND_REQUEST = 'FOLLOWING_EXPAND_REQUEST'; -export const FOLLOWING_EXPAND_SUCCESS = 'FOLLOWING_EXPAND_SUCCESS'; -export const FOLLOWING_EXPAND_FAIL = 'FOLLOWING_EXPAND_FAIL'; - -export const RELATIONSHIPS_FETCH_REQUEST = 'RELATIONSHIPS_FETCH_REQUEST'; -export const RELATIONSHIPS_FETCH_SUCCESS = 'RELATIONSHIPS_FETCH_SUCCESS'; -export const RELATIONSHIPS_FETCH_FAIL = 'RELATIONSHIPS_FETCH_FAIL'; - -export const FOLLOW_REQUESTS_FETCH_REQUEST = 'FOLLOW_REQUESTS_FETCH_REQUEST'; -export const FOLLOW_REQUESTS_FETCH_SUCCESS = 'FOLLOW_REQUESTS_FETCH_SUCCESS'; -export const FOLLOW_REQUESTS_FETCH_FAIL = 'FOLLOW_REQUESTS_FETCH_FAIL'; - -export const FOLLOW_REQUESTS_EXPAND_REQUEST = 'FOLLOW_REQUESTS_EXPAND_REQUEST'; -export const FOLLOW_REQUESTS_EXPAND_SUCCESS = 'FOLLOW_REQUESTS_EXPAND_SUCCESS'; -export const FOLLOW_REQUESTS_EXPAND_FAIL = 'FOLLOW_REQUESTS_EXPAND_FAIL'; - -export const FOLLOW_REQUEST_AUTHORIZE_REQUEST = 'FOLLOW_REQUEST_AUTHORIZE_REQUEST'; -export const FOLLOW_REQUEST_AUTHORIZE_SUCCESS = 'FOLLOW_REQUEST_AUTHORIZE_SUCCESS'; -export const FOLLOW_REQUEST_AUTHORIZE_FAIL = 'FOLLOW_REQUEST_AUTHORIZE_FAIL'; - -export const FOLLOW_REQUEST_REJECT_REQUEST = 'FOLLOW_REQUEST_REJECT_REQUEST'; -export const FOLLOW_REQUEST_REJECT_SUCCESS = 'FOLLOW_REQUEST_REJECT_SUCCESS'; -export const FOLLOW_REQUEST_REJECT_FAIL = 'FOLLOW_REQUEST_REJECT_FAIL'; - -export function fetchAccount(id) { - return (dispatch, getState) => { - dispatch(fetchRelationships([id])); - - if (getState().getIn(['accounts', id], null) !== null) { - return; - } - - dispatch(fetchAccountRequest(id)); - - api(getState).get(`/api/v1/accounts/${id}`).then(response => { - dispatch(fetchAccountSuccess(response.data)); - }).catch(error => { - dispatch(fetchAccountFail(id, error)); - }); - }; -}; - -export function fetchAccountTimeline(id, replace = false) { - return (dispatch, getState) => { - const ids = getState().getIn(['timelines', 'accounts_timelines', id, 'items'], Immutable.List()); - const newestId = ids.size > 0 ? ids.first() : null; - - let params = ''; - let skipLoading = false; - - if (newestId !== null && !replace) { - params = `?since_id=${newestId}`; - skipLoading = true; - } - - dispatch(fetchAccountTimelineRequest(id, skipLoading)); - - api(getState).get(`/api/v1/accounts/${id}/statuses${params}`).then(response => { - dispatch(fetchAccountTimelineSuccess(id, response.data, replace, skipLoading)); - }).catch(error => { - dispatch(fetchAccountTimelineFail(id, error, skipLoading)); - }); - }; -}; - -export function expandAccountTimeline(id) { - return (dispatch, getState) => { - const lastId = getState().getIn(['timelines', 'accounts_timelines', id, 'items'], Immutable.List()).last(); - - dispatch(expandAccountTimelineRequest(id)); - - api(getState).get(`/api/v1/accounts/${id}/statuses`, { - params: { - limit: 10, - max_id: lastId - } - }).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandAccountTimelineSuccess(id, response.data, next)); - }).catch(error => { - dispatch(expandAccountTimelineFail(id, error)); - }); - }; -}; - -export function fetchAccountRequest(id) { - return { - type: ACCOUNT_FETCH_REQUEST, - id - }; -}; - -export function fetchAccountSuccess(account) { - return { - type: ACCOUNT_FETCH_SUCCESS, - account - }; -}; - -export function fetchAccountFail(id, error) { - return { - type: ACCOUNT_FETCH_FAIL, - id, - error, - skipAlert: true - }; -}; - -export function followAccount(id) { - return (dispatch, getState) => { - dispatch(followAccountRequest(id)); - - api(getState).post(`/api/v1/accounts/${id}/follow`).then(response => { - dispatch(followAccountSuccess(response.data)); - }).catch(error => { - dispatch(followAccountFail(error)); - }); - }; -}; - -export function unfollowAccount(id) { - return (dispatch, getState) => { - dispatch(unfollowAccountRequest(id)); - - api(getState).post(`/api/v1/accounts/${id}/unfollow`).then(response => { - dispatch(unfollowAccountSuccess(response.data)); - }).catch(error => { - dispatch(unfollowAccountFail(error)); - }); - } -}; - -export function followAccountRequest(id) { - return { - type: ACCOUNT_FOLLOW_REQUEST, - id - }; -}; - -export function followAccountSuccess(relationship) { - return { - type: ACCOUNT_FOLLOW_SUCCESS, - relationship - }; -}; - -export function followAccountFail(error) { - return { - type: ACCOUNT_FOLLOW_FAIL, - error - }; -}; - -export function unfollowAccountRequest(id) { - return { - type: ACCOUNT_UNFOLLOW_REQUEST, - id - }; -}; - -export function unfollowAccountSuccess(relationship) { - return { - type: ACCOUNT_UNFOLLOW_SUCCESS, - relationship - }; -}; - -export function unfollowAccountFail(error) { - return { - type: ACCOUNT_UNFOLLOW_FAIL, - error - }; -}; - -export function fetchAccountTimelineRequest(id, skipLoading) { - return { - type: ACCOUNT_TIMELINE_FETCH_REQUEST, - id, - skipLoading - }; -}; - -export function fetchAccountTimelineSuccess(id, statuses, replace, skipLoading) { - return { - type: ACCOUNT_TIMELINE_FETCH_SUCCESS, - id, - statuses, - replace, - skipLoading - }; -}; - -export function fetchAccountTimelineFail(id, error, skipLoading) { - return { - type: ACCOUNT_TIMELINE_FETCH_FAIL, - id, - error, - skipLoading, - skipAlert: error.response.status === 404 - }; -}; - -export function expandAccountTimelineRequest(id) { - return { - type: ACCOUNT_TIMELINE_EXPAND_REQUEST, - id - }; -}; - -export function expandAccountTimelineSuccess(id, statuses, next) { - return { - type: ACCOUNT_TIMELINE_EXPAND_SUCCESS, - id, - statuses, - next - }; -}; - -export function expandAccountTimelineFail(id, error) { - return { - type: ACCOUNT_TIMELINE_EXPAND_FAIL, - id, - error - }; -}; - -export function blockAccount(id) { - return (dispatch, getState) => { - dispatch(blockAccountRequest(id)); - - api(getState).post(`/api/v1/accounts/${id}/block`).then(response => { - // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers - dispatch(blockAccountSuccess(response.data, getState().get('statuses'))); - }).catch(error => { - dispatch(blockAccountFail(id, error)); - }); - }; -}; - -export function unblockAccount(id) { - return (dispatch, getState) => { - dispatch(unblockAccountRequest(id)); - - api(getState).post(`/api/v1/accounts/${id}/unblock`).then(response => { - dispatch(unblockAccountSuccess(response.data)); - }).catch(error => { - dispatch(unblockAccountFail(id, error)); - }); - }; -}; - -export function blockAccountRequest(id) { - return { - type: ACCOUNT_BLOCK_REQUEST, - id - }; -}; - -export function blockAccountSuccess(relationship, statuses) { - return { - type: ACCOUNT_BLOCK_SUCCESS, - relationship, - statuses - }; -}; - -export function blockAccountFail(error) { - return { - type: ACCOUNT_BLOCK_FAIL, - error - }; -}; - -export function unblockAccountRequest(id) { - return { - type: ACCOUNT_UNBLOCK_REQUEST, - id - }; -}; - -export function unblockAccountSuccess(relationship) { - return { - type: ACCOUNT_UNBLOCK_SUCCESS, - relationship - }; -}; - -export function unblockAccountFail(error) { - return { - type: ACCOUNT_UNBLOCK_FAIL, - error - }; -}; - - -export function muteAccount(id) { - return (dispatch, getState) => { - dispatch(muteAccountRequest(id)); - - api(getState).post(`/api/v1/accounts/${id}/mute`).then(response => { - // Pass in entire statuses map so we can use it to filter stuff in different parts of the reducers - dispatch(muteAccountSuccess(response.data, getState().get('statuses'))); - }).catch(error => { - dispatch(muteAccountFail(id, error)); - }); - }; -}; - -export function unmuteAccount(id) { - return (dispatch, getState) => { - dispatch(unmuteAccountRequest(id)); - - api(getState).post(`/api/v1/accounts/${id}/unmute`).then(response => { - dispatch(unmuteAccountSuccess(response.data)); - }).catch(error => { - dispatch(unmuteAccountFail(id, error)); - }); - }; -}; - -export function muteAccountRequest(id) { - return { - type: ACCOUNT_MUTE_REQUEST, - id - }; -}; - -export function muteAccountSuccess(relationship, statuses) { - return { - type: ACCOUNT_MUTE_SUCCESS, - relationship, - statuses - }; -}; - -export function muteAccountFail(error) { - return { - type: ACCOUNT_MUTE_FAIL, - error - }; -}; - -export function unmuteAccountRequest(id) { - return { - type: ACCOUNT_UNMUTE_REQUEST, - id - }; -}; - -export function unmuteAccountSuccess(relationship) { - return { - type: ACCOUNT_UNMUTE_SUCCESS, - relationship - }; -}; - -export function unmuteAccountFail(error) { - return { - type: ACCOUNT_UNMUTE_FAIL, - error - }; -}; - - -export function fetchFollowers(id) { - return (dispatch, getState) => { - dispatch(fetchFollowersRequest(id)); - - api(getState).get(`/api/v1/accounts/${id}/followers`).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - - dispatch(fetchFollowersSuccess(id, response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => { - dispatch(fetchFollowersFail(id, error)); - }); - }; -}; - -export function fetchFollowersRequest(id) { - return { - type: FOLLOWERS_FETCH_REQUEST, - id - }; -}; - -export function fetchFollowersSuccess(id, accounts, next) { - return { - type: FOLLOWERS_FETCH_SUCCESS, - id, - accounts, - next - }; -}; - -export function fetchFollowersFail(id, error) { - return { - type: FOLLOWERS_FETCH_FAIL, - id, - error - }; -}; - -export function expandFollowers(id) { - return (dispatch, getState) => { - const url = getState().getIn(['user_lists', 'followers', id, 'next']); - - if (url === null) { - return; - } - - dispatch(expandFollowersRequest(id)); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - - dispatch(expandFollowersSuccess(id, response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => { - dispatch(expandFollowersFail(id, error)); - }); - }; -}; - -export function expandFollowersRequest(id) { - return { - type: FOLLOWERS_EXPAND_REQUEST, - id - }; -}; - -export function expandFollowersSuccess(id, accounts, next) { - return { - type: FOLLOWERS_EXPAND_SUCCESS, - id, - accounts, - next - }; -}; - -export function expandFollowersFail(id, error) { - return { - type: FOLLOWERS_EXPAND_FAIL, - id, - error - }; -}; - -export function fetchFollowing(id) { - return (dispatch, getState) => { - dispatch(fetchFollowingRequest(id)); - - api(getState).get(`/api/v1/accounts/${id}/following`).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - - dispatch(fetchFollowingSuccess(id, response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => { - dispatch(fetchFollowingFail(id, error)); - }); - }; -}; - -export function fetchFollowingRequest(id) { - return { - type: FOLLOWING_FETCH_REQUEST, - id - }; -}; - -export function fetchFollowingSuccess(id, accounts, next) { - return { - type: FOLLOWING_FETCH_SUCCESS, - id, - accounts, - next - }; -}; - -export function fetchFollowingFail(id, error) { - return { - type: FOLLOWING_FETCH_FAIL, - id, - error - }; -}; - -export function expandFollowing(id) { - return (dispatch, getState) => { - const url = getState().getIn(['user_lists', 'following', id, 'next']); - - if (url === null) { - return; - } - - dispatch(expandFollowingRequest(id)); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - - dispatch(expandFollowingSuccess(id, response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => { - dispatch(expandFollowingFail(id, error)); - }); - }; -}; - -export function expandFollowingRequest(id) { - return { - type: FOLLOWING_EXPAND_REQUEST, - id - }; -}; - -export function expandFollowingSuccess(id, accounts, next) { - return { - type: FOLLOWING_EXPAND_SUCCESS, - id, - accounts, - next - }; -}; - -export function expandFollowingFail(id, error) { - return { - type: FOLLOWING_EXPAND_FAIL, - id, - error - }; -}; - -export function fetchRelationships(accountIds) { - return (dispatch, getState) => { - const loadedRelationships = getState().get('relationships'); - const newAccountIds = accountIds.filter(id => loadedRelationships.get(id, null) === null); - - if (newAccountIds.length === 0) { - return; - } - - dispatch(fetchRelationshipsRequest(newAccountIds)); - - api(getState).get(`/api/v1/accounts/relationships?${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => { - dispatch(fetchRelationshipsSuccess(response.data)); - }).catch(error => { - dispatch(fetchRelationshipsFail(error)); - }); - }; -}; - -export function fetchRelationshipsRequest(ids) { - return { - type: RELATIONSHIPS_FETCH_REQUEST, - ids, - skipLoading: true - }; -}; - -export function fetchRelationshipsSuccess(relationships) { - return { - type: RELATIONSHIPS_FETCH_SUCCESS, - relationships, - skipLoading: true - }; -}; - -export function fetchRelationshipsFail(error) { - return { - type: RELATIONSHIPS_FETCH_FAIL, - error, - skipLoading: true - }; -}; - -export function fetchFollowRequests() { - return (dispatch, getState) => { - dispatch(fetchFollowRequestsRequest()); - - api(getState).get('/api/v1/follow_requests').then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(fetchFollowRequestsSuccess(response.data, next ? next.uri : null)) - }).catch(error => dispatch(fetchFollowRequestsFail(error))); - }; -}; - -export function fetchFollowRequestsRequest() { - return { - type: FOLLOW_REQUESTS_FETCH_REQUEST - }; -}; - -export function fetchFollowRequestsSuccess(accounts, next) { - return { - type: FOLLOW_REQUESTS_FETCH_SUCCESS, - accounts, - next - }; -}; - -export function fetchFollowRequestsFail(error) { - return { - type: FOLLOW_REQUESTS_FETCH_FAIL, - error - }; -}; - -export function expandFollowRequests() { - return (dispatch, getState) => { - const url = getState().getIn(['user_lists', 'follow_requests', 'next']); - - if (url === null) { - return; - } - - dispatch(expandFollowRequestsRequest()); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandFollowRequestsSuccess(response.data, next ? next.uri : null)) - }).catch(error => dispatch(expandFollowRequestsFail(error))); - }; -}; - -export function expandFollowRequestsRequest() { - return { - type: FOLLOW_REQUESTS_EXPAND_REQUEST - }; -}; - -export function expandFollowRequestsSuccess(accounts, next) { - return { - type: FOLLOW_REQUESTS_EXPAND_SUCCESS, - accounts, - next - }; -}; - -export function expandFollowRequestsFail(error) { - return { - type: FOLLOW_REQUESTS_EXPAND_FAIL, - error - }; -}; - -export function authorizeFollowRequest(id) { - return (dispatch, getState) => { - dispatch(authorizeFollowRequestRequest(id)); - - api(getState) - .post(`/api/v1/follow_requests/${id}/authorize`) - .then(response => dispatch(authorizeFollowRequestSuccess(id))) - .catch(error => dispatch(authorizeFollowRequestFail(id, error))); - }; -}; - -export function authorizeFollowRequestRequest(id) { - return { - type: FOLLOW_REQUEST_AUTHORIZE_REQUEST, - id - }; -}; - -export function authorizeFollowRequestSuccess(id) { - return { - type: FOLLOW_REQUEST_AUTHORIZE_SUCCESS, - id - }; -}; - -export function authorizeFollowRequestFail(id, error) { - return { - type: FOLLOW_REQUEST_AUTHORIZE_FAIL, - id, - error - }; -}; - - -export function rejectFollowRequest(id) { - return (dispatch, getState) => { - dispatch(rejectFollowRequestRequest(id)); - - api(getState) - .post(`/api/v1/follow_requests/${id}/reject`) - .then(response => dispatch(rejectFollowRequestSuccess(id))) - .catch(error => dispatch(rejectFollowRequestFail(id, error))); - }; -}; - -export function rejectFollowRequestRequest(id) { - return { - type: FOLLOW_REQUEST_REJECT_REQUEST, - id - }; -}; - -export function rejectFollowRequestSuccess(id) { - return { - type: FOLLOW_REQUEST_REJECT_SUCCESS, - id - }; -}; - -export function rejectFollowRequestFail(id, error) { - return { - type: FOLLOW_REQUEST_REJECT_FAIL, - id, - error - }; -}; diff --git a/app/assets/javascripts/components/actions/alerts.jsx b/app/assets/javascripts/components/actions/alerts.jsx deleted file mode 100644 index 086e0727e..000000000 --- a/app/assets/javascripts/components/actions/alerts.jsx +++ /dev/null @@ -1,24 +0,0 @@ -export const ALERT_SHOW = 'ALERT_SHOW'; -export const ALERT_DISMISS = 'ALERT_DISMISS'; -export const ALERT_CLEAR = 'ALERT_CLEAR'; - -export function dismissAlert(alert) { - return { - type: ALERT_DISMISS, - alert - }; -}; - -export function clearAlert() { - return { - type: ALERT_CLEAR - }; -}; - -export function showAlert(title, message) { - return { - type: ALERT_SHOW, - title, - message - }; -}; diff --git a/app/assets/javascripts/components/actions/blocks.jsx b/app/assets/javascripts/components/actions/blocks.jsx deleted file mode 100644 index 79e316497..000000000 --- a/app/assets/javascripts/components/actions/blocks.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import api, { getLinks } from '../api' -import { fetchRelationships } from './accounts'; - -export const BLOCKS_FETCH_REQUEST = 'BLOCKS_FETCH_REQUEST'; -export const BLOCKS_FETCH_SUCCESS = 'BLOCKS_FETCH_SUCCESS'; -export const BLOCKS_FETCH_FAIL = 'BLOCKS_FETCH_FAIL'; - -export const BLOCKS_EXPAND_REQUEST = 'BLOCKS_EXPAND_REQUEST'; -export const BLOCKS_EXPAND_SUCCESS = 'BLOCKS_EXPAND_SUCCESS'; -export const BLOCKS_EXPAND_FAIL = 'BLOCKS_EXPAND_FAIL'; - -export function fetchBlocks() { - return (dispatch, getState) => { - dispatch(fetchBlocksRequest()); - - api(getState).get('/api/v1/blocks').then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(fetchBlocksSuccess(response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => dispatch(fetchBlocksFail(error))); - }; -}; - -export function fetchBlocksRequest() { - return { - type: BLOCKS_FETCH_REQUEST - }; -}; - -export function fetchBlocksSuccess(accounts, next) { - return { - type: BLOCKS_FETCH_SUCCESS, - accounts, - next - }; -}; - -export function fetchBlocksFail(error) { - return { - type: BLOCKS_FETCH_FAIL, - error - }; -}; - -export function expandBlocks() { - return (dispatch, getState) => { - const url = getState().getIn(['user_lists', 'blocks', 'next']); - - if (url === null) { - return; - } - - dispatch(expandBlocksRequest()); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandBlocksSuccess(response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => dispatch(expandBlocksFail(error))); - }; -}; - -export function expandBlocksRequest() { - return { - type: BLOCKS_EXPAND_REQUEST - }; -}; - -export function expandBlocksSuccess(accounts, next) { - return { - type: BLOCKS_EXPAND_SUCCESS, - accounts, - next - }; -}; - -export function expandBlocksFail(error) { - return { - type: BLOCKS_EXPAND_FAIL, - error - }; -}; diff --git a/app/assets/javascripts/components/actions/cards.jsx b/app/assets/javascripts/components/actions/cards.jsx deleted file mode 100644 index 805be9709..000000000 --- a/app/assets/javascripts/components/actions/cards.jsx +++ /dev/null @@ -1,52 +0,0 @@ -import api from '../api'; - -export const STATUS_CARD_FETCH_REQUEST = 'STATUS_CARD_FETCH_REQUEST'; -export const STATUS_CARD_FETCH_SUCCESS = 'STATUS_CARD_FETCH_SUCCESS'; -export const STATUS_CARD_FETCH_FAIL = 'STATUS_CARD_FETCH_FAIL'; - -export function fetchStatusCard(id) { - return (dispatch, getState) => { - if (getState().getIn(['cards', id], null) !== null) { - return; - } - - dispatch(fetchStatusCardRequest(id)); - - api(getState).get(`/api/v1/statuses/${id}/card`).then(response => { - if (!response.data.url) { - return; - } - - dispatch(fetchStatusCardSuccess(id, response.data)); - }).catch(error => { - dispatch(fetchStatusCardFail(id, error)); - }); - }; -}; - -export function fetchStatusCardRequest(id) { - return { - type: STATUS_CARD_FETCH_REQUEST, - id, - skipLoading: true - }; -}; - -export function fetchStatusCardSuccess(id, card) { - return { - type: STATUS_CARD_FETCH_SUCCESS, - id, - card, - skipLoading: true - }; -}; - -export function fetchStatusCardFail(id, error) { - return { - type: STATUS_CARD_FETCH_FAIL, - id, - error, - skipLoading: true, - skipAlert: true - }; -}; diff --git a/app/assets/javascripts/components/actions/compose.jsx b/app/assets/javascripts/components/actions/compose.jsx deleted file mode 100644 index d7ff6ea63..000000000 --- a/app/assets/javascripts/components/actions/compose.jsx +++ /dev/null @@ -1,279 +0,0 @@ -import api from '../api'; - -import { updateTimeline } from './timelines'; - -import * as emojione from 'emojione'; - -export const COMPOSE_CHANGE = 'COMPOSE_CHANGE'; -export const COMPOSE_SUBMIT_REQUEST = 'COMPOSE_SUBMIT_REQUEST'; -export const COMPOSE_SUBMIT_SUCCESS = 'COMPOSE_SUBMIT_SUCCESS'; -export const COMPOSE_SUBMIT_FAIL = 'COMPOSE_SUBMIT_FAIL'; -export const COMPOSE_REPLY = 'COMPOSE_REPLY'; -export const COMPOSE_REPLY_CANCEL = 'COMPOSE_REPLY_CANCEL'; -export const COMPOSE_MENTION = 'COMPOSE_MENTION'; -export const COMPOSE_UPLOAD_REQUEST = 'COMPOSE_UPLOAD_REQUEST'; -export const COMPOSE_UPLOAD_SUCCESS = 'COMPOSE_UPLOAD_SUCCESS'; -export const COMPOSE_UPLOAD_FAIL = 'COMPOSE_UPLOAD_FAIL'; -export const COMPOSE_UPLOAD_PROGRESS = 'COMPOSE_UPLOAD_PROGRESS'; -export const COMPOSE_UPLOAD_UNDO = 'COMPOSE_UPLOAD_UNDO'; - -export const COMPOSE_SUGGESTIONS_CLEAR = 'COMPOSE_SUGGESTIONS_CLEAR'; -export const COMPOSE_SUGGESTIONS_READY = 'COMPOSE_SUGGESTIONS_READY'; -export const COMPOSE_SUGGESTION_SELECT = 'COMPOSE_SUGGESTION_SELECT'; - -export const COMPOSE_MOUNT = 'COMPOSE_MOUNT'; -export const COMPOSE_UNMOUNT = 'COMPOSE_UNMOUNT'; - -export const COMPOSE_SENSITIVITY_CHANGE = 'COMPOSE_SENSITIVITY_CHANGE'; -export const COMPOSE_SPOILERNESS_CHANGE = 'COMPOSE_SPOILERNESS_CHANGE'; -export const COMPOSE_SPOILER_TEXT_CHANGE = 'COMPOSE_SPOILER_TEXT_CHANGE'; -export const COMPOSE_VISIBILITY_CHANGE = 'COMPOSE_VISIBILITY_CHANGE'; -export const COMPOSE_LISTABILITY_CHANGE = 'COMPOSE_LISTABILITY_CHANGE'; - -export const COMPOSE_EMOJI_INSERT = 'COMPOSE_EMOJI_INSERT'; - -export function changeCompose(text) { - return { - type: COMPOSE_CHANGE, - text: text - }; -}; - -export function replyCompose(status, router) { - return (dispatch, getState) => { - dispatch({ - type: COMPOSE_REPLY, - status: status - }); - - if (!getState().getIn(['compose', 'mounted'])) { - router.push('/statuses/new'); - } - }; -}; - -export function cancelReplyCompose() { - return { - type: COMPOSE_REPLY_CANCEL - }; -}; - -export function mentionCompose(account, router) { - return (dispatch, getState) => { - dispatch({ - type: COMPOSE_MENTION, - account: account - }); - - if (!getState().getIn(['compose', 'mounted'])) { - router.push('/statuses/new'); - } - }; -}; - -export function submitCompose() { - return function (dispatch, getState) { - const status = emojione.shortnameToUnicode(getState().getIn(['compose', 'text'], '')); - if (!status || !status.length) { - return; - } - dispatch(submitComposeRequest()); - api(getState).post('/api/v1/statuses', { - status, - in_reply_to_id: getState().getIn(['compose', 'in_reply_to'], null), - media_ids: getState().getIn(['compose', 'media_attachments']).map(item => item.get('id')), - sensitive: getState().getIn(['compose', 'sensitive']), - spoiler_text: getState().getIn(['compose', 'spoiler_text'], ''), - visibility: getState().getIn(['compose', 'privacy']) - }, { - headers: { - 'Idempotency-Key': getState().getIn(['compose', 'idempotencyKey']) - } - }).then(function (response) { - dispatch(submitComposeSuccess({ ...response.data })); - - // To make the app more responsive, immediately get the status into the columns - dispatch(updateTimeline('home', { ...response.data })); - - if (response.data.in_reply_to_id === null && response.data.visibility === 'public') { - if (getState().getIn(['timelines', 'community', 'loaded'])) { - dispatch(updateTimeline('community', { ...response.data })); - } - - if (getState().getIn(['timelines', 'public', 'loaded'])) { - dispatch(updateTimeline('public', { ...response.data })); - } - } - }).catch(function (error) { - dispatch(submitComposeFail(error)); - }); - }; -}; - -export function submitComposeRequest() { - return { - type: COMPOSE_SUBMIT_REQUEST - }; -}; - -export function submitComposeSuccess(status) { - return { - type: COMPOSE_SUBMIT_SUCCESS, - status: status - }; -}; - -export function submitComposeFail(error) { - return { - type: COMPOSE_SUBMIT_FAIL, - error: error - }; -}; - -export function uploadCompose(files) { - return function (dispatch, getState) { - if (getState().getIn(['compose', 'media_attachments']).size > 3) { - return; - } - - dispatch(uploadComposeRequest()); - - let data = new FormData(); - data.append('file', files[0]); - - api(getState).post('/api/v1/media', data, { - onUploadProgress: function (e) { - dispatch(uploadComposeProgress(e.loaded, e.total)); - } - }).then(function (response) { - dispatch(uploadComposeSuccess(response.data)); - }).catch(function (error) { - dispatch(uploadComposeFail(error)); - }); - }; -}; - -export function uploadComposeRequest() { - return { - type: COMPOSE_UPLOAD_REQUEST, - skipLoading: true - }; -}; - -export function uploadComposeProgress(loaded, total) { - return { - type: COMPOSE_UPLOAD_PROGRESS, - loaded: loaded, - total: total - }; -}; - -export function uploadComposeSuccess(media) { - return { - type: COMPOSE_UPLOAD_SUCCESS, - media: media, - skipLoading: true - }; -}; - -export function uploadComposeFail(error) { - return { - type: COMPOSE_UPLOAD_FAIL, - error: error, - skipLoading: true - }; -}; - -export function undoUploadCompose(media_id) { - return { - type: COMPOSE_UPLOAD_UNDO, - media_id: media_id - }; -}; - -export function clearComposeSuggestions() { - return { - type: COMPOSE_SUGGESTIONS_CLEAR - }; -}; - -export function fetchComposeSuggestions(token) { - return (dispatch, getState) => { - api(getState).get('/api/v1/accounts/search', { - params: { - q: token, - resolve: false, - limit: 4 - } - }).then(response => { - dispatch(readyComposeSuggestions(token, response.data)); - }); - }; -}; - -export function readyComposeSuggestions(token, accounts) { - return { - type: COMPOSE_SUGGESTIONS_READY, - token, - accounts - }; -}; - -export function selectComposeSuggestion(position, token, accountId) { - return (dispatch, getState) => { - const completion = getState().getIn(['accounts', accountId, 'acct']); - - dispatch({ - type: COMPOSE_SUGGESTION_SELECT, - position, - token, - completion - }); - }; -}; - -export function mountCompose() { - return { - type: COMPOSE_MOUNT - }; -}; - -export function unmountCompose() { - return { - type: COMPOSE_UNMOUNT - }; -}; - -export function changeComposeSensitivity() { - return { - type: COMPOSE_SENSITIVITY_CHANGE, - }; -}; - -export function changeComposeSpoilerness() { - return { - type: COMPOSE_SPOILERNESS_CHANGE - }; -}; - -export function changeComposeSpoilerText(text) { - return { - type: COMPOSE_SPOILER_TEXT_CHANGE, - text - }; -}; - -export function changeComposeVisibility(value) { - return { - type: COMPOSE_VISIBILITY_CHANGE, - value - }; -}; - -export function insertEmojiCompose(position, emoji) { - return { - type: COMPOSE_EMOJI_INSERT, - position, - emoji - }; -}; diff --git a/app/assets/javascripts/components/actions/favourites.jsx b/app/assets/javascripts/components/actions/favourites.jsx deleted file mode 100644 index a25c1ae1c..000000000 --- a/app/assets/javascripts/components/actions/favourites.jsx +++ /dev/null @@ -1,83 +0,0 @@ -import api, { getLinks } from '../api' - -export const FAVOURITED_STATUSES_FETCH_REQUEST = 'FAVOURITED_STATUSES_FETCH_REQUEST'; -export const FAVOURITED_STATUSES_FETCH_SUCCESS = 'FAVOURITED_STATUSES_FETCH_SUCCESS'; -export const FAVOURITED_STATUSES_FETCH_FAIL = 'FAVOURITED_STATUSES_FETCH_FAIL'; - -export const FAVOURITED_STATUSES_EXPAND_REQUEST = 'FAVOURITED_STATUSES_EXPAND_REQUEST'; -export const FAVOURITED_STATUSES_EXPAND_SUCCESS = 'FAVOURITED_STATUSES_EXPAND_SUCCESS'; -export const FAVOURITED_STATUSES_EXPAND_FAIL = 'FAVOURITED_STATUSES_EXPAND_FAIL'; - -export function fetchFavouritedStatuses() { - return (dispatch, getState) => { - dispatch(fetchFavouritedStatusesRequest()); - - api(getState).get('/api/v1/favourites').then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(fetchFavouritedStatusesSuccess(response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(fetchFavouritedStatusesFail(error)); - }); - }; -}; - -export function fetchFavouritedStatusesRequest() { - return { - type: FAVOURITED_STATUSES_FETCH_REQUEST - }; -}; - -export function fetchFavouritedStatusesSuccess(statuses, next) { - return { - type: FAVOURITED_STATUSES_FETCH_SUCCESS, - statuses, - next - }; -}; - -export function fetchFavouritedStatusesFail(error) { - return { - type: FAVOURITED_STATUSES_FETCH_FAIL, - error - }; -}; - -export function expandFavouritedStatuses() { - return (dispatch, getState) => { - const url = getState().getIn(['status_lists', 'favourites', 'next'], null); - - if (url === null) { - return; - } - - dispatch(expandFavouritedStatusesRequest()); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandFavouritedStatusesSuccess(response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(expandFavouritedStatusesFail(error)); - }); - }; -}; - -export function expandFavouritedStatusesRequest() { - return { - type: FAVOURITED_STATUSES_EXPAND_REQUEST - }; -}; - -export function expandFavouritedStatusesSuccess(statuses, next) { - return { - type: FAVOURITED_STATUSES_EXPAND_SUCCESS, - statuses, - next - }; -}; - -export function expandFavouritedStatusesFail(error) { - return { - type: FAVOURITED_STATUSES_EXPAND_FAIL, - error - }; -}; diff --git a/app/assets/javascripts/components/actions/interactions.jsx b/app/assets/javascripts/components/actions/interactions.jsx deleted file mode 100644 index 45f4508f6..000000000 --- a/app/assets/javascripts/components/actions/interactions.jsx +++ /dev/null @@ -1,235 +0,0 @@ -import api from '../api' - -export const REBLOG_REQUEST = 'REBLOG_REQUEST'; -export const REBLOG_SUCCESS = 'REBLOG_SUCCESS'; -export const REBLOG_FAIL = 'REBLOG_FAIL'; - -export const FAVOURITE_REQUEST = 'FAVOURITE_REQUEST'; -export const FAVOURITE_SUCCESS = 'FAVOURITE_SUCCESS'; -export const FAVOURITE_FAIL = 'FAVOURITE_FAIL'; - -export const UNREBLOG_REQUEST = 'UNREBLOG_REQUEST'; -export const UNREBLOG_SUCCESS = 'UNREBLOG_SUCCESS'; -export const UNREBLOG_FAIL = 'UNREBLOG_FAIL'; - -export const UNFAVOURITE_REQUEST = 'UNFAVOURITE_REQUEST'; -export const UNFAVOURITE_SUCCESS = 'UNFAVOURITE_SUCCESS'; -export const UNFAVOURITE_FAIL = 'UNFAVOURITE_FAIL'; - -export const REBLOGS_FETCH_REQUEST = 'REBLOGS_FETCH_REQUEST'; -export const REBLOGS_FETCH_SUCCESS = 'REBLOGS_FETCH_SUCCESS'; -export const REBLOGS_FETCH_FAIL = 'REBLOGS_FETCH_FAIL'; - -export const FAVOURITES_FETCH_REQUEST = 'FAVOURITES_FETCH_REQUEST'; -export const FAVOURITES_FETCH_SUCCESS = 'FAVOURITES_FETCH_SUCCESS'; -export const FAVOURITES_FETCH_FAIL = 'FAVOURITES_FETCH_FAIL'; - -export function reblog(status) { - return function (dispatch, getState) { - dispatch(reblogRequest(status)); - - api(getState).post(`/api/v1/statuses/${status.get('id')}/reblog`).then(function (response) { - // The reblog API method returns a new status wrapped around the original. In this case we are only - // interested in how the original is modified, hence passing it skipping the wrapper - dispatch(reblogSuccess(status, response.data.reblog)); - }).catch(function (error) { - dispatch(reblogFail(status, error)); - }); - }; -}; - -export function unreblog(status) { - return (dispatch, getState) => { - dispatch(unreblogRequest(status)); - - api(getState).post(`/api/v1/statuses/${status.get('id')}/unreblog`).then(response => { - dispatch(unreblogSuccess(status, response.data)); - }).catch(error => { - dispatch(unreblogFail(status, error)); - }); - }; -}; - -export function reblogRequest(status) { - return { - type: REBLOG_REQUEST, - status: status - }; -}; - -export function reblogSuccess(status, response) { - return { - type: REBLOG_SUCCESS, - status: status, - response: response - }; -}; - -export function reblogFail(status, error) { - return { - type: REBLOG_FAIL, - status: status, - error: error - }; -}; - -export function unreblogRequest(status) { - return { - type: UNREBLOG_REQUEST, - status: status - }; -}; - -export function unreblogSuccess(status, response) { - return { - type: UNREBLOG_SUCCESS, - status: status, - response: response - }; -}; - -export function unreblogFail(status, error) { - return { - type: UNREBLOG_FAIL, - status: status, - error: error - }; -}; - -export function favourite(status) { - return function (dispatch, getState) { - dispatch(favouriteRequest(status)); - - api(getState).post(`/api/v1/statuses/${status.get('id')}/favourite`).then(function (response) { - dispatch(favouriteSuccess(status, response.data)); - }).catch(function (error) { - dispatch(favouriteFail(status, error)); - }); - }; -}; - -export function unfavourite(status) { - return (dispatch, getState) => { - dispatch(unfavouriteRequest(status)); - - api(getState).post(`/api/v1/statuses/${status.get('id')}/unfavourite`).then(response => { - dispatch(unfavouriteSuccess(status, response.data)); - }).catch(error => { - dispatch(unfavouriteFail(status, error)); - }); - }; -}; - -export function favouriteRequest(status) { - return { - type: FAVOURITE_REQUEST, - status: status - }; -}; - -export function favouriteSuccess(status, response) { - return { - type: FAVOURITE_SUCCESS, - status: status, - response: response - }; -}; - -export function favouriteFail(status, error) { - return { - type: FAVOURITE_FAIL, - status: status, - error: error - }; -}; - -export function unfavouriteRequest(status) { - return { - type: UNFAVOURITE_REQUEST, - status: status - }; -}; - -export function unfavouriteSuccess(status, response) { - return { - type: UNFAVOURITE_SUCCESS, - status: status, - response: response - }; -}; - -export function unfavouriteFail(status, error) { - return { - type: UNFAVOURITE_FAIL, - status: status, - error: error - }; -}; - -export function fetchReblogs(id) { - return (dispatch, getState) => { - dispatch(fetchReblogsRequest(id)); - - api(getState).get(`/api/v1/statuses/${id}/reblogged_by`).then(response => { - dispatch(fetchReblogsSuccess(id, response.data)); - }).catch(error => { - dispatch(fetchReblogsFail(id, error)); - }); - }; -}; - -export function fetchReblogsRequest(id) { - return { - type: REBLOGS_FETCH_REQUEST, - id - }; -}; - -export function fetchReblogsSuccess(id, accounts) { - return { - type: REBLOGS_FETCH_SUCCESS, - id, - accounts - }; -}; - -export function fetchReblogsFail(id, error) { - return { - type: REBLOGS_FETCH_FAIL, - error - }; -}; - -export function fetchFavourites(id) { - return (dispatch, getState) => { - dispatch(fetchFavouritesRequest(id)); - - api(getState).get(`/api/v1/statuses/${id}/favourited_by`).then(response => { - dispatch(fetchFavouritesSuccess(id, response.data)); - }).catch(error => { - dispatch(fetchFavouritesFail(id, error)); - }); - }; -}; - -export function fetchFavouritesRequest(id) { - return { - type: FAVOURITES_FETCH_REQUEST, - id - }; -}; - -export function fetchFavouritesSuccess(id, accounts) { - return { - type: FAVOURITES_FETCH_SUCCESS, - id, - accounts - }; -}; - -export function fetchFavouritesFail(id, error) { - return { - type: FAVOURITES_FETCH_FAIL, - error - }; -}; diff --git a/app/assets/javascripts/components/actions/modal.jsx b/app/assets/javascripts/components/actions/modal.jsx deleted file mode 100644 index 615cd6bfe..000000000 --- a/app/assets/javascripts/components/actions/modal.jsx +++ /dev/null @@ -1,16 +0,0 @@ -export const MODAL_OPEN = 'MODAL_OPEN'; -export const MODAL_CLOSE = 'MODAL_CLOSE'; - -export function openModal(type, props) { - return { - type: MODAL_OPEN, - modalType: type, - modalProps: props - }; -}; - -export function closeModal() { - return { - type: MODAL_CLOSE - }; -}; diff --git a/app/assets/javascripts/components/actions/mutes.jsx b/app/assets/javascripts/components/actions/mutes.jsx deleted file mode 100644 index 824821594..000000000 --- a/app/assets/javascripts/components/actions/mutes.jsx +++ /dev/null @@ -1,82 +0,0 @@ -import api, { getLinks } from '../api' -import { fetchRelationships } from './accounts'; - -export const MUTES_FETCH_REQUEST = 'MUTES_FETCH_REQUEST'; -export const MUTES_FETCH_SUCCESS = 'MUTES_FETCH_SUCCESS'; -export const MUTES_FETCH_FAIL = 'MUTES_FETCH_FAIL'; - -export const MUTES_EXPAND_REQUEST = 'MUTES_EXPAND_REQUEST'; -export const MUTES_EXPAND_SUCCESS = 'MUTES_EXPAND_SUCCESS'; -export const MUTES_EXPAND_FAIL = 'MUTES_EXPAND_FAIL'; - -export function fetchMutes() { - return (dispatch, getState) => { - dispatch(fetchMutesRequest()); - - api(getState).get('/api/v1/mutes').then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(fetchMutesSuccess(response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => dispatch(fetchMutesFail(error))); - }; -}; - -export function fetchMutesRequest() { - return { - type: MUTES_FETCH_REQUEST - }; -}; - -export function fetchMutesSuccess(accounts, next) { - return { - type: MUTES_FETCH_SUCCESS, - accounts, - next - }; -}; - -export function fetchMutesFail(error) { - return { - type: MUTES_FETCH_FAIL, - error - }; -}; - -export function expandMutes() { - return (dispatch, getState) => { - const url = getState().getIn(['user_lists', 'mutes', 'next']); - - if (url === null) { - return; - } - - dispatch(expandMutesRequest()); - - api(getState).get(url).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandMutesSuccess(response.data, next ? next.uri : null)); - dispatch(fetchRelationships(response.data.map(item => item.id))); - }).catch(error => dispatch(expandMutesFail(error))); - }; -}; - -export function expandMutesRequest() { - return { - type: MUTES_EXPAND_REQUEST - }; -}; - -export function expandMutesSuccess(accounts, next) { - return { - type: MUTES_EXPAND_SUCCESS, - accounts, - next - }; -}; - -export function expandMutesFail(error) { - return { - type: MUTES_EXPAND_FAIL, - error - }; -}; diff --git a/app/assets/javascripts/components/actions/notifications.jsx b/app/assets/javascripts/components/actions/notifications.jsx deleted file mode 100644 index b09ca0854..000000000 --- a/app/assets/javascripts/components/actions/notifications.jsx +++ /dev/null @@ -1,165 +0,0 @@ -import api, { getLinks } from '../api' -import Immutable from 'immutable'; -import IntlMessageFormat from 'intl-messageformat'; - -import { fetchRelationships } from './accounts'; - -export const NOTIFICATIONS_UPDATE = 'NOTIFICATIONS_UPDATE'; - -export const NOTIFICATIONS_REFRESH_REQUEST = 'NOTIFICATIONS_REFRESH_REQUEST'; -export const NOTIFICATIONS_REFRESH_SUCCESS = 'NOTIFICATIONS_REFRESH_SUCCESS'; -export const NOTIFICATIONS_REFRESH_FAIL = 'NOTIFICATIONS_REFRESH_FAIL'; - -export const NOTIFICATIONS_EXPAND_REQUEST = 'NOTIFICATIONS_EXPAND_REQUEST'; -export const NOTIFICATIONS_EXPAND_SUCCESS = 'NOTIFICATIONS_EXPAND_SUCCESS'; -export const NOTIFICATIONS_EXPAND_FAIL = 'NOTIFICATIONS_EXPAND_FAIL'; - -export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; -export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; - -const fetchRelatedRelationships = (dispatch, notifications) => { - const accountIds = notifications.filter(item => item.type === 'follow').map(item => item.account.id); - - if (accountIds > 0) { - dispatch(fetchRelationships(accountIds)); - } -}; - -export function updateNotifications(notification, intlMessages, intlLocale) { - return (dispatch, getState) => { - const showAlert = getState().getIn(['settings', 'notifications', 'alerts', notification.type], true); - const playSound = getState().getIn(['settings', 'notifications', 'sounds', notification.type], true); - - dispatch({ - type: NOTIFICATIONS_UPDATE, - notification, - account: notification.account, - status: notification.status, - meta: playSound ? { sound: 'boop' } : undefined - }); - - fetchRelatedRelationships(dispatch, [notification]); - - // Desktop notifications - if (typeof window.Notification !== 'undefined' && showAlert) { - const title = new IntlMessageFormat(intlMessages[`notification.${notification.type}`], intlLocale).format({ name: notification.account.display_name.length > 0 ? notification.account.display_name : notification.account.username }); - const body = (notification.status && notification.status.spoiler_text.length > 0) ? notification.status.spoiler_text : $('

').html(notification.status ? notification.status.content : '').text(); - - new Notification(title, { body, icon: notification.account.avatar, tag: notification.id }); - } - }; -}; - -const excludeTypesFromSettings = state => state.getIn(['settings', 'notifications', 'shows']).filter(enabled => !enabled).keySeq().toJS(); - -export function refreshNotifications() { - return (dispatch, getState) => { - dispatch(refreshNotificationsRequest()); - - const params = {}; - const ids = getState().getIn(['notifications', 'items']); - - if (ids.size > 0) { - params.since_id = ids.first().get('id'); - } - - params.exclude_types = excludeTypesFromSettings(getState()); - - api(getState).get('/api/v1/notifications', { params }).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - - dispatch(refreshNotificationsSuccess(response.data, next ? next.uri : null)); - fetchRelatedRelationships(dispatch, response.data); - }).catch(error => { - dispatch(refreshNotificationsFail(error)); - }); - }; -}; - -export function refreshNotificationsRequest() { - return { - type: NOTIFICATIONS_REFRESH_REQUEST - }; -}; - -export function refreshNotificationsSuccess(notifications, next) { - return { - type: NOTIFICATIONS_REFRESH_SUCCESS, - notifications, - accounts: notifications.map(item => item.account), - statuses: notifications.map(item => item.status).filter(status => !!status), - next - }; -}; - -export function refreshNotificationsFail(error) { - return { - type: NOTIFICATIONS_REFRESH_FAIL, - error - }; -}; - -export function expandNotifications() { - return (dispatch, getState) => { - const url = getState().getIn(['notifications', 'next'], null); - - if (url === null || getState().getIn(['notifications', 'isLoading'])) { - return; - } - - dispatch(expandNotificationsRequest()); - - const params = {}; - - params.exclude_types = excludeTypesFromSettings(getState()); - - api(getState).get(url, params).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - - dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null)); - fetchRelatedRelationships(dispatch, response.data); - }).catch(error => { - dispatch(expandNotificationsFail(error)); - }); - }; -}; - -export function expandNotificationsRequest() { - return { - type: NOTIFICATIONS_EXPAND_REQUEST - }; -}; - -export function expandNotificationsSuccess(notifications, next) { - return { - type: NOTIFICATIONS_EXPAND_SUCCESS, - notifications, - accounts: notifications.map(item => item.account), - statuses: notifications.map(item => item.status).filter(status => !!status), - next - }; -}; - -export function expandNotificationsFail(error) { - return { - type: NOTIFICATIONS_EXPAND_FAIL, - error - }; -}; - -export function clearNotifications() { - return (dispatch, getState) => { - dispatch({ - type: NOTIFICATIONS_CLEAR - }); - - api(getState).post('/api/v1/notifications/clear'); - }; -}; - -export function scrollTopNotifications(top) { - return { - type: NOTIFICATIONS_SCROLL_TOP, - top - }; -}; diff --git a/app/assets/javascripts/components/actions/onboarding.jsx b/app/assets/javascripts/components/actions/onboarding.jsx deleted file mode 100644 index a161c50ef..000000000 --- a/app/assets/javascripts/components/actions/onboarding.jsx +++ /dev/null @@ -1,14 +0,0 @@ -import { openModal } from './modal'; -import { changeSetting, saveSettings } from './settings'; - -export function showOnboardingOnce() { - return (dispatch, getState) => { - const alreadySeen = getState().getIn(['settings', 'onboarded']); - - if (!alreadySeen) { - dispatch(openModal('ONBOARDING')); - dispatch(changeSetting(['onboarded'], true)); - dispatch(saveSettings()); - } - }; -}; diff --git a/app/assets/javascripts/components/actions/reports.jsx b/app/assets/javascripts/components/actions/reports.jsx deleted file mode 100644 index 094670d62..000000000 --- a/app/assets/javascripts/components/actions/reports.jsx +++ /dev/null @@ -1,72 +0,0 @@ -import api from '../api'; - -export const REPORT_INIT = 'REPORT_INIT'; -export const REPORT_CANCEL = 'REPORT_CANCEL'; - -export const REPORT_SUBMIT_REQUEST = 'REPORT_SUBMIT_REQUEST'; -export const REPORT_SUBMIT_SUCCESS = 'REPORT_SUBMIT_SUCCESS'; -export const REPORT_SUBMIT_FAIL = 'REPORT_SUBMIT_FAIL'; - -export const REPORT_STATUS_TOGGLE = 'REPORT_STATUS_TOGGLE'; -export const REPORT_COMMENT_CHANGE = 'REPORT_COMMENT_CHANGE'; - -export function initReport(account, status) { - return { - type: REPORT_INIT, - account, - status - }; -}; - -export function cancelReport() { - return { - type: REPORT_CANCEL - }; -}; - -export function toggleStatusReport(statusId, checked) { - return { - type: REPORT_STATUS_TOGGLE, - statusId, - checked, - }; -}; - -export function submitReport() { - return (dispatch, getState) => { - dispatch(submitReportRequest()); - - api(getState).post('/api/v1/reports', { - account_id: getState().getIn(['reports', 'new', 'account_id']), - status_ids: getState().getIn(['reports', 'new', 'status_ids']), - comment: getState().getIn(['reports', 'new', 'comment']) - }).then(response => dispatch(submitReportSuccess(response.data))).catch(error => dispatch(submitReportFail(error))); - }; -}; - -export function submitReportRequest() { - return { - type: REPORT_SUBMIT_REQUEST - }; -}; - -export function submitReportSuccess(report) { - return { - type: REPORT_SUBMIT_SUCCESS, - report - }; -}; - -export function submitReportFail(error) { - return { - type: REPORT_SUBMIT_FAIL, - error - }; -}; - -export function changeReportComment(comment) { - return { - type: REPORT_COMMENT_CHANGE, - comment - }; -}; diff --git a/app/assets/javascripts/components/actions/search.jsx b/app/assets/javascripts/components/actions/search.jsx deleted file mode 100644 index df3ae0db1..000000000 --- a/app/assets/javascripts/components/actions/search.jsx +++ /dev/null @@ -1,73 +0,0 @@ -import api from '../api' - -export const SEARCH_CHANGE = 'SEARCH_CHANGE'; -export const SEARCH_CLEAR = 'SEARCH_CLEAR'; -export const SEARCH_SHOW = 'SEARCH_SHOW'; - -export const SEARCH_FETCH_REQUEST = 'SEARCH_FETCH_REQUEST'; -export const SEARCH_FETCH_SUCCESS = 'SEARCH_FETCH_SUCCESS'; -export const SEARCH_FETCH_FAIL = 'SEARCH_FETCH_FAIL'; - -export function changeSearch(value) { - return { - type: SEARCH_CHANGE, - value - }; -}; - -export function clearSearch() { - return { - type: SEARCH_CLEAR - }; -}; - -export function submitSearch() { - return (dispatch, getState) => { - const value = getState().getIn(['search', 'value']); - - if (value.length === 0) { - return; - } - - dispatch(fetchSearchRequest()); - - api(getState).get('/api/v1/search', { - params: { - q: value, - resolve: true - } - }).then(response => { - dispatch(fetchSearchSuccess(response.data)); - }).catch(error => { - dispatch(fetchSearchFail(error)); - }); - }; -}; - -export function fetchSearchRequest() { - return { - type: SEARCH_FETCH_REQUEST - }; -}; - -export function fetchSearchSuccess(results) { - return { - type: SEARCH_FETCH_SUCCESS, - results, - accounts: results.accounts, - statuses: results.statuses - }; -}; - -export function fetchSearchFail(error) { - return { - type: SEARCH_FETCH_FAIL, - error - }; -}; - -export function showSearch() { - return { - type: SEARCH_SHOW - }; -}; diff --git a/app/assets/javascripts/components/actions/settings.jsx b/app/assets/javascripts/components/actions/settings.jsx deleted file mode 100644 index c754b30ca..000000000 --- a/app/assets/javascripts/components/actions/settings.jsx +++ /dev/null @@ -1,19 +0,0 @@ -import axios from 'axios'; - -export const SETTING_CHANGE = 'SETTING_CHANGE'; - -export function changeSetting(key, value) { - return { - type: SETTING_CHANGE, - key, - value - }; -}; - -export function saveSettings() { - return (_, getState) => { - axios.put('/api/web/settings', { - data: getState().get('settings').toJS() - }); - }; -}; diff --git a/app/assets/javascripts/components/actions/statuses.jsx b/app/assets/javascripts/components/actions/statuses.jsx deleted file mode 100644 index 19df2c36c..000000000 --- a/app/assets/javascripts/components/actions/statuses.jsx +++ /dev/null @@ -1,141 +0,0 @@ -import api from '../api'; - -import { deleteFromTimelines } from './timelines'; -import { fetchStatusCard } from './cards'; - -export const STATUS_FETCH_REQUEST = 'STATUS_FETCH_REQUEST'; -export const STATUS_FETCH_SUCCESS = 'STATUS_FETCH_SUCCESS'; -export const STATUS_FETCH_FAIL = 'STATUS_FETCH_FAIL'; - -export const STATUS_DELETE_REQUEST = 'STATUS_DELETE_REQUEST'; -export const STATUS_DELETE_SUCCESS = 'STATUS_DELETE_SUCCESS'; -export const STATUS_DELETE_FAIL = 'STATUS_DELETE_FAIL'; - -export const CONTEXT_FETCH_REQUEST = 'CONTEXT_FETCH_REQUEST'; -export const CONTEXT_FETCH_SUCCESS = 'CONTEXT_FETCH_SUCCESS'; -export const CONTEXT_FETCH_FAIL = 'CONTEXT_FETCH_FAIL'; - -export function fetchStatusRequest(id, skipLoading) { - return { - type: STATUS_FETCH_REQUEST, - id, - skipLoading - }; -}; - -export function fetchStatus(id) { - return (dispatch, getState) => { - const skipLoading = getState().getIn(['statuses', id], null) !== null; - - dispatch(fetchContext(id)); - dispatch(fetchStatusCard(id)); - - if (skipLoading) { - return; - } - - dispatch(fetchStatusRequest(id, skipLoading)); - - api(getState).get(`/api/v1/statuses/${id}`).then(response => { - dispatch(fetchStatusSuccess(response.data, skipLoading)); - }).catch(error => { - dispatch(fetchStatusFail(id, error, skipLoading)); - }); - }; -}; - -export function fetchStatusSuccess(status, skipLoading) { - return { - type: STATUS_FETCH_SUCCESS, - status, - skipLoading - }; -}; - -export function fetchStatusFail(id, error, skipLoading) { - return { - type: STATUS_FETCH_FAIL, - id, - error, - skipLoading, - skipAlert: true - }; -}; - -export function deleteStatus(id) { - return (dispatch, getState) => { - dispatch(deleteStatusRequest(id)); - - api(getState).delete(`/api/v1/statuses/${id}`).then(response => { - dispatch(deleteStatusSuccess(id)); - dispatch(deleteFromTimelines(id)); - }).catch(error => { - dispatch(deleteStatusFail(id, error)); - }); - }; -}; - -export function deleteStatusRequest(id) { - return { - type: STATUS_DELETE_REQUEST, - id: id - }; -}; - -export function deleteStatusSuccess(id) { - return { - type: STATUS_DELETE_SUCCESS, - id: id - }; -}; - -export function deleteStatusFail(id, error) { - return { - type: STATUS_DELETE_FAIL, - id: id, - error: error - }; -}; - -export function fetchContext(id) { - return (dispatch, getState) => { - dispatch(fetchContextRequest(id)); - - api(getState).get(`/api/v1/statuses/${id}/context`).then(response => { - dispatch(fetchContextSuccess(id, response.data.ancestors, response.data.descendants)); - - }).catch(error => { - if (error.response.status === 404) { - dispatch(deleteFromTimelines(id)); - } - - dispatch(fetchContextFail(id, error)); - }); - }; -}; - -export function fetchContextRequest(id) { - return { - type: CONTEXT_FETCH_REQUEST, - id - }; -}; - -export function fetchContextSuccess(id, ancestors, descendants) { - return { - type: CONTEXT_FETCH_SUCCESS, - id, - ancestors, - descendants, - statuses: ancestors.concat(descendants) - }; -}; - -export function fetchContextFail(id, error) { - return { - type: CONTEXT_FETCH_FAIL, - id, - error, - skipAlert: true - }; -}; diff --git a/app/assets/javascripts/components/actions/store.jsx b/app/assets/javascripts/components/actions/store.jsx deleted file mode 100644 index 3bba99549..000000000 --- a/app/assets/javascripts/components/actions/store.jsx +++ /dev/null @@ -1,17 +0,0 @@ -import Immutable from 'immutable'; - -export const STORE_HYDRATE = 'STORE_HYDRATE'; - -const convertState = rawState => - Immutable.fromJS(rawState, (k, v) => - Immutable.Iterable.isIndexed(v) ? v.toList() : v.toMap().mapKeys(x => - Number.isNaN(x * 1) ? x : x * 1)); - -export function hydrateStore(rawState) { - const state = convertState(rawState); - - return { - type: STORE_HYDRATE, - state - }; -}; diff --git a/app/assets/javascripts/components/actions/timelines.jsx b/app/assets/javascripts/components/actions/timelines.jsx deleted file mode 100644 index 6cd1f04b3..000000000 --- a/app/assets/javascripts/components/actions/timelines.jsx +++ /dev/null @@ -1,186 +0,0 @@ -import api, { getLinks } from '../api' -import Immutable from 'immutable'; - -export const TIMELINE_UPDATE = 'TIMELINE_UPDATE'; -export const TIMELINE_DELETE = 'TIMELINE_DELETE'; - -export const TIMELINE_REFRESH_REQUEST = 'TIMELINE_REFRESH_REQUEST'; -export const TIMELINE_REFRESH_SUCCESS = 'TIMELINE_REFRESH_SUCCESS'; -export const TIMELINE_REFRESH_FAIL = 'TIMELINE_REFRESH_FAIL'; - -export const TIMELINE_EXPAND_REQUEST = 'TIMELINE_EXPAND_REQUEST'; -export const TIMELINE_EXPAND_SUCCESS = 'TIMELINE_EXPAND_SUCCESS'; -export const TIMELINE_EXPAND_FAIL = 'TIMELINE_EXPAND_FAIL'; - -export const TIMELINE_SCROLL_TOP = 'TIMELINE_SCROLL_TOP'; - -export const TIMELINE_CONNECT = 'TIMELINE_CONNECT'; -export const TIMELINE_DISCONNECT = 'TIMELINE_DISCONNECT'; - -export function refreshTimelineSuccess(timeline, statuses, skipLoading, next) { - return { - type: TIMELINE_REFRESH_SUCCESS, - timeline, - statuses, - skipLoading, - next - }; -}; - -export function updateTimeline(timeline, status) { - return (dispatch, getState) => { - const references = status.reblog ? getState().get('statuses').filter((item, itemId) => (itemId === status.reblog.id || item.get('reblog') === status.reblog.id)).map((_, itemId) => itemId) : []; - - dispatch({ - type: TIMELINE_UPDATE, - timeline, - status, - references - }); - }; -}; - -export function deleteFromTimelines(id) { - return (dispatch, getState) => { - const accountId = getState().getIn(['statuses', id, 'account']); - const references = getState().get('statuses').filter(status => status.get('reblog') === id).map(status => [status.get('id'), status.get('account')]); - const reblogOf = getState().getIn(['statuses', id, 'reblog'], null); - - dispatch({ - type: TIMELINE_DELETE, - id, - accountId, - references, - reblogOf - }); - }; -}; - -export function refreshTimelineRequest(timeline, id, skipLoading) { - return { - type: TIMELINE_REFRESH_REQUEST, - timeline, - id, - skipLoading - }; -}; - -export function refreshTimeline(timeline, id = null) { - return function (dispatch, getState) { - if (getState().getIn(['timelines', timeline, 'isLoading'])) { - return; - } - - const ids = getState().getIn(['timelines', timeline, 'items'], Immutable.List()); - const newestId = ids.size > 0 ? ids.first() : null; - let params = getState().getIn(['timelines', timeline, 'params'], {}); - const path = getState().getIn(['timelines', timeline, 'path'])(id); - - let skipLoading = false; - - if (newestId !== null && getState().getIn(['timelines', timeline, 'loaded']) && (id === null || getState().getIn(['timelines', timeline, 'id']) === id)) { - if (id === null && getState().getIn(['timelines', timeline, 'online'])) { - // Skip refreshing when timeline is live anyway - return; - } - - params = { ...params, since_id: newestId }; - skipLoading = true; - } - - dispatch(refreshTimelineRequest(timeline, id, skipLoading)); - - api(getState).get(path, { params }).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(refreshTimelineSuccess(timeline, response.data, skipLoading, next ? next.uri : null)); - }).catch(error => { - dispatch(refreshTimelineFail(timeline, error, skipLoading)); - }); - }; -}; - -export function refreshTimelineFail(timeline, error, skipLoading) { - return { - type: TIMELINE_REFRESH_FAIL, - timeline, - error, - skipLoading - }; -}; - -export function expandTimeline(timeline) { - return (dispatch, getState) => { - if (getState().getIn(['timelines', timeline, 'isLoading'])) { - return; - } - - if (getState().getIn(['timelines', timeline, 'items']).size === 0) { - return; - } - - const path = getState().getIn(['timelines', timeline, 'path'])(getState().getIn(['timelines', timeline, 'id'])); - const params = getState().getIn(['timelines', timeline, 'params'], {}); - const lastId = getState().getIn(['timelines', timeline, 'items']).last(); - - dispatch(expandTimelineRequest(timeline)); - - api(getState).get(path, { - params: { - ...params, - max_id: lastId, - limit: 10 - } - }).then(response => { - const next = getLinks(response).refs.find(link => link.rel === 'next'); - dispatch(expandTimelineSuccess(timeline, response.data, next ? next.uri : null)); - }).catch(error => { - dispatch(expandTimelineFail(timeline, error)); - }); - }; -}; - -export function expandTimelineRequest(timeline) { - return { - type: TIMELINE_EXPAND_REQUEST, - timeline - }; -}; - -export function expandTimelineSuccess(timeline, statuses, next) { - return { - type: TIMELINE_EXPAND_SUCCESS, - timeline, - statuses, - next - }; -}; - -export function expandTimelineFail(timeline, error) { - return { - type: TIMELINE_EXPAND_FAIL, - timeline, - error - }; -}; - -export function scrollTopTimeline(timeline, top) { - return { - type: TIMELINE_SCROLL_TOP, - timeline, - top - }; -}; - -export function connectTimeline(timeline) { - return { - type: TIMELINE_CONNECT, - timeline - }; -}; - -export function disconnectTimeline(timeline) { - return { - type: TIMELINE_DISCONNECT, - timeline - }; -}; diff --git a/app/assets/javascripts/components/api.jsx b/app/assets/javascripts/components/api.jsx deleted file mode 100644 index 185729ce0..000000000 --- a/app/assets/javascripts/components/api.jsx +++ /dev/null @@ -1,26 +0,0 @@ -import axios from 'axios'; -import LinkHeader from './link_header'; - -export const getLinks = response => { - const value = response.headers.link; - - if (!value) { - return { refs: [] }; - } - - return LinkHeader.parse(value); -}; - -export default getState => axios.create({ - headers: { - 'Authorization': `Bearer ${getState().getIn(['meta', 'access_token'], '')}` - }, - - transformResponse: [function (data) { - try { - return JSON.parse(data); - } catch(Exception) { - return data; - } - }] -}); diff --git a/app/assets/javascripts/components/components/account.jsx b/app/assets/javascripts/components/components/account.jsx deleted file mode 100644 index 81439bd25..000000000 --- a/app/assets/javascripts/components/components/account.jsx +++ /dev/null @@ -1,91 +0,0 @@ -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import Avatar from './avatar'; -import DisplayName from './display_name'; -import Permalink from './permalink'; -import IconButton from './icon_button'; -import { defineMessages, injectIntl } from 'react-intl'; - -const messages = defineMessages({ - follow: { id: 'account.follow', defaultMessage: 'Follow' }, - unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, - requested: { id: 'account.requested', defaultMessage: 'Awaiting approval' }, - unblock: { id: 'account.unblock', defaultMessage: 'Unblock @{name}' }, - unmute: { id: 'account.unmute', defaultMessage: 'Unmute @{name}' } -}); - -class Account extends React.PureComponent { - - constructor (props, context) { - super(props, context); - this.handleFollow = this.handleFollow.bind(this); - this.handleBlock = this.handleBlock.bind(this); - this.handleMute = this.handleMute.bind(this); - } - - handleFollow () { - this.props.onFollow(this.props.account); - } - - handleBlock () { - this.props.onBlock(this.props.account); - } - - handleMute () { - this.props.onMute(this.props.account); - } - - render () { - const { account, me, intl } = this.props; - - if (!account) { - return

; - } - - let buttons; - - if (account.get('id') !== me && account.get('relationship', null) !== null) { - const following = account.getIn(['relationship', 'following']); - const requested = account.getIn(['relationship', 'requested']); - const blocking = account.getIn(['relationship', 'blocking']); - const muting = account.getIn(['relationship', 'muting']); - - if (requested) { - buttons = - } else if (blocking) { - buttons = ; - } else if (muting) { - buttons = ; - } else { - buttons = ; - } - } - - return ( -
-
- -
- -
- -
- {buttons} -
-
-
- ); - } - -} - -Account.propTypes = { - account: ImmutablePropTypes.map.isRequired, - me: PropTypes.number.isRequired, - onFollow: PropTypes.func.isRequired, - onBlock: PropTypes.func.isRequired, - onMute: PropTypes.func.isRequired, - intl: PropTypes.object.isRequired -} - -export default injectIntl(Account); diff --git a/app/assets/javascripts/components/components/attachment_list.jsx b/app/assets/javascripts/components/components/attachment_list.jsx deleted file mode 100644 index 54841fa51..000000000 --- a/app/assets/javascripts/components/components/attachment_list.jsx +++ /dev/null @@ -1,32 +0,0 @@ -import ImmutablePropTypes from 'react-immutable-proptypes'; - -const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; - -class AttachmentList extends React.PureComponent { - - render () { - const { media } = this.props; - - return ( -
-
- -
- - -
- ); - } -} - -AttachmentList.propTypes = { - media: ImmutablePropTypes.list.isRequired -}; - -export default AttachmentList; diff --git a/app/assets/javascripts/components/components/autosuggest_textarea.jsx b/app/assets/javascripts/components/components/autosuggest_textarea.jsx deleted file mode 100644 index 9a4d5b7e3..000000000 --- a/app/assets/javascripts/components/components/autosuggest_textarea.jsx +++ /dev/null @@ -1,211 +0,0 @@ -import AutosuggestAccountContainer from '../features/compose/containers/autosuggest_account_container'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import PropTypes from 'prop-types'; -import { isRtl } from '../rtl'; - -const textAtCursorMatchesToken = (str, caretPosition) => { - let word; - - let left = str.slice(0, caretPosition).search(/\S+$/); - let right = str.slice(caretPosition).search(/\s/); - - if (right < 0) { - word = str.slice(left); - } else { - word = str.slice(left, right + caretPosition); - } - - if (!word || word.trim().length < 2 || word[0] !== '@') { - return [null, null]; - } - - word = word.trim().toLowerCase().slice(1); - - if (word.length > 0) { - return [left + 1, word]; - } else { - return [null, null]; - } -}; - -class AutosuggestTextarea extends React.Component { - - constructor (props, context) { - super(props, context); - this.state = { - suggestionsHidden: false, - selectedSuggestion: 0, - lastToken: null, - tokenStart: 0 - }; - this.onChange = this.onChange.bind(this); - this.onKeyDown = this.onKeyDown.bind(this); - this.onBlur = this.onBlur.bind(this); - this.onSuggestionClick = this.onSuggestionClick.bind(this); - this.setTextarea = this.setTextarea.bind(this); - this.onPaste = this.onPaste.bind(this); - } - - onChange (e) { - const [ tokenStart, token ] = textAtCursorMatchesToken(e.target.value, e.target.selectionStart); - - if (token !== null && this.state.lastToken !== token) { - this.setState({ lastToken: token, selectedSuggestion: 0, tokenStart }); - this.props.onSuggestionsFetchRequested(token); - } else if (token === null) { - this.setState({ lastToken: null }); - this.props.onSuggestionsClearRequested(); - } - - // auto-resize textarea - e.target.style.height = `${e.target.scrollHeight}px`; - - this.props.onChange(e); - } - - onKeyDown (e) { - const { suggestions, disabled } = this.props; - const { selectedSuggestion, suggestionsHidden } = this.state; - - if (disabled) { - e.preventDefault(); - return; - } - - switch(e.key) { - case 'Escape': - if (!suggestionsHidden) { - e.preventDefault(); - this.setState({ suggestionsHidden: true }); - } - - break; - case 'ArrowDown': - if (suggestions.size > 0 && !suggestionsHidden) { - e.preventDefault(); - this.setState({ selectedSuggestion: Math.min(selectedSuggestion + 1, suggestions.size - 1) }); - } - - break; - case 'ArrowUp': - if (suggestions.size > 0 && !suggestionsHidden) { - e.preventDefault(); - this.setState({ selectedSuggestion: Math.max(selectedSuggestion - 1, 0) }); - } - - break; - case 'Enter': - case 'Tab': - // Select suggestion - if (this.state.lastToken !== null && suggestions.size > 0 && !suggestionsHidden) { - e.preventDefault(); - e.stopPropagation(); - this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestions.get(selectedSuggestion)); - } - - break; - } - - if (e.defaultPrevented || !this.props.onKeyDown) { - return; - } - - this.props.onKeyDown(e); - } - - onBlur () { - // If we hide the suggestions immediately, then this will prevent the - // onClick for the suggestions themselves from firing. - // Setting a short window for that to take place before hiding the - // suggestions ensures that can't happen. - setTimeout(() => { - this.setState({ suggestionsHidden: true }); - }, 100); - } - - onSuggestionClick (suggestion, e) { - e.preventDefault(); - this.props.onSuggestionSelected(this.state.tokenStart, this.state.lastToken, suggestion); - this.textarea.focus(); - } - - componentWillReceiveProps (nextProps) { - if (nextProps.suggestions !== this.props.suggestions && nextProps.suggestions.size > 0 && this.state.suggestionsHidden) { - this.setState({ suggestionsHidden: false }); - } - } - - setTextarea (c) { - this.textarea = c; - } - - onPaste (e) { - if (e.clipboardData && e.clipboardData.files.length === 1) { - this.props.onPaste(e.clipboardData.files) - e.preventDefault(); - } - } - - reset () { - this.textarea.style.height = 'auto'; - } - - render () { - const { value, suggestions, disabled, placeholder, onKeyUp } = this.props; - const { suggestionsHidden, selectedSuggestion } = this.state; - const style = { direction: 'ltr' }; - - if (isRtl(value)) { - style.direction = 'rtl'; - } - - return ( -
-