Migrate to bootstrap 5

This commit is contained in:
Chocobozzz 2022-06-08 16:14:24 +02:00
parent b89b0bfce9
commit 4c8749cb9e
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
128 changed files with 730 additions and 855 deletions

View File

@ -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",

View File

@ -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>

View File

@ -15,6 +15,7 @@ a {
.no-results {
justify-content: flex-start;
align-items: flex-start;
}
.show-more {

View File

@ -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>

View File

@ -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);
}
}
}

View File

@ -1,4 +1,4 @@
<div class="row">
<div>
<div class="sub-menu" [ngClass]="{ 'sub-menu-fixed': !isBroadcastMessageDisplayed }">
<div class="links">

View File

@ -1,4 +1,4 @@
<h1 class="sr-only" i18n>Video channels</h1>
<h1 class="visually-hidden" i18n>Video channels</h1>
<div class="margin-content">

View File

@ -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>

View File

@ -93,6 +93,10 @@ my-user-moderation-dropdown {
}
}
.pt-badge {
@include margin-right(5px);
}
@media screen and (max-width: $small-view) {
.root {
--myGlobalTopPadding: 45px;

View File

@ -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">

View File

@ -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">

View File

@ -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">

View File

@ -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%;

View File

@ -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>

View File

@ -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>

View File

@ -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"

View File

@ -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()">

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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,9 +76,9 @@
</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="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
@ -205,21 +205,21 @@
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
</form>
<div *ngIf="isInBigView()" class="col-7">
<div class="d-none d-xxl-block col-7">
<ng-template *ngTemplateOutlet="dashboard"></ng-template>
</div>
</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">

View File

@ -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()

View File

@ -1,21 +1,17 @@
<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'] }"
>
<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>
<input type="submit" value="{{ getFormButtonTitle() }}" [disabled]="!form.valid">
</form>

View File

@ -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;
}

View File

@ -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">

View File

@ -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 {

View File

@ -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>

View File

@ -7,10 +7,8 @@ my-embed {
width: 50%;
}
.badge {
@include peertube-badge;
margin-right: 5px;
.pt-badge {
@include margin-right(5px);
}
.video-info > div {

View File

@ -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>

View File

@ -22,11 +22,10 @@
}
}
.badge {
.pt-badge {
@include margin-left(15px);
font-size: 13px;
font-weight: $font-semibold;
}
.alert {

View File

@ -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>

View File

@ -55,7 +55,3 @@ pre {
.job-error {
color: #ff0000;
}
.select-filter-block .badge {
@include peertube-badge;
}

View File

@ -3,13 +3,13 @@
<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
@ -25,14 +25,13 @@
<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'] }}
@ -86,7 +85,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">

View File

@ -24,16 +24,7 @@ my-actor-banner-edit {
max-width: 500px;
}
.input-group {
@include peertube-input-group(fit-content);
}
.input-group-append {
height: 30px;
}
input {
&[type=text] {
input[type=text] {
@include peertube-input-text(340px);
display: block;
@ -42,13 +33,12 @@ input {
width: auto;
flex-grow: 1;
}
}
}
&[type=submit] {
input[type=submit] {
@include peertube-button;
@include orange-button;
@include margin-left(auto);
}
}
textarea {

View File

@ -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">

View File

@ -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>

View File

@ -6,10 +6,6 @@ label {
font-size: 100%;
}
.form-group:first-child {
margin-bottom: 15px;
}
input#username + .muted {
margin-top: 5px;
}

View File

@ -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>

View File

@ -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;
}

View File

@ -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 }">

View File

@ -1,7 +1,7 @@
@use '_variables' as *;
@use '_mixins' as *;
.row {
.root {
@include sub-menu-h1;
flex-direction: column;

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -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 }">

View File

@ -1,7 +1,7 @@
@use '_variables' as *;
@use '_mixins' as *;
.row {
.root {
@include sub-menu-h1;
flex-direction: column;

View File

@ -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>

View File

@ -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>

View File

@ -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">

View File

@ -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>

View File

@ -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()"

View File

@ -4,7 +4,3 @@
p-autocomplete {
display: block;
}
.form-group {
margin: 20px 0;
}

View File

@ -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>

View File

@ -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.

View File

@ -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()"

View File

@ -22,10 +22,6 @@ form {
margin-bottom: 1rem;
}
.form-group {
margin-bottom: 25px;
}
input[type=text] {
@include peertube-input-text(100%);
display: block;

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -1,5 +1,5 @@
<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>

View File

@ -27,10 +27,8 @@
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>
</div>
<div class="name-information" i18n>
The username is a unique identifier of your account on this and all the other instances. It's as unique as an email address, which makes it easy for other people to interact with it.

View File

@ -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;

View File

@ -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 {

View File

@ -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>

View File

@ -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)"

View File

@ -17,9 +17,8 @@ form {
@include margin-right(10px);
}
.form-group {
.textarea-wrapper {
flex-grow: 1;
margin: 0;
position: relative;
}

View File

@ -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>

View File

@ -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>

View File

@ -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.

View File

@ -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">

View File

@ -15,11 +15,16 @@
.playlist-info {
padding: 5px 30px;
background-color: pvar(--greyBackgroundColor);
}
.playlist-display-name {
font-size: 18px;
font-weight: $font-semibold;
margin-bottom: 5px;
.pt-badge {
@include margin-left(5px);
}
}
.playlist-by-index {
@ -54,7 +59,6 @@
}
}
}
}
my-video-playlist-element-miniature {
::ng-deep {

View File

@ -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 }}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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)">&copy;</span> 2015-2022

View File

@ -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>

View File

@ -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>

View File

@ -13,7 +13,3 @@ input[type=text] {
@include peertube-input-text(100%);
display: block;
}
.form-group {
margin: 20px 0;
}

View File

@ -17,9 +17,9 @@
</a>
<a [routerLink]="[ '.' ]" [queryParams]="{ 'search': 'reporter:&quot;' + abuse.reporterAccount.displayName + '&quot;' }"
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:&quot;' +abuse.flaggedAccount.displayName + '&quot;' }"
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>

View File

@ -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>

View File

@ -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>

View File

@ -3,35 +3,35 @@
.actor {
display: flex;
}
my-actor-avatar {
my-actor-avatar {
@include margin-right(15px);
}
}
.actor-info {
.actor-info {
display: inline-flex;
flex-direction: column;
}
.actor-info-display-name {
.actor-info-display-name {
font-size: 20px;
font-weight: $font-bold;
@media screen and (max-width: $small-view) {
font-size: 16px;
}
}
}
.actor-info-username {
.actor-info-username {
position: relative;
font-size: 14px;
color: pvar(--greyForegroundColor);
}
}
.actor-info-followers {
.actor-info-followers {
font-size: 15px;
padding-bottom: .5rem;
}
}
}
.actor-img-edit-container {

View File

@ -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>

View File

@ -23,7 +23,6 @@ my-global-icon {
width: 18px;
height: 18px;
&.no-visible {
@include margin-right($size + $margin);

View File

@ -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>

View File

@ -1,11 +1,10 @@
<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>
@ -15,7 +14,6 @@
class="btn btn-outline-secondary text-uppercase" i18n-title title="Copy"
>
<span class="glyphicon glyphicon-duplicate"></span>
Copy
<span class="copy-text">Copy</span>
</button>
</div>
</div>

View File

@ -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;
}

View File

@ -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>

View File

@ -4,7 +4,7 @@
.root {
display: flex;
.form-group-checkbox {
label {
display: flex;
align-items: center;

View File

@ -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>

View File

@ -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>

View File

@ -7,7 +7,7 @@ ng-select ::ng-deep {
align-items: center;
}
.form-group-checkbox {
.checkbox-wrapper {
display: flex;
align-items: center;

View File

@ -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%;
}
}

View File

@ -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>

View File

@ -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 {

View File

@ -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>

View File

@ -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