From c5dcdab330b1767c0ce25d788ed51119f74e7e71 Mon Sep 17 00:00:00 2001
From: Rigel Kent <sendmemail@rigelk.eu>
Date: Sat, 21 Nov 2020 12:43:53 +0100
Subject: add explicit numbers in configuration number inputs

fixes #1346
---
 .../edit-custom-config.component.html              | 58 ++++++++++++++--------
 .../edit-custom-config.component.scss              | 11 ++++
 .../video-comment-list.component.html              |  4 +-
 3 files changed, 50 insertions(+), 23 deletions(-)

(limited to 'client/src')

diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html
index e0361fbfd..09539fa92 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html
+++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.html
@@ -362,10 +362,13 @@
 
                     <div [ngClass]="{ 'disabled-checkbox-extra': !isSignupEnabled() }" class="mt-3">
                       <label i18n for="signupLimit">Signup limit</label>
-                      <input
-                        type="number" min="-1" id="signupLimit" class="form-control"
-                        formControlName="limit" [ngClass]="{ 'input-error': formErrors['signup.limit'] }"
-                      >
+                      <div class="number-with-unit">
+                        <input
+                          type="number" min="-1" id="signupLimit" class="form-control"
+                          formControlName="limit" [ngClass]="{ 'input-error': formErrors['signup.limit'] }"
+                        >
+                        <span i18n>{form.value['signup']['limit'], plural, =1 {user} other {users}}</span>
+                      </div>
                       <div *ngIf="formErrors.signup.limit" class="form-error">{{ formErrors.signup.limit }}</div>
                       <small *ngIf="form.value['signup']['limit'] === -1" class="text-muted">Signup won't be limited to a fixed number of users.</small>
                     </div>
@@ -743,22 +746,29 @@
 
                     <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }">
                       <label i18n for="liveMaxInstanceLives">Max lives created on your instance (-1 for "unlimited")</label>
-                      <input type="number" name="liveMaxInstanceLives" formControlName="maxInstanceLives" />
+                      <div class="number-with-unit">
+                        <input type="number" name="liveMaxInstanceLives" formControlName="maxInstanceLives" />
+                        <span i18n>{form.value['live']['maxInstanceLives'], plural, =1 {live} other {lives}}</span>
+                      </div>
                     </div>
 
                     <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }">
                       <label i18n for="liveMaxUserLives">Max lives created per user (-1 for "unlimited")</label>
-                      <input type="number" name="liveMaxUserLives" formControlName="maxUserLives" />
+                      <div class="number-with-unit">
+                        <input type="number" name="liveMaxUserLives" formControlName="maxUserLives" />
+                        <span i18n>{form.value['live']['maxUserLives'], plural, =1 {live} other {lives}}</span>
+                      </div>
                     </div>
 
                     <div class="form-group" [ngClass]="{ 'disabled-checkbox-extra': !isLiveEnabled() }">
                       <label i18n for="liveMaxDuration">Max live duration</label>
                       <div class="peertube-select-container">
-                        <select id="liveMaxDuration" formControlName="maxDuration" class="form-control">
-                          <option *ngFor="let liveMaxDurationOption of liveMaxDurationOptions" [value]="liveMaxDurationOption.value">
-                            {{ liveMaxDurationOption.label }}
-                          </option>
-                        </select>
+                        <ng-select
+                          labelForId="liveMaxDuration" [items]="liveMaxDurationOptions" formControlName="maxDuration"
+                          bindLabel="label" bindValue="value"
+                          [clearable]="false"
+                          [searchable]="false"
+                        ></ng-select>
                       </div>
                     </div>
 
@@ -780,7 +790,7 @@
                         <div class="peertube-select-container">
                           <select id="liveTranscodingThreads" formControlName="threads" class="form-control">
                             <option *ngFor="let transcodingThreadOption of transcodingThreadOptions" [value]="transcodingThreadOption.value">
-                              {{ transcodingThreadOption.label }}
+                              {{ transcodingThreadOption.label }} {transcodingThreadOption.value, plural, =0 {} =1 {thread} other {threads}}
                             </option>
                           </select>
                         </div>
@@ -922,7 +932,7 @@
                 <div class="peertube-select-container">
                   <select id="transcodingThreads" formControlName="threads" class="form-control">
                     <option *ngFor="let transcodingThreadOption of transcodingThreadOptions" [value]="transcodingThreadOption.value">
-                      {{ transcodingThreadOption.label }}
+                      {{ transcodingThreadOption.label }} {transcodingThreadOption.value, plural, =0 {} =1 {thread} other {threads}}
                     </option>
                   </select>
                 </div>
@@ -968,19 +978,25 @@
             <ng-container formGroupName="cache">
               <div class="form-group" formGroupName="previews">
                 <label i18n for="cachePreviewsSize">Number of previews to keep in cache</label>
-                <input
-                  type="number" min="0" id="cachePreviewsSize" class="form-control"
-                  formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.previews.size'] }"
-                >
+                <div class="number-with-unit">
+                  <input
+                    type="number" min="0" id="cachePreviewsSize" class="form-control"
+                    formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.previews.size'] }"
+                  >
+                  <span i18n>{form.value['cache']['previews']['size'], plural, =1 {cached image} other {cached images}}</span>
+                </div>
                 <div *ngIf="formErrors.cache.previews.size" class="form-error">{{ formErrors.cache.previews.size }}</div>
               </div>
 
               <div class="form-group" formGroupName="captions">
                 <label i18n for="cacheCaptionsSize">Number of video captions to keep in cache</label>
-                <input
-                  type="number" min="0" id="cacheCaptionsSize" class="form-control"
-                  formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.captions.size'] }"
-                >
+                <div class="number-with-unit">
+                  <input
+                    type="number" min="0" id="cacheCaptionsSize" class="form-control"
+                    formControlName="size" [ngClass]="{ 'input-error': formErrors['cache.captions.size'] }"
+                  >
+                  <span i18n>{form.value['cache']['captions']['size'], plural, =1 {cached image} other {cached images}}</span>
+                </div>
                 <div *ngIf="formErrors.cache.captions.size" class="form-error">{{ formErrors.cache.captions.size }}</div>
               </div>
             </ng-container>
diff --git a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.scss b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.scss
index 14cd6bd8b..d5352b472 100644
--- a/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.scss
+++ b/client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.scss
@@ -22,6 +22,17 @@ input[type=number] {
   display: block;
 }
 
+.number-with-unit {
+  position: relative;
+  width: min-content;
+
+  input[type=number] + span {
+    position: absolute;
+    top: 5px;
+    right: 2.5rem;
+  }
+}
+
 input[type=checkbox] {
   @include peertube-checkbox(1px);
 }
diff --git a/client/src/app/+admin/moderation/video-comment-list/video-comment-list.component.html b/client/src/app/+admin/moderation/video-comment-list/video-comment-list.component.html
index 8b7c12ba3..8ec4ebbb2 100644
--- a/client/src/app/+admin/moderation/video-comment-list/video-comment-list.component.html
+++ b/client/src/app/+admin/moderation/video-comment-list/video-comment-list.component.html
@@ -105,11 +105,11 @@
         <a [href]="videoComment.localUrl" target="_blank" rel="noopener noreferrer">{{ videoComment.video.name }}</a>
       </td>
 
-      <td class="comment-html">
+      <td class="comment-html c-hand" [pRowToggler]="videoComment">
         <div [innerHTML]="videoComment.textHtml"></div>
       </td>
 
-      <td>{{ videoComment.createdAt | date: 'short' }}</td>
+      <td class="c-hand" [pRowToggler]="videoComment">{{ videoComment.createdAt | date: 'short' }}</td>
     </tr>
   </ng-template>
 
-- 
cgit v1.2.3