]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Handle input error in markdown textarea
authorChocobozzz <me@florianbigard.com>
Mon, 20 Jun 2022 13:56:16 +0000 (15:56 +0200)
committerChocobozzz <me@florianbigard.com>
Mon, 20 Jun 2022 13:56:16 +0000 (15:56 +0200)
13 files changed:
client/src/app/+admin/config/edit-custom-config/edit-basic-configuration.component.html
client/src/app/+admin/config/edit-custom-config/edit-custom-config.component.scss
client/src/app/+admin/config/edit-custom-config/edit-homepage.component.html
client/src/app/+admin/config/edit-custom-config/edit-instance-information.component.html
client/src/app/+manage/video-channel-edit/video-channel-edit.component.html
client/src/app/+manage/video-channel-edit/video-channel-edit.component.scss
client/src/app/+my-library/my-video-playlists/my-video-playlist-edit.component.html
client/src/app/+videos/+video-edit/shared/video-edit.component.html
client/src/app/shared/shared-forms/dynamic-form-field.component.html
client/src/app/shared/shared-forms/dynamic-form-field.component.scss
client/src/app/shared/shared-forms/markdown-textarea.component.html
client/src/app/shared/shared-forms/markdown-textarea.component.ts
client/src/sass/class-helpers.scss

index 68126281fd144b8c2c014339e0acd2cd121ae664..315cd1749f50f468af4ba67da38548f0c7c77243 100644 (file)
           <label i18n for="broadcastMessageMessage">Message</label><my-help helpType="markdownText"></my-help>
 
           <my-markdown-textarea
-            name="broadcastMessageMessage" formControlName="message" textareaMaxWidth="500px"
-            [classes]="{ 'input-error': formErrors['broadcastMessage.message'] }"
+            name="broadcastMessageMessage" formControlName="message"
+            [formError]="formErrors['broadcastMessage.message']"
           ></my-markdown-textarea>
 
           <div *ngIf="formErrors.broadcastMessage.message" class="form-error">{{ formErrors.broadcastMessage.message }}</div>
index f3bce8ee0c68e76ab99af1ba21431ea30b9cb055..df523cedc28094e43164b242858c1d506a01de35 100644 (file)
@@ -7,12 +7,21 @@ form {
   padding-bottom: 1.5rem;
 }
 
-input[type=text] {
-  @include peertube-input-text($form-base-input-width);
+my-markdown-textarea {
+  display: block;
+  max-width: 500px;
+}
 
+.homepage my-markdown-textarea {
   display: block;
+  max-width: 90%;
+
+  ::ng-deep textarea {
+    height: 300px !important;
+  }
 }
 
+input[type=text],
 input[type=number] {
   @include peertube-input-text($form-base-input-width);
 
index 701c3c0c10b18ae78042f5746cce041676d99aed..5339240bb15253e94a797e2876459be5f521adb9 100644 (file)
@@ -2,7 +2,7 @@
 
   <ng-container formGroupName="instanceCustomHomepage">
 
-    <div class="row mt-5"> <!-- homepage grid -->
+    <div class="homepage 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>
@@ -16,9 +16,9 @@
           </div>
 
           <my-markdown-textarea
-            name="instanceCustomHomepageContent" formControlName="content" textareaMaxWidth="90%" textareaHeight="300px"
+            name="instanceCustomHomepageContent" formControlName="content"
             [customMarkdownRenderer]="getCustomMarkdownRenderer()"
-            [classes]="{ 'input-error': formErrors['instanceCustomHomepage.content'] }"
+            [formError]="formErrors['instanceCustomHomepage.content']"
           ></my-markdown-textarea>
 
           <div *ngIf="formErrors.instanceCustomHomepage.content" class="form-error">{{ formErrors.instanceCustomHomepage.content }}</div>
index 5931cb459b69e11545aeb6f7707d7d32d5cf7e1c..b54733327f0278a06233199c4b341e978b86d052 100644 (file)
           </div>
 
           <my-markdown-textarea
-            name="instanceDescription" formControlName="description" textareaMaxWidth="500px"
+            name="instanceDescription" formControlName="description"
             [customMarkdownRenderer]="getCustomMarkdownRenderer()"
-            [classes]="{ 'input-error': formErrors['instance.description'] }"
+            [formError]="formErrors['instance.description']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.description" class="form-error">{{ formErrors.instance.description }}</div>
         </div>
 
         <div class="form-group">
           <label i18n for="instanceTerms">Terms</label><my-help helpType="markdownText"></my-help>
 
           <my-markdown-textarea
-            name="instanceTerms" formControlName="terms" textareaMaxWidth="500px"
-            [ngClass]="{ 'input-error': formErrors['instance.terms'] }"
+            name="instanceTerms" formControlName="terms"
+            [formError]="formErrors['instance.terms']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.terms" class="form-error">{{ formErrors.instance.terms }}</div>
         </div>
 
         <div class="form-group">
           <label i18n for="instanceCodeOfConduct">Code of conduct</label><my-help helpType="markdownText"></my-help>
 
           <my-markdown-textarea
-            name="instanceCodeOfConduct" formControlName="codeOfConduct" textareaMaxWidth="500px"
-            [ngClass]="{ 'input-error': formErrors['instance.codeOfConduct'] }"
+            name="instanceCodeOfConduct" formControlName="codeOfConduct"
+            [formError]="formErrors['instance.codeOfConduct']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.codeOfConduct" class="form-error">{{ formErrors.instance.codeOfConduct }}</div>
         </div>
 
         <div class="form-group">
           <div i18n class="label-small-info">Who moderates the instance? What is the policy regarding NSFW videos? Political videos? etc</div>
 
           <my-markdown-textarea
-            name="instanceModerationInformation" formControlName="moderationInformation" textareaMaxWidth="500px"
-            [ngClass]="{ 'input-error': formErrors['instance.moderationInformation'] }"
+            name="instanceModerationInformation" formControlName="moderationInformation"
+            [formError]="formErrors['instance.moderationInformation']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.moderationInformation" class="form-error">{{ formErrors.instance.moderationInformation }}</div>
         </div>
 
       </div>
           <div i18n class="label-small-info">A single person? A non-profit? A company?</div>
 
           <my-markdown-textarea
-            name="instanceAdministrator" formControlName="administrator" textareaMaxWidth="500px"
-            [classes]="{ 'input-error': formErrors['instance.administrator'] }"
+            name="instanceAdministrator" formControlName="administrator"
+            [formError]="formErrors['instance.administrator']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.administrator" class="form-error">{{ formErrors.instance.administrator }}</div>
         </div>
 
         <div class="form-group">
           <div i18n class="label-small-info">To share your personal videos? To open registrations and allow people to upload what they want?</div>
 
           <my-markdown-textarea
-            name="instanceCreationReason" formControlName="creationReason" textareaMaxWidth="500px"
-            [ngClass]="{ 'input-error': formErrors['instance.creationReason'] }"
+            name="instanceCreationReason" formControlName="creationReason"
+            [formError]="formErrors['instance.creationReason']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.creationReason" class="form-error">{{ formErrors.instance.creationReason }}</div>
         </div>
 
         <div class="form-group">
           <div i18n class="label-small-info">It's important to know for users who want to register on your instance</div>
 
           <my-markdown-textarea
-            name="instanceMaintenanceLifetime" formControlName="maintenanceLifetime" textareaMaxWidth="500px"
-            [ngClass]="{ 'input-error': formErrors['instance.maintenanceLifetime'] }"
+            name="instanceMaintenanceLifetime" formControlName="maintenanceLifetime"
+            [formError]="formErrors['instance.maintenanceLifetime']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.maintenanceLifetime" class="form-error">{{ formErrors.instance.maintenanceLifetime }}</div>
         </div>
 
         <div class="form-group">
           <div i18n class="label-small-info">With your own funds? With user donations? Advertising?</div>
 
           <my-markdown-textarea
-            name="instanceBusinessModel" formControlName="businessModel" textareaMaxWidth="500px"
-            [ngClass]="{ 'input-error': formErrors['instance.businessModel'] }"
+            name="instanceBusinessModel" formControlName="businessModel"
+            [formError]="formErrors['instance.businessModel']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.businessModel" class="form-error">{{ formErrors.instance.businessModel }}</div>
         </div>
 
       </div>
           <div i18n class="label-small-info">i.e. 2vCore 2GB RAM, a direct the link to the server you rent, etc.</div>
 
           <my-markdown-textarea
-            name="instanceHardwareInformation" formControlName="hardwareInformation" textareaMaxWidth="500px"
-            [classes]="{ 'input-error': formErrors['instance.hardwareInformation'] }"
+            name="instanceHardwareInformation" formControlName="hardwareInformation"
+            [formError]="formErrors['instance.hardwareInformation']"
           ></my-markdown-textarea>
-
-          <div *ngIf="formErrors.instance.hardwareInformation" class="form-error">{{ formErrors.instance.hardwareInformation }}</div>
         </div>
 
       </div>
index 420881f5a2001738b0b9a58dc4e8974038b99edc..b557fb011d1eebe8976ab178e7be0772ebe26363 100644 (file)
@@ -68,7 +68,7 @@
           ></my-help>
 
           <my-markdown-textarea
-            id="support" formControlName="support" textareaMaxWidth="500px" markdownType="enhanced"
+            id="support" formControlName="support" markdownType="enhanced"
             [formError]="formErrors['support']"
           ></my-markdown-textarea>
         </div>
index 008397a7a118bccbd140e835402632d19c5bc364..cde848da610daf9e4a657c0d61dbe09a1782b13f 100644 (file)
@@ -42,6 +42,11 @@ textarea {
   display: block;
 }
 
+my-markdown-textarea {
+  display: block;
+  max-width: 500px;
+}
+
 .peertube-select-container {
   @include peertube-select-container(340px);
 }
index 35682cf81bbc32005631456c8f53bebe28b56b18..e867f63b817b8642d51cc2363342bd2e249f8fff 100644 (file)
 
         <div class="form-group">
           <label i18n for="description">Description</label><my-help helpType="markdownText"></my-help>
-          <my-markdown-textarea
-            id="description" formControlName="description"
-            [ngClass]="{ 'input-error': formErrors['description'] }"
-          ></my-markdown-textarea>
-          <div *ngIf="formErrors.description" class="form-error">
-            {{ formErrors.description }}
-          </div>
+          <my-markdown-textarea id="description" formControlName="description" [formError]="formErrors['description']"></my-markdown-textarea>
         </div>
       </div>
 
index b99e430ddb245be9bfae40b317d8f6607aaac701..595200c3be5e5cf1ebbe13da5c2a640bb99a7dda 100644 (file)
                 </ng-template>
               </my-help>
 
-              <my-markdown-textarea [truncate]="250" formControlName="description" [markdownVideo]="videoToUpdate"></my-markdown-textarea>
-
-              <div *ngIf="formErrors.description" class="form-error">
-                {{ formErrors.description }}
-              </div>
+              <my-markdown-textarea
+                formControlName="description" [markdownVideo]="videoToUpdate"
+                [formError]="formErrors.description" [truncate]="250"
+              ></my-markdown-textarea>
             </div>
           </div>
 
                   </ng-container>
                 </ng-template>
               </my-help>
+
               <my-markdown-textarea
                 id="support" formControlName="support" markdownType="enhanced"
-                [classes]="{ 'input-error': formErrors['support'] }"
+                [formError]="formErrors['support']"
               ></my-markdown-textarea>
-              <div *ngIf="formErrors.support" class="form-error">
-                {{ formErrors.support }}
-              </div>
             </div>
           </div>
 
index 2ec436ac6baa0927076bdda2d7560f139b99fed3..61f9ae8ff7bf07b28ffa6f4c48fccbe61eb45ecb 100644 (file)
 
   <my-markdown-textarea
     *ngIf="setting.type === 'markdown-text'"
-    markdownType="text" [id]="setting.name" [formControlName]="setting.name" textareaWidth="500px"
-    [classes]="{ 'input-error': formErrors['settings.name'] }"
+    markdownType="text" [id]="setting.name" [formControlName]="setting.name"
+    [formError]="formErrors['settings.name']"
   ></my-markdown-textarea>
 
   <my-markdown-textarea
     *ngIf="setting.type === 'markdown-enhanced'"
-    markdownType="enhanced" [id]="setting.name" [formControlName]="setting.name" textareaWidth="500px"
-    [classes]="{ 'input-error': formErrors['settings.name'] }"
+    markdownType="enhanced" [id]="setting.name" [formControlName]="setting.name"
+    [formError]="formErrors['settings.name']"
   ></my-markdown-textarea>
 
   <div *ngIf="setting.type === 'html'" [innerHTML]="setting.html"></div>
 
-  <div *ngIf="formErrors[setting.name]" class="form-error">
+  <div *ngIf="setting.type !== 'markdown-text' && setting.type !== 'markdown-enhanced' && formErrors[setting.name]" class="form-error">
     {{ formErrors[setting.name] }}
   </div>
 
index 31bf59edb0765a421b47e18131fcc3fce9adb0f7..0737f372ac0d786e60c3fd6dd2ed1007b7871d4e 100644 (file)
@@ -26,3 +26,8 @@ textarea {
 my-peertube-checkbox + .label-small-info {
   margin-top: 5px;
 }
+
+my-markdown-textarea {
+  display: block;
+  max-width: 500px;
+}
index afb046c7fc2f8f576b7a3205de2e47bbbb4182c9..5a9ff1a156189596124248d4a738e76216b20e24 100644 (file)
@@ -1,10 +1,9 @@
-<div class="root" [ngClass]="{ 'maximized': isMaximized }" [ngStyle]="{ 'max-width': textareaMaxWidth }">
+<div class="root" [ngClass]="{ 'maximized': isMaximized }">
 
   <textarea #textarea
     [(ngModel)]="content" (ngModelChange)="onModelChange()"
     class="form-control" [ngClass]="{ 'input-error': formError }"
     [attr.disabled]="disabled || null"
-    [ngStyle]="{ height: textareaHeight }"
     [id]="name" [name]="name">
   </textarea>
 
index 5a603c1577ec7c63b2cb0f8a43a3a411778f0c96..0899918848b59a20a735c8a2d042ecd9fd30448b 100644 (file)
@@ -25,10 +25,6 @@ export class MarkdownTextareaComponent implements ControlValueAccessor, OnInit {
   @Input() content = ''
 
   @Input() formError: string
-  @Input() classes: string[] | { [klass: string]: any[] | any } = []
-
-  @Input() textareaMaxWidth = '100%'
-  @Input() textareaHeight = '150px'
 
   @Input() truncate: number
 
index 87ad6a45d9d9bf137fba5c2d5507efdd2f92a120..f09d848829a9677c89b9098665546b4ec7e3d271 100644 (file)
 }
 
 .input-error:not(:focus) {
-  border-color: $red !important;
+  &,
+  & + .nav-preview, // Markdown textarea
+  & + * + .tab-content {
+    border-color: $red !important;
+  }
 }
 
 .form-error,
   color: $red;
 }
 
-.input-error:focus + .form-error {
-  color: pvar(--mainForegroundColor);
+.input-error:focus {
+  & + .form-error,
+  & + * + .form-error, // Markdown textarea
+  & + * + * + .form-error {
+    color: pvar(--mainForegroundColor);
+  }
 }
 
 .form-group-description {