From 5e041ff7c2a72f1fdff75d0bc11dd6248108266f Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 4 Mar 2024 10:01:52 +0100 Subject: [PATCH] Migrate to standalone components --- .../about-follows/about-follows.component.ts | 5 +- .../about-instance.component.ts | 23 +- .../about-instance/about-instance.resolver.ts | 2 +- .../contact-admin-modal.component.ts | 9 +- .../instance-statistics.component.ts | 7 +- .../about-peertube.component.ts | 3 +- client/src/app/+about/about.component.ts | 7 +- client/src/app/+about/about.module.ts | 46 ---- client/src/app/+about/index.ts | 3 - .../{about-routing.module.ts => routes.ts} | 21 +- .../account-video-channels.component.ts | 10 +- .../account-videos.component.ts | 6 +- .../src/app/+accounts/accounts.component.ts | 31 ++- client/src/app/+accounts/accounts.module.ts | 39 --- client/src/app/+accounts/index.ts | 3 - .../{accounts-routing.module.ts => routes.ts} | 22 +- client/src/app/+admin/admin-routing.module.ts | 36 --- client/src/app/+admin/admin.component.ts | 7 +- client/src/app/+admin/admin.module.ts | 159 ------------ .../edit-advanced-configuration.component.ts | 9 +- .../edit-basic-configuration.component.html | 18 +- .../edit-basic-configuration.component.ts | 29 ++- .../edit-custom-config.component.ts | 30 ++- .../edit-homepage.component.ts | 9 +- .../edit-instance-information.component.ts | 32 ++- .../edit-live-configuration.component.ts | 23 +- .../edit-vod-transcoding.component.ts | 23 +- .../followers-list.component.ts | 27 ++- .../following-list/follow-modal.component.ts | 7 +- .../following-list.component.ts | 26 +- .../shared/redundancy-checkbox.component.ts | 6 +- .../video-redundancies-list.component.ts | 30 ++- .../video-redundancy-information.component.ts | 6 +- .../abuse-list/abuse-list.component.ts | 6 +- .../instance-account-blocklist.component.ts | 22 +- .../instance-server-blocklist.component.ts | 22 +- .../process-registration-modal.component.ts | 8 +- .../registration-list.component.ts | 29 ++- .../video-block-list.component.ts | 30 ++- .../comments/video-comment-list.component.ts | 32 ++- .../users/user-edit/user-create.component.ts | 34 ++- .../user-edit/user-password.component.ts | 6 +- .../users/user-edit/user-update.component.ts | 34 ++- .../users/user-list/user-list.component.ts | 48 +++- .../overview/videos/video-list.component.ts | 38 ++- .../plugin-list-installed.component.ts | 20 +- .../plugin-search/plugin-search.component.ts | 22 +- .../plugin-show-installed.component.ts | 7 +- .../plugins/shared/plugin-card.component.ts | 5 +- .../shared/plugin-navigation.component.ts | 6 +- client/src/app/+admin/routes.ts | 66 +++++ client/src/app/+admin/shared/index.ts | 3 +- .../app/+admin/shared/shared-admin.module.ts | 23 -- .../shared/user-email-info.component.ts | 5 +- .../shared/user-real-quota-info.component.ts | 6 +- .../+admin/system/debug/debug.component.ts | 3 +- .../app/+admin/system/jobs/jobs.component.ts | 24 +- .../app/+admin/system/logs/logs.component.ts | 9 +- .../runner-job-list.component.ts | 29 ++- .../runner-list/runner-list.component.ts | 22 +- ...unner-registration-token-list.component.ts | 26 +- .../app/+error-page/error-page.component.ts | 6 +- .../src/app/+error-page/error-page.module.ts | 25 -- ...error-page-routing.module.ts => routes.ts} | 13 +- client/src/app/+home/home-routing.module.ts | 21 -- client/src/app/+home/home.component.ts | 5 +- client/src/app/+home/home.module.ts | 25 -- client/src/app/+home/index.ts | 3 - client/src/app/+home/routes.ts | 29 +++ client/src/app/+login/login.component.ts | 26 +- client/src/app/+login/login.module.ts | 31 --- .../{login-routing.module.ts => routes.ts} | 14 +- client/src/app/+manage/manage.module.ts | 31 --- .../{manage-routing.module.ts => routes.ts} | 13 +- .../video-channel-create.component.ts | 21 +- .../video-channel-update.component.ts | 23 +- client/src/app/+my-account/index.ts | 3 - .../my-account-abuses-list.component.ts | 6 +- .../my-account-applications.component.ts | 6 +- .../my-account-blocklist.component.ts | 22 +- .../my-account-server-blocklist.component.ts | 22 +- .../my-account-export.component.ts | 9 +- .../my-account-import-export.component.ts | 6 +- .../my-account-import.component.ts | 7 +- .../my-account-notifications.component.ts | 8 +- .../my-account-change-email.component.ts | 7 +- .../my-account-change-password.component.ts | 7 +- .../my-account-danger-zone.component.ts | 3 +- .../my-account-email-preferences.component.ts | 6 +- ...ount-notification-preferences.component.ts | 7 +- .../my-account-profile.component.ts | 6 +- .../my-account-settings.component.ts | 32 ++- .../my-account-two-factor-button.component.ts | 6 +- .../my-account-two-factor.component.ts | 10 +- .../app/+my-account/my-account.component.ts | 8 +- .../src/app/+my-account/my-account.module.ts | 97 -------- ...my-account-routing.module.ts => routes.ts} | 26 +- .../my-video-channels.component.ts | 30 ++- .../my-video-channels.module.ts | 29 --- ...o-channels-routing.module.ts => routes.ts} | 13 +- client/src/app/+my-library/index.ts | 3 - .../my-follows/my-followers.component.ts | 9 +- .../my-follows/my-subscriptions.component.ts | 20 +- .../my-history/my-history.component.ts | 20 +- .../app/+my-library/my-library.component.ts | 8 +- .../src/app/+my-library/my-library.module.ts | 87 ------- .../my-accept-ownership.component.ts | 8 +- .../my-ownership/my-ownership.component.ts | 25 +- .../my-video-channel-syncs.component.ts | 24 +- .../video-channel-sync-edit.component.ts | 7 +- .../my-video-imports.component.ts | 32 ++- .../my-video-playlist-create.component.ts | 24 +- .../my-video-playlist-elements.component.ts | 23 +- .../my-video-playlist-update.component.ts | 24 +- .../my-video-playlists.component.ts | 24 +- .../video-change-ownership.component.ts | 8 +- .../my-videos/my-videos.component.ts | 24 +- ...my-library-routing.module.ts => routes.ts} | 28 ++- client/src/app/+plugin-pages/index.ts | 3 - .../plugin-pages-routing.module.ts | 19 -- .../+plugin-pages/plugin-pages.component.ts | 3 +- .../app/+plugin-pages/plugin-pages.module.ts | 21 -- client/src/app/+plugin-pages/routes.ts | 12 + .../remote-interaction.component.ts | 5 +- .../remote-interaction.module.ts | 26 -- ...nteraction-routing.module.ts => routes.ts} | 18 +- .../reset-password-routing.module.ts | 21 -- .../reset-password.component.ts | 8 +- .../+reset-password/reset-password.module.ts | 26 -- client/src/app/+reset-password/routes.ts | 14 ++ client/src/app/+search/routes.ts | 46 ++++ .../app/+search/search-filters.component.ts | 7 +- .../src/app/+search/search-routing.module.ts | 43 ---- client/src/app/+search/search.component.ts | 28 ++- client/src/app/+search/search.module.ts | 44 ---- .../+register/custom-stepper.component.ts | 6 +- .../+signup/+register/register.component.ts | 34 ++- .../app/+signup/+register/register.module.ts | 39 --- .../{register-routing.module.ts => routes.ts} | 15 +- .../steps/register-step-about.component.ts | 7 +- .../steps/register-step-channel.component.ts | 8 +- .../steps/register-step-terms.component.ts | 9 +- .../steps/register-step-user.component.ts | 8 +- ...fy-account-routing.module.ts => routes.ts} | 15 +- ...verify-account-ask-send-email.component.ts | 6 +- .../verify-account-email.component.ts | 8 +- .../+verify-account/verify-account.module.ts | 24 -- .../+signup/shared/shared-signup.module.ts | 42 ---- .../+signup/shared/signup-mascot.component.ts | 3 +- .../shared/signup-step-title.component.ts | 6 +- .../signup-success-after-email.component.ts | 6 +- .../signup-success-before-email.component.ts | 6 +- client/src/app/+stats/index.ts | 1 - .../{stats-routing.module.ts => routes.ts} | 21 +- client/src/app/+stats/stats.module.ts | 31 --- .../app/+stats/video/video-stats.component.ts | 29 ++- client/src/app/+video-channels/index.ts | 3 - ...o-channels-routing.module.ts => routes.ts} | 24 +- .../video-channel-playlists.component.ts | 7 +- .../video-channel-videos.component.ts | 6 +- .../video-channels.component.ts | 27 ++- .../+video-channels/video-channels.module.ts | 45 ---- .../edit/video-studio-edit.component.ts | 19 +- client/src/app/+video-studio/index.ts | 1 - ...deo-studio-routing.module.ts => routes.ts} | 15 +- .../app/+video-studio/video-studio.module.ts | 26 -- .../src/app/+videos/+video-edit/add-routes.ts | 20 ++ .../video-caption-add-modal.component.ts | 9 +- ...eo-caption-edit-modal-content.component.ts | 7 +- .../shared/video-edit.component.ts | 66 ++++- .../+video-edit/shared/video-edit.module.ts | 44 ---- .../app/+videos/+video-edit/update-routes.ts | 25 ++ .../drag-drop.directive.ts | 3 +- .../video-go-live.component.ts | 20 ++ .../video-import-torrent.component.ts | 26 ++ .../video-import-url.component.ts | 24 +- .../video-upload.component.ts | 26 ++ .../+video-edit/video-add-routing.module.ts | 19 -- .../+video-edit/video-add.component.ts | 27 ++- .../+videos/+video-edit/video-add.module.ts | 37 --- .../video-update-routing.module.ts | 23 -- .../+video-edit/video-update.component.ts | 20 +- .../+video-edit/video-update.module.ts | 27 --- .../+video-watch/player-styles.component.ts | 3 +- client/src/app/+videos/+video-watch/routes.ts | 42 ++++ .../action-buttons.component.ts | 25 +- .../action-buttons/video-rate.component.ts | 7 +- .../comment/video-comment-add.component.ts | 27 ++- .../shared/comment/video-comment.component.ts | 22 +- .../comment/video-comments.component.ts | 24 +- .../information/privacy-concerns.component.ts | 5 +- .../information/video-alert.component.ts | 5 +- .../metadata/video-attributes.component.ts | 8 +- .../video-avatar-channel.component.ts | 6 +- .../metadata/video-description.component.ts | 6 +- .../video-watch-playlist.component.ts | 9 +- .../shared/recommendations/index.ts | 1 - .../recommendations/recommendations.module.ts | 34 --- .../recommended-videos.component.ts | 9 +- .../timestamp-route-transformer.directive.ts | 3 +- .../video-watch-routing.module.ts | 24 -- .../+video-watch/video-watch.component.ts | 39 ++- .../+video-watch/video-watch.module.ts | 85 ------- client/src/app/+videos/index.ts | 1 - .../{videos-routing.module.ts => routes.ts} | 23 +- .../overview/video-overview.component.ts | 9 +- .../video-user-subscriptions.component.ts | 5 +- .../videos-list-common-page.component.ts | 5 +- client/src/app/+videos/videos.module.ts | 37 --- client/src/app/app.component.ts | 36 ++- client/src/app/app.module.ts | 103 -------- .../{app-routing.module.ts => app.routes.ts} | 70 ++---- .../{core.module.ts => core-providers.ts} | 40 +-- client/src/app/core/index.ts | 2 +- client/src/app/core/module-import-guard.ts | 5 - client/src/app/core/routing/index.ts | 1 - client/src/app/empty.component.ts | 3 +- client/src/app/header/header.component.ts | 7 +- client/src/app/header/highlight.pipe.ts | 5 +- .../app/header/search-typeahead.component.ts | 7 +- client/src/app/header/suggestion.component.ts | 7 +- .../homepage-redirect.component.ts | 5 +- .../hotkeys/hotkeys-cheat-sheet.component.ts | 7 +- client/src/app/index.ts | 1 - .../app/menu/language-chooser.component.ts | 4 +- client/src/app/menu/menu.component.ts | 27 ++- client/src/app/menu/notification.component.ts | 9 +- .../menu/quick-settings-modal.component.ts | 6 +- .../account-setup-warning-modal.component.ts | 7 +- .../modal/admin-welcome-modal.component.ts | 4 +- client/src/app/modal/confirm.component.ts | 8 +- .../src/app/modal/custom-modal.component.ts | 6 +- ...instance-config-warning-modal.component.ts | 7 +- .../abuse-details.component.ts | 9 +- .../abuse-list-table.component.ts | 34 ++- .../abuse-message-modal.component.ts | 7 +- .../moderation-comment-modal.component.ts | 7 +- .../shared-abuse-list.module.ts | 45 ---- .../actor-avatar-edit.component.ts | 9 +- .../actor-banner-edit.component.ts | 8 +- .../shared-actor-image-edit.module.ts | 30 --- .../actor-avatar.component.ts | 6 +- .../shared-actor-image.module.ts | 22 -- .../custom-markup-container.component.ts | 3 +- .../custom-markup-help.component.ts | 3 +- .../app/shared/shared-custom-markup/index.ts | 1 - .../button-markup.component.ts | 5 +- .../channel-miniature-markup.component.ts | 8 +- .../embed-markup.component.ts | 3 +- .../instance-avatar-markup.component.ts | 6 +- .../instance-banner-markup.component.ts | 5 +- .../playlist-miniature-markup.component.ts | 6 +- .../video-miniature-markup.component.ts | 6 +- .../videos-list-markup.component.ts | 6 +- .../shared-custom-markup.module.ts | 67 ------ .../advanced-input-filter.component.ts | 8 +- .../dynamic-form-field.component.ts | 20 +- client/src/app/shared/shared-forms/index.ts | 2 +- .../shared-forms/input-switch.component.ts | 3 +- .../shared-forms/input-text.component.ts | 9 +- .../markdown-textarea.component.ts | 20 +- .../peertube-checkbox.component.ts | 8 +- .../shared-forms/preview-upload.component.ts | 6 +- .../shared-forms/reactive-file.component.ts | 9 +- .../select/select-categories.component.ts | 7 +- .../select/select-channel.component.ts | 8 +- .../select/select-checkbox-all.component.ts | 10 +- .../select/select-checkbox.component.ts | 7 +- .../select/select-custom-value.component.ts | 8 +- .../select/select-languages.component.ts | 7 +- .../select/select-options.component.ts | 8 +- .../select/select-tags.component.ts | 7 +- .../shared-forms/shared-form-providers.ts | 6 + .../shared/shared-forms/shared-form.module.ts | 103 -------- .../textarea-autoresize.directive.ts | 3 +- .../shared-forms/timestamp-input.component.ts | 8 +- .../shared-icons/global-icon.component.ts | 3 +- client/src/app/shared/shared-icons/index.ts | 2 - .../shared-icons/shared-global-icon.module.ts | 20 -- .../feature-boolean.component.ts | 6 +- .../src/app/shared/shared-instance/index.ts | 2 - .../instance-about-accordion.component.ts | 33 ++- .../instance-banner.component.ts | 5 +- .../instance-features-table.component.ts | 9 +- .../shared-instance/shared-instance.module.ts | 38 --- .../shared-main/account/account.service.ts | 2 +- .../account/signup-label.component.ts | 5 +- .../angular/auto-colspan.directive.ts | 3 +- .../angular/autofocus.directive.ts | 3 +- .../shared/shared-main/angular/bytes.pipe.ts | 5 +- .../angular/days-duration-formatter.pipe.ts | 3 +- .../angular/defer-loading.directive.ts | 3 +- .../shared-main/angular/from-now.pipe.ts | 5 +- .../angular/infinite-scroller.directive.ts | 3 +- .../shared-main/angular/link.component.ts | 6 +- .../angular/login-link.component.ts | 5 +- .../angular/number-formatter.pipe.ts | 5 +- .../angular/peertube-template.directive.ts | 3 +- .../angular/time-duration-formatter.pipe.ts | 3 +- .../buttons/action-dropdown.component.ts | 9 +- .../shared-main/buttons/button.component.ts | 9 +- .../buttons/copy-button.component.ts | 7 +- .../buttons/delete-button.component.ts | 5 +- .../buttons/edit-button.component.ts | 5 +- .../shared-main/date/date-toggle.component.ts | 3 +- .../shared-main/feeds/feed.component.ts | 7 +- client/src/app/shared/shared-main/index.ts | 3 +- .../app/shared/shared-main/instance/index.ts | 1 + .../instance}/instance.service.ts | 2 +- .../shared-main/loaders/loader.component.ts | 5 +- .../app/shared/shared-main/main-providers.ts | 44 ++++ .../misc/channels-setup-message.component.ts | 7 +- .../shared/shared-main/misc/help.component.ts | 7 +- .../misc/list-overflow.component.ts | 19 +- .../misc/simple-search-input.component.ts | 7 +- .../misc/top-menu-dropdown.component.ts | 21 +- .../plugins/plugin-placeholder.component.ts | 3 +- .../plugins/plugin-selector.directive.ts | 5 +- .../shared/shared-main/shared-main.module.ts | 227 ------------------ .../shared-main/users/user-quota.component.ts | 6 +- .../video-channel/video-channel.service.ts | 2 +- .../shared-main/video/embed.component.ts | 3 +- .../account-block-badges.component.ts | 5 +- .../account-blocklist.component.ts | 4 +- .../batch-domains-modal.component.ts | 7 +- .../src/app/shared/shared-moderation/index.ts | 1 - .../report-modals/account-report.component.ts | 19 +- .../report-modals/comment-report.component.ts | 19 +- .../report-modals/video-report.component.ts | 27 ++- .../server-blocklist.component.ts | 4 +- .../shared-moderation.module.ts | 58 ----- .../user-ban-modal.component.ts | 9 +- .../user-moderation-dropdown.component.ts | 7 +- .../video-block.component.ts | 9 +- client/src/app/shared/shared-search/index.ts | 1 - .../shared-search/shared-search.module.ts | 24 -- .../app/shared/shared-share-modal/index.ts | 2 - .../shared-share-modal.module.ts | 27 --- .../video-share.component.ts | 43 +++- .../app/shared/shared-support-modal/index.ts | 2 - .../shared-support-modal.module.ts | 24 -- .../support-modal.component.ts | 5 +- client/src/app/shared/shared-tables/index.ts | 1 - .../shared-tables/shared-tables.module.ts | 24 -- .../table-expander-icon.component.ts | 6 +- .../shared-tables/video-cell.component.ts | 3 +- .../src/app/shared/shared-thumbnail/index.ts | 1 - .../shared-thumbnail.module.ts | 22 -- .../video-thumbnail.component.ts | 8 +- .../app/shared/shared-user-settings/index.ts | 2 - .../shared-user-settings.module.ts | 25 -- .../user-interface-settings.component.ts | 6 +- .../user-video-settings.component.ts | 20 +- .../shared/shared-user-subscription/index.ts | 2 - .../remote-subscribe.component.ts | 8 +- .../shared-user-subscription.module.ts | 28 --- .../subscribe-button.component.ts | 17 +- client/src/app/shared/shared-users/index.ts | 2 - .../shared-users/shared-users.module.ts | 20 -- .../app/shared/shared-video-comment/index.ts | 2 - .../shared-video-comment.module.ts | 18 -- .../src/app/shared/shared-video-live/index.ts | 2 - .../live-documentation-link.component.ts | 3 +- .../live-stream-information.component.ts | 19 +- .../shared-video-live.module.ts | 30 --- .../shared/shared-video-miniature/index.ts | 1 - .../shared-video-miniature.module.ts | 51 ---- .../video-actions-dropdown.component.ts | 19 +- .../video-download.component.ts | 34 ++- .../video-filters-header.component.ts | 28 ++- .../video-miniature.component.ts | 24 +- .../videos-list.component.ts | 27 ++- .../videos-selection.component.ts | 10 +- .../app/shared/shared-video-playlist/index.ts | 2 - .../shared-video-playlist.module.ts | 37 --- .../video-add-to-playlist.component.ts | 18 +- ...eo-playlist-element-miniature.component.ts | 33 ++- .../video-playlist-miniature.component.ts | 8 +- client/src/app/shared/shared-video/index.ts | 2 +- .../shared-video/shared-video.module.ts | 18 -- .../video-views-counter.component.ts | 6 +- .../user-notifications.component.ts | 7 +- client/src/main.ts | 99 +++++++- 383 files changed, 3448 insertions(+), 3148 deletions(-) delete mode 100644 client/src/app/+about/about.module.ts delete mode 100644 client/src/app/+about/index.ts rename client/src/app/+about/{about-routing.module.ts => routes.ts} (80%) delete mode 100644 client/src/app/+accounts/accounts.module.ts delete mode 100644 client/src/app/+accounts/index.ts rename client/src/app/+accounts/{accounts-routing.module.ts => routes.ts} (70%) delete mode 100644 client/src/app/+admin/admin-routing.module.ts delete mode 100644 client/src/app/+admin/admin.module.ts create mode 100644 client/src/app/+admin/routes.ts delete mode 100644 client/src/app/+admin/shared/shared-admin.module.ts delete mode 100644 client/src/app/+error-page/error-page.module.ts rename client/src/app/+error-page/{error-page-routing.module.ts => routes.ts} (54%) delete mode 100644 client/src/app/+home/home-routing.module.ts delete mode 100644 client/src/app/+home/home.module.ts delete mode 100644 client/src/app/+home/index.ts create mode 100644 client/src/app/+home/routes.ts delete mode 100644 client/src/app/+login/login.module.ts rename client/src/app/+login/{login-routing.module.ts => routes.ts} (55%) delete mode 100644 client/src/app/+manage/manage.module.ts rename client/src/app/+manage/{manage-routing.module.ts => routes.ts} (67%) delete mode 100644 client/src/app/+my-account/index.ts delete mode 100644 client/src/app/+my-account/my-account.module.ts rename client/src/app/+my-account/{my-account-routing.module.ts => routes.ts} (87%) delete mode 100644 client/src/app/+my-library/+my-video-channels/my-video-channels.module.ts rename client/src/app/+my-library/+my-video-channels/{my-video-channels-routing.module.ts => routes.ts} (56%) delete mode 100644 client/src/app/+my-library/index.ts delete mode 100644 client/src/app/+my-library/my-library.module.ts rename client/src/app/+my-library/{my-library-routing.module.ts => routes.ts} (87%) delete mode 100644 client/src/app/+plugin-pages/index.ts delete mode 100644 client/src/app/+plugin-pages/plugin-pages-routing.module.ts delete mode 100644 client/src/app/+plugin-pages/plugin-pages.module.ts create mode 100644 client/src/app/+plugin-pages/routes.ts delete mode 100644 client/src/app/+remote-interaction/remote-interaction.module.ts rename client/src/app/+remote-interaction/{remote-interaction-routing.module.ts => routes.ts} (50%) delete mode 100644 client/src/app/+reset-password/reset-password-routing.module.ts delete mode 100644 client/src/app/+reset-password/reset-password.module.ts create mode 100644 client/src/app/+reset-password/routes.ts create mode 100644 client/src/app/+search/routes.ts delete mode 100644 client/src/app/+search/search-routing.module.ts delete mode 100644 client/src/app/+search/search.module.ts delete mode 100644 client/src/app/+signup/+register/register.module.ts rename client/src/app/+signup/+register/{register-routing.module.ts => routes.ts} (56%) rename client/src/app/+signup/+verify-account/{verify-account-routing.module.ts => routes.ts} (71%) delete mode 100644 client/src/app/+signup/+verify-account/verify-account.module.ts delete mode 100644 client/src/app/+signup/shared/shared-signup.module.ts delete mode 100644 client/src/app/+stats/index.ts rename client/src/app/+stats/{stats-routing.module.ts => routes.ts} (52%) delete mode 100644 client/src/app/+stats/stats.module.ts delete mode 100644 client/src/app/+video-channels/index.ts rename client/src/app/+video-channels/{video-channels-routing.module.ts => routes.ts} (65%) delete mode 100644 client/src/app/+video-channels/video-channels.module.ts delete mode 100644 client/src/app/+video-studio/index.ts rename client/src/app/+video-studio/{video-studio-routing.module.ts => routes.ts} (63%) delete mode 100644 client/src/app/+video-studio/video-studio.module.ts create mode 100644 client/src/app/+videos/+video-edit/add-routes.ts delete mode 100644 client/src/app/+videos/+video-edit/shared/video-edit.module.ts create mode 100644 client/src/app/+videos/+video-edit/update-routes.ts delete mode 100644 client/src/app/+videos/+video-edit/video-add-routing.module.ts delete mode 100644 client/src/app/+videos/+video-edit/video-add.module.ts delete mode 100644 client/src/app/+videos/+video-edit/video-update-routing.module.ts delete mode 100644 client/src/app/+videos/+video-edit/video-update.module.ts create mode 100644 client/src/app/+videos/+video-watch/routes.ts delete mode 100644 client/src/app/+videos/+video-watch/shared/recommendations/recommendations.module.ts delete mode 100644 client/src/app/+videos/+video-watch/video-watch-routing.module.ts delete mode 100644 client/src/app/+videos/+video-watch/video-watch.module.ts delete mode 100644 client/src/app/+videos/index.ts rename client/src/app/+videos/{videos-routing.module.ts => routes.ts} (73%) delete mode 100644 client/src/app/+videos/videos.module.ts delete mode 100644 client/src/app/app.module.ts rename client/src/app/{app-routing.module.ts => app.routes.ts} (51%) rename client/src/app/core/{core.module.ts => core-providers.ts} (71%) delete mode 100644 client/src/app/core/module-import-guard.ts rename client/src/app/{core/routing => }/homepage-redirect.component.ts (88%) delete mode 100644 client/src/app/index.ts delete mode 100644 client/src/app/shared/shared-abuse-list/shared-abuse-list.module.ts delete mode 100644 client/src/app/shared/shared-actor-image-edit/shared-actor-image-edit.module.ts delete mode 100644 client/src/app/shared/shared-actor-image/shared-actor-image.module.ts delete mode 100644 client/src/app/shared/shared-custom-markup/shared-custom-markup.module.ts create mode 100644 client/src/app/shared/shared-forms/shared-form-providers.ts delete mode 100644 client/src/app/shared/shared-forms/shared-form.module.ts delete mode 100644 client/src/app/shared/shared-icons/shared-global-icon.module.ts delete mode 100644 client/src/app/shared/shared-instance/shared-instance.module.ts create mode 100644 client/src/app/shared/shared-main/instance/index.ts rename client/src/app/shared/{shared-instance => shared-main/instance}/instance.service.ts (98%) create mode 100644 client/src/app/shared/shared-main/main-providers.ts delete mode 100644 client/src/app/shared/shared-main/shared-main.module.ts delete mode 100644 client/src/app/shared/shared-moderation/shared-moderation.module.ts delete mode 100644 client/src/app/shared/shared-search/shared-search.module.ts delete mode 100644 client/src/app/shared/shared-share-modal/shared-share-modal.module.ts delete mode 100644 client/src/app/shared/shared-support-modal/shared-support-modal.module.ts delete mode 100644 client/src/app/shared/shared-tables/shared-tables.module.ts delete mode 100644 client/src/app/shared/shared-thumbnail/shared-thumbnail.module.ts delete mode 100644 client/src/app/shared/shared-user-settings/shared-user-settings.module.ts delete mode 100644 client/src/app/shared/shared-user-subscription/shared-user-subscription.module.ts delete mode 100644 client/src/app/shared/shared-users/shared-users.module.ts delete mode 100644 client/src/app/shared/shared-video-comment/shared-video-comment.module.ts delete mode 100644 client/src/app/shared/shared-video-live/shared-video-live.module.ts delete mode 100644 client/src/app/shared/shared-video-miniature/shared-video-miniature.module.ts delete mode 100644 client/src/app/shared/shared-video-playlist/shared-video-playlist.module.ts delete mode 100644 client/src/app/shared/shared-video/shared-video.module.ts diff --git a/client/src/app/+about/about-follows/about-follows.component.ts b/client/src/app/+about/about-follows/about-follows.component.ts index a542cdbf1..8df44f689 100644 --- a/client/src/app/+about/about-follows/about-follows.component.ts +++ b/client/src/app/+about/about-follows/about-follows.component.ts @@ -3,11 +3,14 @@ import { Component, OnInit } from '@angular/core' import { ComponentPagination, hasMoreItems, Notifier, RestService, ServerService } from '@app/core' import { InstanceFollowService } from '@app/shared/shared-instance' import { Actor } from '@peertube/peertube-models' +import { NgIf, NgFor } from '@angular/common' @Component({ selector: 'my-about-follows', templateUrl: './about-follows.component.html', - styleUrls: [ './about-follows.component.scss' ] + styleUrls: [ './about-follows.component.scss' ], + standalone: true, + imports: [ NgIf, NgFor ] }) export class AboutFollowsComponent implements OnInit { diff --git a/client/src/app/+about/about-instance/about-instance.component.ts b/client/src/app/+about/about-instance/about-instance.component.ts index e22352eea..2f8cde98a 100644 --- a/client/src/app/+about/about-instance/about-instance.component.ts +++ b/client/src/app/+about/about-instance/about-instance.component.ts @@ -1,17 +1,32 @@ -import { ViewportScroller } from '@angular/common' +import { ViewportScroller, NgIf, NgFor } from '@angular/common' import { AfterViewChecked, Component, ElementRef, OnInit, ViewChild } from '@angular/core' -import { ActivatedRoute } from '@angular/router' +import { ActivatedRoute, RouterLink } from '@angular/router' import { Notifier, ServerService } from '@app/core' -import { AboutHTML } from '@app/shared/shared-instance' import { HTMLServerConfig, ServerStats } from '@peertube/peertube-models' import { copyToClipboard } from '@root-helpers/utils' import { ResolverData } from './about-instance.resolver' import { ContactAdminModalComponent } from './contact-admin-modal.component' +import { InstanceStatisticsComponent } from './instance-statistics.component' +import { InstanceFeaturesTableComponent } from '../../shared/shared-instance/instance-features-table.component' +import { PluginSelectorDirective } from '../../shared/shared-main/plugins/plugin-selector.directive' +import { CustomMarkupContainerComponent } from '../../shared/shared-custom-markup/custom-markup-container.component' +import { AboutHTML } from '@app/shared/shared-main' @Component({ selector: 'my-about-instance', templateUrl: './about-instance.component.html', - styleUrls: [ './about-instance.component.scss' ] + styleUrls: [ './about-instance.component.scss' ], + standalone: true, + imports: [ + NgIf, + RouterLink, + NgFor, + CustomMarkupContainerComponent, + PluginSelectorDirective, + InstanceFeaturesTableComponent, + InstanceStatisticsComponent, + ContactAdminModalComponent + ] }) export class AboutInstanceComponent implements OnInit, AfterViewChecked { @ViewChild('descriptionWrapper') descriptionWrapper: ElementRef diff --git a/client/src/app/+about/about-instance/about-instance.resolver.ts b/client/src/app/+about/about-instance/about-instance.resolver.ts index b5e8ccaa2..f98a21d5a 100644 --- a/client/src/app/+about/about-instance/about-instance.resolver.ts +++ b/client/src/app/+about/about-instance/about-instance.resolver.ts @@ -3,8 +3,8 @@ import { map, switchMap } from 'rxjs/operators' import { Injectable } from '@angular/core' import { ServerService } from '@app/core' import { CustomMarkupService } from '@app/shared/shared-custom-markup' -import { AboutHTML, InstanceService } from '@app/shared/shared-instance' import { About, ServerStats } from '@peertube/peertube-models' +import { InstanceService, AboutHTML } from '@app/shared/shared-main' export type ResolverData = { serverStats: ServerStats diff --git a/client/src/app/+about/about-instance/contact-admin-modal.component.ts b/client/src/app/+about/about-instance/contact-admin-modal.component.ts index 38e577fcd..60c2a47ea 100644 --- a/client/src/app/+about/about-instance/contact-admin-modal.component.ts +++ b/client/src/app/+about/about-instance/contact-admin-modal.component.ts @@ -8,10 +8,13 @@ import { SUBJECT_VALIDATOR } from '@app/shared/form-validators/instance-validators' import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' -import { InstanceService } from '@app/shared/shared-instance' +import { InstanceService } from '@app/shared/shared-main' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' import { HTMLServerConfig, HttpStatusCode } from '@peertube/peertube-models' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { NgIf, NgClass } from '@angular/common' +import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component' type Prefill = { subject?: string @@ -21,7 +24,9 @@ type Prefill = { @Component({ selector: 'my-contact-admin-modal', templateUrl: './contact-admin-modal.component.html', - styleUrls: [ './contact-admin-modal.component.scss' ] + styleUrls: [ './contact-admin-modal.component.scss' ], + standalone: true, + imports: [ GlobalIconComponent, NgIf, FormsModule, ReactiveFormsModule, NgClass ] }) export class ContactAdminModalComponent extends FormReactive implements OnInit { @ViewChild('modal', { static: true }) modal: NgbModal diff --git a/client/src/app/+about/about-instance/instance-statistics.component.ts b/client/src/app/+about/about-instance/instance-statistics.component.ts index 9eb56d0a4..cc918f856 100644 --- a/client/src/app/+about/about-instance/instance-statistics.component.ts +++ b/client/src/app/+about/about-instance/instance-statistics.component.ts @@ -1,10 +1,15 @@ import { Component, Input } from '@angular/core' import { ServerStats } from '@peertube/peertube-models' +import { BytesPipe } from '../../shared/shared-main/angular/bytes.pipe' +import { GlobalIconComponent } from '../../shared/shared-icons/global-icon.component' +import { NgIf, DecimalPipe } from '@angular/common' @Component({ selector: 'my-instance-statistics', templateUrl: './instance-statistics.component.html', - styleUrls: [ './instance-statistics.component.scss' ] + styleUrls: [ './instance-statistics.component.scss' ], + standalone: true, + imports: [ NgIf, GlobalIconComponent, DecimalPipe, BytesPipe ] }) export class InstanceStatisticsComponent { @Input() serverStats: ServerStats diff --git a/client/src/app/+about/about-peertube/about-peertube.component.ts b/client/src/app/+about/about-peertube/about-peertube.component.ts index b175a41bc..729034dc8 100644 --- a/client/src/app/+about/about-peertube/about-peertube.component.ts +++ b/client/src/app/+about/about-peertube/about-peertube.component.ts @@ -4,7 +4,8 @@ import { ViewportScroller } from '@angular/common' @Component({ selector: 'my-about-peertube', templateUrl: './about-peertube.component.html', - styleUrls: [ './about-peertube.component.scss' ] + styleUrls: [ './about-peertube.component.scss' ], + standalone: true }) export class AboutPeertubeComponent implements AfterViewChecked { diff --git a/client/src/app/+about/about.component.ts b/client/src/app/+about/about.component.ts index d24225714..f0f26f902 100644 --- a/client/src/app/+about/about.component.ts +++ b/client/src/app/+about/about.component.ts @@ -1,9 +1,14 @@ import { Component } from '@angular/core' import { ScreenService } from '@app/core' +import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router' +import { PluginSelectorDirective } from '../shared/shared-main/plugins/plugin-selector.directive' +import { NgClass } from '@angular/common' @Component({ selector: 'my-about', - templateUrl: './about.component.html' + templateUrl: './about.component.html', + standalone: true, + imports: [ NgClass, PluginSelectorDirective, RouterLink, RouterLinkActive, RouterOutlet ] }) export class AboutComponent { diff --git a/client/src/app/+about/about.module.ts b/client/src/app/+about/about.module.ts deleted file mode 100644 index 2cdfdf822..000000000 --- a/client/src/app/+about/about.module.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { NgModule } from '@angular/core' -import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.component' -import { AboutInstanceComponent } from '@app/+about/about-instance/about-instance.component' -import { AboutInstanceResolver } from '@app/+about/about-instance/about-instance.resolver' -import { ContactAdminModalComponent } from '@app/+about/about-instance/contact-admin-modal.component' -import { InstanceStatisticsComponent } from '@app/+about/about-instance/instance-statistics.component' -import { AboutPeertubeComponent } from '@app/+about/about-peertube/about-peertube.component' -import { SharedCustomMarkupModule } from '@app/shared/shared-custom-markup' -import { SharedFormModule } from '@app/shared/shared-forms' -import { SharedGlobalIconModule } from '@app/shared/shared-icons' -import { SharedInstanceModule } from '@app/shared/shared-instance' -import { SharedMainModule } from '@app/shared/shared-main' -import { AboutRoutingModule } from './about-routing.module' -import { AboutComponent } from './about.component' - -@NgModule({ - imports: [ - AboutRoutingModule, - - SharedMainModule, - SharedFormModule, - SharedInstanceModule, - SharedGlobalIconModule, - SharedCustomMarkupModule - ], - - declarations: [ - AboutComponent, - - AboutInstanceComponent, - ContactAdminModalComponent, - InstanceStatisticsComponent, - - AboutPeertubeComponent, - AboutFollowsComponent - ], - - exports: [ - AboutComponent - ], - - providers: [ - AboutInstanceResolver - ] -}) -export class AboutModule { } diff --git a/client/src/app/+about/index.ts b/client/src/app/+about/index.ts deleted file mode 100644 index 218d09801..000000000 --- a/client/src/app/+about/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './about-routing.module' -export * from './about.component' -export * from './about.module' diff --git a/client/src/app/+about/about-routing.module.ts b/client/src/app/+about/routes.ts similarity index 80% rename from client/src/app/+about/about-routing.module.ts rename to client/src/app/+about/routes.ts index cf5570d31..fa7eb7092 100644 --- a/client/src/app/+about/about-routing.module.ts +++ b/client/src/app/+about/routes.ts @@ -1,15 +1,22 @@ -import { NgModule } from '@angular/core' -import { RouterModule, Routes } from '@angular/router' +import { Routes } from '@angular/router' import { AboutFollowsComponent } from '@app/+about/about-follows/about-follows.component' import { AboutInstanceComponent } from '@app/+about/about-instance/about-instance.component' import { AboutInstanceResolver } from '@app/+about/about-instance/about-instance.resolver' import { AboutPeertubeComponent } from '@app/+about/about-peertube/about-peertube.component' import { AboutComponent } from './about.component' +import { InstanceFollowService } from '@app/shared/shared-instance' +import { CustomMarkupService, DynamicElementService } from '@app/shared/shared-custom-markup' -const aboutRoutes: Routes = [ +export default [ { path: '', component: AboutComponent, + providers: [ + AboutInstanceResolver, + InstanceFollowService, + CustomMarkupService, + DynamicElementService + ], children: [ { path: '', @@ -61,10 +68,4 @@ const aboutRoutes: Routes = [ } ] } -] - -@NgModule({ - imports: [ RouterModule.forChild(aboutRoutes) ], - exports: [ RouterModule ] -}) -export class AboutRoutingModule {} +] satisfies Routes diff --git a/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts b/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts index b8afa66ff..dfb36fa0b 100644 --- a/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts +++ b/client/src/app/+accounts/account-video-channels/account-video-channels.component.ts @@ -6,11 +6,19 @@ import { SimpleMemoize } from '@app/helpers' import { Account, AccountService, Video, VideoChannel, VideoChannelService, VideoService } from '@app/shared/shared-main' import { MiniatureDisplayOptions } from '@app/shared/shared-video-miniature' import { NSFWPolicyType, VideoSortField } from '@peertube/peertube-models' +import { VideoMiniatureComponent } from '../../shared/shared-video-miniature/video-miniature.component' +import { SubscribeButtonComponent } from '../../shared/shared-user-subscription/subscribe-button.component' +import { RouterLink } from '@angular/router' +import { ActorAvatarComponent } from '../../shared/shared-actor-image/actor-avatar.component' +import { InfiniteScrollerDirective } from '../../shared/shared-main/angular/infinite-scroller.directive' +import { NgIf, NgFor } from '@angular/common' @Component({ selector: 'my-account-video-channels', templateUrl: './account-video-channels.component.html', - styleUrls: [ './account-video-channels.component.scss' ] + styleUrls: [ './account-video-channels.component.scss' ], + standalone: true, + imports: [ NgIf, InfiniteScrollerDirective, NgFor, ActorAvatarComponent, RouterLink, SubscribeButtonComponent, VideoMiniatureComponent ] }) export class AccountVideoChannelsComponent implements OnInit, OnDestroy { account: Account diff --git a/client/src/app/+accounts/account-videos/account-videos.component.ts b/client/src/app/+accounts/account-videos/account-videos.component.ts index d8e8377e1..ccafd34c9 100644 --- a/client/src/app/+accounts/account-videos/account-videos.component.ts +++ b/client/src/app/+accounts/account-videos/account-videos.component.ts @@ -5,10 +5,14 @@ import { ComponentPaginationLight, DisableForReuseHook, ScreenService } from '@a import { Account, AccountService, VideoService } from '@app/shared/shared-main' import { VideoFilters } from '@app/shared/shared-video-miniature' import { VideoSortField } from '@peertube/peertube-models' +import { VideosListComponent } from '../../shared/shared-video-miniature/videos-list.component' +import { NgIf } from '@angular/common' @Component({ selector: 'my-account-videos', - templateUrl: './account-videos.component.html' + templateUrl: './account-videos.component.html', + standalone: true, + imports: [ NgIf, VideosListComponent ] }) export class AccountVideosComponent implements OnInit, OnDestroy, DisableForReuseHook { getVideosObservableFunction = this.getVideosObservable.bind(this) diff --git a/client/src/app/+accounts/accounts.component.ts b/client/src/app/+accounts/accounts.component.ts index b0fb30347..78ea8031e 100644 --- a/client/src/app/+accounts/accounts.component.ts +++ b/client/src/app/+accounts/accounts.component.ts @@ -1,7 +1,7 @@ import { Subscription } from 'rxjs' import { catchError, distinctUntilChanged, map, switchMap, tap } from 'rxjs/operators' import { Component, OnDestroy, OnInit, ViewChild } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' +import { ActivatedRoute, Router, RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router' import { AuthService, MarkdownService, Notifier, RedirectService, RestExtractor, ScreenService, UserService } from '@app/core' import { Account, @@ -14,10 +14,37 @@ import { } from '@app/shared/shared-main' import { AccountReportComponent, BlocklistService } from '@app/shared/shared-moderation' import { HttpStatusCode, User, UserRight } from '@peertube/peertube-models' +import { SimpleSearchInputComponent } from '../shared/shared-main/misc/simple-search-input.component' +import { ListOverflowComponent } from '../shared/shared-main/misc/list-overflow.component' +import { SubscribeButtonComponent } from '../shared/shared-user-subscription/subscribe-button.component' +import { CopyButtonComponent } from '../shared/shared-main/buttons/copy-button.component' +import { AccountBlockBadgesComponent } from '../shared/shared-moderation/account-block-badges.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { UserModerationDropdownComponent } from '../shared/shared-moderation/user-moderation-dropdown.component' +import { ActorAvatarComponent } from '../shared/shared-actor-image/actor-avatar.component' +import { NgIf, NgClass, DatePipe } from '@angular/common' @Component({ templateUrl: './accounts.component.html', - styleUrls: [ './accounts.component.scss' ] + styleUrls: [ './accounts.component.scss' ], + standalone: true, + imports: [ + NgIf, + ActorAvatarComponent, + UserModerationDropdownComponent, + NgbTooltip, + AccountBlockBadgesComponent, + CopyButtonComponent, + NgClass, + RouterLink, + SubscribeButtonComponent, + RouterLinkActive, + ListOverflowComponent, + SimpleSearchInputComponent, + RouterOutlet, + AccountReportComponent, + DatePipe + ] }) export class AccountsComponent implements OnInit, OnDestroy { @ViewChild('accountReportModal') accountReportModal: AccountReportComponent diff --git a/client/src/app/+accounts/accounts.module.ts b/client/src/app/+accounts/accounts.module.ts deleted file mode 100644 index aedc69b16..000000000 --- a/client/src/app/+accounts/accounts.module.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedFormModule } from '@app/shared/shared-forms' -import { SharedGlobalIconModule } from '@app/shared/shared-icons' -import { SharedMainModule } from '@app/shared/shared-main' -import { SharedModerationModule } from '@app/shared/shared-moderation' -import { SharedUserSubscriptionModule } from '@app/shared/shared-user-subscription' -import { SharedVideoMiniatureModule } from '@app/shared/shared-video-miniature' -import { SharedActorImageModule } from '../shared/shared-actor-image/shared-actor-image.module' -import { AccountVideoChannelsComponent } from './account-video-channels/account-video-channels.component' -import { AccountVideosComponent } from './account-videos/account-videos.component' -import { AccountsRoutingModule } from './accounts-routing.module' -import { AccountsComponent } from './accounts.component' - -@NgModule({ - imports: [ - AccountsRoutingModule, - - SharedMainModule, - SharedFormModule, - SharedUserSubscriptionModule, - SharedModerationModule, - SharedVideoMiniatureModule, - SharedGlobalIconModule, - SharedActorImageModule - ], - - declarations: [ - AccountsComponent, - AccountVideosComponent, - AccountVideoChannelsComponent - ], - - exports: [ - AccountsComponent - ], - - providers: [] -}) -export class AccountsModule { } diff --git a/client/src/app/+accounts/index.ts b/client/src/app/+accounts/index.ts deleted file mode 100644 index 4dfb6f586..000000000 --- a/client/src/app/+accounts/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './accounts-routing.module' -export * from './accounts.component' -export * from './accounts.module' diff --git a/client/src/app/+accounts/accounts-routing.module.ts b/client/src/app/+accounts/routes.ts similarity index 70% rename from client/src/app/+accounts/accounts-routing.module.ts rename to client/src/app/+accounts/routes.ts index d80df2293..884520113 100644 --- a/client/src/app/+accounts/accounts-routing.module.ts +++ b/client/src/app/+accounts/routes.ts @@ -1,10 +1,12 @@ -import { NgModule } from '@angular/core' -import { RouterModule, Routes } from '@angular/router' +import { Routes } from '@angular/router' import { AccountVideoChannelsComponent } from './account-video-channels/account-video-channels.component' import { AccountVideosComponent } from './account-videos/account-videos.component' import { AccountsComponent } from './accounts.component' +import { UserSubscriptionService } from '@app/shared/shared-user-subscription' +import { BlocklistService, VideoBlockService } from '@app/shared/shared-moderation' +import { VideoPlaylistService } from '@app/shared/shared-video-playlist' -const accountsRoutes: Routes = [ +export default [ { path: 'peertube', redirectTo: '/videos/local' @@ -12,6 +14,12 @@ const accountsRoutes: Routes = [ { path: ':accountId', component: AccountsComponent, + providers: [ + UserSubscriptionService, + BlocklistService, + VideoPlaylistService, + VideoBlockService + ], children: [ { path: '', @@ -48,10 +56,4 @@ const accountsRoutes: Routes = [ } ] } -] - -@NgModule({ - imports: [ RouterModule.forChild(accountsRoutes) ], - exports: [ RouterModule ] -}) -export class AccountsRoutingModule {} +] satisfies Routes diff --git a/client/src/app/+admin/admin-routing.module.ts b/client/src/app/+admin/admin-routing.module.ts deleted file mode 100644 index bd08b8287..000000000 --- a/client/src/app/+admin/admin-routing.module.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { NgModule } from '@angular/core' -import { RouterModule, Routes } from '@angular/router' -import { ConfigRoutes } from '@app/+admin/config' -import { ModerationRoutes } from '@app/+admin/moderation/moderation.routes' -import { PluginsRoutes } from '@app/+admin/plugins/plugins.routes' -import { SystemRoutes } from '@app/+admin/system' -import { AdminComponent } from './admin.component' -import { FollowsRoutes } from './follows' -import { OverviewRoutes } from './overview' - -const adminRoutes: Routes = [ - { - path: '', - component: AdminComponent, - children: [ - { - path: '', - redirectTo: 'users', - pathMatch: 'full' - }, - - ...FollowsRoutes, - ...OverviewRoutes, - ...ModerationRoutes, - ...SystemRoutes, - ...ConfigRoutes, - ...PluginsRoutes - ] - } -] - -@NgModule({ - imports: [ RouterModule.forChild(adminRoutes) ], - exports: [ RouterModule ] -}) -export class AdminRoutingModule {} diff --git a/client/src/app/+admin/admin.component.ts b/client/src/app/+admin/admin.component.ts index 71c2d94d1..5a4f21928 100644 --- a/client/src/app/+admin/admin.component.ts +++ b/client/src/app/+admin/admin.component.ts @@ -3,10 +3,15 @@ import { AuthService, ScreenService, ServerService } from '@app/core' import { ListOverflowItem } from '@app/shared/shared-main' import { TopMenuDropdownParam } from '@app/shared/shared-main/misc/top-menu-dropdown.component' import { UserRight } from '@peertube/peertube-models' +import { RouterOutlet } from '@angular/router' +import { NgClass } from '@angular/common' +import { TopMenuDropdownComponent } from '../shared/shared-main/misc/top-menu-dropdown.component' @Component({ templateUrl: './admin.component.html', - styleUrls: [ './admin.component.scss' ] + styleUrls: [ './admin.component.scss' ], + standalone: true, + imports: [ TopMenuDropdownComponent, NgClass, RouterOutlet ] }) export class AdminComponent implements OnInit { items: ListOverflowItem[] = [] diff --git a/client/src/app/+admin/admin.module.ts b/client/src/app/+admin/admin.module.ts deleted file mode 100644 index 006cb025a..000000000 --- a/client/src/app/+admin/admin.module.ts +++ /dev/null @@ -1,159 +0,0 @@ -import { ChartModule } from 'primeng/chart' -import { TableModule } from 'primeng/table' -import { NgModule } from '@angular/core' -import { SharedAbuseListModule } from '@app/shared/shared-abuse-list' -import { SharedActorImageEditModule } from '@app/shared/shared-actor-image-edit' -import { SharedActorImageModule } from '@app/shared/shared-actor-image/shared-actor-image.module' -import { SharedCustomMarkupModule } from '@app/shared/shared-custom-markup' -import { SharedFormModule } from '@app/shared/shared-forms' -import { SharedGlobalIconModule } from '@app/shared/shared-icons' -import { SharedMainModule } from '@app/shared/shared-main' -import { SharedModerationModule } from '@app/shared/shared-moderation' -import { SharedTablesModule } from '@app/shared/shared-tables' -import { SharedUsersModule } from '@app/shared/shared-users' -import { SharedVideoCommentModule } from '@app/shared/shared-video-comment' -import { SharedVideoMiniatureModule } from '@app/shared/shared-video-miniature' -import { AdminRoutingModule } from './admin-routing.module' -import { AdminComponent } from './admin.component' -import { - EditAdvancedConfigurationComponent, - EditBasicConfigurationComponent, - EditConfigurationService, - EditCustomConfigComponent, - EditHomepageComponent, - EditInstanceInformationComponent, - EditLiveConfigurationComponent, - EditVODTranscodingComponent -} from './config' -import { ConfigService } from './config/shared/config.service' -import { FollowersListComponent, FollowModalComponent, VideoRedundanciesListComponent } from './follows' -import { FollowingListComponent } from './follows/following-list/following-list.component' -import { RedundancyCheckboxComponent } from './follows/shared/redundancy-checkbox.component' -import { VideoRedundancyInformationComponent } from './follows/video-redundancies-list/video-redundancy-information.component' -import { - AbuseListComponent, - AdminRegistrationService, - ProcessRegistrationModalComponent, - RegistrationListComponent, - VideoBlockListComponent -} from './moderation' -import { InstanceAccountBlocklistComponent, InstanceServerBlocklistComponent } from './moderation/instance-blocklist' -import { - UserCreateComponent, - UserListComponent, - UserPasswordComponent, - UserUpdateComponent, - VideoAdminService, - VideoCommentListComponent, - VideoListComponent -} from './overview' -import { - PluginApiService, - PluginCardComponent, - PluginListInstalledComponent, - PluginNavigationComponent, - PluginSearchComponent, - PluginShowInstalledComponent -} from './plugins' -import { SharedAdminModule } from './shared' -import { - JobService, - LogsComponent, - LogsService, - RunnerJobListComponent, - RunnerListComponent, - RunnerRegistrationTokenListComponent, - RunnerService -} from './system' -import { DebugComponent, DebugService } from './system/debug' -import { JobsComponent } from './system/jobs' - -@NgModule({ - imports: [ - AdminRoutingModule, - - SharedMainModule, - SharedFormModule, - SharedModerationModule, - SharedGlobalIconModule, - SharedAbuseListModule, - SharedVideoCommentModule, - SharedActorImageModule, - SharedActorImageEditModule, - SharedCustomMarkupModule, - SharedVideoMiniatureModule, - SharedTablesModule, - SharedUsersModule, - SharedAdminModule, - - TableModule, - ChartModule - ], - - declarations: [ - AdminComponent, - - VideoListComponent, - - FollowersListComponent, - FollowingListComponent, - FollowModalComponent, - RedundancyCheckboxComponent, - VideoRedundanciesListComponent, - VideoRedundancyInformationComponent, - - UserCreateComponent, - UserUpdateComponent, - UserPasswordComponent, - UserListComponent, - - VideoBlockListComponent, - AbuseListComponent, - VideoCommentListComponent, - - InstanceServerBlocklistComponent, - InstanceAccountBlocklistComponent, - - PluginListInstalledComponent, - PluginSearchComponent, - PluginShowInstalledComponent, - PluginCardComponent, - PluginNavigationComponent, - - JobsComponent, - LogsComponent, - DebugComponent, - - EditCustomConfigComponent, - EditBasicConfigurationComponent, - EditVODTranscodingComponent, - EditLiveConfigurationComponent, - EditAdvancedConfigurationComponent, - EditInstanceInformationComponent, - EditHomepageComponent, - - RegistrationListComponent, - ProcessRegistrationModalComponent, - - RunnerRegistrationTokenListComponent, - RunnerListComponent, - RunnerJobListComponent - ], - - exports: [ - AdminComponent - ], - - providers: [ - JobService, - LogsService, - DebugService, - ConfigService, - PluginApiService, - EditConfigurationService, - VideoAdminService, - AdminRegistrationService, - RunnerService - ] -}) -export class AdminModule { } diff --git a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts index 06c5e6221..fd5f915e2 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-advanced-configuration.component.ts @@ -1,10 +1,15 @@ import { Component, Input } from '@angular/core' -import { FormGroup } from '@angular/forms' +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' +import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive' +import { HelpComponent } from '../../../shared/shared-main/misc/help.component' +import { NgClass, NgIf } from '@angular/common' @Component({ selector: 'my-edit-advanced-configuration', templateUrl: './edit-advanced-configuration.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ FormsModule, ReactiveFormsModule, NgClass, NgIf, HelpComponent, PeerTubeTemplateDirective ] }) export class EditAdvancedConfigurationComponent { @Input() form: FormGroup diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html index f75b62f0a..1f3ba283f 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html +++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html @@ -90,7 +90,7 @@ -
+

BROADCAST MESSAGE

@@ -146,7 +146,7 @@
-
+

NEW USERS

@@ -263,7 +263,7 @@
-
+

VIDEOS

@@ -375,7 +375,7 @@
-
+

VIDEO CHANNELS

@@ -397,7 +397,7 @@
-
+

SEARCH

@@ -486,7 +486,7 @@
-
+

USER IMPORT/EXPORT

@@ -562,7 +562,7 @@
-
+

FEDERATION

@@ -641,7 +641,7 @@
-
+

ADMINISTRATORS

@@ -669,7 +669,7 @@
-
+

TWITTER

diff --git a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts index d55248555..9f1cbc758 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.ts @@ -1,15 +1,40 @@ import { pairwise } from 'rxjs/operators' import { SelectOptionsItem } from 'src/types/select-options-item.model' import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core' -import { FormGroup } from '@angular/forms' +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' import { MenuService, ThemeService } from '@app/core' import { HTMLServerConfig } from '@peertube/peertube-models' import { ConfigService } from '../shared/config.service' +import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive' +import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component' +import { UserRealQuotaInfoComponent } from '../../shared/user-real-quota-info.component' +import { MarkdownTextareaComponent } from '../../../shared/shared-forms/markdown-textarea.component' +import { HelpComponent } from '../../../shared/shared-main/misc/help.component' +import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component' +import { SelectCustomValueComponent } from '../../../shared/shared-forms/select/select-custom-value.component' +import { NgFor, NgIf, NgClass } from '@angular/common' +import { RouterLink } from '@angular/router' @Component({ selector: 'my-edit-basic-configuration', templateUrl: './edit-basic-configuration.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + RouterLink, + NgFor, + SelectCustomValueComponent, + NgIf, + PeertubeCheckboxComponent, + HelpComponent, + MarkdownTextareaComponent, + NgClass, + UserRealQuotaInfoComponent, + SelectOptionsComponent, + PeerTubeTemplateDirective + ] }) export class EditBasicConfigurationComponent implements OnInit, OnChanges { @Input() form: FormGroup diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts index 8f10e1158..dc88f681c 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.ts @@ -30,6 +30,15 @@ import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { CustomPageService } from '@app/shared/shared-main/custom-page' import { CustomConfig, CustomPage, HTMLServerConfig } from '@peertube/peertube-models' import { EditConfigurationService } from './edit-configuration.service' +import { EditAdvancedConfigurationComponent } from './edit-advanced-configuration.component' +import { EditLiveConfigurationComponent } from './edit-live-configuration.component' +import { EditVODTranscodingComponent } from './edit-vod-transcoding.component' +import { EditBasicConfigurationComponent } from './edit-basic-configuration.component' +import { EditInstanceInformationComponent } from './edit-instance-information.component' +import { EditHomepageComponent } from './edit-homepage.component' +import { NgbNav, NgbNavItem, NgbNavLink, NgbNavLinkBase, NgbNavContent, NgbNavOutlet } from '@ng-bootstrap/ng-bootstrap' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { NgIf, NgFor } from '@angular/common' type ComponentCustomConfig = CustomConfig & { instanceCustomHomepage: CustomPage @@ -38,7 +47,26 @@ type ComponentCustomConfig = CustomConfig & { @Component({ selector: 'my-edit-custom-config', templateUrl: './edit-custom-config.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ + NgIf, + FormsModule, + ReactiveFormsModule, + NgbNav, + NgbNavItem, + NgbNavLink, + NgbNavLinkBase, + NgbNavContent, + EditHomepageComponent, + EditInstanceInformationComponent, + EditBasicConfigurationComponent, + EditVODTranscodingComponent, + EditLiveConfigurationComponent, + EditAdvancedConfigurationComponent, + NgbNavOutlet, + NgFor + ] }) export class EditCustomConfigComponent extends FormReactive implements OnInit { activeNav: string diff --git a/client/src/app/+admin/config/edit-custom-config/edit-homepage.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-homepage.component.ts index dc834da14..c22c77b27 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-homepage.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-homepage.component.ts @@ -1,11 +1,16 @@ import { Component, Input } from '@angular/core' -import { FormGroup } from '@angular/forms' +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' import { CustomMarkupService } from '@app/shared/shared-custom-markup' +import { NgIf } from '@angular/common' +import { MarkdownTextareaComponent } from '../../../shared/shared-forms/markdown-textarea.component' +import { CustomMarkupHelpComponent } from '../../../shared/shared-custom-markup/custom-markup-help.component' @Component({ selector: 'my-edit-homepage', templateUrl: './edit-homepage.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ FormsModule, ReactiveFormsModule, CustomMarkupHelpComponent, MarkdownTextareaComponent, NgIf ] }) export class EditHomepageComponent { @Input() form: FormGroup diff --git a/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts index e370268aa..57d65a4c1 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.ts @@ -1,17 +1,43 @@ import { SelectOptionsItem } from 'src/types/select-options-item.model' import { Component, Input, OnInit } from '@angular/core' -import { FormGroup } from '@angular/forms' +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' import { CustomMarkupService } from '@app/shared/shared-custom-markup' import { Notifier, ServerService } from '@app/core' import { HttpErrorResponse } from '@angular/common/http' import { genericUploadErrorHandler } from '@app/helpers' -import { InstanceService } from '@app/shared/shared-instance' +import { InstanceService } from '@app/shared/shared-main' import { ActorImage, HTMLServerConfig } from '@peertube/peertube-models' +import { HelpComponent } from '../../../shared/shared-main/misc/help.component' +import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive' +import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component' +import { RouterLink } from '@angular/router' +import { SelectCheckboxComponent } from '../../../shared/shared-forms/select/select-checkbox.component' +import { MarkdownTextareaComponent } from '../../../shared/shared-forms/markdown-textarea.component' +import { CustomMarkupHelpComponent } from '../../../shared/shared-custom-markup/custom-markup-help.component' +import { NgClass, NgIf } from '@angular/common' +import { ActorBannerEditComponent } from '../../../shared/shared-actor-image-edit/actor-banner-edit.component' +import { ActorAvatarEditComponent } from '../../../shared/shared-actor-image-edit/actor-avatar-edit.component' @Component({ selector: 'my-edit-instance-information', templateUrl: './edit-instance-information.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + ActorAvatarEditComponent, + ActorBannerEditComponent, + NgClass, + NgIf, + CustomMarkupHelpComponent, + MarkdownTextareaComponent, + SelectCheckboxComponent, + RouterLink, + PeertubeCheckboxComponent, + PeerTubeTemplateDirective, + HelpComponent + ] }) export class EditInstanceInformationComponent implements OnInit { @Input() form: FormGroup diff --git a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts index 7bed4b529..76e5cc3d0 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-live-configuration.component.ts @@ -1,14 +1,33 @@ import { SelectOptionsItem } from 'src/types/select-options-item.model' import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core' -import { FormGroup } from '@angular/forms' +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' import { HTMLServerConfig } from '@peertube/peertube-models' import { ConfigService } from '../shared/config.service' import { EditConfigurationService, ResolutionOption } from './edit-configuration.service' +import { SelectCustomValueComponent } from '../../../shared/shared-forms/select/select-custom-value.component' +import { RouterLink } from '@angular/router' +import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component' +import { NgClass, NgIf, NgFor } from '@angular/common' +import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive' +import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component' @Component({ selector: 'my-edit-live-configuration', templateUrl: './edit-live-configuration.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + PeertubeCheckboxComponent, + PeerTubeTemplateDirective, + NgClass, + NgIf, + SelectOptionsComponent, + NgFor, + RouterLink, + SelectCustomValueComponent + ] }) export class EditLiveConfigurationComponent implements OnInit, OnChanges { @Input() form: FormGroup diff --git a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts index 305bf94db..8a99f9c6d 100644 --- a/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts +++ b/client/src/app/+admin/config/edit-custom-config/edit-vod-transcoding.component.ts @@ -1,14 +1,33 @@ import { SelectOptionsItem } from 'src/types/select-options-item.model' import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core' -import { FormGroup } from '@angular/forms' +import { FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' import { HTMLServerConfig } from '@peertube/peertube-models' import { ConfigService } from '../shared/config.service' import { EditConfigurationService, ResolutionOption } from './edit-configuration.service' +import { SelectOptionsComponent } from '../../../shared/shared-forms/select/select-options.component' +import { SelectCustomValueComponent } from '../../../shared/shared-forms/select/select-custom-value.component' +import { RouterLink } from '@angular/router' +import { NgClass, NgFor, NgIf } from '@angular/common' +import { PeerTubeTemplateDirective } from '../../../shared/shared-main/angular/peertube-template.directive' +import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component' @Component({ selector: 'my-edit-vod-transcoding', templateUrl: './edit-vod-transcoding.component.html', - styleUrls: [ './edit-custom-config.component.scss' ] + styleUrls: [ './edit-custom-config.component.scss' ], + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + PeertubeCheckboxComponent, + PeerTubeTemplateDirective, + NgClass, + NgFor, + NgIf, + RouterLink, + SelectCustomValueComponent, + SelectOptionsComponent + ] }) export class EditVODTranscodingComponent implements OnInit, OnChanges { @Input() form: FormGroup diff --git a/client/src/app/+admin/follows/followers-list/followers-list.component.ts b/client/src/app/+admin/follows/followers-list/followers-list.component.ts index 656a7bf87..cab156548 100644 --- a/client/src/app/+admin/follows/followers-list/followers-list.component.ts +++ b/client/src/app/+admin/follows/followers-list/followers-list.component.ts @@ -1,4 +1,4 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { Component, OnInit } from '@angular/core' import { ConfirmService, Notifier, RestPagination, RestTable } from '@app/core' import { formatICU } from '@app/helpers' @@ -6,11 +6,34 @@ import { AdvancedInputFilter } from '@app/shared/shared-forms' import { InstanceFollowService } from '@app/shared/shared-instance' import { DropdownAction } from '@app/shared/shared-main' import { ActorFollow } from '@peertube/peertube-models' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component' +import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { ActionDropdownComponent } from '../../../shared/shared-main/buttons/action-dropdown.component' +import { NgIf, DatePipe } from '@angular/common' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-followers-list', templateUrl: './followers-list.component.html', - styleUrls: [ './followers-list.component.scss' ] + styleUrls: [ './followers-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + NgIf, + ActionDropdownComponent, + AdvancedInputFilterComponent, + NgbTooltip, + ButtonComponent, + DeleteButtonComponent, + AutoColspanDirective, + DatePipe + ] }) export class FollowersListComponent extends RestTable implements OnInit { followers: ActorFollow[] = [] diff --git a/client/src/app/+admin/follows/following-list/follow-modal.component.ts b/client/src/app/+admin/follows/following-list/follow-modal.component.ts index 54b3cebc5..a3a42e86d 100644 --- a/client/src/app/+admin/follows/following-list/follow-modal.component.ts +++ b/client/src/app/+admin/follows/following-list/follow-modal.component.ts @@ -6,11 +6,16 @@ import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { InstanceFollowService } from '@app/shared/shared-instance' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' +import { NgClass, NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-follow-modal', templateUrl: './follow-modal.component.html', - styleUrls: [ './follow-modal.component.scss' ] + styleUrls: [ './follow-modal.component.scss' ], + standalone: true, + imports: [ GlobalIconComponent, FormsModule, ReactiveFormsModule, NgClass, NgIf ] }) export class FollowModalComponent extends FormReactive implements OnInit { @ViewChild('modal', { static: true }) modal: NgbModal diff --git a/client/src/app/+admin/follows/following-list/following-list.component.ts b/client/src/app/+admin/follows/following-list/following-list.component.ts index da6647f6b..ff50a9dcb 100644 --- a/client/src/app/+admin/follows/following-list/following-list.component.ts +++ b/client/src/app/+admin/follows/following-list/following-list.component.ts @@ -1,4 +1,4 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { Component, OnInit, ViewChild } from '@angular/core' import { ConfirmService, Notifier, RestPagination, RestTable } from '@app/core' import { AdvancedInputFilter } from '@app/shared/shared-forms' @@ -7,10 +7,32 @@ import { ActorFollow } from '@peertube/peertube-models' import { FollowModalComponent } from './follow-modal.component' import { DropdownAction } from '@app/shared/shared-main' import { formatICU } from '@app/helpers' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { RedundancyCheckboxComponent } from '../shared/redundancy-checkbox.component' +import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { ActionDropdownComponent } from '../../../shared/shared-main/buttons/action-dropdown.component' +import { NgIf, DatePipe } from '@angular/common' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ templateUrl: './following-list.component.html', - styleUrls: [ './following-list.component.scss' ] + styleUrls: [ './following-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + NgIf, + ActionDropdownComponent, + AdvancedInputFilterComponent, + DeleteButtonComponent, + RedundancyCheckboxComponent, + AutoColspanDirective, + FollowModalComponent, + DatePipe + ] }) export class FollowingListComponent extends RestTable implements OnInit { @ViewChild('followModal') followModal: FollowModalComponent diff --git a/client/src/app/+admin/follows/shared/redundancy-checkbox.component.ts b/client/src/app/+admin/follows/shared/redundancy-checkbox.component.ts index 3935ddc4f..87775188b 100644 --- a/client/src/app/+admin/follows/shared/redundancy-checkbox.component.ts +++ b/client/src/app/+admin/follows/shared/redundancy-checkbox.component.ts @@ -1,10 +1,14 @@ import { Component, Input } from '@angular/core' import { Notifier } from '@app/core' import { RedundancyService } from '@app/shared/shared-main' +import { FormsModule } from '@angular/forms' +import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component' @Component({ selector: 'my-redundancy-checkbox', - templateUrl: './redundancy-checkbox.component.html' + templateUrl: './redundancy-checkbox.component.html', + standalone: true, + imports: [ PeertubeCheckboxComponent, FormsModule ] }) export class RedundancyCheckboxComponent { @Input() redundancyAllowed: boolean diff --git a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts index 09fc038ce..74701b654 100644 --- a/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts +++ b/client/src/app/+admin/follows/video-redundancies-list/video-redundancies-list.component.ts @@ -1,15 +1,41 @@ import { ChartData, ChartOptions, TooltipItem } from 'chart.js' -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { Component, OnInit } from '@angular/core' import { ConfirmService, Notifier, RestPagination, RestTable, ServerService } from '@app/core' import { BytesPipe, RedundancyService } from '@app/shared/shared-main' import { VideoRedundanciesTarget, VideoRedundancy, VideosRedundancyStats } from '@peertube/peertube-models' import { peertubeLocalStorage } from '@root-helpers/peertube-web-storage' +import { ChartModule } from 'primeng/chart' +import { VideoRedundancyInformationComponent } from './video-redundancy-information.component' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { DeleteButtonComponent } from '../../../shared/shared-main/buttons/delete-button.component' +import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { NgIf, NgFor } from '@angular/common' +import { TableModule } from 'primeng/table' +import { FormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-video-redundancies-list', templateUrl: './video-redundancies-list.component.html', - styleUrls: [ './video-redundancies-list.component.scss' ] + styleUrls: [ './video-redundancies-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + FormsModule, + TableModule, + SharedModule, + NgIf, + NgbTooltip, + TableExpanderIconComponent, + DeleteButtonComponent, + AutoColspanDirective, + NgFor, + VideoRedundancyInformationComponent, + ChartModule, + BytesPipe + ] }) export class VideoRedundanciesListComponent extends RestTable implements OnInit { private static LOCAL_STORAGE_DISPLAY_TYPE = 'video-redundancies-list-display-type' diff --git a/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts b/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts index 779d19059..169cdbdf7 100644 --- a/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts +++ b/client/src/app/+admin/follows/video-redundancies-list/video-redundancy-information.component.ts @@ -1,10 +1,14 @@ import { Component, Input } from '@angular/core' import { FileRedundancyInformation, StreamingPlaylistRedundancyInformation } from '@peertube/peertube-models' +import { BytesPipe } from '../../../shared/shared-main/angular/bytes.pipe' +import { DatePipe } from '@angular/common' @Component({ selector: 'my-video-redundancy-information', templateUrl: './video-redundancy-information.component.html', - styleUrls: [ './video-redundancy-information.component.scss' ] + styleUrls: [ './video-redundancy-information.component.scss' ], + standalone: true, + imports: [ DatePipe, BytesPipe ] }) export class VideoRedundancyInformationComponent { @Input() redundancyElement: FileRedundancyInformation | StreamingPlaylistRedundancyInformation diff --git a/client/src/app/+admin/moderation/abuse-list/abuse-list.component.ts b/client/src/app/+admin/moderation/abuse-list/abuse-list.component.ts index 85a150de9..9ee23882f 100644 --- a/client/src/app/+admin/moderation/abuse-list/abuse-list.component.ts +++ b/client/src/app/+admin/moderation/abuse-list/abuse-list.component.ts @@ -1,9 +1,13 @@ import { Component } from '@angular/core' +import { AbuseListTableComponent } from '../../../shared/shared-abuse-list/abuse-list-table.component' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-abuse-list', templateUrl: './abuse-list.component.html', - styleUrls: [ ] + styleUrls: [], + standalone: true, + imports: [ GlobalIconComponent, AbuseListTableComponent ] }) export class AbuseListComponent { diff --git a/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts b/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts index a6e445b4c..33a70ed34 100644 --- a/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts +++ b/client/src/app/+admin/moderation/instance-blocklist/instance-account-blocklist.component.ts @@ -1,10 +1,30 @@ import { Component } from '@angular/core' import { BlocklistComponentType, GenericAccountBlocklistComponent } from '@app/shared/shared-moderation' +import { NgIf, DatePipe } from '@angular/common' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { ActorAvatarComponent } from '../../../shared/shared-actor-image/actor-avatar.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { SharedModule } from 'primeng/api' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-instance-account-blocklist', styleUrls: [ '../../../shared/shared-moderation/moderation.scss' ], - templateUrl: '../../../shared/shared-moderation/account-blocklist.component.html' + templateUrl: '../../../shared/shared-moderation/account-blocklist.component.html', + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + AdvancedInputFilterComponent, + NgbTooltip, + ActorAvatarComponent, + AutoColspanDirective, + NgIf, + DatePipe + ] }) export class InstanceAccountBlocklistComponent extends GenericAccountBlocklistComponent { mode = BlocklistComponentType.Instance diff --git a/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts b/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts index 3afae529f..16a6823c9 100644 --- a/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts +++ b/client/src/app/+admin/moderation/instance-blocklist/instance-server-blocklist.component.ts @@ -1,10 +1,30 @@ import { Component } from '@angular/core' import { GenericServerBlocklistComponent, BlocklistComponentType } from '@app/shared/shared-moderation' +import { BatchDomainsModalComponent } from '../../../shared/shared-moderation/batch-domains-modal.component' +import { NgIf, DatePipe } from '@angular/common' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { SharedModule } from 'primeng/api' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-instance-server-blocklist', styleUrls: [ '../../../shared/shared-moderation/server-blocklist.component.scss' ], - templateUrl: '../../../shared/shared-moderation/server-blocklist.component.html' + templateUrl: '../../../shared/shared-moderation/server-blocklist.component.html', + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + AdvancedInputFilterComponent, + NgbTooltip, + AutoColspanDirective, + NgIf, + BatchDomainsModalComponent, + DatePipe + ] }) export class InstanceServerBlocklistComponent extends GenericServerBlocklistComponent { mode = BlocklistComponentType.Instance diff --git a/client/src/app/+admin/moderation/registration-list/process-registration-modal.component.ts b/client/src/app/+admin/moderation/registration-list/process-registration-modal.component.ts index f8e346f50..3f71f2afd 100644 --- a/client/src/app/+admin/moderation/registration-list/process-registration-modal.component.ts +++ b/client/src/app/+admin/moderation/registration-list/process-registration-modal.component.ts @@ -6,10 +6,16 @@ import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' import { UserRegistration } from '@peertube/peertube-models' import { AdminRegistrationService } from './admin-registration.service' import { REGISTRATION_MODERATION_RESPONSE_VALIDATOR } from './process-registration-validators' +import { PeertubeCheckboxComponent } from '../../../shared/shared-forms/peertube-checkbox.component' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' +import { NgIf, NgClass } from '@angular/common' @Component({ selector: 'my-process-registration-modal', - templateUrl: './process-registration-modal.component.html' + templateUrl: './process-registration-modal.component.html', + standalone: true, + imports: [ NgIf, GlobalIconComponent, FormsModule, ReactiveFormsModule, NgClass, PeertubeCheckboxComponent ] }) export class ProcessRegistrationModalComponent extends FormReactive implements OnInit { @ViewChild('modal', { static: true }) modal: NgbModal diff --git a/client/src/app/+admin/moderation/registration-list/registration-list.component.ts b/client/src/app/+admin/moderation/registration-list/registration-list.component.ts index 1dc5e9077..34f899358 100644 --- a/client/src/app/+admin/moderation/registration-list/registration-list.component.ts +++ b/client/src/app/+admin/moderation/registration-list/registration-list.component.ts @@ -1,4 +1,4 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { Component, OnInit, ViewChild } from '@angular/core' import { ActivatedRoute, Router } from '@angular/router' import { ConfirmService, MarkdownService, Notifier, RestPagination, RestTable, ServerService } from '@app/core' @@ -8,11 +8,36 @@ import { DropdownAction } from '@app/shared/shared-main' import { UserRegistration, UserRegistrationState } from '@peertube/peertube-models' import { AdminRegistrationService } from './admin-registration.service' import { ProcessRegistrationModalComponent } from './process-registration-modal.component' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { UserEmailInfoComponent } from '../../shared/user-email-info.component' +import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { ActionDropdownComponent } from '../../../shared/shared-main/buttons/action-dropdown.component' +import { NgIf, NgClass, DatePipe } from '@angular/common' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-registration-list', templateUrl: './registration-list.component.html', - styleUrls: [ '../../../shared/shared-moderation/moderation.scss', './registration-list.component.scss' ] + styleUrls: [ '../../../shared/shared-moderation/moderation.scss', './registration-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + NgIf, + ActionDropdownComponent, + AdvancedInputFilterComponent, + NgbTooltip, + TableExpanderIconComponent, + NgClass, + UserEmailInfoComponent, + AutoColspanDirective, + ProcessRegistrationModalComponent, + DatePipe + ] }) export class RegistrationListComponent extends RestTable implements OnInit { @ViewChild('processRegistrationModal', { static: true }) processRegistrationModal: ProcessRegistrationModalComponent diff --git a/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts b/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts index 140af89f9..aab902700 100644 --- a/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts +++ b/client/src/app/+admin/moderation/video-block-list/video-block-list.component.ts @@ -1,4 +1,4 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { switchMap } from 'rxjs/operators' import { environment } from 'src/environments/environment' import { Component, OnInit } from '@angular/core' @@ -10,11 +10,37 @@ import { VideoBlockService } from '@app/shared/shared-moderation' import { buildVideoEmbedLink, decorateVideoLink } from '@peertube/peertube-core-utils' import { VideoBlacklist, VideoBlacklistType, VideoBlacklistType_Type } from '@peertube/peertube-models' import { buildVideoOrPlaylistEmbed } from '@root-helpers/video' +import { EmbedComponent } from '../../../shared/shared-main/video/embed.component' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { VideoCellComponent } from '../../../shared/shared-tables/video-cell.component' +import { ActionDropdownComponent } from '../../../shared/shared-main/buttons/action-dropdown.component' +import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component' +import { NgIf, NgClass, DatePipe } from '@angular/common' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-video-block-list', templateUrl: './video-block-list.component.html', - styleUrls: [ '../../../shared/shared-moderation/moderation.scss', './video-block-list.component.scss' ] + styleUrls: [ '../../../shared/shared-moderation/moderation.scss', './video-block-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + AdvancedInputFilterComponent, + NgbTooltip, + NgIf, + TableExpanderIconComponent, + ActionDropdownComponent, + NgClass, + VideoCellComponent, + AutoColspanDirective, + EmbedComponent, + DatePipe + ] }) export class VideoBlockListComponent extends RestTable implements OnInit { blocklist: (VideoBlacklist & { reasonHtml?: string })[] = [] diff --git a/client/src/app/+admin/overview/comments/video-comment-list.component.ts b/client/src/app/+admin/overview/comments/video-comment-list.component.ts index 254e76a60..a8692797c 100644 --- a/client/src/app/+admin/overview/comments/video-comment-list.component.ts +++ b/client/src/app/+admin/overview/comments/video-comment-list.component.ts @@ -1,4 +1,4 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { Component, OnInit } from '@angular/core' import { ActivatedRoute, Router } from '@angular/router' import { AuthService, ConfirmService, MarkdownService, Notifier, RestPagination, RestTable } from '@app/core' @@ -8,11 +8,39 @@ import { BulkService } from '@app/shared/shared-moderation' import { VideoCommentAdmin, VideoCommentService } from '@app/shared/shared-video-comment' import { FeedFormat, UserRight } from '@peertube/peertube-models' import { formatICU } from '@app/helpers' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { ActorAvatarComponent } from '../../../shared/shared-actor-image/actor-avatar.component' +import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { ActionDropdownComponent } from '../../../shared/shared-main/buttons/action-dropdown.component' +import { NgIf, NgClass, DatePipe } from '@angular/common' +import { TableModule } from 'primeng/table' +import { FeedComponent } from '../../../shared/shared-main/feeds/feed.component' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-video-comment-list', templateUrl: './video-comment-list.component.html', - styleUrls: [ '../../../shared/shared-moderation/moderation.scss', './video-comment-list.component.scss' ] + styleUrls: [ '../../../shared/shared-moderation/moderation.scss', './video-comment-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + FeedComponent, + TableModule, + SharedModule, + NgIf, + ActionDropdownComponent, + AdvancedInputFilterComponent, + ButtonComponent, + NgbTooltip, + TableExpanderIconComponent, + NgClass, + ActorAvatarComponent, + AutoColspanDirective, + DatePipe + ] }) export class VideoCommentListComponent extends RestTable implements OnInit { comments: VideoCommentAdmin[] diff --git a/client/src/app/+admin/overview/users/user-edit/user-create.component.ts b/client/src/app/+admin/overview/users/user-edit/user-create.component.ts index 77acb9988..2221e24af 100644 --- a/client/src/app/+admin/overview/users/user-edit/user-create.component.ts +++ b/client/src/app/+admin/overview/users/user-edit/user-create.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core' -import { Router } from '@angular/router' +import { Router, RouterLink } from '@angular/router' import { ConfigService } from '@app/+admin/config/shared/config.service' import { AuthService, Notifier, ScreenService, ServerService } from '@app/core' import { @@ -16,11 +16,41 @@ import { FormReactiveService } from '@app/shared/shared-forms' import { UserAdminService } from '@app/shared/shared-users' import { UserCreate, UserRole } from '@peertube/peertube-models' import { UserEdit } from './user-edit' +import { BytesPipe } from '../../../../shared/shared-main/angular/bytes.pipe' +import { UserPasswordComponent } from './user-password.component' +import { PeertubeCheckboxComponent } from '../../../../shared/shared-forms/peertube-checkbox.component' +import { UserRealQuotaInfoComponent } from '../../../shared/user-real-quota-info.component' +import { SelectCustomValueComponent } from '../../../../shared/shared-forms/select/select-custom-value.component' +import { InputTextComponent } from '../../../../shared/shared-forms/input-text.component' +import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/angular/peertube-template.directive' +import { HelpComponent } from '../../../../shared/shared-main/misc/help.component' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { ActorAvatarEditComponent } from '../../../../shared/shared-actor-image-edit/actor-avatar-edit.component' +import { NgIf, NgTemplateOutlet, NgClass, NgFor } from '@angular/common' @Component({ selector: 'my-user-create', templateUrl: './user-edit.component.html', - styleUrls: [ './user-edit.component.scss' ] + styleUrls: [ './user-edit.component.scss' ], + standalone: true, + imports: [ + RouterLink, + NgIf, + NgTemplateOutlet, + ActorAvatarEditComponent, + FormsModule, + ReactiveFormsModule, + NgClass, + HelpComponent, + PeerTubeTemplateDirective, + InputTextComponent, + NgFor, + SelectCustomValueComponent, + UserRealQuotaInfoComponent, + PeertubeCheckboxComponent, + UserPasswordComponent, + BytesPipe + ] }) export class UserCreateComponent extends UserEdit implements OnInit { error: string diff --git a/client/src/app/+admin/overview/users/user-edit/user-password.component.ts b/client/src/app/+admin/overview/users/user-edit/user-password.component.ts index af39c82af..4efeb2983 100644 --- a/client/src/app/+admin/overview/users/user-edit/user-password.component.ts +++ b/client/src/app/+admin/overview/users/user-edit/user-password.component.ts @@ -4,11 +4,15 @@ import { USER_PASSWORD_VALIDATOR } from '@app/shared/form-validators/user-valida import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { UserAdminService } from '@app/shared/shared-users' import { UserUpdate } from '@peertube/peertube-models' +import { NgClass, NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' @Component({ selector: 'my-user-password', templateUrl: './user-password.component.html', - styleUrls: [ './user-password.component.scss' ] + styleUrls: [ './user-password.component.scss' ], + standalone: true, + imports: [ FormsModule, ReactiveFormsModule, NgClass, NgIf ] }) export class UserPasswordComponent extends FormReactive implements OnInit { @Input() userId: number diff --git a/client/src/app/+admin/overview/users/user-edit/user-update.component.ts b/client/src/app/+admin/overview/users/user-edit/user-update.component.ts index b55a519f3..fb4ac1f10 100644 --- a/client/src/app/+admin/overview/users/user-edit/user-update.component.ts +++ b/client/src/app/+admin/overview/users/user-edit/user-update.component.ts @@ -1,6 +1,6 @@ import { Subscription } from 'rxjs' import { Component, OnDestroy, OnInit } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' +import { ActivatedRoute, Router, RouterLink } from '@angular/router' import { ConfigService } from '@app/+admin/config/shared/config.service' import { AuthService, Notifier, ScreenService, ServerService, User, UserService } from '@app/core' import { @@ -13,11 +13,41 @@ import { FormReactiveService } from '@app/shared/shared-forms' import { TwoFactorService, UserAdminService } from '@app/shared/shared-users' import { User as UserType, UserAdminFlag, UserRole, UserUpdate } from '@peertube/peertube-models' import { UserEdit } from './user-edit' +import { BytesPipe } from '../../../../shared/shared-main/angular/bytes.pipe' +import { UserPasswordComponent } from './user-password.component' +import { PeertubeCheckboxComponent } from '../../../../shared/shared-forms/peertube-checkbox.component' +import { UserRealQuotaInfoComponent } from '../../../shared/user-real-quota-info.component' +import { SelectCustomValueComponent } from '../../../../shared/shared-forms/select/select-custom-value.component' +import { InputTextComponent } from '../../../../shared/shared-forms/input-text.component' +import { PeerTubeTemplateDirective } from '../../../../shared/shared-main/angular/peertube-template.directive' +import { HelpComponent } from '../../../../shared/shared-main/misc/help.component' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { ActorAvatarEditComponent } from '../../../../shared/shared-actor-image-edit/actor-avatar-edit.component' +import { NgIf, NgTemplateOutlet, NgClass, NgFor } from '@angular/common' @Component({ selector: 'my-user-update', templateUrl: './user-edit.component.html', - styleUrls: [ './user-edit.component.scss' ] + styleUrls: [ './user-edit.component.scss' ], + standalone: true, + imports: [ + RouterLink, + NgIf, + NgTemplateOutlet, + ActorAvatarEditComponent, + FormsModule, + ReactiveFormsModule, + NgClass, + HelpComponent, + PeerTubeTemplateDirective, + InputTextComponent, + NgFor, + SelectCustomValueComponent, + UserRealQuotaInfoComponent, + PeertubeCheckboxComponent, + UserPasswordComponent, + BytesPipe + ] }) export class UserUpdateComponent extends UserEdit implements OnInit, OnDestroy { error: string diff --git a/client/src/app/+admin/overview/users/user-list/user-list.component.ts b/client/src/app/+admin/overview/users/user-list/user-list.component.ts index 36849011d..7a0e8fd73 100644 --- a/client/src/app/+admin/overview/users/user-list/user-list.component.ts +++ b/client/src/app/+admin/overview/users/user-list/user-list.component.ts @@ -1,6 +1,6 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { Component, OnInit, ViewChild } from '@angular/core' -import { ActivatedRoute, Router } from '@angular/router' +import { ActivatedRoute, Router, RouterLink } from '@angular/router' import { AuthService, ConfirmService, LocalStorageService, Notifier, RestPagination, RestTable, ServerService } from '@app/core' import { formatICU, getAPIHost } from '@app/helpers' import { AdvancedInputFilter } from '@app/shared/shared-forms' @@ -9,6 +9,21 @@ import { AccountMutedStatus, BlocklistService, UserBanModalComponent, UserModera import { UserAdminService } from '@app/shared/shared-users' import { User, UserRole, UserRoleType } from '@peertube/peertube-models' import { logger } from '@root-helpers/logger' +import { BytesPipe } from '../../../../shared/shared-main/angular/bytes.pipe' +import { AutoColspanDirective } from '../../../../shared/shared-main/angular/auto-colspan.directive' +import { UserEmailInfoComponent } from '../../../shared/user-email-info.component' +import { ActorAvatarComponent } from '../../../../shared/shared-actor-image/actor-avatar.component' +import { UserModerationDropdownComponent } from '../../../../shared/shared-moderation/user-moderation-dropdown.component' +import { TableExpanderIconComponent } from '../../../../shared/shared-tables/table-expander-icon.component' +import { PeertubeCheckboxComponent } from '../../../../shared/shared-forms/peertube-checkbox.component' +import { FormsModule } from '@angular/forms' +import { SelectCheckboxComponent } from '../../../../shared/shared-forms/select/select-checkbox.component' +import { NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem, NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { AdvancedInputFilterComponent } from '../../../../shared/shared-forms/advanced-input-filter.component' +import { ActionDropdownComponent } from '../../../../shared/shared-main/buttons/action-dropdown.component' +import { NgIf, NgClass, DatePipe } from '@angular/common' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../../shared/shared-icons/global-icon.component' type UserForList = User & { rawVideoQuota: number @@ -20,7 +35,34 @@ type UserForList = User & { @Component({ selector: 'my-user-list', templateUrl: './user-list.component.html', - styleUrls: [ './user-list.component.scss' ] + styleUrls: [ './user-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + SharedModule, + NgIf, + ActionDropdownComponent, + RouterLink, + AdvancedInputFilterComponent, + NgbDropdown, + NgbDropdownToggle, + NgbDropdownMenu, + NgbDropdownItem, + SelectCheckboxComponent, + FormsModule, + PeertubeCheckboxComponent, + NgbTooltip, + NgClass, + TableExpanderIconComponent, + UserModerationDropdownComponent, + ActorAvatarComponent, + UserEmailInfoComponent, + AutoColspanDirective, + UserBanModalComponent, + DatePipe, + BytesPipe + ] }) export class UserListComponent extends RestTable implements OnInit { private static readonly LOCAL_STORAGE_SELECTED_COLUMNS_KEY = 'admin-user-list-selected-columns' diff --git a/client/src/app/+admin/overview/videos/video-list.component.ts b/client/src/app/+admin/overview/videos/video-list.component.ts index 2e12a2b31..6a19d35bf 100644 --- a/client/src/app/+admin/overview/videos/video-list.component.ts +++ b/client/src/app/+admin/overview/videos/video-list.component.ts @@ -1,4 +1,4 @@ -import { SortMeta } from 'primeng/api' +import { SortMeta, SharedModule } from 'primeng/api' import { finalize } from 'rxjs/operators' import { Component, OnInit, ViewChild } from '@angular/core' import { ActivatedRoute, Router } from '@angular/router' @@ -11,11 +11,45 @@ import { VideoActionsDisplayType } from '@app/shared/shared-video-miniature' import { getAllFiles } from '@peertube/peertube-core-utils' import { UserRight, VideoFile, VideoPrivacy, VideoState, VideoStreamingPlaylistType } from '@peertube/peertube-models' import { VideoAdminService } from './video-admin.service' +import { BytesPipe } from '../../../shared/shared-main/angular/bytes.pipe' +import { EmbedComponent } from '../../../shared/shared-main/video/embed.component' +import { AutoColspanDirective } from '../../../shared/shared-main/angular/auto-colspan.directive' +import { VideoCellComponent } from '../../../shared/shared-tables/video-cell.component' +import { VideoActionsDropdownComponent } from '../../../shared/shared-video-miniature/video-actions-dropdown.component' +import { TableExpanderIconComponent } from '../../../shared/shared-tables/table-expander-icon.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { ButtonComponent } from '../../../shared/shared-main/buttons/button.component' +import { AdvancedInputFilterComponent } from '../../../shared/shared-forms/advanced-input-filter.component' +import { ActionDropdownComponent } from '../../../shared/shared-main/buttons/action-dropdown.component' +import { NgClass, NgIf, NgFor, DatePipe } from '@angular/common' +import { TableModule } from 'primeng/table' +import { GlobalIconComponent } from '../../../shared/shared-icons/global-icon.component' @Component({ selector: 'my-video-list', templateUrl: './video-list.component.html', - styleUrls: [ './video-list.component.scss' ] + styleUrls: [ './video-list.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + TableModule, + NgClass, + SharedModule, + NgIf, + ActionDropdownComponent, + AdvancedInputFilterComponent, + ButtonComponent, + NgbTooltip, + TableExpanderIconComponent, + VideoActionsDropdownComponent, + VideoCellComponent, + AutoColspanDirective, + NgFor, + EmbedComponent, + VideoBlockComponent, + DatePipe, + BytesPipe + ] }) export class VideoListComponent extends RestTable
` + template: `
`, + standalone: true, + imports: [ NgIf, NgStyle ] }) export class LoaderComponent { @Input() loading: boolean diff --git a/client/src/app/shared/shared-main/main-providers.ts b/client/src/app/shared/shared-main/main-providers.ts new file mode 100644 index 000000000..48c10bcfa --- /dev/null +++ b/client/src/app/shared/shared-main/main-providers.ts @@ -0,0 +1,44 @@ +import { DatePipe } from '@angular/common' +import { AccountService } from './account' +import { FromNowPipe } from './angular' +import { CustomPageService } from './custom-page' +import { ActorRedirectGuard } from './router' +import { UserHistoryService, UserNotificationService } from './users' +import { + RedundancyService, + VideoImportService, + VideoOwnershipService, + VideoService, + VideoFileTokenService, + VideoResolver, + VideoPasswordService, + VideoChapterService +} from './video' +import { VideoCaptionService } from './video-caption' +import { VideoChannelService } from './video-channel' +import { AUTH_INTERCEPTOR_PROVIDER } from './auth' +import { InstanceService } from './instance' + +export function getMainProviders () { + return [ + DatePipe, + FromNowPipe, + AUTH_INTERCEPTOR_PROVIDER, + AccountService, + UserHistoryService, + UserNotificationService, + RedundancyService, + VideoImportService, + VideoOwnershipService, + VideoService, + VideoFileTokenService, + VideoResolver, + VideoCaptionService, + VideoChannelService, + VideoPasswordService, + VideoChapterService, + CustomPageService, + ActorRedirectGuard, + InstanceService + ] +} diff --git a/client/src/app/shared/shared-main/misc/channels-setup-message.component.ts b/client/src/app/shared/shared-main/misc/channels-setup-message.component.ts index 4f9cbc525..ef1d71360 100644 --- a/client/src/app/shared/shared-main/misc/channels-setup-message.component.ts +++ b/client/src/app/shared/shared-main/misc/channels-setup-message.component.ts @@ -1,11 +1,16 @@ import { Component, Input, OnInit } from '@angular/core' import { AuthService, User } from '@app/core' import { VideoChannel } from '@app/shared/shared-main' +import { RouterLink } from '@angular/router' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' +import { NgIf } from '@angular/common' @Component({ selector: 'my-channels-setup-message', templateUrl: './channels-setup-message.component.html', - styleUrls: [ './channels-setup-message.component.scss' ] + styleUrls: [ './channels-setup-message.component.scss' ], + standalone: true, + imports: [ NgIf, GlobalIconComponent, RouterLink ] }) export class ChannelsSetupMessageComponent implements OnInit { @Input() hideLink = false diff --git a/client/src/app/shared/shared-main/misc/help.component.ts b/client/src/app/shared/shared-main/misc/help.component.ts index 53eafc74f..c6c1051ee 100644 --- a/client/src/app/shared/shared-main/misc/help.component.ts +++ b/client/src/app/shared/shared-main/misc/help.component.ts @@ -2,11 +2,16 @@ import { AfterContentInit, Component, ContentChildren, Input, OnChanges, OnInit, import { GlobalIconName } from '@app/shared/shared-icons' import { ENHANCED_RULES, TEXT_RULES } from '@peertube/peertube-core-utils' import { PeerTubeTemplateDirective } from '../angular' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' +import { NgbPopover } from '@ng-bootstrap/ng-bootstrap' +import { NgIf, NgTemplateOutlet } from '@angular/common' @Component({ selector: 'my-help', styleUrls: [ './help.component.scss' ], - templateUrl: './help.component.html' + templateUrl: './help.component.html', + standalone: true, + imports: [ NgIf, NgTemplateOutlet, NgbPopover, GlobalIconComponent ] }) export class HelpComponent implements OnInit, OnChanges, AfterContentInit { diff --git a/client/src/app/shared/shared-main/misc/list-overflow.component.ts b/client/src/app/shared/shared-main/misc/list-overflow.component.ts index b6ce21641..00d778de3 100644 --- a/client/src/app/shared/shared-main/misc/list-overflow.component.ts +++ b/client/src/app/shared/shared-main/misc/list-overflow.component.ts @@ -14,8 +14,10 @@ import { ViewChildren } from '@angular/core' import { ScreenService } from '@app/core' -import { NgbDropdown, NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { NgbDropdown, NgbModal, NgbDropdownAnchor, NgbDropdownMenu } from '@ng-bootstrap/ng-bootstrap' import * as debug from 'debug' +import { RouterLinkActive, RouterLink } from '@angular/router' +import { NgFor, NgTemplateOutlet, NgIf, NgClass, SlicePipe } from '@angular/common' const debugLogger = debug('peertube:main:ListOverflowItem') @@ -28,7 +30,20 @@ export interface ListOverflowItem { selector: 'my-list-overflow', templateUrl: './list-overflow.component.html', styleUrls: [ './list-overflow.component.scss' ], - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + NgFor, + NgTemplateOutlet, + NgIf, + NgbDropdown, + NgbDropdownAnchor, + NgClass, + NgbDropdownMenu, + RouterLinkActive, + RouterLink, + SlicePipe + ] }) export class ListOverflowComponent implements AfterViewInit { @Input() items: T[] diff --git a/client/src/app/shared/shared-main/misc/simple-search-input.component.ts b/client/src/app/shared/shared-main/misc/simple-search-input.component.ts index eae4f9a7f..ddad187c2 100644 --- a/client/src/app/shared/shared-main/misc/simple-search-input.component.ts +++ b/client/src/app/shared/shared-main/misc/simple-search-input.component.ts @@ -1,9 +1,14 @@ import { Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core' +import { NgIf } from '@angular/common' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' +import { FormsModule } from '@angular/forms' @Component({ selector: 'my-simple-search-input', templateUrl: './simple-search-input.component.html', - styleUrls: [ './simple-search-input.component.scss' ] + styleUrls: [ './simple-search-input.component.scss' ], + standalone: true, + imports: [ FormsModule, GlobalIconComponent, NgIf ] }) export class SimpleSearchInputComponent implements OnInit { @ViewChild('ref') input: ElementRef diff --git a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts index 19f1f7d41..7ab7f9ed5 100644 --- a/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts +++ b/client/src/app/shared/shared-main/misc/top-menu-dropdown.component.ts @@ -1,11 +1,13 @@ import { Subscription } from 'rxjs' import { filter } from 'rxjs/operators' import { Component, Input, OnDestroy, OnInit, ViewChild } from '@angular/core' -import { NavigationEnd, Router } from '@angular/router' +import { NavigationEnd, Router, RouterLinkActive, RouterLink } from '@angular/router' import { MenuService, ScreenService } from '@app/core' import { scrollToTop } from '@app/helpers' import { GlobalIconName } from '@app/shared/shared-icons' -import { NgbDropdown, NgbModal } from '@ng-bootstrap/ng-bootstrap' +import { NgbDropdown, NgbModal, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownItem } from '@ng-bootstrap/ng-bootstrap' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' +import { NgClass, NgFor, NgIf } from '@angular/common' export type TopMenuDropdownParam = { label: string @@ -25,7 +27,20 @@ export type TopMenuDropdownParam = { @Component({ selector: 'my-top-menu-dropdown', templateUrl: './top-menu-dropdown.component.html', - styleUrls: [ './top-menu-dropdown.component.scss' ] + styleUrls: [ './top-menu-dropdown.component.scss' ], + standalone: true, + imports: [ + NgClass, + NgFor, + NgIf, + RouterLinkActive, + RouterLink, + NgbDropdown, + NgbDropdownToggle, + NgbDropdownMenu, + NgbDropdownItem, + GlobalIconComponent + ] }) export class TopMenuDropdownComponent implements OnInit, OnDestroy { @Input() menuEntries: TopMenuDropdownParam[] = [] diff --git a/client/src/app/shared/shared-main/plugins/plugin-placeholder.component.ts b/client/src/app/shared/shared-main/plugins/plugin-placeholder.component.ts index 2064b9089..2005bf886 100644 --- a/client/src/app/shared/shared-main/plugins/plugin-placeholder.component.ts +++ b/client/src/app/shared/shared-main/plugins/plugin-placeholder.component.ts @@ -4,7 +4,8 @@ import { PluginElementPlaceholder } from '@peertube/peertube-models' @Component({ selector: 'my-plugin-placeholder', template: '
', - styleUrls: [ './plugin-placeholder.component.scss' ] + styleUrls: [ './plugin-placeholder.component.scss' ], + standalone: true }) export class PluginPlaceholderComponent { diff --git a/client/src/app/shared/shared-main/plugins/plugin-selector.directive.ts b/client/src/app/shared/shared-main/plugins/plugin-selector.directive.ts index ddb431dec..52dfa8988 100644 --- a/client/src/app/shared/shared-main/plugins/plugin-selector.directive.ts +++ b/client/src/app/shared/shared-main/plugins/plugin-selector.directive.ts @@ -1,7 +1,10 @@ import { Directive, ElementRef, Input, OnInit, Renderer2 } from '@angular/core' import { PluginSelectorId } from '@peertube/peertube-models' -@Directive({ selector: '[myPluginSelector]' }) +@Directive({ + selector: '[myPluginSelector]', + standalone: true +}) export class PluginSelectorDirective implements OnInit { @Input() pluginSelectorId: PluginSelectorId diff --git a/client/src/app/shared/shared-main/shared-main.module.ts b/client/src/app/shared/shared-main/shared-main.module.ts deleted file mode 100644 index 3d9bd9f6a..000000000 --- a/client/src/app/shared/shared-main/shared-main.module.ts +++ /dev/null @@ -1,227 +0,0 @@ -import { SharedModule as PrimeSharedModule } from 'primeng/api' -import { ClipboardModule } from '@angular/cdk/clipboard' -import { CommonModule, DatePipe } from '@angular/common' -import { HttpClientModule } from '@angular/common/http' -import { NgModule } from '@angular/core' -import { FormsModule, ReactiveFormsModule } from '@angular/forms' -import { RouterModule } from '@angular/router' -import { - NgbCollapseModule, - NgbDropdownModule, - NgbModalModule, - NgbNavModule, - NgbPopoverModule, - NgbTooltipModule -} from '@ng-bootstrap/ng-bootstrap' -import { LoadingBarModule } from '@ngx-loading-bar/core' -import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client' -import { SharedGlobalIconModule } from '../shared-icons' -import { AccountService, SignupLabelComponent } from './account' -import { - AutoColspanDirective, - AutofocusDirective, - BytesPipe, - DeferLoadingDirective, - TimeDurationFormatterPipe, - DaysDurationFormatterPipe, - FromNowPipe, - InfiniteScrollerDirective, - LinkComponent, - LoginLinkComponent, - NumberFormatterPipe, - PeerTubeTemplateDirective -} from './angular' -import { AUTH_INTERCEPTOR_PROVIDER } from './auth' -import { ActionDropdownComponent, ButtonComponent, CopyButtonComponent, DeleteButtonComponent, EditButtonComponent } from './buttons' -import { CustomPageService } from './custom-page' -import { DateToggleComponent } from './date' -import { FeedComponent } from './feeds' -import { LoaderComponent } from './loaders' -import { - ChannelsSetupMessageComponent, - HelpComponent, - ListOverflowComponent, - SimpleSearchInputComponent, - TopMenuDropdownComponent -} from './misc' -import { PluginPlaceholderComponent, PluginSelectorDirective } from './plugins' -import { ActorRedirectGuard } from './router' -import { UserHistoryService, UserNotificationService, UserQuotaComponent } from './users' -import { - EmbedComponent, - RedundancyService, - VideoChapterService, - VideoFileTokenService, - VideoImportService, - VideoOwnershipService, - VideoPasswordService, - VideoResolver, - VideoService -} from './video' -import { VideoCaptionService } from './video-caption' -import { VideoChannelService } from './video-channel' - -@NgModule({ - imports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - HttpClientModule, - - LoadingBarHttpClientModule, - LoadingBarModule, - - NgbDropdownModule, - NgbModalModule, - NgbPopoverModule, - NgbNavModule, - NgbTooltipModule, - NgbCollapseModule, - - ClipboardModule, - - PrimeSharedModule, - - SharedGlobalIconModule - ], - - declarations: [ - FromNowPipe, - NumberFormatterPipe, - BytesPipe, - TimeDurationFormatterPipe, - DaysDurationFormatterPipe, - AutofocusDirective, - DeferLoadingDirective, - AutoColspanDirective, - - InfiniteScrollerDirective, - PeerTubeTemplateDirective, - LinkComponent, - LoginLinkComponent, - - ActionDropdownComponent, - ButtonComponent, - CopyButtonComponent, - DeleteButtonComponent, - EditButtonComponent, - - DateToggleComponent, - - FeedComponent, - - LoaderComponent, - - ChannelsSetupMessageComponent, - HelpComponent, - ListOverflowComponent, - TopMenuDropdownComponent, - SimpleSearchInputComponent, - - UserQuotaComponent, - - SignupLabelComponent, - - EmbedComponent, - - PluginPlaceholderComponent, - PluginSelectorDirective - ], - - exports: [ - CommonModule, - FormsModule, - ReactiveFormsModule, - RouterModule, - HttpClientModule, - - LoadingBarHttpClientModule, - LoadingBarModule, - - NgbDropdownModule, - NgbModalModule, - NgbPopoverModule, - NgbNavModule, - NgbTooltipModule, - NgbCollapseModule, - - ClipboardModule, - - PrimeSharedModule, - - FromNowPipe, - BytesPipe, - NumberFormatterPipe, - TimeDurationFormatterPipe, - DaysDurationFormatterPipe, - AutofocusDirective, - DeferLoadingDirective, - AutoColspanDirective, - - InfiniteScrollerDirective, - PeerTubeTemplateDirective, - LinkComponent, - LoginLinkComponent, - - ActionDropdownComponent, - ButtonComponent, - CopyButtonComponent, - DeleteButtonComponent, - EditButtonComponent, - - DateToggleComponent, - - FeedComponent, - - LoaderComponent, - - ChannelsSetupMessageComponent, - HelpComponent, - ListOverflowComponent, - TopMenuDropdownComponent, - SimpleSearchInputComponent, - - UserQuotaComponent, - - SignupLabelComponent, - - EmbedComponent, - - PluginPlaceholderComponent, - PluginSelectorDirective - ], - - providers: [ - DatePipe, - - FromNowPipe, - - AUTH_INTERCEPTOR_PROVIDER, - - AccountService, - - UserHistoryService, - UserNotificationService, - - RedundancyService, - VideoImportService, - VideoOwnershipService, - VideoService, - VideoFileTokenService, - VideoResolver, - - VideoCaptionService, - - VideoChannelService, - - VideoPasswordService, - - VideoChapterService, - - CustomPageService, - - ActorRedirectGuard - ] -}) -export class SharedMainModule { } diff --git a/client/src/app/shared/shared-main/users/user-quota.component.ts b/client/src/app/shared/shared-main/users/user-quota.component.ts index 5a95f1209..8c55635c9 100644 --- a/client/src/app/shared/shared-main/users/user-quota.component.ts +++ b/client/src/app/shared/shared-main/users/user-quota.component.ts @@ -2,11 +2,15 @@ import { Subject } from 'rxjs' import { Component, Input, OnInit } from '@angular/core' import { User, UserService } from '@app/core' import { BytesPipe } from '../angular' +import { NgIf } from '@angular/common' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' @Component({ selector: 'my-user-quota', templateUrl: './user-quota.component.html', - styleUrls: [ './user-quota.component.scss' ] + styleUrls: [ './user-quota.component.scss' ], + standalone: true, + imports: [ NgbTooltip, NgIf, BytesPipe ] }) export class UserQuotaComponent implements OnInit { diff --git a/client/src/app/shared/shared-main/video-channel/video-channel.service.ts b/client/src/app/shared/shared-main/video-channel/video-channel.service.ts index 68c53741f..261ade14e 100644 --- a/client/src/app/shared/shared-main/video-channel/video-channel.service.ts +++ b/client/src/app/shared/shared-main/video-channel/video-channel.service.ts @@ -16,7 +16,7 @@ import { Account } from '../account' import { AccountService } from '../account/account.service' import { VideoChannel } from './video-channel.model' -@Injectable() +@Injectable({ providedIn: 'root' }) export class VideoChannelService { static BASE_VIDEO_CHANNEL_URL = environment.apiUrl + '/api/v1/video-channels/' diff --git a/client/src/app/shared/shared-main/video/embed.component.ts b/client/src/app/shared/shared-main/video/embed.component.ts index 426e2f57a..e5166e8ce 100644 --- a/client/src/app/shared/shared-main/video/embed.component.ts +++ b/client/src/app/shared/shared-main/video/embed.component.ts @@ -8,7 +8,8 @@ import { Video } from '@peertube/peertube-models' @Component({ selector: 'my-embed', styleUrls: [ './embed.component.scss' ], - templateUrl: './embed.component.html' + templateUrl: './embed.component.html', + standalone: true }) export class EmbedComponent implements OnInit { @Input({ required: true }) video: Pick & Partial> diff --git a/client/src/app/shared/shared-moderation/account-block-badges.component.ts b/client/src/app/shared/shared-moderation/account-block-badges.component.ts index a72601118..428caf0b0 100644 --- a/client/src/app/shared/shared-moderation/account-block-badges.component.ts +++ b/client/src/app/shared/shared-moderation/account-block-badges.component.ts @@ -1,10 +1,13 @@ import { Component, Input } from '@angular/core' import { Account } from '../shared-main' +import { NgIf } from '@angular/common' @Component({ selector: 'my-account-block-badges', styleUrls: [ './account-block-badges.component.scss' ], - templateUrl: './account-block-badges.component.html' + templateUrl: './account-block-badges.component.html', + standalone: true, + imports: [ NgIf ] }) export class AccountBlockBadgesComponent { @Input() account: Account diff --git a/client/src/app/shared/shared-moderation/account-blocklist.component.ts b/client/src/app/shared/shared-moderation/account-blocklist.component.ts index 38dbbff78..c22b94bde 100644 --- a/client/src/app/shared/shared-moderation/account-blocklist.component.ts +++ b/client/src/app/shared/shared-moderation/account-blocklist.component.ts @@ -4,7 +4,9 @@ import { Notifier, RestPagination, RestTable } from '@app/core' import { AccountBlock } from './account-block.model' import { BlocklistComponentType, BlocklistService } from './blocklist.service' -@Directive() +@Directive({ + providers: [ BlocklistService ] +}) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class GenericAccountBlocklistComponent extends RestTable implements OnInit { // @ts-expect-error: "Abstract methods can only appear within an abstract class" diff --git a/client/src/app/shared/shared-moderation/batch-domains-modal.component.ts b/client/src/app/shared/shared-moderation/batch-domains-modal.component.ts index ec2fea528..b2a408097 100644 --- a/client/src/app/shared/shared-moderation/batch-domains-modal.component.ts +++ b/client/src/app/shared/shared-moderation/batch-domains-modal.component.ts @@ -3,11 +3,16 @@ import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' import { splitAndGetNotEmpty, UNIQUE_HOSTS_VALIDATOR } from '../form-validators/host-validators' +import { NgClass, NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' @Component({ selector: 'my-batch-domains-modal', templateUrl: './batch-domains-modal.component.html', - styleUrls: [ './batch-domains-modal.component.scss' ] + styleUrls: [ './batch-domains-modal.component.scss' ], + standalone: true, + imports: [ GlobalIconComponent, FormsModule, ReactiveFormsModule, NgClass, NgIf ] }) export class BatchDomainsModalComponent extends FormReactive implements OnInit { @ViewChild('modal', { static: true }) modal: NgbModal diff --git a/client/src/app/shared/shared-moderation/index.ts b/client/src/app/shared/shared-moderation/index.ts index da85b2299..fbd46bd13 100644 --- a/client/src/app/shared/shared-moderation/index.ts +++ b/client/src/app/shared/shared-moderation/index.ts @@ -12,4 +12,3 @@ export * from './user-ban-modal.component' export * from './user-moderation-dropdown.component' export * from './video-block.component' export * from './video-block.service' -export * from './shared-moderation.module' diff --git a/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts b/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts index 042b57aa7..6110460df 100644 --- a/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts +++ b/client/src/app/shared/shared-moderation/report-modals/account-report.component.ts @@ -9,11 +9,28 @@ import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' import { abusePredefinedReasonsMap } from '@peertube/peertube-core-utils' import { AbusePredefinedReasonsString } from '@peertube/peertube-models' import { AbuseService } from '../abuse.service' +import { PeerTubeTemplateDirective } from '../../shared-main/angular/peertube-template.directive' +import { PeertubeCheckboxComponent } from '../../shared-forms/peertube-checkbox.component' +import { NgFor, NgIf, NgClass } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' @Component({ selector: 'my-account-report', templateUrl: './report.component.html', - styleUrls: [ './report.component.scss' ] + styleUrls: [ './report.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + FormsModule, + ReactiveFormsModule, + NgFor, + PeertubeCheckboxComponent, + NgIf, + PeerTubeTemplateDirective, + NgClass + ], + providers: [ AbuseService ] }) export class AccountReportComponent extends FormReactive implements OnInit { @ViewChild('modal', { static: true }) modal: NgbModal diff --git a/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts b/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts index fd50b745a..b657570df 100644 --- a/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts +++ b/client/src/app/shared/shared-moderation/report-modals/comment-report.component.ts @@ -9,11 +9,28 @@ import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref' import { abusePredefinedReasonsMap } from '@peertube/peertube-core-utils' import { AbusePredefinedReasonsString } from '@peertube/peertube-models' import { AbuseService } from '../abuse.service' +import { PeerTubeTemplateDirective } from '../../shared-main/angular/peertube-template.directive' +import { PeertubeCheckboxComponent } from '../../shared-forms/peertube-checkbox.component' +import { NgFor, NgIf, NgClass } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' @Component({ selector: 'my-comment-report', templateUrl: './report.component.html', - styleUrls: [ './report.component.scss' ] + styleUrls: [ './report.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + FormsModule, + ReactiveFormsModule, + NgFor, + PeertubeCheckboxComponent, + NgIf, + PeerTubeTemplateDirective, + NgClass + ], + providers: [ AbuseService ] }) export class CommentReportComponent extends FormReactive implements OnInit { @Input() comment: VideoComment = null diff --git a/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts b/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts index 479957d21..e4e71253b 100644 --- a/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts +++ b/client/src/app/shared/shared-moderation/report-modals/video-report.component.ts @@ -1,6 +1,5 @@ import { mapValues, pickBy } from 'lodash-es' import { Component, Input, OnInit, ViewChild } from '@angular/core' -import { DomSanitizer } from '@angular/platform-browser' import { Notifier } from '@app/core' import { ABUSE_REASON_VALIDATOR } from '@app/shared/form-validators/abuse-validators' import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' @@ -10,11 +9,32 @@ import { abusePredefinedReasonsMap } from '@peertube/peertube-core-utils' import { AbusePredefinedReasonsString } from '@peertube/peertube-models' import { Video } from '../../shared-main' import { AbuseService } from '../abuse.service' +import { TimestampInputComponent } from '../../shared-forms/timestamp-input.component' +import { EmbedComponent } from '../../shared-main/video/embed.component' +import { PeerTubeTemplateDirective } from '../../shared-main/angular/peertube-template.directive' +import { PeertubeCheckboxComponent } from '../../shared-forms/peertube-checkbox.component' +import { NgFor, NgIf, NgClass } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../../shared-icons/global-icon.component' @Component({ selector: 'my-video-report', templateUrl: './video-report.component.html', - styleUrls: [ './report.component.scss' ] + styleUrls: [ './report.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + FormsModule, + ReactiveFormsModule, + NgFor, + PeertubeCheckboxComponent, + NgIf, + PeerTubeTemplateDirective, + EmbedComponent, + TimestampInputComponent, + NgClass + ], + providers: [ AbuseService ] }) export class VideoReportComponent extends FormReactive implements OnInit { @Input() video: Video = null @@ -30,8 +50,7 @@ export class VideoReportComponent extends FormReactive implements OnInit { protected formReactiveService: FormReactiveService, private modalService: NgbModal, private abuseService: AbuseService, - private notifier: Notifier, - private sanitizer: DomSanitizer + private notifier: Notifier ) { super() } diff --git a/client/src/app/shared/shared-moderation/server-blocklist.component.ts b/client/src/app/shared/shared-moderation/server-blocklist.component.ts index 4105645fa..b87519769 100644 --- a/client/src/app/shared/shared-moderation/server-blocklist.component.ts +++ b/client/src/app/shared/shared-moderation/server-blocklist.component.ts @@ -5,7 +5,9 @@ import { BatchDomainsModalComponent } from '@app/shared/shared-moderation/batch- import { ServerBlock } from '@peertube/peertube-models' import { BlocklistComponentType, BlocklistService } from './blocklist.service' -@Directive() +@Directive({ + providers: [ BlocklistService ] +}) // eslint-disable-next-line @angular-eslint/directive-class-suffix export class GenericServerBlocklistComponent extends RestTable implements OnInit { @ViewChild('batchDomainsModal') batchDomainsModal: BatchDomainsModalComponent diff --git a/client/src/app/shared/shared-moderation/shared-moderation.module.ts b/client/src/app/shared/shared-moderation/shared-moderation.module.ts deleted file mode 100644 index 8c5d8399c..000000000 --- a/client/src/app/shared/shared-moderation/shared-moderation.module.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedActorImageModule } from '../shared-actor-image/shared-actor-image.module' -import { SharedFormModule } from '../shared-forms/shared-form.module' -import { SharedGlobalIconModule } from '../shared-icons' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { SharedUsersModule } from '../shared-users' -import { SharedVideoCommentModule } from '../shared-video-comment' -import { AbuseService } from './abuse.service' -import { AccountBlockBadgesComponent } from './account-block-badges.component' -import { BatchDomainsModalComponent } from './batch-domains-modal.component' -import { BlocklistService } from './blocklist.service' -import { BulkService } from './bulk.service' -import { AccountReportComponent, CommentReportComponent, VideoReportComponent } from './report-modals' -import { UserBanModalComponent } from './user-ban-modal.component' -import { UserModerationDropdownComponent } from './user-moderation-dropdown.component' -import { VideoBlockComponent } from './video-block.component' -import { VideoBlockService } from './video-block.service' - -@NgModule({ - imports: [ - SharedMainModule, - SharedFormModule, - SharedGlobalIconModule, - SharedVideoCommentModule, - SharedActorImageModule, - SharedUsersModule - ], - - declarations: [ - UserBanModalComponent, - UserModerationDropdownComponent, - VideoBlockComponent, - VideoReportComponent, - BatchDomainsModalComponent, - CommentReportComponent, - AccountReportComponent, - AccountBlockBadgesComponent - ], - - exports: [ - UserBanModalComponent, - UserModerationDropdownComponent, - VideoBlockComponent, - VideoReportComponent, - BatchDomainsModalComponent, - CommentReportComponent, - AccountReportComponent, - AccountBlockBadgesComponent - ], - - providers: [ - BlocklistService, - BulkService, - AbuseService, - VideoBlockService - ] -}) -export class SharedModerationModule { } diff --git a/client/src/app/shared/shared-moderation/user-ban-modal.component.ts b/client/src/app/shared/shared-moderation/user-ban-modal.component.ts index fcada7acc..8cb25d614 100644 --- a/client/src/app/shared/shared-moderation/user-ban-modal.component.ts +++ b/client/src/app/shared/shared-moderation/user-ban-modal.component.ts @@ -10,11 +10,18 @@ import { USER_BAN_REASON_VALIDATOR } from '../form-validators/user-validators' import { Account } from '../shared-main' import { UserAdminService } from '../shared-users' import { BlocklistService } from './blocklist.service' +import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component' +import { NgClass, NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' @Component({ selector: 'my-user-ban-modal', templateUrl: './user-ban-modal.component.html', - styleUrls: [ './user-ban-modal.component.scss' ] + styleUrls: [ './user-ban-modal.component.scss' ], + standalone: true, + imports: [ GlobalIconComponent, FormsModule, ReactiveFormsModule, NgClass, NgIf, PeertubeCheckboxComponent ], + providers: [ UserAdminService, BlocklistService ] }) export class UserBanModalComponent extends FormReactive implements OnInit { @ViewChild('modal', { static: true }) modal: NgbModal diff --git a/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts b/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts index 7de152e60..dba670ee4 100644 --- a/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts +++ b/client/src/app/shared/shared-moderation/user-moderation-dropdown.component.ts @@ -6,6 +6,8 @@ import { UserAdminService } from '../shared-users' import { BlocklistService } from './blocklist.service' import { BulkService } from './bulk.service' import { UserBanModalComponent } from './user-ban-modal.component' +import { ActionDropdownComponent } from '../shared-main/buttons/action-dropdown.component' +import { NgIf } from '@angular/common' export type AccountMutedStatus = Pick -` +`, + standalone: true, + imports: [ NgbTooltip, NgClass ] }) export class TableExpanderIconComponent { @Input() expanded: boolean diff --git a/client/src/app/shared/shared-tables/video-cell.component.ts b/client/src/app/shared/shared-tables/video-cell.component.ts index 62984180d..2e701c44b 100644 --- a/client/src/app/shared/shared-tables/video-cell.component.ts +++ b/client/src/app/shared/shared-tables/video-cell.component.ts @@ -4,7 +4,8 @@ import { Video } from '@app/shared/shared-main' @Component({ selector: 'my-video-cell', styleUrls: [ 'video-cell.component.scss' ], - templateUrl: 'video-cell.component.html' + templateUrl: 'video-cell.component.html', + standalone: true }) export class VideoCellComponent { @Input() video: Video diff --git a/client/src/app/shared/shared-thumbnail/index.ts b/client/src/app/shared/shared-thumbnail/index.ts index e09692867..b77ce2de8 100644 --- a/client/src/app/shared/shared-thumbnail/index.ts +++ b/client/src/app/shared/shared-thumbnail/index.ts @@ -1,2 +1 @@ export * from './video-thumbnail.component' -export * from './shared-thumbnail.module' diff --git a/client/src/app/shared/shared-thumbnail/shared-thumbnail.module.ts b/client/src/app/shared/shared-thumbnail/shared-thumbnail.module.ts deleted file mode 100644 index 060e70c04..000000000 --- a/client/src/app/shared/shared-thumbnail/shared-thumbnail.module.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedGlobalIconModule } from '../shared-icons' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { VideoThumbnailComponent } from './video-thumbnail.component' - -@NgModule({ - imports: [ - SharedMainModule, - SharedGlobalIconModule - ], - - declarations: [ - VideoThumbnailComponent - ], - - exports: [ - VideoThumbnailComponent - ], - - providers: [ ] -}) -export class SharedThumbnailModule { } diff --git a/client/src/app/shared/shared-thumbnail/video-thumbnail.component.ts b/client/src/app/shared/shared-thumbnail/video-thumbnail.component.ts index 9891d42ed..6daa9e22e 100644 --- a/client/src/app/shared/shared-thumbnail/video-thumbnail.component.ts +++ b/client/src/app/shared/shared-thumbnail/video-thumbnail.component.ts @@ -2,11 +2,17 @@ import { Component, EventEmitter, Input, Output } from '@angular/core' import { ScreenService } from '@app/core' import { VideoState } from '@peertube/peertube-models' import { Video } from '../shared-main' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { RouterLink } from '@angular/router' +import { NgIf, NgTemplateOutlet, NgClass, NgStyle } from '@angular/common' @Component({ selector: 'my-video-thumbnail', styleUrls: [ './video-thumbnail.component.scss' ], - templateUrl: './video-thumbnail.component.html' + templateUrl: './video-thumbnail.component.html', + standalone: true, + imports: [ NgIf, RouterLink, NgTemplateOutlet, NgClass, NgbTooltip, GlobalIconComponent, NgStyle ] }) export class VideoThumbnailComponent { @Input() video: Video diff --git a/client/src/app/shared/shared-user-settings/index.ts b/client/src/app/shared/shared-user-settings/index.ts index dcc08bdce..6f06c0954 100644 --- a/client/src/app/shared/shared-user-settings/index.ts +++ b/client/src/app/shared/shared-user-settings/index.ts @@ -1,4 +1,2 @@ export * from './user-interface-settings.component' export * from './user-video-settings.component' - -export * from './shared-user-settings.module' diff --git a/client/src/app/shared/shared-user-settings/shared-user-settings.module.ts b/client/src/app/shared/shared-user-settings/shared-user-settings.module.ts deleted file mode 100644 index c010f3848..000000000 --- a/client/src/app/shared/shared-user-settings/shared-user-settings.module.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedFormModule } from '../shared-forms' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { UserInterfaceSettingsComponent } from './user-interface-settings.component' -import { UserVideoSettingsComponent } from './user-video-settings.component' - -@NgModule({ - imports: [ - SharedMainModule, - SharedFormModule - ], - - declarations: [ - UserInterfaceSettingsComponent, - UserVideoSettingsComponent - ], - - exports: [ - UserInterfaceSettingsComponent, - UserVideoSettingsComponent - ], - - providers: [ ] -}) -export class SharedUserInterfaceSettingsModule { } diff --git a/client/src/app/shared/shared-user-settings/user-interface-settings.component.ts b/client/src/app/shared/shared-user-settings/user-interface-settings.component.ts index 08c6b6933..bdca0b0a8 100644 --- a/client/src/app/shared/shared-user-settings/user-interface-settings.component.ts +++ b/client/src/app/shared/shared-user-settings/user-interface-settings.component.ts @@ -4,11 +4,15 @@ import { AuthService, Notifier, ServerService, ThemeService, UserService } from import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { HTMLServerConfig, User, UserUpdateMe } from '@peertube/peertube-models' import { SelectOptionsItem } from 'src/types' +import { NgFor, NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' @Component({ selector: 'my-user-interface-settings', templateUrl: './user-interface-settings.component.html', - styleUrls: [ './user-interface-settings.component.scss' ] + styleUrls: [ './user-interface-settings.component.scss' ], + standalone: true, + imports: [ FormsModule, ReactiveFormsModule, NgFor, NgIf ] }) export class UserInterfaceSettingsComponent extends FormReactive implements OnInit, OnDestroy { @Input() user: User = null diff --git a/client/src/app/shared/shared-user-settings/user-video-settings.component.ts b/client/src/app/shared/shared-user-settings/user-video-settings.component.ts index 234d5b217..075199360 100644 --- a/client/src/app/shared/shared-user-settings/user-video-settings.component.ts +++ b/client/src/app/shared/shared-user-settings/user-video-settings.component.ts @@ -5,11 +5,29 @@ import { Component, Input, OnDestroy, OnInit } from '@angular/core' import { AuthService, Notifier, ServerService, User, UserService } from '@app/core' import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { NSFWPolicyType, UserUpdateMe } from '@peertube/peertube-models' +import { NgIf } from '@angular/common' +import { RouterLink } from '@angular/router' +import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component' +import { SelectLanguagesComponent } from '../shared-forms/select/select-languages.component' +import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive' +import { HelpComponent } from '../shared-main/misc/help.component' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' @Component({ selector: 'my-user-video-settings', templateUrl: './user-video-settings.component.html', - styleUrls: [ './user-video-settings.component.scss' ] + styleUrls: [ './user-video-settings.component.scss' ], + standalone: true, + imports: [ + FormsModule, + ReactiveFormsModule, + HelpComponent, + PeerTubeTemplateDirective, + SelectLanguagesComponent, + PeertubeCheckboxComponent, + RouterLink, + NgIf + ] }) export class UserVideoSettingsComponent extends FormReactive implements OnInit, OnDestroy { @Input() user: User = null diff --git a/client/src/app/shared/shared-user-subscription/index.ts b/client/src/app/shared/shared-user-subscription/index.ts index fd53d14b5..e76940f7b 100644 --- a/client/src/app/shared/shared-user-subscription/index.ts +++ b/client/src/app/shared/shared-user-subscription/index.ts @@ -1,5 +1,3 @@ export * from './user-subscription.service' export * from './subscribe-button.component' export * from './remote-subscribe.component' - -export * from './shared-user-subscription.module' diff --git a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts index 295b0812a..e466a8dbf 100644 --- a/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts +++ b/client/src/app/shared/shared-user-subscription/remote-subscribe.component.ts @@ -3,11 +3,17 @@ import { Notifier } from '@app/core' import { FormReactive, FormReactiveService } from '@app/shared/shared-forms' import { logger } from '@root-helpers/logger' import { USER_HANDLE_VALIDATOR } from '../form-validators/user-validators' +import { PeerTubeTemplateDirective } from '../shared-main/angular/peertube-template.directive' +import { HelpComponent } from '../shared-main/misc/help.component' +import { NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' @Component({ selector: 'my-remote-subscribe', templateUrl: './remote-subscribe.component.html', - styleUrls: [ './remote-subscribe.component.scss' ] + styleUrls: [ './remote-subscribe.component.scss' ], + standalone: true, + imports: [ FormsModule, ReactiveFormsModule, NgIf, HelpComponent, PeerTubeTemplateDirective ] }) export class RemoteSubscribeComponent extends FormReactive implements OnInit { @Input() uri: string diff --git a/client/src/app/shared/shared-user-subscription/shared-user-subscription.module.ts b/client/src/app/shared/shared-user-subscription/shared-user-subscription.module.ts deleted file mode 100644 index 9c4d1c70f..000000000 --- a/client/src/app/shared/shared-user-subscription/shared-user-subscription.module.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedFormModule } from '../shared-forms' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { RemoteSubscribeComponent } from './remote-subscribe.component' -import { SubscribeButtonComponent } from './subscribe-button.component' -import { UserSubscriptionService } from './user-subscription.service' - -@NgModule({ - imports: [ - SharedMainModule, - SharedFormModule - ], - - declarations: [ - RemoteSubscribeComponent, - SubscribeButtonComponent - ], - - exports: [ - RemoteSubscribeComponent, - SubscribeButtonComponent - ], - - providers: [ - UserSubscriptionService - ] -}) -export class SharedUserSubscriptionModule { } diff --git a/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts b/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts index 4e15f7bc0..6f7d99ab5 100644 --- a/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts +++ b/client/src/app/shared/shared-user-subscription/subscribe-button.component.ts @@ -4,11 +4,26 @@ import { AuthService, Notifier, RedirectService } from '@app/core' import { Account, VideoChannel, VideoService } from '@app/shared/shared-main' import { FeedFormat } from '@peertube/peertube-models' import { UserSubscriptionService } from './user-subscription.service' +import { NumberFormatterPipe } from '../shared-main/angular/number-formatter.pipe' +import { RemoteSubscribeComponent } from './remote-subscribe.component' +import { NgbDropdown, NgbDropdownToggle, NgbDropdownMenu } from '@ng-bootstrap/ng-bootstrap' +import { NgClass, NgIf, NgTemplateOutlet } from '@angular/common' @Component({ selector: 'my-subscribe-button', templateUrl: './subscribe-button.component.html', - styleUrls: [ './subscribe-button.component.scss' ] + styleUrls: [ './subscribe-button.component.scss' ], + standalone: true, + imports: [ + NgClass, + NgIf, + NgTemplateOutlet, + NgbDropdown, + NgbDropdownToggle, + NgbDropdownMenu, + RemoteSubscribeComponent, + NumberFormatterPipe + ] }) export class SubscribeButtonComponent implements OnInit, OnChanges { /** diff --git a/client/src/app/shared/shared-users/index.ts b/client/src/app/shared/shared-users/index.ts index 95d90e49e..a491f321c 100644 --- a/client/src/app/shared/shared-users/index.ts +++ b/client/src/app/shared/shared-users/index.ts @@ -1,4 +1,2 @@ export * from './user-admin.service' export * from './two-factor.service' - -export * from './shared-users.module' diff --git a/client/src/app/shared/shared-users/shared-users.module.ts b/client/src/app/shared/shared-users/shared-users.module.ts deleted file mode 100644 index efffc6026..000000000 --- a/client/src/app/shared/shared-users/shared-users.module.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { TwoFactorService } from './two-factor.service' -import { UserAdminService } from './user-admin.service' - -@NgModule({ - imports: [ - SharedMainModule - ], - - declarations: [ ], - - exports: [], - - providers: [ - UserAdminService, - TwoFactorService - ] -}) -export class SharedUsersModule { } diff --git a/client/src/app/shared/shared-video-comment/index.ts b/client/src/app/shared/shared-video-comment/index.ts index b1195f232..2fc2c5127 100644 --- a/client/src/app/shared/shared-video-comment/index.ts +++ b/client/src/app/shared/shared-video-comment/index.ts @@ -1,5 +1,3 @@ export * from './video-comment.service' export * from './video-comment.model' export * from './video-comment-thread-tree.model' - -export * from './shared-video-comment.module' diff --git a/client/src/app/shared/shared-video-comment/shared-video-comment.module.ts b/client/src/app/shared/shared-video-comment/shared-video-comment.module.ts deleted file mode 100644 index c4c2a9bb1..000000000 --- a/client/src/app/shared/shared-video-comment/shared-video-comment.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { VideoCommentService } from './video-comment.service' - -@NgModule({ - imports: [ - SharedMainModule - ], - - declarations: [ ], - - exports: [ ], - - providers: [ - VideoCommentService - ] -}) -export class SharedVideoCommentModule { } diff --git a/client/src/app/shared/shared-video-live/index.ts b/client/src/app/shared/shared-video-live/index.ts index c4048e7c5..b502f6fb1 100644 --- a/client/src/app/shared/shared-video-live/index.ts +++ b/client/src/app/shared/shared-video-live/index.ts @@ -1,4 +1,2 @@ export * from './live-video.service' export * from './live-stream-information.component' - -export * from './shared-video-live.module' diff --git a/client/src/app/shared/shared-video-live/live-documentation-link.component.ts b/client/src/app/shared/shared-video-live/live-documentation-link.component.ts index be4006ce8..15bd56e21 100644 --- a/client/src/app/shared/shared-video-live/live-documentation-link.component.ts +++ b/client/src/app/shared/shared-video-live/live-documentation-link.component.ts @@ -3,7 +3,8 @@ import { Component } from '@angular/core' @Component({ selector: 'my-live-documentation-link', templateUrl: './live-documentation-link.component.html', - styleUrls: [ ] + styleUrls: [], + standalone: true }) export class LiveDocumentationLinkComponent { diff --git a/client/src/app/shared/shared-video-live/live-stream-information.component.ts b/client/src/app/shared/shared-video-live/live-stream-information.component.ts index eb0d84b0a..0a64181d3 100644 --- a/client/src/app/shared/shared-video-live/live-stream-information.component.ts +++ b/client/src/app/shared/shared-video-live/live-stream-information.component.ts @@ -3,11 +3,28 @@ import { Video } from '@app/shared/shared-main' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { LiveVideo, LiveVideoError, LiveVideoErrorType, LiveVideoSession } from '@peertube/peertube-models' import { LiveVideoService } from './live-video.service' +import { EditButtonComponent } from '../shared-main/buttons/edit-button.component' +import { RouterLink } from '@angular/router' +import { InputTextComponent } from '../shared-forms/input-text.component' +import { LiveDocumentationLinkComponent } from './live-documentation-link.component' +import { NgIf, NgFor, DatePipe } from '@angular/common' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' @Component({ selector: 'my-live-stream-information', templateUrl: './live-stream-information.component.html', - styleUrls: [ './live-stream-information.component.scss' ] + styleUrls: [ './live-stream-information.component.scss' ], + standalone: true, + imports: [ + GlobalIconComponent, + NgIf, + LiveDocumentationLinkComponent, + InputTextComponent, + NgFor, + RouterLink, + EditButtonComponent, + DatePipe + ] }) export class LiveStreamInformationComponent { @ViewChild('modal', { static: true }) modal: ElementRef diff --git a/client/src/app/shared/shared-video-live/shared-video-live.module.ts b/client/src/app/shared/shared-video-live/shared-video-live.module.ts deleted file mode 100644 index 3e186f591..000000000 --- a/client/src/app/shared/shared-video-live/shared-video-live.module.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedFormModule } from '../shared-forms' -import { SharedGlobalIconModule } from '../shared-icons' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { LiveDocumentationLinkComponent } from './live-documentation-link.component' -import { LiveStreamInformationComponent } from './live-stream-information.component' -import { LiveVideoService } from './live-video.service' - -@NgModule({ - imports: [ - SharedMainModule, - SharedFormModule, - SharedGlobalIconModule - ], - - declarations: [ - LiveStreamInformationComponent, - LiveDocumentationLinkComponent - ], - - exports: [ - LiveStreamInformationComponent, - LiveDocumentationLinkComponent - ], - - providers: [ - LiveVideoService - ] -}) -export class SharedVideoLiveModule { } diff --git a/client/src/app/shared/shared-video-miniature/index.ts b/client/src/app/shared/shared-video-miniature/index.ts index 0086d8e6a..9735d772a 100644 --- a/client/src/app/shared/shared-video-miniature/index.ts +++ b/client/src/app/shared/shared-video-miniature/index.ts @@ -5,4 +5,3 @@ export * from './video-filters.model' export * from './video-miniature.component' export * from './videos-list.component' export * from './videos-selection.component' -export * from './shared-video-miniature.module' diff --git a/client/src/app/shared/shared-video-miniature/shared-video-miniature.module.ts b/client/src/app/shared/shared-video-miniature/shared-video-miniature.module.ts deleted file mode 100644 index d0cf355f1..000000000 --- a/client/src/app/shared/shared-video-miniature/shared-video-miniature.module.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedActorImageModule } from '../shared-actor-image/shared-actor-image.module' -import { SharedFormModule } from '../shared-forms' -import { SharedGlobalIconModule } from '../shared-icons' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { SharedModerationModule } from '../shared-moderation' -import { SharedThumbnailModule } from '../shared-thumbnail' -import { SharedVideoModule } from '../shared-video' -import { SharedVideoLiveModule } from '../shared-video-live' -import { SharedVideoPlaylistModule } from '../shared-video-playlist/shared-video-playlist.module' -import { VideoActionsDropdownComponent } from './video-actions-dropdown.component' -import { VideoDownloadComponent } from './video-download.component' -import { VideoFiltersHeaderComponent } from './video-filters-header.component' -import { VideoMiniatureComponent } from './video-miniature.component' -import { VideosListComponent } from './videos-list.component' -import { VideosSelectionComponent } from './videos-selection.component' - -@NgModule({ - imports: [ - SharedMainModule, - SharedFormModule, - SharedModerationModule, - SharedVideoPlaylistModule, - SharedThumbnailModule, - SharedGlobalIconModule, - SharedVideoLiveModule, - SharedVideoModule, - SharedActorImageModule - ], - - declarations: [ - VideoActionsDropdownComponent, - VideoDownloadComponent, - VideoMiniatureComponent, - VideosSelectionComponent, - VideoFiltersHeaderComponent, - VideosListComponent - ], - - exports: [ - VideoActionsDropdownComponent, - VideoDownloadComponent, - VideoMiniatureComponent, - VideosSelectionComponent, - VideoFiltersHeaderComponent, - VideosListComponent - ], - - providers: [ ] -}) -export class SharedVideoMiniatureModule { } diff --git a/client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts b/client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts index 806629601..f89dc50fb 100644 --- a/client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-actions-dropdown.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core' import { AuthService, ConfirmService, Notifier, ScreenService, ServerService } from '@app/core' import { BlocklistService, VideoBlockComponent, VideoBlockService, VideoReportComponent } from '@app/shared/shared-moderation' -import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap' +import { NgbDropdown, NgbDropdownAnchor, NgbDropdownMenu } from '@ng-bootstrap/ng-bootstrap' import { VideoCaption } from '@peertube/peertube-models' import { Actor, @@ -17,6 +17,8 @@ import { LiveStreamInformationComponent } from '../shared-video-live' import { VideoAddToPlaylistComponent } from '../shared-video-playlist' import { VideoDownloadComponent } from './video-download.component' import { of } from 'rxjs' +import { ActionDropdownComponent } from '../shared-main/buttons/action-dropdown.component' +import { NgIf } from '@angular/common' export type VideoActionsDisplayType = { playlist?: boolean @@ -37,7 +39,20 @@ export type VideoActionsDisplayType = { @Component({ selector: 'my-video-actions-dropdown', templateUrl: './video-actions-dropdown.component.html', - styleUrls: [ './video-actions-dropdown.component.scss' ] + styleUrls: [ './video-actions-dropdown.component.scss' ], + standalone: true, + imports: [ + NgIf, + NgbDropdown, + NgbDropdownAnchor, + NgbDropdownMenu, + VideoAddToPlaylistComponent, + ActionDropdownComponent, + VideoDownloadComponent, + VideoReportComponent, + VideoBlockComponent, + LiveStreamInformationComponent + ] }) export class VideoActionsDropdownComponent implements OnChanges { @ViewChild('playlistDropdown') playlistDropdown: NgbDropdown diff --git a/client/src/app/shared/shared-video-miniature/video-download.component.ts b/client/src/app/shared/shared-video-miniature/video-download.component.ts index 123f40b2f..1c6e288d5 100644 --- a/client/src/app/shared/shared-video-miniature/video-download.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-download.component.ts @@ -3,12 +3,26 @@ import { firstValueFrom } from 'rxjs' import { tap } from 'rxjs/operators' import { Component, ElementRef, Inject, Input, LOCALE_ID, ViewChild } from '@angular/core' import { HooksService } from '@app/core' -import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap' +import { + NgbModal, + NgbModalRef, + NgbNav, + NgbNavItem, + NgbNavLink, + NgbNavLinkBase, + NgbNavContent, + NgbNavOutlet, + NgbCollapse +} from '@ng-bootstrap/ng-bootstrap' import { logger } from '@root-helpers/logger' import { videoRequiresFileToken } from '@root-helpers/video' import { objectKeysTyped, pick } from '@peertube/peertube-core-utils' import { VideoCaption, VideoFile } from '@peertube/peertube-models' import { BytesPipe, NumberFormatterPipe, VideoDetails, VideoFileTokenService, VideoService } from '../shared-main' +import { InputTextComponent } from '../shared-forms/input-text.component' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' +import { FormsModule } from '@angular/forms' +import { NgIf, NgFor, KeyValuePipe } from '@angular/common' type DownloadType = 'video' | 'subtitles' type FileMetadata = { [key: string]: { label: string, value: string | number } } @@ -16,7 +30,23 @@ type FileMetadata = { [key: string]: { label: string, value: string | number } } @Component({ selector: 'my-video-download', templateUrl: './video-download.component.html', - styleUrls: [ './video-download.component.scss' ] + styleUrls: [ './video-download.component.scss' ], + standalone: true, + imports: [ + NgIf, + FormsModule, + GlobalIconComponent, + NgbNav, + NgFor, + NgbNavItem, + NgbNavLink, + NgbNavLinkBase, + NgbNavContent, + InputTextComponent, + NgbNavOutlet, + NgbCollapse, + KeyValuePipe + ] }) export class VideoDownloadComponent { @ViewChild('modal', { static: true }) modal: ElementRef diff --git a/client/src/app/shared/shared-video-miniature/video-filters-header.component.ts b/client/src/app/shared/shared-video-miniature/video-filters-header.component.ts index 2826408e7..ebea3a2a5 100644 --- a/client/src/app/shared/shared-video-miniature/video-filters-header.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-filters-header.component.ts @@ -1,19 +1,43 @@ import * as debug from 'debug' import { Subscription } from 'rxjs' import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core' -import { FormBuilder, FormGroup } from '@angular/forms' +import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms' import { AuthService } from '@app/core' import { ServerService } from '@app/core/server/server.service' import { UserRight } from '@peertube/peertube-models' import { PeertubeModalService } from '../shared-main' import { VideoFilters } from './video-filters.model' +import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component' +import { SelectCategoriesComponent } from '../shared-forms/select/select-categories.component' +import { SelectLanguagesComponent } from '../shared-forms/select/select-languages.component' +import { NgbCollapse } from '@ng-bootstrap/ng-bootstrap' +import { NgSelectModule } from '@ng-select/ng-select' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' +import { NgClass, NgIf, NgFor, NgTemplateOutlet } from '@angular/common' +import { RouterLink } from '@angular/router' const debugLogger = debug('peertube:videos:VideoFiltersHeaderComponent') @Component({ selector: 'my-video-filters-header', styleUrls: [ './video-filters-header.component.scss' ], - templateUrl: './video-filters-header.component.html' + templateUrl: './video-filters-header.component.html', + standalone: true, + imports: [ + RouterLink, + FormsModule, + ReactiveFormsModule, + NgClass, + NgIf, + GlobalIconComponent, + NgFor, + NgSelectModule, + NgbCollapse, + NgTemplateOutlet, + SelectLanguagesComponent, + SelectCategoriesComponent, + PeertubeCheckboxComponent + ] }) export class VideoFiltersHeaderComponent implements OnInit, OnDestroy { @Input() filters: VideoFilters diff --git a/client/src/app/shared/shared-video-miniature/video-miniature.component.ts b/client/src/app/shared/shared-video-miniature/video-miniature.component.ts index 325416156..ff47a6312 100644 --- a/client/src/app/shared/shared-video-miniature/video-miniature.component.ts +++ b/client/src/app/shared/shared-video-miniature/video-miniature.component.ts @@ -16,7 +16,14 @@ import { HTMLServerConfig, VideoExistInPlaylist, VideoPlaylistType, VideoPrivacy import { LinkType } from '../../../types/link.type' import { Video, VideoService } from '../shared-main' import { VideoPlaylistService } from '../shared-video-playlist' -import { VideoActionsDisplayType } from './video-actions-dropdown.component' +import { VideoActionsDisplayType, VideoActionsDropdownComponent } from './video-actions-dropdown.component' +import { RouterLink } from '@angular/router' +import { VideoViewsCounterComponent } from '../shared-video/video-views-counter.component' +import { DateToggleComponent } from '../shared-main/date/date-toggle.component' +import { LinkComponent } from '../shared-main/angular/link.component' +import { ActorAvatarComponent } from '../shared-actor-image/actor-avatar.component' +import { VideoThumbnailComponent } from '../shared-thumbnail/video-thumbnail.component' +import { NgClass, NgIf, NgFor } from '@angular/common' export type MiniatureDisplayOptions = { date?: boolean @@ -35,7 +42,20 @@ export type MiniatureDisplayOptions = { selector: 'my-video-miniature', styleUrls: [ './video-miniature.component.scss' ], templateUrl: './video-miniature.component.html', - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + NgClass, + VideoThumbnailComponent, + NgIf, + ActorAvatarComponent, + LinkComponent, + DateToggleComponent, + VideoViewsCounterComponent, + RouterLink, + NgFor, + VideoActionsDropdownComponent + ] }) export class VideoMiniatureComponent implements OnInit { @Input() user: User diff --git a/client/src/app/shared/shared-video-miniature/videos-list.component.ts b/client/src/app/shared/shared-video-miniature/videos-list.component.ts index 0b3304309..5bbe0a0e9 100644 --- a/client/src/app/shared/shared-video-miniature/videos-list.component.ts +++ b/client/src/app/shared/shared-video-miniature/videos-list.component.ts @@ -2,7 +2,7 @@ import * as debug from 'debug' import { fromEvent, Observable, Subject, Subscription } from 'rxjs' import { concatMap, debounceTime, map, switchMap } from 'rxjs/operators' import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core' -import { ActivatedRoute } from '@angular/router' +import { ActivatedRoute, RouterLinkActive, RouterLink } from '@angular/router' import { AuthService, ComponentPaginationLight, @@ -19,7 +19,13 @@ import { isLastMonth, isLastWeek, isThisMonth, isToday, isYesterday } from '@pee import { ResultList, UserRight, VideoSortField } from '@peertube/peertube-models' import { Syndication, Video } from '../shared-main' import { VideoFilters, VideoFilterScope } from './video-filters.model' -import { MiniatureDisplayOptions } from './video-miniature.component' +import { MiniatureDisplayOptions, VideoMiniatureComponent } from './video-miniature.component' +import { InfiniteScrollerDirective } from '../shared-main/angular/infinite-scroller.directive' +import { VideoFiltersHeaderComponent } from './video-filters-header.component' +import { ButtonComponent } from '../shared-main/buttons/button.component' +import { FeedComponent } from '../shared-main/feeds/feed.component' +import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap' +import { NgIf, NgClass, NgFor, NgTemplateOutlet } from '@angular/common' const debugLogger = debug('peertube:videos:VideosListComponent') @@ -45,7 +51,22 @@ enum GroupDate { @Component({ selector: 'my-videos-list', templateUrl: './videos-list.component.html', - styleUrls: [ './videos-list.component.scss' ] + styleUrls: [ './videos-list.component.scss' ], + standalone: true, + imports: [ + NgIf, + NgbTooltip, + NgClass, + FeedComponent, + NgFor, + RouterLinkActive, + RouterLink, + NgTemplateOutlet, + ButtonComponent, + VideoFiltersHeaderComponent, + InfiniteScrollerDirective, + VideoMiniatureComponent + ] }) export class VideosListComponent implements OnInit, OnChanges, OnDestroy { @Input() getVideosObservableFunction: (pagination: ComponentPaginationLight, filters: VideoFilters) => Observable> diff --git a/client/src/app/shared/shared-video-miniature/videos-selection.component.ts b/client/src/app/shared/shared-video-miniature/videos-selection.component.ts index 286b33dd4..0b80a6b97 100644 --- a/client/src/app/shared/shared-video-miniature/videos-selection.component.ts +++ b/client/src/app/shared/shared-video-miniature/videos-selection.component.ts @@ -5,14 +5,20 @@ import { logger } from '@root-helpers/logger' import { objectKeysTyped } from '@peertube/peertube-core-utils' import { ResultList, VideosExistInPlaylists, VideoSortField } from '@peertube/peertube-models' import { PeerTubeTemplateDirective, Video } from '../shared-main' -import { MiniatureDisplayOptions } from './video-miniature.component' +import { MiniatureDisplayOptions, VideoMiniatureComponent } from './video-miniature.component' +import { FormsModule } from '@angular/forms' +import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component' +import { InfiniteScrollerDirective } from '../shared-main/angular/infinite-scroller.directive' +import { NgIf, NgFor, NgTemplateOutlet } from '@angular/common' export type SelectionType = { [ id: number ]: boolean } @Component({ selector: 'my-videos-selection', templateUrl: './videos-selection.component.html', - styleUrls: [ './videos-selection.component.scss' ] + styleUrls: [ './videos-selection.component.scss' ], + standalone: true, + imports: [ NgIf, InfiniteScrollerDirective, NgFor, PeertubeCheckboxComponent, FormsModule, VideoMiniatureComponent, NgTemplateOutlet ] }) export class VideosSelectionComponent implements AfterContentInit { @Input() videosContainedInPlaylists: VideosExistInPlaylists diff --git a/client/src/app/shared/shared-video-playlist/index.ts b/client/src/app/shared/shared-video-playlist/index.ts index 63bb046c6..cacae6d0d 100644 --- a/client/src/app/shared/shared-video-playlist/index.ts +++ b/client/src/app/shared/shared-video-playlist/index.ts @@ -4,5 +4,3 @@ export * from './video-playlist-element.model' export * from './video-playlist-miniature.component' export * from './video-playlist.model' export * from './video-playlist.service' - -export * from './shared-video-playlist.module' diff --git a/client/src/app/shared/shared-video-playlist/shared-video-playlist.module.ts b/client/src/app/shared/shared-video-playlist/shared-video-playlist.module.ts deleted file mode 100644 index 9159eb711..000000000 --- a/client/src/app/shared/shared-video-playlist/shared-video-playlist.module.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedFormModule } from '../shared-forms' -import { SharedGlobalIconModule } from '../shared-icons' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { SharedThumbnailModule } from '../shared-thumbnail' -import { SharedVideoModule } from '../shared-video' -import { VideoAddToPlaylistComponent } from './video-add-to-playlist.component' -import { VideoPlaylistElementMiniatureComponent } from './video-playlist-element-miniature.component' -import { VideoPlaylistMiniatureComponent } from './video-playlist-miniature.component' -import { VideoPlaylistService } from './video-playlist.service' - -@NgModule({ - imports: [ - SharedMainModule, - SharedFormModule, - SharedThumbnailModule, - SharedGlobalIconModule, - SharedVideoModule - ], - - declarations: [ - VideoAddToPlaylistComponent, - VideoPlaylistElementMiniatureComponent, - VideoPlaylistMiniatureComponent - ], - - exports: [ - VideoAddToPlaylistComponent, - VideoPlaylistElementMiniatureComponent, - VideoPlaylistMiniatureComponent - ], - - providers: [ - VideoPlaylistService - ] -}) -export class SharedVideoPlaylistModule { } diff --git a/client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.ts b/client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.ts index 84173ba69..ff974edd9 100644 --- a/client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.ts +++ b/client/src/app/shared/shared-video-playlist/video-add-to-playlist.component.ts @@ -15,6 +15,11 @@ import { } from '@peertube/peertube-models' import { VIDEO_PLAYLIST_DISPLAY_NAME_VALIDATOR } from '../form-validators/video-playlist-validators' import { CachedPlaylist, VideoPlaylistService } from './video-playlist.service' +import { TimestampInputComponent } from '../shared-forms/timestamp-input.component' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' +import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component' +import { NgFor, NgClass, NgIf } from '@angular/common' +import { FormsModule, ReactiveFormsModule } from '@angular/forms' const debugLogger = debug('peertube:playlists:VideoAddToPlaylistComponent') @@ -37,7 +42,18 @@ type PlaylistSummary = { selector: 'my-video-add-to-playlist', styleUrls: [ './video-add-to-playlist.component.scss' ], templateUrl: './video-add-to-playlist.component.html', - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + FormsModule, + NgFor, + NgClass, + PeertubeCheckboxComponent, + GlobalIconComponent, + NgIf, + TimestampInputComponent, + ReactiveFormsModule + ] }) export class VideoAddToPlaylistComponent extends FormReactive implements OnInit, OnChanges, OnDestroy, DisableForReuseHook { @Input() video: Video diff --git a/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts b/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts index d03e11e34..f76c87813 100644 --- a/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts +++ b/client/src/app/shared/shared-video-playlist/video-playlist-element-miniature.component.ts @@ -1,18 +1,47 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core' import { AuthService, Notifier, ServerService } from '@app/core' import { Video, VideoService } from '@app/shared/shared-main' -import { NgbDropdown } from '@ng-bootstrap/ng-bootstrap' +import { NgbDropdown, NgbDropdownToggle, NgbDropdownMenu, NgbDropdownButtonItem, NgbDropdownItem } from '@ng-bootstrap/ng-bootstrap' import { secondsToTime } from '@peertube/peertube-core-utils' import { HTMLServerConfig, VideoPlaylistElementType, VideoPlaylistElementUpdate, VideoPrivacy } from '@peertube/peertube-models' import { VideoPlaylistElement } from './video-playlist-element.model' import { VideoPlaylist } from './video-playlist.model' import { VideoPlaylistService } from './video-playlist.service' +import { TimestampInputComponent } from '../shared-forms/timestamp-input.component' +import { FormsModule } from '@angular/forms' +import { PeertubeCheckboxComponent } from '../shared-forms/peertube-checkbox.component' +import { EditButtonComponent } from '../shared-main/buttons/edit-button.component' +import { VideoViewsCounterComponent } from '../shared-video/video-views-counter.component' +import { DateToggleComponent } from '../shared-main/date/date-toggle.component' +import { VideoThumbnailComponent } from '../shared-thumbnail/video-thumbnail.component' +import { GlobalIconComponent } from '../shared-icons/global-icon.component' +import { RouterLink } from '@angular/router' +import { NgClass, NgIf } from '@angular/common' @Component({ selector: 'my-video-playlist-element-miniature', styleUrls: [ './video-playlist-element-miniature.component.scss' ], templateUrl: './video-playlist-element-miniature.component.html', - changeDetection: ChangeDetectionStrategy.OnPush + changeDetection: ChangeDetectionStrategy.OnPush, + standalone: true, + imports: [ + NgClass, + RouterLink, + NgIf, + GlobalIconComponent, + VideoThumbnailComponent, + DateToggleComponent, + VideoViewsCounterComponent, + EditButtonComponent, + NgbDropdown, + NgbDropdownToggle, + NgbDropdownMenu, + NgbDropdownButtonItem, + NgbDropdownItem, + PeertubeCheckboxComponent, + FormsModule, + TimestampInputComponent + ] }) export class VideoPlaylistElementMiniatureComponent implements OnInit { @ViewChild('moreDropdown') moreDropdown: NgbDropdown diff --git a/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts b/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts index 225c4eb64..880bcb24a 100644 --- a/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts +++ b/client/src/app/shared/shared-video-playlist/video-playlist-miniature.component.ts @@ -2,11 +2,17 @@ import { LinkType } from 'src/types/link.type' import { Component, Input, OnInit } from '@angular/core' import { VideoPlaylist } from './video-playlist.model' import { MarkdownService } from '@app/core' +import { FromNowPipe } from '../shared-main/angular/from-now.pipe' +import { RouterLink } from '@angular/router' +import { LinkComponent } from '../shared-main/angular/link.component' +import { NgClass, NgIf } from '@angular/common' @Component({ selector: 'my-video-playlist-miniature', styleUrls: [ './video-playlist-miniature.component.scss' ], - templateUrl: './video-playlist-miniature.component.html' + templateUrl: './video-playlist-miniature.component.html', + standalone: true, + imports: [ NgClass, LinkComponent, NgIf, RouterLink, FromNowPipe ] }) export class VideoPlaylistMiniatureComponent implements OnInit { @Input() playlist: VideoPlaylist diff --git a/client/src/app/shared/shared-video/index.ts b/client/src/app/shared/shared-video/index.ts index 33a8b560f..5f08b467d 100644 --- a/client/src/app/shared/shared-video/index.ts +++ b/client/src/app/shared/shared-video/index.ts @@ -1 +1 @@ -export * from './shared-video.module' +export * from './video-views-counter.component' diff --git a/client/src/app/shared/shared-video/shared-video.module.ts b/client/src/app/shared/shared-video/shared-video.module.ts deleted file mode 100644 index cb6816576..000000000 --- a/client/src/app/shared/shared-video/shared-video.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core' -import { SharedMainModule } from '../shared-main/shared-main.module' -import { VideoViewsCounterComponent } from './video-views-counter.component' - -@NgModule({ - imports: [ - SharedMainModule - ], - - declarations: [ - VideoViewsCounterComponent - ], - - exports: [ - VideoViewsCounterComponent - ] -}) -export class SharedVideoModule { } diff --git a/client/src/app/shared/shared-video/video-views-counter.component.ts b/client/src/app/shared/shared-video/video-views-counter.component.ts index 17e6e37b9..c70c24a5b 100644 --- a/client/src/app/shared/shared-video/video-views-counter.component.ts +++ b/client/src/app/shared/shared-video/video-views-counter.component.ts @@ -1,10 +1,14 @@ import { Component, Input } from '@angular/core' import { Video } from '../shared-main' +import { NumberFormatterPipe } from '../shared-main/angular/number-formatter.pipe' +import { NgIf } from '@angular/common' @Component({ selector: 'my-video-views-counter', styleUrls: [ './video-views-counter.component.scss' ], - templateUrl: './video-views-counter.component.html' + templateUrl: './video-views-counter.component.html', + standalone: true, + imports: [ NgIf, NumberFormatterPipe ] }) export class VideoViewsCounterComponent { @Input() video: Video diff --git a/client/src/app/shared/standalone-notifications/user-notifications.component.ts b/client/src/app/shared/standalone-notifications/user-notifications.component.ts index bd1b89f00..d1cf583f3 100644 --- a/client/src/app/shared/standalone-notifications/user-notifications.component.ts +++ b/client/src/app/shared/standalone-notifications/user-notifications.component.ts @@ -2,16 +2,17 @@ import { Subject } from 'rxjs' import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core' import { ComponentPagination, hasMoreItems, Notifier } from '@app/core' import { AbuseState } from '@peertube/peertube-models' -import { SharedMainModule, UserNotification, UserNotificationService } from '../shared-main' +import { FromNowPipe, InfiniteScrollerDirective, UserNotification, UserNotificationService } from '../shared-main' import { CommonModule } from '@angular/common' -import { SharedGlobalIconModule } from '../shared-icons' +import { GlobalIconComponent } from '../shared-icons' +import { RouterLink } from '@angular/router' @Component({ selector: 'my-user-notifications', templateUrl: 'user-notifications.component.html', styleUrls: [ 'user-notifications.component.scss' ], standalone: true, - imports: [ CommonModule, SharedMainModule, SharedGlobalIconModule ] + imports: [ CommonModule, GlobalIconComponent, RouterLink, FromNowPipe, InfiniteScrollerDirective ] }) export class UserNotificationsComponent implements OnInit { @Input() ignoreLoadingBar = false diff --git a/client/src/main.ts b/client/src/main.ts index 159c47e86..5cd9b86b1 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,9 +1,47 @@ -import { ApplicationRef, enableProdMode } from '@angular/core' -import { enableDebugTools } from '@angular/platform-browser' -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' -import { AppModule } from './app/app.module' +import { ApplicationRef, enableProdMode, APP_INITIALIZER, importProvidersFrom } from '@angular/core' +import { enableDebugTools, BrowserModule, bootstrapApplication } from '@angular/platform-browser' import { environment } from './environments/environment' import { logger } from './root-helpers' +import { AppComponent } from './app/app.component' +import routes from './app/app.routes' +import { getFormProviders } from './app/shared/shared-forms' +import { getMainProviders } from './app/shared/shared-main' +import { ServiceWorkerModule } from '@angular/service-worker' +import { polyfillICU } from './app/helpers' +import { tap } from 'rxjs/operators' +import { + ServerService, + PluginService, + RedirectService, PreloadSelectedModulesList, + MenuGuards, + CustomReuseStrategy, + getCoreProviders +} from './app/core' +import { APP_BASE_HREF, registerLocaleData } from '@angular/common' +import localeOc from '@app/helpers/locales/oc' +import { RouteReuseStrategy, provideRouter, withInMemoryScrolling, withPreloading } from '@angular/router' +import { provideHttpClient } from '@angular/common/http' +import { LoadingBarModule } from '@ngx-loading-bar/core' +import { LoadingBarHttpClientModule } from '@ngx-loading-bar/http-client' +import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { ToastModule } from 'primeng/toast' + +registerLocaleData(localeOc, 'oc') + +export function loadConfigFactory (server: ServerService, pluginService: PluginService, redirectService: RedirectService) { + const initializeServices = () => { + redirectService.init() + pluginService.initializePlugins() + } + + return () => { + const result = server.loadHTMLConfig() + if (result) return result.pipe(tap(() => initializeServices())) + + initializeServices() + } +} if (environment.production) { enableProdMode() @@ -11,8 +49,57 @@ if (environment.production) { logger.registerServerSending(environment.apiUrl) -const bootstrap = () => platformBrowserDynamic() - .bootstrapModule(AppModule) +const bootstrap = () => bootstrapApplication(AppComponent, { + providers: [ + importProvidersFrom( + BrowserModule, + BrowserAnimationsModule, + ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }) + ), + + provideHttpClient(), + + importProvidersFrom( + LoadingBarHttpClientModule, + LoadingBarModule, + ToastModule, + NgbModalModule + ), + + getCoreProviders(), + getMainProviders(), + getFormProviders(), + + PreloadSelectedModulesList, + ...MenuGuards.guards, + { provide: RouteReuseStrategy, useClass: CustomReuseStrategy }, + + provideRouter(routes, + withPreloading(PreloadSelectedModulesList), + withInMemoryScrolling({ + anchorScrolling: 'disabled', + // Redefined in app component + scrollPositionRestoration: 'disabled' + }) + ), + + { + provide: APP_BASE_HREF, + useValue: '/' + }, + { + provide: APP_INITIALIZER, + useFactory: loadConfigFactory, + deps: [ ServerService, PluginService, RedirectService ], + multi: true + }, + { + provide: APP_INITIALIZER, + useFactory: () => polyfillICU, + multi: true + } + ] +}) .then(bootstrapModule => { if (!environment.production) { const applicationRef = bootstrapModule.injector.get(ApplicationRef)