Migrate to bootstrap 5
This commit is contained in:
parent
b89b0bfce9
commit
4c8749cb9e
|
@ -48,7 +48,7 @@
|
|||
"@babel/core": "^7.15.0",
|
||||
"@babel/preset-env": "^7.15.0",
|
||||
"@neos21/bootstrap3-glyphicons": "^1.0.1",
|
||||
"@ng-bootstrap/ng-bootstrap": "^11.0.0",
|
||||
"@ng-bootstrap/ng-bootstrap": "^12.1.2",
|
||||
"@ng-select/ng-select": "^8.1.1",
|
||||
"@ngx-loading-bar/core": "^6.0.0",
|
||||
"@ngx-loading-bar/http-client": "^6.0.0",
|
||||
|
@ -57,6 +57,7 @@
|
|||
"@peertube/p2p-media-loader-hlsjs": "^1.0.8",
|
||||
"@peertube/videojs-contextmenu": "^5.5.0",
|
||||
"@peertube/xliffmerge": "^2.0.3",
|
||||
"@popperjs/core": "^2.11.5",
|
||||
"@types/chart.js": "^2.9.16",
|
||||
"@types/core-js": "^2.5.2",
|
||||
"@types/debug": "^4.1.5",
|
||||
|
@ -79,7 +80,7 @@
|
|||
"angular2-hotkeys": "^13.1.0",
|
||||
"angularx-qrcode": "13.0.3",
|
||||
"babel-loader": "^8.2.2",
|
||||
"bootstrap": "^4.1.3",
|
||||
"bootstrap": "^5.1.3",
|
||||
"buffer": "^6.0.3",
|
||||
"cache-chunk-store": "^3.0.0",
|
||||
"chart.js": "^3.5.1",
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<div class="row">
|
||||
<h1 class="sr-only" i18n>Follows</h1>
|
||||
<h1 class="visually-hidden" i18n>Follows</h1>
|
||||
|
||||
<div class="col-xl-6 col-md-12">
|
||||
<h2 i18n class="subtitle">Follower instances ({{ followersPagination.totalItems }})</h2>
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ a {
|
|||
|
||||
.no-results {
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.show-more {
|
||||
|
|
|
@ -8,9 +8,9 @@
|
|||
</div>
|
||||
|
||||
<div class="instance-badges" *ngIf="categories.length !== 0 || languages.length !== 0">
|
||||
<span *ngFor="let category of categories" class="badge badge-primary category">{{ category }}</span>
|
||||
<span *ngFor="let category of categories" class="pt-badge badge-primary">{{ category }}</span>
|
||||
|
||||
<span *ngFor="let language of languages" class="badge badge-secondary language">{{ language }}</span>
|
||||
<span *ngFor="let language of languages" class="pt-badge badge-secondary">{{ language }}</span>
|
||||
</div>
|
||||
|
||||
<div class="short-description">
|
||||
|
@ -204,7 +204,7 @@
|
|||
</div>
|
||||
|
||||
<div class="col-md-12 col-xl-6" myPluginSelector pluginSelectorId="about-instance-features">
|
||||
<h2 class="sr-only" i18n>FEATURES</h2>
|
||||
<h2 class="visually-hidden" i18n>FEATURES</h2>
|
||||
<my-instance-features-table></my-instance-features-table>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -19,18 +19,11 @@
|
|||
}
|
||||
|
||||
.instance-badges {
|
||||
font-size: 16px;
|
||||
margin-bottom: 20px;
|
||||
font-size: 16px;
|
||||
|
||||
.badge {
|
||||
.pt-badge {
|
||||
@include margin-right(5px);
|
||||
|
||||
font-size: 12px;
|
||||
font-weight: $font-semibold;
|
||||
|
||||
&.category {
|
||||
background-color: pvar(--mainColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div class="row">
|
||||
<div>
|
||||
<div class="sub-menu" [ngClass]="{ 'sub-menu-fixed': !isBroadcastMessageDisplayed }">
|
||||
|
||||
<div class="links">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<h1 class="sr-only" i18n>Video channels</h1>
|
||||
<h1 class="visually-hidden" i18n>Video channels</h1>
|
||||
|
||||
<div class="margin-content">
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
(userChanged)="onUserChanged()" (userDeleted)="onUserDeleted()"
|
||||
></my-user-moderation-dropdown>
|
||||
|
||||
<span *ngIf="accountUser?.blocked" [ngbTooltip]="accountUser.blockedReason" class="badge badge-danger" i18n>Banned</span>
|
||||
<span *ngIf="accountUser?.blocked" [ngbTooltip]="accountUser.blockedReason" class="pt-badge badge-danger" i18n>Banned</span>
|
||||
|
||||
<my-account-block-badges [account]="account"></my-account-block-badges>
|
||||
</div>
|
||||
|
|
|
@ -93,6 +93,10 @@ my-user-moderation-dropdown {
|
|||
}
|
||||
}
|
||||
|
||||
.pt-badge {
|
||||
@include margin-right(5px);
|
||||
}
|
||||
|
||||
@media screen and (max-width: $small-view) {
|
||||
.root {
|
||||
--myGlobalTopPadding: 45px;
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<ng-container [formGroup]="form">
|
||||
|
||||
<div class="form-row mt-5"> <!-- cache grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- cache grid -->
|
||||
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">CACHE</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Some files are not federated, and fetched when necessary. Define their caching policies.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<ng-container formGroupName="cache">
|
||||
<div class="form-group" formGroupName="previews">
|
||||
<label i18n for="cachePreviewsSize">Number of previews to keep in cache</label>
|
||||
|
@ -57,8 +57,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- cache grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- cache grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div class="anchor" id="customizations"></div> <!-- customizations anchor -->
|
||||
<div i18n class="inner-form-title">CUSTOMIZATIONS</div>
|
||||
<div i18n class="inner-form-description">
|
||||
|
@ -66,8 +66,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<ng-container formGroupName="instance">
|
||||
<ng-container formGroupName="customizations">
|
||||
<div class="form-group">
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
<ng-container [formGroup]="form">
|
||||
<div class="form-row mt-5"> <!-- appearance grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- appearance grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">APPEARANCE</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Use <a routerLink="/admin/plugins">plugins & themes</a> for more involved changes, or <a routerLink="/admin/config/edit-custom" fragment="advanced-configuration">add slight customizations</a>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="theme">
|
||||
<div class="form-group">
|
||||
|
@ -88,15 +88,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- broadcast grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- broadcast grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">BROADCAST MESSAGE</div>
|
||||
<div i18n class="inner-for-description">
|
||||
Display a message on your instance
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="broadcastMessage">
|
||||
|
||||
|
@ -144,15 +144,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- new users grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- new users grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">NEW USERS</div>
|
||||
<div i18n class="inner-for-description">
|
||||
Manage <a routerLink="/admin/users">users</a> to set their quota individually.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="signup">
|
||||
<div class="form-group">
|
||||
|
@ -239,20 +239,20 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- videos grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- videos grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">VIDEOS</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="import">
|
||||
|
||||
<ng-container formGroupName="videos">
|
||||
|
||||
<div class="form-group mt-4">
|
||||
<div class="form-group">
|
||||
<label i18n for="importConcurrency">Import jobs concurrency</label>
|
||||
<span i18n class="muted ml-1">allows to import multiple videos in parallel. ⚠️ Requires a PeerTube restart.</span>
|
||||
<span i18n class="muted ms-1">allows to import multiple videos in parallel. ⚠️ Requires a PeerTube restart.</span>
|
||||
|
||||
<div class="number-with-unit">
|
||||
<input type="number" name="importConcurrency" formControlName="concurrency" />
|
||||
|
@ -309,12 +309,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- video channels grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- video channels grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">VIDEO CHANNELS</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<div class="form-group" formGroupName="videoChannels">
|
||||
<label i18n for="videoChannelsMaxPerUser">Max video channels per user</label>
|
||||
|
||||
|
@ -331,12 +331,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- search grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- search grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">SEARCH</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="search">
|
||||
<ng-container formGroupName="remoteUri">
|
||||
|
@ -420,15 +420,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- federation grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- federation grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">FEDERATION</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Manage <a routerLink="/admin/follows">relations</a> with other instances.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="followers">
|
||||
<ng-container formGroupName="instance">
|
||||
|
@ -499,12 +499,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- administrators grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- administrators grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">ADMINISTRATORS</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="form-group" formGroupName="admin">
|
||||
<label i18n for="adminEmail">Admin email</label>
|
||||
|
@ -527,8 +527,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- Twitter grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- Twitter grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">TWITTER</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Provide the Twitter account representing your instance to improve link previews.
|
||||
|
@ -536,7 +536,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="services">
|
||||
<ng-container formGroupName="twitter">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<h1 class="sr-only" i18n>Configuration</h1>
|
||||
<h1 class="visually-hidden" i18n>Configuration</h1>
|
||||
|
||||
<div class="alert alert-warning" *ngIf="!isUpdateAllowed()" i18n>
|
||||
Updating instance configuration from the web interface is disabled by the system administrator.
|
||||
|
@ -64,7 +64,7 @@
|
|||
|
||||
<div [ngbNavOutlet]="nav"></div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- submit placement block -->
|
||||
<div class="row mt-4"> <!-- submit placement block -->
|
||||
<div class="col-md-7 col-xl-5"></div>
|
||||
<div class="col-md-5 col-xl-5">
|
||||
|
||||
|
|
|
@ -102,11 +102,6 @@ input[disabled] {
|
|||
opacity: 0.5;
|
||||
}
|
||||
|
||||
|
||||
.form-group-right {
|
||||
padding-top: 2px;
|
||||
}
|
||||
|
||||
ngb-tabset:not(.previews) ::ng-deep {
|
||||
.nav-link {
|
||||
font-size: 105%;
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
<ng-container formGroupName="instanceCustomHomepage">
|
||||
|
||||
<div class="form-row mt-5"> <!-- homepage grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- homepage grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">INSTANCE HOMEPAGE</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="instanceCustomHomepageContent">Homepage</label>
|
||||
|
|
|
@ -2,13 +2,12 @@
|
|||
|
||||
<ng-container formGroupName="instance">
|
||||
|
||||
<div class="form-row mt-5"> <!-- instance grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- instance grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">INSTANCE</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<div class="form-group">
|
||||
<label i18n for="instanceName">Name</label>
|
||||
|
||||
|
@ -77,16 +76,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- moderation & nsfw grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- moderation & nsfw grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">MODERATION & NSFW</div>
|
||||
<div i18n class="inner-for-description">
|
||||
<div i18row="inner-for-description">
|
||||
Manage <a routerLink="/admin/users">users</a> to build a moderation team.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<div class="form-group">
|
||||
<my-peertube-checkbox inputName="instanceIsNSFW" formControlName="isNSFW">
|
||||
<ng-template ptTemplate="label">
|
||||
|
@ -162,12 +160,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- you and your instance grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- you and your instance grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">YOU AND YOUR INSTANCE</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="instanceAdministrator">Who is behind the instance?</label><my-help helpType="markdownText"></my-help>
|
||||
|
@ -220,12 +218,12 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- other information grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- other information grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">OTHER INFORMATION</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="instanceHardwareInformation">What server/hardware does the instance run on?</label>
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<ng-container [formGroup]="form">
|
||||
|
||||
<div class="form-row mt-5">
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5">
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">LIVE</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Enable users of your instance to stream live.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="live">
|
||||
|
||||
|
@ -89,15 +89,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row"> <!-- transcoding live streams grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row"> <!-- transcoding live streams grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">TRANSCODING</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Same as VOD transcoding, transcoding live streams so that they are in a streamable form that any device can play. Requires a beefy CPU, and then some.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="live">
|
||||
<ng-container formGroupName="transcoding">
|
||||
|
@ -115,7 +115,7 @@
|
|||
<div class="form-group" [ngClass]="getDisabledLiveTranscodingClass()">
|
||||
<label i18n for="liveTranscodingThreads">Live resolutions to generate</label>
|
||||
|
||||
<div class="ml-2 mt-2 d-flex flex-column">
|
||||
<div class="ms-2 mt-2 d-flex flex-column">
|
||||
<ng-container formGroupName="resolutions">
|
||||
|
||||
<div class="form-group" *ngFor="let resolution of liveResolutions">
|
||||
|
@ -136,7 +136,7 @@
|
|||
<div class="form-group" [ngClass]="getDisabledLiveTranscodingClass()">
|
||||
<label i18n for="liveTranscodingThreads">Live transcoding threads</label>
|
||||
|
||||
<span class="muted ml-1">
|
||||
<span class="muted ms-1">
|
||||
<ng-container *ngIf="getTotalTranscodingThreads().atMost" i18n>
|
||||
will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with VOD transcoding
|
||||
</ng-container>
|
||||
|
@ -157,7 +157,7 @@
|
|||
|
||||
<div class="form-group mt-4" [ngClass]="getDisabledLiveTranscodingClass()">
|
||||
<label i18n for="liveTranscodingProfile">Live transcoding profile</label>
|
||||
<span class="muted ml-1" i18n>new live transcoding profiles can be added by PeerTube plugins</span>
|
||||
<span class="muted ms-1" i18n>new live transcoding profiles can be added by PeerTube plugins</span>
|
||||
|
||||
<my-select-options
|
||||
id="liveTranscodingProfile"
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<ng-container [formGroup]="form">
|
||||
|
||||
<div class="form-row mt-4"> <!-- transcoding grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3"></div>
|
||||
<div class="form-group form-group-right col-12 col-lg-8">
|
||||
<div class="row mt-4"> <!-- transcoding grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3"></div>
|
||||
<div class="col-12 col-lg-8">
|
||||
|
||||
<div class="callout callout-info">
|
||||
<span i18n>
|
||||
|
@ -21,8 +21,8 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-2"> <!-- transcoding grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- transcoding grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">TRANSCODING</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Process uploaded videos so that they are in a streamable form that any device can play. Though costly in
|
||||
|
@ -30,11 +30,11 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="transcoding">
|
||||
|
||||
<div class="form-group mb-0 col-12 col-xl-11">
|
||||
<div class="col-12 col-xl-11">
|
||||
<my-peertube-checkbox inputName="transcodingEnabled" formControlName="enabled" [recommended]="true">
|
||||
<ng-template ptTemplate="label">
|
||||
<ng-container i18n>Transcoding enabled</ng-container>
|
||||
|
@ -115,7 +115,7 @@
|
|||
<div class="form-group" [ngClass]="getTranscodingDisabledClass()">
|
||||
<label i18n>Resolutions to generate per enabled format</label>
|
||||
|
||||
<div class="ml-2 mt-2 d-flex flex-column">
|
||||
<div class="ms-2 mt-2 d-flex flex-column">
|
||||
<ng-container formGroupName="resolutions">
|
||||
<div class="form-group" *ngFor="let resolution of resolutions">
|
||||
<my-peertube-checkbox
|
||||
|
@ -142,7 +142,7 @@
|
|||
|
||||
<div class="form-group mt-4" [ngClass]="getTranscodingDisabledClass()">
|
||||
<label i18n for="transcodingThreads">Transcoding threads</label>
|
||||
<span class="muted ml-1">
|
||||
<span class="muted ms-1">
|
||||
<ng-container *ngIf="getTotalTranscodingThreads().atMost" i18n>
|
||||
will claim at most {{ getTotalTranscodingThreads().value }} {{ getTotalTranscodingThreads().unit }} with live transcoding
|
||||
</ng-container>
|
||||
|
@ -162,9 +162,9 @@
|
|||
<div *ngIf="formErrors.transcoding.threads" class="form-error">{{ formErrors.transcoding.threads }}</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-4" [ngClass]="getTranscodingDisabledClass()">
|
||||
<div class="form-group" [ngClass]="getTranscodingDisabledClass()">
|
||||
<label i18n for="transcodingConcurrency">Transcoding jobs concurrency</label>
|
||||
<span class="muted ml-1" i18n>allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart</span>
|
||||
<span class="muted ms-1" i18n>allows to transcode multiple files in parallel. ⚠️ Requires a PeerTube restart</span>
|
||||
|
||||
<div class="number-with-unit">
|
||||
<input type="number" name="transcodingConcurrency" formControlName="concurrency" />
|
||||
|
@ -174,9 +174,9 @@
|
|||
<div *ngIf="formErrors.transcoding.concurrency" class="form-error">{{ formErrors.transcoding.concurrency }}</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group mt-4" [ngClass]="getTranscodingDisabledClass()">
|
||||
<div class="form-group" [ngClass]="getTranscodingDisabledClass()">
|
||||
<label i18n for="transcodingProfile">Transcoding profile</label>
|
||||
<span class="muted ml-1" i18n>new transcoding profiles can be added by PeerTube plugins</span>
|
||||
<span class="muted ms-1" i18n>new transcoding profiles can be added by PeerTube plugins</span>
|
||||
|
||||
<my-select-options
|
||||
id="transcodingProfile"
|
||||
|
@ -193,15 +193,15 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-2"> <!-- video studio grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-2"> <!-- video studio grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div i18n class="inner-form-title">VIDEO STUDIO</div>
|
||||
<div i18n class="inner-form-description">
|
||||
Allows your users to edit their video (cut, add intro/outro, add a watermark etc)
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group form-group-right col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<ng-container formGroupName="videoStudio">
|
||||
<div class="form-group" [ngClass]="getTranscodingDisabledClass()">
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
>
|
||||
<ng-template pTemplate="caption">
|
||||
<div class="caption">
|
||||
<div class="ml-auto">
|
||||
<div class="ms-auto">
|
||||
<my-advanced-input-filter (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -46,10 +46,10 @@
|
|||
</td>
|
||||
|
||||
<td *ngIf="follow.state === 'accepted'">
|
||||
<span class="badge badge-green" i18n>Accepted</span>
|
||||
<span class="pt-badge badge-green" i18n>Accepted</span>
|
||||
</td>
|
||||
<td *ngIf="follow.state === 'pending'">
|
||||
<span class="badge badge-yellow" i18n>Pending</span>
|
||||
<span class="pt-badge badge-yellow" i18n>Pending</span>
|
||||
</td>
|
||||
|
||||
<td>{{ follow.score }}</td>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
</a>
|
||||
</div>
|
||||
|
||||
<div class="ml-auto">
|
||||
<div class="ms-auto">
|
||||
<my-advanced-input-filter (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -48,10 +48,10 @@
|
|||
</td>
|
||||
|
||||
<td *ngIf="follow.state === 'accepted'">
|
||||
<span class="badge badge-green" i18n>Accepted</span>
|
||||
<span class="pt-badge badge-green" i18n>Accepted</span>
|
||||
</td>
|
||||
<td *ngIf="follow.state === 'pending'">
|
||||
<span class="badge badge-yellow" i18n>Pending</span>
|
||||
<span class="pt-badge badge-yellow" i18n>Pending</span>
|
||||
</td>
|
||||
|
||||
<td>{{ follow.createdAt | date: 'short' }}</td>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
>
|
||||
<ng-template pTemplate="caption">
|
||||
<div class="caption">
|
||||
<div class="ml-auto">
|
||||
<div class="ms-auto">
|
||||
<my-advanced-input-filter [filters]="inputFilters" (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -53,11 +53,11 @@
|
|||
</td>
|
||||
|
||||
<td>
|
||||
<span *ngIf="videoBlock.video.nsfw" class="badge badge-red" i18n>NSFW</span>
|
||||
<span *ngIf="videoBlock.video.nsfw" class="pt-badge badge-red" i18n>NSFW</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span *ngIf="videoBlock.unfederated" class="badge badge-blue" i18n>Unfederated</span>
|
||||
<span *ngIf="videoBlock.unfederated" class="pt-badge badge-blue" i18n>Unfederated</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</my-action-dropdown>
|
||||
</div>
|
||||
|
||||
<div class="ml-auto right-form">
|
||||
<div class="ms-auto right-form">
|
||||
<my-advanced-input-filter [filters]="inputFilters" (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
|
||||
<my-button i18n-label label="Refresh" icon="refresh" (click)="reloadData()"></my-button>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
</div>
|
||||
</ng-template>
|
||||
|
||||
<div class="form-row" *ngIf="!isInBigView()"> <!-- hidden on large screens, as it is then displayed on the right side of the form -->
|
||||
<div class="row d-xxl-none"> <!-- hidden on large screens, as it is then displayed on the right side of the form -->
|
||||
<div class="col-12 col-xl-3"></div>
|
||||
|
||||
<div class="col-12 col-xl-9">
|
||||
|
@ -67,8 +67,8 @@
|
|||
|
||||
<div *ngIf="error" class="alert alert-danger">{{ error }}</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- user grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-4"> <!-- user grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div class="anchor" id="user"></div> <!-- user anchor -->
|
||||
<div *ngIf="isCreation()" class="account-title" i18n>NEW USER</div>
|
||||
<div *ngIf="!isCreation() && user" class="account-title">
|
||||
|
@ -76,150 +76,150 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9" [ngClass]="{ 'form-row': isInBigView() }">
|
||||
|
||||
<form role="form" (ngSubmit)="formValidated()" [formGroup]="form" [ngClass]="{ 'col-5': isInBigView() }">
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="username">Username</label>
|
||||
<input
|
||||
type="text" id="username" i18n-placeholder placeholder="john" class="form-control"
|
||||
formControlName="username" [ngClass]="{ 'input-error': formErrors['username'] }"
|
||||
>
|
||||
<div *ngIf="formErrors.username" class="form-error">
|
||||
{{ formErrors.username }}
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<div class="row">
|
||||
<form class="col" role="form" (ngSubmit)="formValidated()" [formGroup]="form">
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="username">Username</label>
|
||||
<input
|
||||
type="text" id="username" i18n-placeholder placeholder="john" class="form-control"
|
||||
formControlName="username" [ngClass]="{ 'input-error': formErrors['username'] }"
|
||||
>
|
||||
<div *ngIf="formErrors.username" class="form-error">
|
||||
{{ formErrors.username }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="channelName">Channel name</label>
|
||||
<input
|
||||
type="text" id="channelName" i18n-placeholder placeholder="john_channel" class="form-control"
|
||||
formControlName="channelName" [ngClass]="{ 'input-error': formErrors['channelName'] }"
|
||||
>
|
||||
<div *ngIf="formErrors.channelName" class="form-error">
|
||||
{{ formErrors.channelName }}
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="channelName">Channel name</label>
|
||||
<input
|
||||
type="text" id="channelName" i18n-placeholder placeholder="john_channel" class="form-control"
|
||||
formControlName="channelName" [ngClass]="{ 'input-error': formErrors['channelName'] }"
|
||||
>
|
||||
<div *ngIf="formErrors.channelName" class="form-error">
|
||||
{{ formErrors.channelName }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="email">Email</label>
|
||||
<input
|
||||
type="text" id="email" i18n-placeholder placeholder="mail@example.com" class="form-control"
|
||||
formControlName="email" [ngClass]="{ 'input-error': formErrors['email'] }"
|
||||
autocomplete="off" [readonly]="user && user.pluginAuth !== null"
|
||||
>
|
||||
<div *ngIf="formErrors.email" class="form-error">
|
||||
{{ formErrors.email }}
|
||||
<div class="form-group">
|
||||
<label i18n for="email">Email</label>
|
||||
<input
|
||||
type="text" id="email" i18n-placeholder placeholder="mail@example.com" class="form-control"
|
||||
formControlName="email" [ngClass]="{ 'input-error': formErrors['email'] }"
|
||||
autocomplete="off" [readonly]="user && user.pluginAuth !== null"
|
||||
>
|
||||
<div *ngIf="formErrors.email" class="form-error">
|
||||
{{ formErrors.email }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="password">Password</label>
|
||||
<my-help *ngIf="isPasswordOptional()">
|
||||
<ng-template ptTemplate="customHtml">
|
||||
<ng-container i18n>
|
||||
If you leave the password empty, an email will be sent to the user.
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</my-help>
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="password">Password</label>
|
||||
<my-help *ngIf="isPasswordOptional()">
|
||||
<ng-template ptTemplate="customHtml">
|
||||
<ng-container i18n>
|
||||
If you leave the password empty, an email will be sent to the user.
|
||||
</ng-container>
|
||||
</ng-template>
|
||||
</my-help>
|
||||
|
||||
<my-input-toggle-hidden
|
||||
formControlName="password" inputId="password" [ngClass]="{ 'input-error': formErrors['password'] }" autocomplete="new-password"
|
||||
></my-input-toggle-hidden>
|
||||
<my-input-toggle-hidden
|
||||
formControlName="password" inputId="password" [ngClass]="{ 'input-error': formErrors['password'] }" autocomplete="new-password"
|
||||
></my-input-toggle-hidden>
|
||||
|
||||
<div *ngIf="formErrors.password" class="form-error">
|
||||
{{ formErrors.password }}
|
||||
<div *ngIf="formErrors.password" class="form-error">
|
||||
{{ formErrors.password }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="role">Role</label>
|
||||
<div class="peertube-select-container">
|
||||
<select id="role" formControlName="role" class="form-control">
|
||||
<option *ngFor="let role of roles" [value]="role.value">
|
||||
{{ role.label }}
|
||||
</option>
|
||||
<div class="form-group">
|
||||
<label i18n for="role">Role</label>
|
||||
<div class="peertube-select-container">
|
||||
<select id="role" formControlName="role" class="form-control">
|
||||
<option *ngFor="let role of roles" [value]="role.value">
|
||||
{{ role.label }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div *ngIf="formErrors.role" class="form-error">
|
||||
{{ formErrors.role }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="videoQuota">Video quota</label>
|
||||
|
||||
<my-select-custom-value
|
||||
id="videoQuota"
|
||||
[items]="videoQuotaOptions"
|
||||
formControlName="videoQuota"
|
||||
i18n-inputSuffix inputSuffix="bytes" inputType="number"
|
||||
[clearable]="false"
|
||||
></my-select-custom-value>
|
||||
|
||||
<div i18n class="transcoding-information" *ngIf="isTranscodingInformationDisplayed()">
|
||||
Transcoding is enabled. The video quota only takes into account <strong>original</strong> video size. <br />
|
||||
At most, this user could upload ~ {{ computeQuotaWithTranscoding() | bytes: 0 }}.
|
||||
</div>
|
||||
|
||||
<div *ngIf="formErrors.videoQuota" class="form-error">
|
||||
{{ formErrors.videoQuota }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="videoQuotaDaily">Daily video quota</label>
|
||||
|
||||
<my-select-custom-value
|
||||
id="videoQuotaDaily"
|
||||
[items]="videoQuotaDailyOptions"
|
||||
formControlName="videoQuotaDaily"
|
||||
i18n-inputSuffix inputSuffix="bytes" inputType="number"
|
||||
[clearable]="false"
|
||||
></my-select-custom-value>
|
||||
|
||||
<div *ngIf="formErrors.videoQuotaDaily" class="form-error">
|
||||
{{ formErrors.videoQuotaDaily }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" *ngIf="!isCreation() && getAuthPlugins().length !== 0">
|
||||
<label i18n for="pluginAuth">Auth plugin</label>
|
||||
|
||||
<div class="peertube-select-container">
|
||||
<select id="pluginAuth" formControlName="pluginAuth" class="form-control">
|
||||
<option [value]="null" i18n>None (local authentication)</option>
|
||||
<option *ngFor="let authPlugin of getAuthPlugins()" [value]="authPlugin">{{ authPlugin }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div *ngIf="formErrors.role" class="form-error">
|
||||
{{ formErrors.role }}
|
||||
<div class="form-group">
|
||||
<my-peertube-checkbox
|
||||
inputName="byPassAutoBlock" formControlName="byPassAutoBlock"
|
||||
i18n-labelText labelText="Doesn't need review before a video goes public"
|
||||
></my-peertube-checkbox>
|
||||
</div>
|
||||
|
||||
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
|
||||
</form>
|
||||
|
||||
<div class="d-none d-xxl-block col-7">
|
||||
<ng-template *ngTemplateOutlet="dashboard"></ng-template>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="videoQuota">Video quota</label>
|
||||
|
||||
<my-select-custom-value
|
||||
id="videoQuota"
|
||||
[items]="videoQuotaOptions"
|
||||
formControlName="videoQuota"
|
||||
i18n-inputSuffix inputSuffix="bytes" inputType="number"
|
||||
[clearable]="false"
|
||||
></my-select-custom-value>
|
||||
|
||||
<div i18n class="transcoding-information" *ngIf="isTranscodingInformationDisplayed()">
|
||||
Transcoding is enabled. The video quota only takes into account <strong>original</strong> video size. <br />
|
||||
At most, this user could upload ~ {{ computeQuotaWithTranscoding() | bytes: 0 }}.
|
||||
</div>
|
||||
|
||||
<div *ngIf="formErrors.videoQuota" class="form-error">
|
||||
{{ formErrors.videoQuota }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="videoQuotaDaily">Daily video quota</label>
|
||||
|
||||
<my-select-custom-value
|
||||
id="videoQuotaDaily"
|
||||
[items]="videoQuotaDailyOptions"
|
||||
formControlName="videoQuotaDaily"
|
||||
i18n-inputSuffix inputSuffix="bytes" inputType="number"
|
||||
[clearable]="false"
|
||||
></my-select-custom-value>
|
||||
|
||||
<div *ngIf="formErrors.videoQuotaDaily" class="form-error">
|
||||
{{ formErrors.videoQuotaDaily }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group" *ngIf="!isCreation() && getAuthPlugins().length !== 0">
|
||||
<label i18n for="pluginAuth">Auth plugin</label>
|
||||
|
||||
<div class="peertube-select-container">
|
||||
<select id="pluginAuth" formControlName="pluginAuth" class="form-control">
|
||||
<option [value]="null" i18n>None (local authentication)</option>
|
||||
<option *ngFor="let authPlugin of getAuthPlugins()" [value]="authPlugin">{{ authPlugin }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<my-peertube-checkbox
|
||||
inputName="byPassAutoBlock" formControlName="byPassAutoBlock"
|
||||
i18n-labelText labelText="Doesn't need review before a video goes public"
|
||||
></my-peertube-checkbox>
|
||||
</div>
|
||||
|
||||
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
|
||||
</form>
|
||||
|
||||
<div *ngIf="isInBigView()" class="col-7">
|
||||
<ng-template *ngTemplateOutlet="dashboard"></ng-template>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div *ngIf="!isCreation() && user && user.pluginAuth === null" class="form-row mt-4"> <!-- danger zone grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div *ngIf="!isCreation() && user && user.pluginAuth === null" class="row mt-4"> <!-- danger zone grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div class="anchor" id="danger"></div> <!-- danger zone anchor -->
|
||||
<div i18n class="account-title account-title-danger">DANGER ZONE</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9" [ngClass]="{ 'form-row': isInBigView() }">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="danger-zone">
|
||||
<div class="form-group reset-password-email">
|
||||
|
|
|
@ -46,10 +46,6 @@ export abstract class UserEdit extends FormReactive implements OnInit {
|
|||
.concat(this.serverConfig.plugin.registeredExternalAuths.map(p => p.npmName))
|
||||
}
|
||||
|
||||
isInBigView () {
|
||||
return this.screenService.getWindowInnerWidth() > 1600
|
||||
}
|
||||
|
||||
buildRoles () {
|
||||
const authUser = this.auth.getUser()
|
||||
|
||||
|
|
|
@ -1,20 +1,16 @@
|
|||
<form role="form" (ngSubmit)="formValidated()" [formGroup]="form">
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<input id="password" [attr.type]="showPassword ? 'text' : 'password'" class="form-control"
|
||||
formControlName="password" [ngClass]="{ 'input-error': formErrors['password'] }"
|
||||
>
|
||||
<button class="btn btn-sm btn-outline-secondary" (click)="togglePasswordVisibility()" type="button">
|
||||
<ng-container *ngIf="!showPassword" i18n>Show</ng-container>
|
||||
<ng-container *ngIf="!!showPassword" i18n>Hide</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="input-group">
|
||||
<input id="password" [attr.type]="showPassword ? 'text' : 'password'" class="form-control"
|
||||
formControlName="password" [ngClass]="{ 'input-error': formErrors['password'] }"
|
||||
>
|
||||
<div class="input-group-append">
|
||||
<button class="btn btn-sm btn-outline-secondary" (click)="togglePasswordVisibility()" type="button">
|
||||
<ng-container *ngIf="!showPassword" i18n>Show</ng-container>
|
||||
<ng-container *ngIf="!!showPassword" i18n>Hide</ng-container>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div *ngIf="formErrors.password" class="form-error">
|
||||
{{ formErrors.password }}
|
||||
</div>
|
||||
<div *ngIf="formErrors.password" class="form-error">
|
||||
{{ formErrors.password }}
|
||||
</div>
|
||||
|
||||
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
|
||||
|
|
|
@ -1,13 +1,9 @@
|
|||
@use '_variables' as *;
|
||||
@use '_mixins' as *;
|
||||
|
||||
input:not([type=submit]):not([type=checkbox]) {
|
||||
input[type=text],
|
||||
input[type=password] {
|
||||
@include peertube-input-text(340px);
|
||||
|
||||
display: block;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
input[type=submit] {
|
||||
|
@ -17,7 +13,3 @@ input[type=submit] {
|
|||
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.input-group-append {
|
||||
height: 30px;
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
</a>
|
||||
</div>
|
||||
|
||||
<div class="ml-auto">
|
||||
<div class="ms-auto">
|
||||
<my-advanced-input-filter [filters]="inputFilters" (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
</div>
|
||||
|
||||
|
@ -90,7 +90,7 @@
|
|||
</my-user-moderation-dropdown>
|
||||
</td>
|
||||
|
||||
<td *ngIf="isSelected('username')">
|
||||
<td *ngIf="isSelected('username')" class="cell-username">
|
||||
<a i18n-title title="Open account in a new tab" target="_blank" rel="noopener noreferrer" [routerLink]="[ '/a/' + user.username ]">
|
||||
<div class="chip two-lines">
|
||||
<my-actor-avatar [account]="user?.account" size="32"></my-actor-avatar>
|
||||
|
@ -101,13 +101,13 @@
|
|||
</div>
|
||||
</a>
|
||||
|
||||
<div *ngIf="user.accountMutedStatus.mutedByInstance" class="badges-username badge badge-red" i18n>Muted</div>
|
||||
<div *ngIf="user.blocked" class="badges-username badge badge-red" i18n>Banned</div>
|
||||
<div *ngIf="user.accountMutedStatus.mutedByInstance" class="pt-badge badge-red" i18n>Muted</div>
|
||||
<div *ngIf="user.blocked" class="pt-badge badge-red" i18n>Banned</div>
|
||||
</td>
|
||||
|
||||
<td *ngIf="isSelected('role')">
|
||||
<span *ngIf="user.blocked" class="badge badge-banned" i18n-title title="The user was banned">{{ user.roleLabel }}</span>
|
||||
<span *ngIf="!user.blocked" class="badge" [ngClass]="getRoleClass(user.role)">{{ user.roleLabel }}</span>
|
||||
<span *ngIf="user.blocked" class="pt-badge badge-banned" i18n-title title="The user was banned">{{ user.roleLabel }}</span>
|
||||
<span *ngIf="!user.blocked" class="pt-badge" [ngClass]="getRoleClass(user.role)">{{ user.roleLabel }}</span>
|
||||
</td>
|
||||
|
||||
<td *ngIf="isSelected('email')" [title]="user.email">
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
@use '_variables' as *;
|
||||
@use '_mixins' as *;
|
||||
@use '~bootstrap/scss/functions' as *;
|
||||
|
||||
.add-button {
|
||||
@include create-button;
|
||||
|
@ -23,8 +24,8 @@ tr.banned > td {
|
|||
font-weight: $font-semibold;
|
||||
}
|
||||
|
||||
.badges-username {
|
||||
margin-left: 15px;
|
||||
.cell-username .pt-badge {
|
||||
@include margin-left(15px);
|
||||
}
|
||||
|
||||
.user-table-primary-text .glyphicon {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
</my-action-dropdown>
|
||||
</div>
|
||||
|
||||
<div class="ml-auto right-form">
|
||||
<div class="ms-auto right-form">
|
||||
<my-advanced-input-filter [filters]="inputFilters" (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
|
||||
<my-button i18n-label label="Refresh" icon="refresh" (click)="reloadData()"></my-button>
|
||||
|
@ -67,25 +67,25 @@
|
|||
</td>
|
||||
|
||||
<td>
|
||||
<span class="badge badge-blue" *ngIf="video.isLocal">Local</span>
|
||||
<span class="badge badge-purple" *ngIf="!video.isLocal">Remote</span>
|
||||
<span class="pt-badge badge-blue" *ngIf="video.isLocal">Local</span>
|
||||
<span class="pt-badge badge-purple" *ngIf="!video.isLocal">Remote</span>
|
||||
|
||||
<span [ngClass]="getPrivacyBadgeClass(video)" class="badge">{{ video.privacy.label }}</span>
|
||||
<span [ngClass]="getPrivacyBadgeClass(video)" class="pt-badge">{{ video.privacy.label }}</span>
|
||||
|
||||
<span *ngIf="video.nsfw" class="badge badge-red" i18n>NSFW</span>
|
||||
<span *ngIf="video.nsfw" class="pt-badge badge-red" i18n>NSFW</span>
|
||||
|
||||
<span *ngIf="isUnpublished(video)" class="badge badge-yellow" i18n>{{ video.state.label }}</span>
|
||||
<span *ngIf="isUnpublished(video)" class="pt-badge badge-yellow" i18n>{{ video.state.label }}</span>
|
||||
|
||||
<span *ngIf="isAccountBlocked(video)" class="badge badge-red" i18n>Account muted</span>
|
||||
<span *ngIf="isServerBlocked(video)" class="badge badge-red" i18n>Server muted</span>
|
||||
<span *ngIf="isAccountBlocked(video)" class="pt-badge badge-red" i18n>Account muted</span>
|
||||
<span *ngIf="isServerBlocked(video)" class="pt-badge badge-red" i18n>Server muted</span>
|
||||
|
||||
<span *ngIf="isVideoBlocked(video)" class="badge badge-red" i18n>Blocked</span>
|
||||
<span *ngIf="isVideoBlocked(video)" class="pt-badge badge-red" i18n>Blocked</span>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<span *ngIf="isHLS(video)" class="badge badge-blue">HLS</span>
|
||||
<span *ngIf="isWebTorrent(video)" class="badge badge-blue">WebTorrent ({{ video.files.length }})</span>
|
||||
<span *ngIf="video.isLive" class="badge badge-blue">Live</span>
|
||||
<span *ngIf="isHLS(video)" class="pt-badge badge-blue">HLS</span>
|
||||
<span *ngIf="isWebTorrent(video)" class="pt-badge badge-blue">WebTorrent ({{ video.files.length }})</span>
|
||||
<span *ngIf="video.isLive" class="pt-badge badge-blue">Live</span>
|
||||
|
||||
<span *ngIf="!isImport(video) && !video.isLive && video.isLocal">{{ getFilesSize(video) | bytes: 1 }}</span>
|
||||
</td>
|
||||
|
@ -121,7 +121,7 @@
|
|||
</ul>
|
||||
</div>
|
||||
|
||||
<my-embed class="ml-auto" [video]="video"></my-embed>
|
||||
<my-embed class="ms-auto" [video]="video"></my-embed>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -7,10 +7,8 @@ my-embed {
|
|||
width: 50%;
|
||||
}
|
||||
|
||||
.badge {
|
||||
@include peertube-badge;
|
||||
|
||||
margin-right: 5px;
|
||||
.pt-badge {
|
||||
@include margin-right(5px);
|
||||
}
|
||||
|
||||
.video-info > div {
|
||||
|
|
|
@ -32,9 +32,9 @@
|
|||
<ng-container *ngFor="let plugin of plugins" >
|
||||
<my-plugin-card [plugin]="plugin" [version]="plugin.latestVersion" [pluginType]="pluginType">
|
||||
<div ngProjectAs="badges">
|
||||
<span i18n *ngIf="plugin.installed" class="badge badge-success">Installed</span>
|
||||
<span i18n *ngIf="plugin.installed" class="pt-badge badge-success">Installed</span>
|
||||
|
||||
<span *ngIf="plugin.official" class="badge badge-primary" i18n i18n-title title="This plugin is developed by Framasoft">
|
||||
<span *ngIf="plugin.official" class="pt-badge badge-primary" i18n i18n-title title="This plugin is developed by Framasoft">
|
||||
Official
|
||||
</span>
|
||||
</div>
|
||||
|
|
|
@ -22,11 +22,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
.badge {
|
||||
.pt-badge {
|
||||
@include margin-left(15px);
|
||||
|
||||
font-size: 13px;
|
||||
font-weight: $font-semibold;
|
||||
}
|
||||
|
||||
.alert {
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<span i18n="Selector for the list displaying jobs, filtering by their state">any</span>
|
||||
</ng-option>
|
||||
<ng-option *ngFor="let state of jobStates" [value]="state">
|
||||
<span class="badge" [ngClass]="getJobStateClass(state)">{{ state }}</span>
|
||||
<span class="pt-badge" [ngClass]="getJobStateClass(state)">{{ state }}</span>
|
||||
</ng-option>
|
||||
</ng-select>
|
||||
</div>
|
||||
|
@ -62,7 +62,7 @@
|
|||
<td class="job-priority c-hand" [pRowToggler]="job">{{ job.priority }}</td>
|
||||
|
||||
<td class="job-state c-hand" [pRowToggler]="job" *ngIf="jobState === 'all'">
|
||||
<span class="badge" [ngClass]="getJobStateClass(job.state)">{{ job.state }}</span>
|
||||
<span class="pt-badge" [ngClass]="getJobStateClass(job.state)">{{ job.state }}</span>
|
||||
</td>
|
||||
|
||||
<td *ngIf="hasGlobalProgress()" class="job-progress c-hand" [pRowToggler]="job">
|
||||
|
@ -107,8 +107,8 @@
|
|||
</ng-container>
|
||||
|
||||
<ng-container *ngIf="jobState !== 'all'">
|
||||
<ng-container *ngIf="jobType === 'all'" i18n>No <span class="badge" [ngClass]="getJobStateClass(jobState)">{{ jobState }}</span> jobs found.</ng-container>
|
||||
<ng-container *ngIf="jobType !== 'all'" i18n>No <code>{{ jobType }}</code> jobs found that are <span class="badge" [ngClass]="getJobStateClass(jobState)">{{ jobState }}</span>.</ng-container>
|
||||
<ng-container *ngIf="jobType === 'all'" i18n>No <span class="pt-badge" [ngClass]="getJobStateClass(jobState)">{{ jobState }}</span> jobs found.</ng-container>
|
||||
<ng-container *ngIf="jobType !== 'all'" i18n>No <code>{{ jobType }}</code> jobs found that are <span class="pt-badge" [ngClass]="getJobStateClass(jobState)">{{ jobState }}</span>.</ng-container>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -55,7 +55,3 @@ pre {
|
|||
.job-error {
|
||||
color: #ff0000;
|
||||
}
|
||||
|
||||
.select-filter-block .badge {
|
||||
@include peertube-badge;
|
||||
}
|
||||
|
|
|
@ -3,42 +3,41 @@
|
|||
<div class="margin-content">
|
||||
<form role="form" (ngSubmit)="formValidated()" [formGroup]="form">
|
||||
|
||||
<div class="form-row"> <!-- channel grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row"> <!-- channel grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div *ngIf="isCreation()" class="video-channel-title" i18n>NEW CHANNEL</div>
|
||||
<div *ngIf="!isCreation() && videoChannel" class="video-channel-title" i18n>CHANNEL</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<h6 i18n>Banner image of the channel</h6>
|
||||
|
||||
|
||||
<my-actor-banner-edit
|
||||
*ngIf="videoChannel" [previewImage]="isCreation()"
|
||||
[actor]="videoChannel" (bannerChange)="onBannerChange($event)" (bannerDelete)="onBannerDelete()"
|
||||
></my-actor-banner-edit>
|
||||
|
||||
|
||||
<my-actor-avatar-edit
|
||||
*ngIf="videoChannel" [previewImage]="isCreation()"
|
||||
[actor]="videoChannel" (avatarChange)="onAvatarChange($event)" (avatarDelete)="onAvatarDelete()"
|
||||
[displayUsername]="!isCreation()" [displaySubscribers]="!isCreation()"
|
||||
></my-actor-avatar-edit>
|
||||
|
||||
|
||||
<div class="form-group" *ngIf="isCreation()">
|
||||
<label i18n for="name">Name</label>
|
||||
|
||||
<div class="input-group">
|
||||
<input
|
||||
type="text" id="name" i18n-placeholder placeholder="Example: my_channel"
|
||||
formControlName="name" [ngClass]="{ 'input-error': formErrors['name'] }" class="form-control"
|
||||
>
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text">@{{ instanceHost }}</span>
|
||||
</div>
|
||||
<div class="input-group-text">@{{ instanceHost }}</div>
|
||||
</div>
|
||||
<div *ngIf="formErrors['name']" class="form-error">
|
||||
{{ formErrors['name'] }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="display-name">Display name</label>
|
||||
<input
|
||||
|
@ -49,7 +48,7 @@
|
|||
{{ formErrors['display-name'] }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="description">Description</label>
|
||||
<textarea
|
||||
|
@ -60,7 +59,7 @@
|
|||
{{ formErrors.description }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group">
|
||||
<label for="support">Support</label>
|
||||
<my-help
|
||||
|
@ -75,22 +74,22 @@
|
|||
{{ formErrors.support }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-group" *ngIf="isBulkUpdateVideosDisplayed()">
|
||||
<my-peertube-checkbox
|
||||
inputName="bulkVideosSupportUpdate" formControlName="bulkVideosSupportUpdate"
|
||||
i18n-labelText labelText="Overwrite support field of all videos of this channel"
|
||||
></my-peertube-checkbox>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row"> <!-- submit placement block -->
|
||||
|
||||
<div class="row"> <!-- submit placement block -->
|
||||
<div class="col-md-7 col-xl-5"></div>
|
||||
<div class="col-md-5 col-xl-5 d-inline-flex">
|
||||
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -24,31 +24,21 @@ my-actor-banner-edit {
|
|||
max-width: 500px;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
@include peertube-input-group(fit-content);
|
||||
input[type=text] {
|
||||
@include peertube-input-text(340px);
|
||||
|
||||
display: block;
|
||||
|
||||
&#name {
|
||||
width: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.input-group-append {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
input {
|
||||
&[type=text] {
|
||||
@include peertube-input-text(340px);
|
||||
|
||||
display: block;
|
||||
|
||||
&#name {
|
||||
width: auto;
|
||||
flex-grow: 1;
|
||||
}
|
||||
}
|
||||
|
||||
&[type=submit] {
|
||||
@include peertube-button;
|
||||
@include orange-button;
|
||||
@include margin-left(auto);
|
||||
}
|
||||
input[type=submit] {
|
||||
@include peertube-button;
|
||||
@include orange-button;
|
||||
@include margin-left(auto);
|
||||
}
|
||||
|
||||
textarea {
|
||||
|
|
|
@ -3,8 +3,9 @@
|
|||
<ng-container i18n>Applications</ng-container>
|
||||
</h1>
|
||||
|
||||
<div class="form-row"> <!-- built-in token grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row"> <!-- built-in token grid -->
|
||||
|
||||
<div class="group col-12 col-lg-4 col-xl-3">
|
||||
<h2 i18n class="applications-title">SUBSCRIPTION FEED</h2>
|
||||
<div i18n class="applications-description">
|
||||
Use third-party feed aggregators to retrieve the list of videos from
|
||||
|
@ -12,7 +13,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="form-group">
|
||||
<label i18n for="feed-url">Feed URL</label>
|
||||
|
@ -29,7 +30,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-4"> <!-- submit placement block -->
|
||||
<div class="row mt-4"> <!-- submit placement block -->
|
||||
<div class="col-md-7 col-xl-5"></div>
|
||||
<div class="col-md-5 col-xl-5">
|
||||
<input (click)="renewToken()" type="submit" i18n-value value="Renew token">
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<h1 class="sr-only" i18n>Notifications</h1>
|
||||
<h1 class="visually-hidden" i18n>Notifications</h1>
|
||||
<div class="header">
|
||||
<a routerLink="/my-account/settings" fragment="notifications" i18n>
|
||||
<my-global-icon iconName="cog" aria-hidden="true"></my-global-icon>
|
||||
Notification preferences
|
||||
</a>
|
||||
|
||||
<div class="peertube-select-container peertube-select-button ml-2 mr-2">
|
||||
<div class="peertube-select-container peertube-select-button ms-2 me-2">
|
||||
<select [(ngModel)]="notificationSortType" (ngModelChange)="onChangeSortColumn()" class="form-control">
|
||||
<option value="undefined" disabled>Sort by</option>
|
||||
<option value="createdAt" i18n>Newest first</option>
|
||||
|
@ -13,7 +13,7 @@
|
|||
</select>
|
||||
</div>
|
||||
|
||||
<button class="btn ml-auto" [disabled]="!hasUnreadNotifications()" (click)="markAllAsRead()">
|
||||
<button class="btn ms-auto" [disabled]="!hasUnreadNotifications()" (click)="markAllAsRead()">
|
||||
<ng-container *ngIf="hasUnreadNotifications()">
|
||||
<my-global-icon iconName="tick" aria-hidden="true"></my-global-icon>
|
||||
|
||||
|
|
|
@ -6,10 +6,6 @@ label {
|
|||
font-size: 100%;
|
||||
}
|
||||
|
||||
.form-group:first-child {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
input#username + .muted {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
|
|
@ -1,18 +1,19 @@
|
|||
<h1 class="sr-only" i18n>Settings</h1>
|
||||
<div class="form-row"> <!-- preview -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3"></div>
|
||||
<h1 class="visually-hidden" i18n>Settings</h1>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="row"> <!-- preview -->
|
||||
<div class="col-12 col-lg-4 col-xl-3"></div>
|
||||
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-actor-avatar-edit [actor]="user.account" (avatarChange)="onAvatarChange($event)" (avatarDelete)="onAvatarDelete()"></my-actor-avatar-edit>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row"> <!-- profile settings grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-3"> <!-- profile settings grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<h2 i18n class="account-title">PROFILE SETTINGS</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<my-user-quota [user]="user" [userInformationLoaded]="userInformationLoaded"></my-user-quota>
|
||||
|
||||
|
@ -20,64 +21,64 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-5"> <!-- interface grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- interface grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<h2 i18n class="account-title">INTERFACE</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-user-interface-settings [user]="user" [userInformationLoaded]="userInformationLoaded"></my-user-interface-settings>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-5"> <!-- video settings grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- video settings grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div class="anchor" id="video-settings"></div> <!-- video settings anchor -->
|
||||
<h2 i18n class="account-title">VIDEO SETTINGS</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-user-video-settings [user]="user" [userInformationLoaded]="userInformationLoaded"></my-user-video-settings>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-5"> <!-- notifications grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- notifications grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div class="anchor" id="notifications"></div> <!-- notifications anchor -->
|
||||
<h2 i18n class="account-title">NOTIFICATIONS</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-account-notification-preferences [user]="user" [userInformationLoaded]="userInformationLoaded"></my-account-notification-preferences>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-5" *ngIf="user.pluginAuth === null"> <!-- password grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5" *ngIf="user.pluginAuth === null"> <!-- password grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<h2 i18n class="account-title">PASSWORD</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-account-change-password></my-account-change-password>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-5"> <!-- email grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- email grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<h2 i18n class="account-title">EMAIL</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-account-change-email></my-account-change-email>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row mt-5"> <!-- danger zone grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row mt-5"> <!-- danger zone grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<h2 i18n class="account-title account-title-danger">DANGER ZONE</h2>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
<my-account-danger-zone [user]="user"></my-account-danger-zone>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
@use '_variables' as *;
|
||||
@use '_mixins' as *;
|
||||
@use '~bootstrap/scss/functions' as *;
|
||||
|
||||
.account-title {
|
||||
@include settings-big-title;
|
||||
|
@ -9,6 +10,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.row > div {
|
||||
max-width: 500px;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div class="row">
|
||||
<div class="root">
|
||||
<my-top-menu-dropdown [menuEntries]="menuEntries"></my-top-menu-dropdown>
|
||||
|
||||
<div class="margin-content pb-5" [ngClass]="{ 'offset-content': !isBroadcastMessageDisplayed }">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
@use '_variables' as *;
|
||||
@use '_mixins' as *;
|
||||
|
||||
.row {
|
||||
.root {
|
||||
@include sub-menu-h1;
|
||||
|
||||
flex-direction: column;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<h1>
|
||||
<my-global-icon iconName="channel" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>My channels</ng-container>
|
||||
<span class="badge badge-secondary">{{ totalItems }}</span>
|
||||
<span *ngIf="totalItems" class="pt-badge badge-secondary">{{ totalItems }}</span>
|
||||
</h1>
|
||||
|
||||
<my-channels-setup-message [hideLink]="true"></my-channels-setup-message>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<span>
|
||||
<my-global-icon iconName="follower" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>My followers</ng-container>
|
||||
<span class="badge badge-secondary"> {{ pagination.totalItems }}</span>
|
||||
<span *ngIf="pagination.totalItems" class="pt-badge badge-secondary"> {{ pagination.totalItems }}</span>
|
||||
</span>
|
||||
</h1>
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<span>
|
||||
<my-global-icon iconName="subscriptions" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>My subscriptions</ng-container>
|
||||
<span class="badge badge-secondary"> {{ pagination.totalItems }}</span>
|
||||
<span *ngIf="pagination.totalItems" class="pt-badge badge-secondary"> {{ pagination.totalItems }}</span>
|
||||
</span>
|
||||
</h1>
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<h1>
|
||||
<my-global-icon iconName="history" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>My watch history</ng-container> <span class="badge badge-secondary">{{ pagination.totalItems }}</span>
|
||||
<ng-container i18n>My watch history</ng-container>
|
||||
<span *ngIf="pagination.totalItems" class="pt-badge badge-secondary">{{ pagination.totalItems }}</span>
|
||||
</h1>
|
||||
|
||||
<div class="top-buttons">
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div class="row">
|
||||
<div class="root">
|
||||
<my-top-menu-dropdown [menuEntries]="menuEntries"></my-top-menu-dropdown>
|
||||
|
||||
<div class="margin-content pb-5" [ngClass]="{ 'offset-content': !isBroadcastMessageDisplayed }">
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
@use '_variables' as *;
|
||||
@use '_mixins' as *;
|
||||
|
||||
.row {
|
||||
.root {
|
||||
@include sub-menu-h1;
|
||||
|
||||
flex-direction: column;
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
<td>{{ videoChangeOwnership.createdAt | date: 'short' }}</td>
|
||||
|
||||
<td>
|
||||
<span class="badge"
|
||||
<span class="pt-badge"
|
||||
[ngClass]="getStatusClass(videoChangeOwnership.status)">{{ videoChangeOwnership.status }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
@ -50,7 +50,7 @@
|
|||
</td>
|
||||
|
||||
<td>
|
||||
<span class="badge" [ngClass]="getVideoImportStateClass(videoImport.state.id)">
|
||||
<span class="pt-badge" [ngClass]="getVideoImportStateClass(videoImport.state.id)">
|
||||
{{ videoImport.state.label }}
|
||||
</span>
|
||||
</td>
|
||||
|
|
|
@ -20,13 +20,13 @@
|
|||
|
||||
<form role="form" (ngSubmit)="formValidated()" [formGroup]="form">
|
||||
|
||||
<div class="form-row"> <!-- playlist grid -->
|
||||
<div class="form-group col-12 col-lg-4 col-xl-3">
|
||||
<div class="row"> <!-- playlist grid -->
|
||||
<div class="col-12 col-lg-4 col-xl-3">
|
||||
<div *ngIf="isCreation()" class="video-playlist-title" i18n>NEW PLAYLIST</div>
|
||||
<div *ngIf="!isCreation() && videoPlaylistToUpdate" class="video-playlist-title" i18n>PLAYLIST</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group col-12 col-lg-8 col-xl-9">
|
||||
<div class="col-12 col-lg-8 col-xl-9">
|
||||
|
||||
<div class="col-md-12 col-xl-6">
|
||||
<div class="form-group">
|
||||
|
@ -88,7 +88,7 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row"> <!-- submit placement block -->
|
||||
<div class="row"> <!-- submit placement block -->
|
||||
<div class="col-md-7 col-xl-5"></div>
|
||||
<div class="col-md-5 col-xl-5 d-inline-flex">
|
||||
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<h1>
|
||||
<my-global-icon iconName="playlists" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>My playlists</ng-container> <span class="badge badge-secondary">{{ pagination.totalItems }}</span>
|
||||
<ng-container i18n>My playlists</ng-container>
|
||||
<span *ngIf="pagination.totalItems" class="pt-badge badge-secondary">{{ pagination.totalItems }}</span>
|
||||
</h1>
|
||||
|
||||
<my-channels-setup-message></my-channels-setup-message>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</div>
|
||||
|
||||
<div class="modal-footer">
|
||||
<div class="form-group inputs">
|
||||
<div class="inputs">
|
||||
<input
|
||||
type="button" role="button" i18n-value value="Cancel" class="peertube-button grey-button"
|
||||
(click)="dismiss()" (key.enter)="dismiss()"
|
||||
|
|
|
@ -4,7 +4,3 @@
|
|||
p-autocomplete {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<span>
|
||||
<my-global-icon iconName="videos" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>My videos</ng-container>
|
||||
<span class="badge badge-secondary"> {{ pagination.totalItems }}</span>
|
||||
<span *ngIf="pagination.totalItems" class="pt-badge badge-secondary"> {{ pagination.totalItems }}</span>
|
||||
</span>
|
||||
|
||||
<div>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<div class="root">
|
||||
<div *ngIf="status !== 403 && status !== 418" class="box">
|
||||
<strong>{{ status }}.</strong>
|
||||
<span class="ml-1 muted" i18n>That's an error.</span>
|
||||
<span class="ms-1 muted" i18n>That's an error.</span>
|
||||
|
||||
<div class="text mt-4">
|
||||
<ng-container *ngIf="type === 'video'" i18n>We couldn't find any video tied to the URL {{ pathname }} you were looking for.</ng-container>
|
||||
|
@ -24,7 +24,7 @@
|
|||
|
||||
<div *ngIf="status === 403" class="box">
|
||||
<strong>{{ status }}.</strong>
|
||||
<span class="ml-1 muted" i18n>You are not authorized here.</span>
|
||||
<span class="ms-1 muted" i18n>You are not authorized here.</span>
|
||||
|
||||
<div class="text mt-4">
|
||||
<ng-container *ngIf="type === 'video'" i18n>You might need to check your account is allowed by the video or instance owner.</ng-container>
|
||||
|
@ -34,7 +34,7 @@
|
|||
|
||||
<div *ngIf="status === 418" class="box">
|
||||
<strong>{{ status }}.</strong>
|
||||
<span class="ml-1 muted">I'm a teapot.</span>
|
||||
<span class="ms-1 muted">I'm a teapot.</span>
|
||||
|
||||
<div class="text mt-4" i18n="Description of a tea flavour, keeping the 'requested entity body' as a technical expression referring to a web request">
|
||||
The requested entity body blends sweet bits with a mellow earthiness.
|
||||
|
|
|
@ -77,7 +77,7 @@
|
|||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="pl-0 col-sm-6">
|
||||
<div class="ps-0 col-sm-6">
|
||||
<input
|
||||
(change)="onDurationOrPublishedUpdated()"
|
||||
(keydown.enter)="$event.preventDefault()"
|
||||
|
@ -87,7 +87,7 @@
|
|||
class="form-control"
|
||||
>
|
||||
</div>
|
||||
<div class="pr-0 col-sm-6">
|
||||
<div class="pe-0 col-sm-6">
|
||||
<input
|
||||
(change)="onDurationOrPublishedUpdated()"
|
||||
(keydown.enter)="$event.preventDefault()"
|
||||
|
|
|
@ -22,10 +22,6 @@ form {
|
|||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
input[type=text] {
|
||||
@include peertube-input-text(100%);
|
||||
display: block;
|
||||
|
|
|
@ -2,22 +2,22 @@
|
|||
<div class="results-header">
|
||||
<div class="first-line">
|
||||
<div class="results-counter" *ngIf="pagination.totalItems">
|
||||
<span class="mr-1" i18n>{{ pagination.totalItems | myNumberFormatter }} {pagination.totalItems, plural, =1 {result} other {results}}</span>
|
||||
<span class="me-1" i18n>{{ pagination.totalItems | myNumberFormatter }} {pagination.totalItems, plural, =1 {result} other {results}}</span>
|
||||
|
||||
<span class="mr-1" i18n *ngIf="advancedSearch.searchTarget === 'local'">on this instance</span>
|
||||
<span class="mr-1" i18n *ngIf="advancedSearch.searchTarget === 'search-index'">on the vidiverse</span>
|
||||
<span class="me-1" i18n *ngIf="advancedSearch.searchTarget === 'local'">on this instance</span>
|
||||
<span class="me-1" i18n *ngIf="advancedSearch.searchTarget === 'search-index'">on the vidiverse</span>
|
||||
|
||||
<span *ngIf="currentSearch" i18n>for <span class="search-value">{{ currentSearch }}</span></span>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="results-filter-button ml-auto" (click)="isSearchFilterCollapsed = !isSearchFilterCollapsed" role="button"
|
||||
class="results-filter-button ms-auto" (click)="isSearchFilterCollapsed = !isSearchFilterCollapsed" role="button"
|
||||
[attr.aria-expanded]="!isSearchFilterCollapsed" aria-controls="collapseBasic"
|
||||
>
|
||||
<span class="icon icon-filter"></span>
|
||||
<ng-container i18n>
|
||||
Filters
|
||||
<span *ngIf="numberOfFilters() > 0" class="badge badge-secondary">{{ numberOfFilters() }}</span>
|
||||
<span *ngIf="numberOfFilters() > 0" class="pt-badge badge-secondary">{{ numberOfFilters() }}</span>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
(click)="onClick(i)"
|
||||
>
|
||||
<div class="step-index">
|
||||
<ng-container *ngIf="!isCompleted(step)"><span class="sr-only" i18n>Step</span> {{ i + 1 }}</ng-container>
|
||||
<ng-container *ngIf="!isCompleted(step)"><span class="visually-hidden" i18n>Step</span> {{ i + 1 }}</ng-container>
|
||||
<my-global-icon *ngIf="isCompleted(step)" iconName="tick"></my-global-icon>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -34,9 +34,7 @@
|
|||
type="text" id="name" i18n-placeholder placeholder="Example: my_super_channel"
|
||||
formControlName="name" [ngClass]="{ 'input-error': formErrors['name'] }"
|
||||
>
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text">@{{ instanceHost }}</span>
|
||||
</div>
|
||||
<div class="input-group-text">@{{ instanceHost }}</div>
|
||||
</div>
|
||||
|
||||
<div class="name-information" i18n>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<form role="form" [formGroup]="form">
|
||||
<div class="form-group form-group-terms">
|
||||
<div class="form-group">
|
||||
<my-peertube-checkbox inputName="terms" formControlName="terms">
|
||||
<ng-template ptTemplate="label">
|
||||
<ng-container i18n>
|
||||
<ng-container i18n>
|
||||
I am at least {{ minimumAge }} years old and agree
|
||||
to the <a class="terms-anchor" (click)="onTermsClick($event)" href='#'>Terms</a>
|
||||
<ng-container *ngIf="hasCodeOfConduct"> and to the <a (click)="onCodeOfConductClick($event)" href='#'>Code of Conduct</a></ng-container>
|
||||
|
|
|
@ -27,9 +27,7 @@
|
|||
type="text" id="username" i18n-placeholder="Username choice placeholder in the registration form" placeholder="e.g. jane_doe"
|
||||
formControlName="username" class="form-control" [ngClass]="{ 'input-error': formErrors['username'] }"
|
||||
>
|
||||
<div class="input-group-append">
|
||||
<span class="input-group-text">@{{ instanceHost }}</span>
|
||||
</div>
|
||||
<span class="input-group-text">@{{ instanceHost }}</span>
|
||||
</div>
|
||||
|
||||
<div class="name-information" i18n>
|
||||
|
|
|
@ -29,22 +29,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.form-group-terms {
|
||||
margin: 30px 0;
|
||||
}
|
||||
|
||||
.input-group {
|
||||
@include peertube-input-group(100%);
|
||||
}
|
||||
|
||||
.input-group-append {
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.form-group-terms {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
input:not([type=submit]) {
|
||||
@include peertube-input-text(100%);
|
||||
display: block;
|
||||
|
|
|
@ -33,10 +33,6 @@ my-peertube-checkbox {
|
|||
height: 100%;
|
||||
min-height: 300px;
|
||||
|
||||
.form-group {
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
input {
|
||||
@include peertube-input-text(100%);
|
||||
display: block;
|
||||
|
@ -45,10 +41,6 @@ my-peertube-checkbox {
|
|||
.label-tags + span {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.advanced-settings .form-group {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.captions-header {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="margin-content">
|
||||
<div class="title-page title-page-single">
|
||||
<span class="mr-1" i18n>Update</span>
|
||||
<span class="me-1" i18n>Update</span>
|
||||
<a [routerLink]="getVideoUrl()">{{ video?.name }}</a>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="avatar-and-textarea">
|
||||
<my-actor-avatar [account]="user?.account" size="25"></my-actor-avatar>
|
||||
|
||||
<div class="form-group">
|
||||
<div class="textarea-wrapper">
|
||||
<textarea i18n-placeholder placeholder="Add comment..." myAutoResize
|
||||
[readonly]="(user === null) ? true : false"
|
||||
(click)="openVisitorModal($event)"
|
||||
|
|
|
@ -17,9 +17,8 @@ form {
|
|||
@include margin-right(10px);
|
||||
}
|
||||
|
||||
.form-group {
|
||||
.textarea-wrapper {
|
||||
flex-grow: 1;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
{{ comment.account.displayName }}
|
||||
</span>
|
||||
|
||||
<span class="comment-account-fid ml-1">{{ comment.by }}</span>
|
||||
<span class="comment-account-fid ms-1">{{ comment.by }}</span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
<my-feed [syndicationItems]="syndicationItems"></my-feed>
|
||||
|
||||
<div ngbDropdown class="d-inline-block ml-4 dropdown-root">
|
||||
<div ngbDropdown class="d-inline-block ms-4 dropdown-root">
|
||||
<button class="btn btn-sm btn-outline-secondary" id="dropdown-sort-comments" ngbDropdownToggle i18n>
|
||||
SORT BY
|
||||
</button>
|
||||
|
@ -80,7 +80,7 @@
|
|||
|
||||
<ng-template i18n #noAuthorComments>View {comment.totalReplies, plural, =1 {1 reply} other {{{ comment.totalReplies }} replies}}</ng-template>
|
||||
|
||||
<my-small-loader class="comment-thread-loading ml-1" [loading]="threadLoading[comment.id]"></my-small-loader>
|
||||
<my-small-loader class="comment-thread-loading ms-1" [loading]="threadLoading[comment.id]"></my-small-loader>
|
||||
</div>
|
||||
</my-video-comment>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="privacy-concerns" *ngIf="display">
|
||||
<div class="privacy-concerns-text">
|
||||
<span class="mr-2">
|
||||
<span class="me-2">
|
||||
<strong i18n>Friendly Reminder: </strong>
|
||||
<ng-container i18n>
|
||||
the sharing system used for this video implies that some technical information about your system (such as a public IP address) can be sent to other peers.
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
<div class="playlist-display-name">
|
||||
{{ playlist.displayName }}
|
||||
|
||||
<span *ngIf="isUnlistedPlaylist()" class="badge badge-warning" i18n>Unlisted</span>
|
||||
<span *ngIf="isPrivatePlaylist()" class="badge badge-danger" i18n>Private</span>
|
||||
<span *ngIf="isPublicPlaylist()" class="badge badge-info" i18n>Public</span>
|
||||
<span *ngIf="isUnlistedPlaylist()" class="pt-badge badge-warning" i18n>Unlisted</span>
|
||||
<span *ngIf="isPrivatePlaylist()" class="pt-badge badge-danger" i18n>Private</span>
|
||||
<span *ngIf="isPublicPlaylist()" class="pt-badge badge-info" i18n>Public</span>
|
||||
</div>
|
||||
|
||||
<div class="playlist-by-index">
|
||||
|
|
|
@ -15,43 +15,47 @@
|
|||
.playlist-info {
|
||||
padding: 5px 30px;
|
||||
background-color: pvar(--greyBackgroundColor);
|
||||
}
|
||||
|
||||
.playlist-display-name {
|
||||
font-size: 18px;
|
||||
font-weight: $font-semibold;
|
||||
margin-bottom: 5px;
|
||||
.playlist-display-name {
|
||||
font-size: 18px;
|
||||
font-weight: $font-semibold;
|
||||
margin-bottom: 5px;
|
||||
|
||||
.pt-badge {
|
||||
@include margin-left(5px);
|
||||
}
|
||||
}
|
||||
|
||||
.playlist-by-index {
|
||||
color: pvar(--greyForegroundColor);
|
||||
display: flex;
|
||||
|
||||
.playlist-by {
|
||||
@include margin-right(5px);
|
||||
}
|
||||
|
||||
.playlist-by-index {
|
||||
color: pvar(--greyForegroundColor);
|
||||
display: flex;
|
||||
.playlist-index span:first-child::after {
|
||||
content: '/';
|
||||
margin: 0 3px;
|
||||
}
|
||||
}
|
||||
|
||||
.playlist-by {
|
||||
@include margin-right(5px);
|
||||
}
|
||||
.playlist-controls {
|
||||
display: flex;
|
||||
margin: 10px 0;
|
||||
|
||||
.playlist-index span:first-child::after {
|
||||
content: '/';
|
||||
margin: 0 3px;
|
||||
}
|
||||
my-global-icon:not(:last-child) {
|
||||
@include margin-right(.5rem);
|
||||
}
|
||||
|
||||
.playlist-controls {
|
||||
display: flex;
|
||||
margin: 10px 0;
|
||||
|
||||
my-global-icon:not(:last-child) {
|
||||
@include margin-right(.5rem);
|
||||
my-global-icon {
|
||||
&:not(.active) {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
my-global-icon {
|
||||
&:not(.active) {
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
::ng-deep {
|
||||
cursor: pointer;
|
||||
}
|
||||
::ng-deep {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
<div class="video-info-channel-left d-flex">
|
||||
<my-video-avatar-channel [video]="video" [showChannel]="!isChannelDisplayNameGeneric()"></my-video-avatar-channel>
|
||||
|
||||
<div class="video-info-channel-left-links ml-1">
|
||||
<div class="video-info-channel-left-links ms-1">
|
||||
<ng-container *ngIf="!isChannelDisplayNameGeneric()">
|
||||
<a [routerLink]="[ '/c', video.byVideoChannel ]" i18n-title title="Channel page">
|
||||
{{ video.channel.displayName }}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<h1 class="sr-only" i18n>Discover</h1>
|
||||
<h1 class="visually-hidden" i18n>Discover</h1>
|
||||
<div class="margin-content">
|
||||
|
||||
<div class="no-results" i18n *ngIf="notResults">No results.</div>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<div class="d-flex justify-content-between">
|
||||
<label class="small-title" i18n>GLOBAL SEARCH</label>
|
||||
<div class="advanced-search-status muted">
|
||||
<span *ngIf="serverConfig" class="mr-1" i18n>using {{ serverConfig.search.searchIndex.url }}</span>
|
||||
<span *ngIf="serverConfig" class="me-1" i18n>using {{ serverConfig.search.searchIndex.url }}</span>
|
||||
<i class="glyphicon glyphicon-globe"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -39,8 +39,8 @@
|
|||
<label class="small-title" i18n>ADVANCED SEARCH</label>
|
||||
<div class="advanced-search-status c-help">
|
||||
<span [ngClass]="canSearchAnyURI ? 'text-success' : 'muted'" i18n-title title="Determines whether you can resolve any distant content, or if this instance only allows doing so for instances it follows.">
|
||||
<span *ngIf="canSearchAnyURI()" class="mr-1" i18n>any instance</span>
|
||||
<span *ngIf="!canSearchAnyURI()" class="mr-1" i18n>only followed instances</span>
|
||||
<span *ngIf="canSearchAnyURI()" class="me-1" i18n>any instance</span>
|
||||
<span *ngIf="!canSearchAnyURI()" class="me-1" i18n>only followed instances</span>
|
||||
<i [ngClass]="canSearchAnyURI() ? 'glyphicon glyphicon-ok-sign' : 'glyphicon glyphicon-exclamation-sign'"></i>
|
||||
</span>
|
||||
</div>
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
<a tabindex="-1" class="d-flex flex-auto flex-items-center p-2" [class.focus-visible]="active">
|
||||
<div class="flex-shrink-0 mr-2 text-center">
|
||||
<div class="flex-shrink-0 me-2 text-center">
|
||||
<my-global-icon iconName="search"></my-global-icon>
|
||||
</div>
|
||||
|
||||
<img class="avatar mr-2 flex-shrink-0 d-none" alt="" aria-label="Team" src="" width="28" height="28">
|
||||
<img class="avatar me-2 flex-shrink-0 d-none" alt="" aria-label="Team" src="" width="28" height="28">
|
||||
|
||||
<div
|
||||
class="flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"
|
||||
class="flex-auto overflow-hidden text-start no-wrap css-truncate css-truncate-target"
|
||||
[attr.aria-label]="result.text" [innerHTML]="result.text | highlight : highlight"
|
||||
></div>
|
||||
|
||||
<div class="border rounded flex-shrink-0 px-1 bg-gray text-gray-light ml-1 f6">
|
||||
<div class="border rounded flex-shrink-0 px-1 bg-gray text-gray-light ms-1 f6">
|
||||
<span *ngIf="result.type === 'search-instance'" i18n>In this instance's network</span>
|
||||
<span *ngIf="result.type === 'search-index'" i18n>In the vidiverse</span>
|
||||
</div>
|
||||
|
|
|
@ -36,14 +36,14 @@
|
|||
>
|
||||
<my-global-icon iconName="language" aria-hidden="true"></my-global-icon>
|
||||
<span i18n>Interface:</span>
|
||||
<span class="ml-auto muted">{{ currentInterfaceLanguage }}</span>
|
||||
<span class="ms-auto muted">{{ currentInterfaceLanguage }}</span>
|
||||
</a>
|
||||
|
||||
<a ngbDropdownItem ngbDropdownToggle class="dropdown-item" routerLink="/my-account/settings" fragment="video-languages-subtitles"
|
||||
#settingsLanguagesSubtitles (click)="onActiveLinkScrollToAnchor(settingsLanguagesSubtitles)">
|
||||
<my-global-icon iconName="video-lang" aria-hidden="true"></my-global-icon>
|
||||
<span i18n>Videos:</span>
|
||||
<span class="ml-auto muted">{{ videoLanguages.join(', ') }}</span>
|
||||
<span class="ms-auto muted">{{ videoLanguages.join(', ') }}</span>
|
||||
</a>
|
||||
|
||||
<a ngbDropdownItem ngbDropdownToggle class="dropdown-item settings-sensitive" routerLink="/my-account/settings"
|
||||
|
@ -53,14 +53,14 @@
|
|||
<my-global-icon class="hover-display-toggle" [hidden]="user.nsfwPolicy === 'display'" iconName="sensitive" aria-hidden="true"></my-global-icon>
|
||||
<my-global-icon class="hover-display-toggle" [hidden]="user.nsfwPolicy !== 'display'" iconName="unsensitive" aria-hidden="true"></my-global-icon>
|
||||
<span i18n>Sensitive:</span>
|
||||
<span class="ml-auto muted">{{ nsfwPolicy }}</span>
|
||||
<span class="ms-auto muted">{{ nsfwPolicy }}</span>
|
||||
</a>
|
||||
|
||||
<a ngbDropdownItem class="dropdown-item" (click)="toggleUseP2P()">
|
||||
<my-global-icon iconName="p2p" aria-hidden="true"></my-global-icon>
|
||||
<ng-container i18n>Help share videos</ng-container>
|
||||
|
||||
<my-input-switch class="ml-auto" [checked]="user.p2pEnabled"></my-input-switch>
|
||||
<my-input-switch class="ms-auto" [checked]="user.p2pEnabled"></my-input-switch>
|
||||
</a>
|
||||
|
||||
<div class="dropdown-divider"></div>
|
||||
|
@ -149,7 +149,7 @@
|
|||
|
||||
<div class="footer-copyleft">
|
||||
<small class="d-inline" i18n-title title="powered by PeerTube - CopyLeft 2015-2022">
|
||||
<a href="https://joinpeertube.org" class="mr-1" target="_blank" rel="noopener noreferrer" i18n>powered by PeerTube</a>
|
||||
<a href="https://joinpeertube.org" class="me-1" target="_blank" rel="noopener noreferrer" i18n>powered by PeerTube</a>
|
||||
|
||||
<a href="https://github.com/Chocobozzz/PeerTube/blob/develop/LICENSE" target="_blank" rel="noopener noreferrer">
|
||||
<span aria-label="copyleft" class="d-inline-block" style="transform: rotateY(180deg)">©</span> 2015-2022
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
<div>
|
||||
<button
|
||||
*ngIf="unreadNotifications"
|
||||
i18n-title title="Mark all as read" class="glyphicon glyphicon-ok mr-2"
|
||||
i18n-title title="Mark all as read" class="glyphicon glyphicon-ok me-2"
|
||||
(click)="markAllAsRead()"
|
||||
></button>
|
||||
<a
|
||||
|
@ -45,7 +45,7 @@
|
|||
></my-user-notifications>
|
||||
|
||||
<a *ngIf="loaded" class="all-notifications" routerLink="/my-account/notifications" #notifications (click)="onNavigate(notifications)">
|
||||
<my-global-icon class="mr-1" iconName="bell" aria-hidden="true"></my-global-icon>
|
||||
<my-global-icon class="me-1" iconName="bell" aria-hidden="true"></my-global-icon>
|
||||
<span i18n>See all your notifications</span>
|
||||
</a>
|
||||
</div>
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
<div class="modal-body" >
|
||||
<div [innerHtml]="message"></div>
|
||||
|
||||
<div *ngIf="inputLabel && expectedInputValue" class="form-group">
|
||||
<div *ngIf="inputLabel && expectedInputValue" class="form-group mt-3">
|
||||
<label for="confirmInput">{{ inputLabel }}</label>
|
||||
<input type="text" id="confirmInput" name="confirmInput" [(ngModel)]="inputValue" />
|
||||
</div>
|
||||
|
|
|
@ -13,7 +13,3 @@ input[type=text] {
|
|||
@include peertube-input-text(100%);
|
||||
display: block;
|
||||
}
|
||||
|
||||
.form-group {
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
|
|
@ -17,9 +17,9 @@
|
|||
</a>
|
||||
|
||||
<a [routerLink]="[ '.' ]" [queryParams]="{ 'search': 'reporter:"' + abuse.reporterAccount.displayName + '"' }"
|
||||
class="ml-auto muted abuse-details-links" i18n
|
||||
class="ms-auto muted abuse-details-links" i18n
|
||||
>
|
||||
{abuse.countReportsForReporter, plural, =1 {1 report} other {{{ abuse.countReportsForReporter }} reports}}<span class="ml-1 glyphicon glyphicon-flag"></span>
|
||||
{abuse.countReportsForReporter, plural, =1 {1 report} other {{{ abuse.countReportsForReporter }} reports}}<span class="ms-1 glyphicon glyphicon-flag"></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -37,9 +37,9 @@
|
|||
</a>
|
||||
|
||||
<a *ngIf="isAdminView" [routerLink]="[ '.' ]" [queryParams]="{ 'search': 'reportee:"' +abuse.flaggedAccount.displayName + '"' }"
|
||||
class="ml-auto muted abuse-details-links" i18n
|
||||
class="ms-auto muted abuse-details-links" i18n
|
||||
>
|
||||
{abuse.countReportsForReportee, plural, =1 {1 report} other {{{ abuse.countReportsForReportee }} reports}}<span class="ml-1 glyphicon glyphicon-flag"></span>
|
||||
{abuse.countReportsForReportee, plural, =1 {1 report} other {{{ abuse.countReportsForReportee }} reports}}<span class="ms-1 glyphicon glyphicon-flag"></span>
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -53,7 +53,7 @@
|
|||
<div class="mt-3 d-flex">
|
||||
<span class="moderation-expanded-label">
|
||||
<ng-container i18n>Report</ng-container>
|
||||
<a [routerLink]="[ '.' ]" [queryParams]="{ 'search': '#' + abuse.id }" class="ml-1 muted">#{{ abuse.id }}</a>
|
||||
<a [routerLink]="[ '.' ]" [queryParams]="{ 'search': '#' + abuse.id }" class="ms-1 muted">#{{ abuse.id }}</a>
|
||||
</span>
|
||||
<span class="moderation-expanded-text" [innerHTML]="abuse.reasonHtml"></span>
|
||||
</div>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
>
|
||||
<ng-template pTemplate="caption">
|
||||
<div class="caption">
|
||||
<div class="ml-auto">
|
||||
<div class="ms-auto">
|
||||
<my-advanced-input-filter [filters]="inputFilters" (search)="onSearch($event)"></my-advanced-input-filter>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
<div *ngIf="editable && !hasAvatar()" class="actor-img-edit-button" [ngbTooltip]="avatarFormat" placement="right" container="body">
|
||||
<my-global-icon iconName="upload"></my-global-icon>
|
||||
<label class="sr-only" for="avatarfile" i18n>Upload a new avatar</label>
|
||||
<label class="visually-hidden" for="avatarfile" i18n>Upload a new avatar</label>
|
||||
<input #avatarfileInput type="file" name="avatarfile" id="avatarfile" [accept]="avatarExtensions" (change)="onAvatarChange(avatarfileInput)"/>
|
||||
</div>
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
|||
#avatarPopover="ngbPopover" [ngbPopover]="avatarEditContent" popoverClass="popover-image-info" autoClose="outside" placement="right"
|
||||
>
|
||||
<my-global-icon iconName="edit"></my-global-icon>
|
||||
<label class="sr-only" for="avatarMenu" i18n>Change your avatar</label>
|
||||
<label class="visually-hidden" for="avatarMenu" i18n>Change your avatar</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -3,35 +3,35 @@
|
|||
|
||||
.actor {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
my-actor-avatar {
|
||||
@include margin-right(15px);
|
||||
my-actor-avatar {
|
||||
@include margin-right(15px);
|
||||
}
|
||||
|
||||
.actor-info {
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.actor-info-display-name {
|
||||
font-size: 20px;
|
||||
font-weight: $font-bold;
|
||||
|
||||
@media screen and (max-width: $small-view) {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.actor-info {
|
||||
display: inline-flex;
|
||||
flex-direction: column;
|
||||
.actor-info-username {
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
color: pvar(--greyForegroundColor);
|
||||
}
|
||||
|
||||
.actor-info-display-name {
|
||||
font-size: 20px;
|
||||
font-weight: $font-bold;
|
||||
|
||||
@media screen and (max-width: $small-view) {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.actor-info-username {
|
||||
position: relative;
|
||||
font-size: 14px;
|
||||
color: pvar(--greyForegroundColor);
|
||||
}
|
||||
|
||||
.actor-info-followers {
|
||||
font-size: 15px;
|
||||
padding-bottom: .5rem;
|
||||
}
|
||||
}
|
||||
.actor-info-followers {
|
||||
font-size: 15px;
|
||||
padding-bottom: .5rem;
|
||||
}
|
||||
|
||||
.actor-img-edit-container {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<div class="input-group has-feedback has-clear">
|
||||
<div *ngIf="hasFilters()" class="input-group-prepend c-hand" ngbDropdown placement="bottom-left auto" container="body">
|
||||
<div class="input-group-text" ngbDropdownToggle>
|
||||
<div class="input-group has-clear" ngbDropdown placement="bottom-left auto" container="body">
|
||||
|
||||
<ng-container *ngIf="hasFilters()">
|
||||
<div class="input-group-text c-hand" ngbDropdownToggle>
|
||||
<span class="caret" aria-haspopup="menu" role="button"></span>
|
||||
</div>
|
||||
|
||||
|
@ -15,14 +16,14 @@
|
|||
</button>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
</ng-container>
|
||||
|
||||
<input
|
||||
type="text" name="table-filter" id="table-filter" i18n-placeholder placeholder="Filter..."
|
||||
class="last-in-group"
|
||||
[(ngModel)]="searchValue"
|
||||
(keyup)="onInputSearch($event)"
|
||||
>
|
||||
|
||||
<a class="glyphicon glyphicon-remove-sign form-control-feedback form-control-clear" (click)="onResetTableFilter()"></a>
|
||||
<span class="sr-only" i18n>Clear filters</span>
|
||||
<a class="glyphicon glyphicon-remove-sign form-control-clear" title="Clear filter" i18n-title (click)="onResetTableFilter()"></a>
|
||||
</div>
|
||||
|
|
|
@ -23,7 +23,6 @@ my-global-icon {
|
|||
width: 18px;
|
||||
height: 18px;
|
||||
|
||||
|
||||
&.no-visible {
|
||||
@include margin-right($size + $margin);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div (click)="update()">
|
||||
<input type="checkbox" [checked]="checked"/>
|
||||
<label class="ml-auto">Toggle</label>
|
||||
<label class="ms-auto">Toggle</label>
|
||||
</div>
|
||||
|
|
|
@ -1,21 +1,19 @@
|
|||
<div class="input-group input-group-sm">
|
||||
<div class="input-group">
|
||||
<input
|
||||
[id]="inputId" [autocomplete]="autocomplete" [value]="value" [placeholder]="placeholder" [tabindex]="tabindex"
|
||||
[(ngModel)]="value" (ngModelChange)="update()" [readonly]="readonly"
|
||||
#input (click)="input.select()" (input)="update()" (change)="update()" [type]="inputType" class="form-control"
|
||||
/>
|
||||
|
||||
<div *ngIf="withToggle || withCopy" class="input-group-append">
|
||||
<button *ngIf="withToggle" (click)="toggle()" type="button" class="btn btn-outline-secondary eye-button" [title]="toggleTitle">
|
||||
<span class="glyphicon glyphicon-eye-{{ show ? 'open' : 'close' }}"></span>
|
||||
</button>
|
||||
<button *ngIf="withToggle" (click)="toggle()" type="button" class="btn btn-outline-secondary eye-button" [title]="toggleTitle">
|
||||
<span class="glyphicon glyphicon-eye-{{ show ? 'open' : 'close' }}"></span>
|
||||
</button>
|
||||
|
||||
<button
|
||||
*ngIf="withCopy" [cdkCopyToClipboard]="input.value" (click)="activateCopiedMessage()" type="button"
|
||||
class="btn btn-outline-secondary text-uppercase" i18n-title title="Copy"
|
||||
>
|
||||
<span class="glyphicon glyphicon-duplicate"></span>
|
||||
Copy
|
||||
</button>
|
||||
</div>
|
||||
<button
|
||||
*ngIf="withCopy" [cdkCopyToClipboard]="input.value" (click)="activateCopiedMessage()" type="button"
|
||||
class="btn btn-outline-secondary text-uppercase" i18n-title title="Copy"
|
||||
>
|
||||
<span class="glyphicon glyphicon-duplicate"></span>
|
||||
<span class="copy-text">Copy</span>
|
||||
</button>
|
||||
</div>
|
||||
|
|
|
@ -5,11 +5,14 @@ input {
|
|||
@include peertube-input-text(auto);
|
||||
@include padding-left(15px !important);
|
||||
@include padding-right(15px !important);
|
||||
|
||||
// set again properties of peertube-input-text that are overridden by .input-group
|
||||
font-size: 15px !important;
|
||||
}
|
||||
|
||||
.eye-button {
|
||||
line-height: 1 !important;
|
||||
.btn {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.copy-text {
|
||||
font-size: 14px;
|
||||
margin-left: 5px;
|
||||
vertical-align: top;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div class="root flex-column">
|
||||
<div class="d-flex">
|
||||
<label class="form-group-checkbox">
|
||||
<label>
|
||||
<input
|
||||
type="checkbox"
|
||||
[(ngModel)]="checked"
|
||||
|
@ -33,7 +33,7 @@
|
|||
<div *ngIf="recommended" class="recommended" i18n>Recommended</div>
|
||||
</div>
|
||||
|
||||
<div class="ml-4 d-flex flex-column">
|
||||
<div class="ms-4 d-flex flex-column">
|
||||
<small class="wrapper mt-2 muted">
|
||||
<ng-content select="description"></ng-content>
|
||||
</small>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
.root {
|
||||
display: flex;
|
||||
|
||||
.form-group-checkbox {
|
||||
label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
[searchable]="searchable"
|
||||
>
|
||||
<ng-option *ngFor="let channel of channels" [value]="channel.id">
|
||||
<img alt="" class="avatar mr-1" [src]="channel.avatarPath" />
|
||||
<img alt="" class="avatar me-1" [src]="channel.avatarPath" />
|
||||
{{ channel.label }}
|
||||
</ng-option>
|
||||
</ng-select>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
>
|
||||
|
||||
<ng-template ng-optgroup-tmp let-item="item" let-item$="item$" let-index="index">
|
||||
<div class="form-group-checkbox">
|
||||
<div class="checkbox-wrapper">
|
||||
<input id="item-{{index}}" type="checkbox" [ngModel]="item$.selected"/>
|
||||
<span role="checkbox" [attr.aria-checked]="item$.selected"></span>
|
||||
<span>{{ item.group }}</span>
|
||||
|
@ -30,7 +30,7 @@
|
|||
</ng-template>
|
||||
|
||||
<ng-template ng-option-tmp let-item="item" let-item$="item$" let-index="index">
|
||||
<div class="form-group-checkbox">
|
||||
<div class="checkbox-wrapper">
|
||||
<input id="item-{{index}}" type="checkbox" [ngModel]="item$.selected"/>
|
||||
<span role="checkbox" [attr.aria-checked]="item$.selected"></span>
|
||||
<span>{{ item.label }}</span>
|
||||
|
|
|
@ -7,7 +7,7 @@ ng-select ::ng-deep {
|
|||
align-items: center;
|
||||
}
|
||||
|
||||
.form-group-checkbox {
|
||||
.checkbox-wrapper {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
|
|
|
@ -16,26 +16,3 @@
|
|||
font-size: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
ngb-accordion ::ng-deep {
|
||||
.card {
|
||||
border-color: var(--mainBackgroundColor);
|
||||
|
||||
.card-header {
|
||||
background-color: unset;
|
||||
padding: 0;
|
||||
|
||||
+ .collapse.show {
|
||||
background-color: var(--submenuBackgroundColor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
@include peertube-button;
|
||||
@include grey-button;
|
||||
|
||||
border-radius: unset;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<div *ngIf="serverConfig" class="feature-table">
|
||||
|
||||
<table class="table" *ngIf="serverConfig">
|
||||
<table *ngIf="serverConfig">
|
||||
<caption i18n>Features found on this instance</caption>
|
||||
<tr>
|
||||
<th i18n class="label" scope="row">PeerTube version</th>
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
table {
|
||||
font-size: 14px;
|
||||
color: pvar(--mainForegroundColor);
|
||||
width: 100%;
|
||||
|
||||
.label,
|
||||
.sub-label {
|
||||
|
@ -24,8 +25,10 @@ table {
|
|||
}
|
||||
}
|
||||
|
||||
th,
|
||||
td {
|
||||
vertical-align: middle;
|
||||
padding: 0.75rem;
|
||||
border-top: 1px solid #dee2e6;
|
||||
}
|
||||
|
||||
caption {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="root">
|
||||
<div class="input-group has-feedback has-clear">
|
||||
<div class="input-group has-clear">
|
||||
<input
|
||||
#ref
|
||||
type="text"
|
||||
|
@ -10,8 +10,7 @@
|
|||
[placeholder]="placeholder"
|
||||
>
|
||||
|
||||
<a class="glyphicon glyphicon-remove-sign form-control-feedback form-control-clear" (click)="onResetFilter()"></a>
|
||||
<span class="sr-only" i18n>Clear filters</span>
|
||||
<a class="glyphicon glyphicon-remove-sign form-control-clear" title="Clear filter" i18n-title (click)="onResetFilter()"></a>
|
||||
</div>
|
||||
|
||||
<my-global-icon iconName="search" aria-label="Search" role="button" (click)="onIconClick()" [title]="iconTitle"></my-global-icon>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<span *ngIf="account.mutedByUser" class="badge badge-danger" i18n>Muted</span>
|
||||
<span *ngIf="account.mutedServerByUser" class="badge badge-danger" i18n>Instance muted</span>
|
||||
<span *ngIf="account.mutedByInstance" class="badge badge-danger" i18n>Muted by your instance</span>
|
||||
<span *ngIf="account.mutedServerByInstance" class="badge badge-danger" i18n>Instance muted by your instance</span>
|
||||
<span *ngIf="account.mutedByUser" class="pt-badge badge-danger" i18n>Muted</span>
|
||||
<span *ngIf="account.mutedServerByUser" class="pt-badge badge-danger" i18n>Instance muted</span>
|
||||
<span *ngIf="account.mutedByInstance" class="pt-badge badge-danger" i18n>Muted by your instance</span>
|
||||
<span *ngIf="account.mutedServerByInstance" class="pt-badge badge-danger" i18n>Instance muted by your instance</span>
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue