aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/src/app/shared/forms
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/app/shared/forms')
-rw-r--r--client/src/app/shared/forms/form-validators/custom-config-validators.service.ts72
-rw-r--r--client/src/app/shared/forms/form-validators/custom-config.ts56
-rw-r--r--client/src/app/shared/forms/form-validators/form-validator.service.ts9
-rw-r--r--client/src/app/shared/forms/form-validators/index.ts11
-rw-r--r--client/src/app/shared/forms/form-validators/login-validators.service.ts30
-rw-r--r--client/src/app/shared/forms/form-validators/login.ts18
-rw-r--r--client/src/app/shared/forms/form-validators/reset-password-validators.service.ts20
-rw-r--r--client/src/app/shared/forms/form-validators/reset-password.ts10
-rw-r--r--client/src/app/shared/forms/form-validators/user-validators.service.ts93
-rw-r--r--client/src/app/shared/forms/form-validators/user.ts70
-rw-r--r--client/src/app/shared/forms/form-validators/validator-message.ts5
-rw-r--r--client/src/app/shared/forms/form-validators/video-abuse-validators.service.ts20
-rw-r--r--client/src/app/shared/forms/form-validators/video-abuse.ts10
-rw-r--r--client/src/app/shared/forms/form-validators/video-channel-validators.service.ts48
-rw-r--r--client/src/app/shared/forms/form-validators/video-channel.ts34
-rw-r--r--client/src/app/shared/forms/form-validators/video-comment-validators.service.ts20
-rw-r--r--client/src/app/shared/forms/form-validators/video-comment.ts10
-rw-r--r--client/src/app/shared/forms/form-validators/video-validators.service.ts88
-rw-r--r--client/src/app/shared/forms/form-validators/video.ts68
19 files changed, 404 insertions, 288 deletions
diff --git a/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts b/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts
new file mode 100644
index 000000000..1b36bbc6b
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/custom-config-validators.service.ts
@@ -0,0 +1,72 @@
1import { Validators } from '@angular/forms'
2import { I18n } from '@ngx-translate/i18n-polyfill'
3import { BuildFormValidator } from '@app/shared'
4import { Injectable } from '@angular/core'
5
6@Injectable()
7export class CustomConfigValidatorsService {
8 readonly INSTANCE_NAME: BuildFormValidator
9 readonly INSTANCE_SHORT_DESCRIPTION: BuildFormValidator
10 readonly SERVICES_TWITTER_USERNAME: BuildFormValidator
11 readonly CACHE_PREVIEWS_SIZE: BuildFormValidator
12 readonly SIGNUP_LIMIT: BuildFormValidator
13 readonly ADMIN_EMAIL: BuildFormValidator
14 readonly TRANSCODING_THREADS: BuildFormValidator
15
16 constructor (private i18n: I18n) {
17 this.INSTANCE_NAME = {
18 VALIDATORS: [ Validators.required ],
19 MESSAGES: {
20 'required': this.i18n('Instance name is required.')
21 }
22 }
23
24 this.INSTANCE_SHORT_DESCRIPTION = {
25 VALIDATORS: [ Validators.max(250) ],
26 MESSAGES: {
27 'max': this.i18n('Short description should not be longer than 250 characters.')
28 }
29 }
30
31 this.SERVICES_TWITTER_USERNAME = {
32 VALIDATORS: [ Validators.required ],
33 MESSAGES: {
34 'required': this.i18n('Twitter username is required.')
35 }
36 }
37
38 this.CACHE_PREVIEWS_SIZE = {
39 VALIDATORS: [ Validators.required, Validators.min(1), Validators.pattern('[0-9]+') ],
40 MESSAGES: {
41 'required': this.i18n('Previews cache size is required.'),
42 'min': this.i18n('Previews cache size must be greater than 1.'),
43 'pattern': this.i18n('Previews cache size must be a number.')
44 }
45 }
46
47 this.SIGNUP_LIMIT = {
48 VALIDATORS: [ Validators.required, Validators.min(1), Validators.pattern('[0-9]+') ],
49 MESSAGES: {
50 'required': this.i18n('Signup limit is required.'),
51 'min': this.i18n('Signup limit must be greater than 1.'),
52 'pattern': this.i18n('Signup limit must be a number.')
53 }
54 }
55
56 this.ADMIN_EMAIL = {
57 VALIDATORS: [ Validators.required, Validators.email ],
58 MESSAGES: {
59 'required': this.i18n('Admin email is required.'),
60 'email': this.i18n('Admin email must be valid.')
61 }
62 }
63
64 this.TRANSCODING_THREADS = {
65 VALIDATORS: [ Validators.required, Validators.min(1) ],
66 MESSAGES: {
67 'required': this.i18n('Transcoding threads is required.'),
68 'min': this.i18n('Transcoding threads must be greater than 1.')
69 }
70 }
71 }
72}
diff --git a/client/src/app/shared/forms/form-validators/custom-config.ts b/client/src/app/shared/forms/form-validators/custom-config.ts
deleted file mode 100644
index e3d9a4c7b..000000000
--- a/client/src/app/shared/forms/form-validators/custom-config.ts
+++ /dev/null
@@ -1,56 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const INSTANCE_NAME = {
4 VALIDATORS: [ Validators.required ],
5 MESSAGES: {
6 'required': 'Instance name is required.'
7 }
8}
9
10export const INSTANCE_SHORT_DESCRIPTION = {
11 VALIDATORS: [ Validators.max(250) ],
12 MESSAGES: {
13 'max': 'Short description should not be longer than 250 characters.'
14 }
15}
16
17export const SERVICES_TWITTER_USERNAME = {
18 VALIDATORS: [ Validators.required ],
19 MESSAGES: {
20 'required': 'Twitter username is required.'
21 }
22}
23
24export const CACHE_PREVIEWS_SIZE = {
25 VALIDATORS: [ Validators.required, Validators.min(1), Validators.pattern('[0-9]+') ],
26 MESSAGES: {
27 'required': 'Preview cache size is required.',
28 'min': 'Preview cache size must be greater than 1.',
29 'pattern': 'Preview cache size must be a number.'
30 }
31}
32
33export const SIGNUP_LIMIT = {
34 VALIDATORS: [ Validators.required, Validators.min(1), Validators.pattern('[0-9]+') ],
35 MESSAGES: {
36 'required': 'Signup limit is required.',
37 'min': 'Signup limit must be greater than 1.',
38 'pattern': 'Preview cache size must be a number.'
39 }
40}
41
42export const ADMIN_EMAIL = {
43 VALIDATORS: [ Validators.required, Validators.email ],
44 MESSAGES: {
45 'required': 'Admin email is required.',
46 'email': 'Admin email must be valid.'
47 }
48}
49
50export const TRANSCODING_THREADS = {
51 VALIDATORS: [ Validators.required, Validators.min(1) ],
52 MESSAGES: {
53 'required': 'Transcoding threads is required.',
54 'min': 'Transcoding threads must be greater than 1.'
55 }
56}
diff --git a/client/src/app/shared/forms/form-validators/form-validator.service.ts b/client/src/app/shared/forms/form-validators/form-validator.service.ts
index 5c3d3e4bd..d10e17ca7 100644
--- a/client/src/app/shared/forms/form-validators/form-validator.service.ts
+++ b/client/src/app/shared/forms/form-validators/form-validator.service.ts
@@ -3,11 +3,12 @@ import { Injectable } from '@angular/core'
3import { FormReactiveErrors, FormReactiveValidationMessages } from '@app/shared/forms/form-reactive' 3import { FormReactiveErrors, FormReactiveValidationMessages } from '@app/shared/forms/form-reactive'
4import { I18n } from '@ngx-translate/i18n-polyfill' 4import { I18n } from '@ngx-translate/i18n-polyfill'
5 5
6export type BuildFormValidator = {
7 VALIDATORS: ValidatorFn[],
8 MESSAGES: { [ name: string ]: string }
9}
6export type BuildFormArgument = { 10export type BuildFormArgument = {
7 [ id: string ]: { 11 [ id: string ]: BuildFormValidator
8 VALIDATORS: ValidatorFn[],
9 MESSAGES: { [ name: string ]: string }
10 }
11} 12}
12export type BuildFormDefaultValues = { 13export type BuildFormDefaultValues = {
13 [ name: string ]: string | string[] 14 [ name: string ]: string | string[]
diff --git a/client/src/app/shared/forms/form-validators/index.ts b/client/src/app/shared/forms/form-validators/index.ts
index cf544b2a9..487683088 100644
--- a/client/src/app/shared/forms/form-validators/index.ts
+++ b/client/src/app/shared/forms/form-validators/index.ts
@@ -1,5 +1,10 @@
1export * from './custom-config-validators.service'
1export * from './form-validator.service' 2export * from './form-validator.service'
2export * from './host' 3export * from './host'
3export * from './user' 4export * from './login-validators.service'
4export * from './video-abuse' 5export * from './reset-password-validators.service'
5export * from './video' 6export * from './user-validators.service'
7export * from './video-abuse-validators.service'
8export * from './video-channel-validators.service'
9export * from './video-comment-validators.service'
10export * from './video-validators.service'
diff --git a/client/src/app/shared/forms/form-validators/login-validators.service.ts b/client/src/app/shared/forms/form-validators/login-validators.service.ts
new file mode 100644
index 000000000..9d68f830c
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/login-validators.service.ts
@@ -0,0 +1,30 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { Injectable } from '@angular/core'
4import { BuildFormValidator } from '@app/shared'
5
6@Injectable()
7export class LoginValidatorsService {
8 readonly LOGIN_USERNAME: BuildFormValidator
9 readonly LOGIN_PASSWORD: BuildFormValidator
10
11 constructor (private i18n: I18n) {
12 this.LOGIN_USERNAME = {
13 VALIDATORS: [
14 Validators.required
15 ],
16 MESSAGES: {
17 'required': this.i18n('Username is required.')
18 }
19 }
20
21 this.LOGIN_PASSWORD = {
22 VALIDATORS: [
23 Validators.required
24 ],
25 MESSAGES: {
26 'required': this.i18n('Password is required.')
27 }
28 }
29 }
30}
diff --git a/client/src/app/shared/forms/form-validators/login.ts b/client/src/app/shared/forms/form-validators/login.ts
deleted file mode 100644
index f37f8d285..000000000
--- a/client/src/app/shared/forms/form-validators/login.ts
+++ /dev/null
@@ -1,18 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const LOGIN_USERNAME = {
4 VALIDATORS: [
5 Validators.required
6 ],
7 MESSAGES: {
8 'required': 'Username is required.'
9 }
10}
11export const LOGIN_PASSWORD = {
12 VALIDATORS: [
13 Validators.required
14 ],
15 MESSAGES: {
16 'required': 'Password is required.'
17 }
18}
diff --git a/client/src/app/shared/forms/form-validators/reset-password-validators.service.ts b/client/src/app/shared/forms/form-validators/reset-password-validators.service.ts
new file mode 100644
index 000000000..df206254d
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/reset-password-validators.service.ts
@@ -0,0 +1,20 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { Injectable } from '@angular/core'
4import { BuildFormValidator } from '@app/shared'
5
6@Injectable()
7export class ResetPasswordValidatorsService {
8 readonly RESET_PASSWORD_CONFIRM: BuildFormValidator
9
10 constructor (private i18n: I18n) {
11 this.RESET_PASSWORD_CONFIRM = {
12 VALIDATORS: [
13 Validators.required
14 ],
15 MESSAGES: {
16 'required': this.i18n('Confirmation of the password is required.')
17 }
18 }
19 }
20}
diff --git a/client/src/app/shared/forms/form-validators/reset-password.ts b/client/src/app/shared/forms/form-validators/reset-password.ts
deleted file mode 100644
index 7dafdef9a..000000000
--- a/client/src/app/shared/forms/form-validators/reset-password.ts
+++ /dev/null
@@ -1,10 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const RESET_PASSWORD_CONFIRM = {
4 VALIDATORS: [
5 Validators.required
6 ],
7 MESSAGES: {
8 'required': 'Confirmation of the password is required.'
9 }
10}
diff --git a/client/src/app/shared/forms/form-validators/user-validators.service.ts b/client/src/app/shared/forms/form-validators/user-validators.service.ts
new file mode 100644
index 000000000..bb6ff2068
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/user-validators.service.ts
@@ -0,0 +1,93 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { BuildFormValidator } from '@app/shared'
4import { Injectable } from '@angular/core'
5
6@Injectable()
7export class UserValidatorsService {
8 readonly USER_USERNAME: BuildFormValidator
9 readonly USER_EMAIL: BuildFormValidator
10 readonly USER_PASSWORD: BuildFormValidator
11 readonly USER_VIDEO_QUOTA: BuildFormValidator
12 readonly USER_ROLE: BuildFormValidator
13 readonly USER_DISPLAY_NAME: BuildFormValidator
14 readonly USER_DESCRIPTION: BuildFormValidator
15
16 constructor (private i18n: I18n) {
17
18 this.USER_USERNAME = {
19 VALIDATORS: [
20 Validators.required,
21 Validators.minLength(3),
22 Validators.maxLength(20),
23 Validators.pattern(/^[a-z0-9._]+$/)
24 ],
25 MESSAGES: {
26 'required': this.i18n('Username is required.'),
27 'minlength': this.i18n('Username must be at least 3 characters long.'),
28 'maxlength': this.i18n('Username cannot be more than 20 characters long.'),
29 'pattern': this.i18n('Username should be only lowercase alphanumeric characters.')
30 }
31 }
32
33 this.USER_EMAIL = {
34 VALIDATORS: [ Validators.required, Validators.email ],
35 MESSAGES: {
36 'required': this.i18n('Email is required.'),
37 'email': this.i18n('Email must be valid.')
38 }
39 }
40
41 this.USER_PASSWORD = {
42 VALIDATORS: [
43 Validators.required,
44 Validators.minLength(6),
45 Validators.maxLength(255)
46 ],
47 MESSAGES: {
48 'required': this.i18n('Password is required.'),
49 'minlength': this.i18n('Password must be at least 6 characters long.'),
50 'maxlength': this.i18n('Password cannot be more than 255 characters long.')
51 }
52 }
53
54 this.USER_VIDEO_QUOTA = {
55 VALIDATORS: [ Validators.required, Validators.min(-1) ],
56 MESSAGES: {
57 'required': this.i18n('Video quota is required.'),
58 'min': this.i18n('Quota must be greater than -1.')
59 }
60 }
61
62 this.USER_ROLE = {
63 VALIDATORS: [ Validators.required ],
64 MESSAGES: {
65 'required': this.i18n('User role is required.')
66 }
67 }
68
69 this.USER_DISPLAY_NAME = {
70 VALIDATORS: [
71 Validators.required,
72 Validators.minLength(3),
73 Validators.maxLength(120)
74 ],
75 MESSAGES: {
76 'required': this.i18n('Display name is required.'),
77 'minlength': this.i18n('Display name must be at least 3 characters long.'),
78 'maxlength': this.i18n('Display name cannot be more than 120 characters long.')
79 }
80 }
81
82 this.USER_DESCRIPTION = {
83 VALIDATORS: [
84 Validators.minLength(3),
85 Validators.maxLength(250)
86 ],
87 MESSAGES: {
88 'minlength': this.i18n('Description must be at least 3 characters long.'),
89 'maxlength': this.i18n('Description cannot be more than 250 characters long.')
90 }
91 }
92 }
93}
diff --git a/client/src/app/shared/forms/form-validators/user.ts b/client/src/app/shared/forms/form-validators/user.ts
deleted file mode 100644
index 0973f1b00..000000000
--- a/client/src/app/shared/forms/form-validators/user.ts
+++ /dev/null
@@ -1,70 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const USER_USERNAME = {
4 VALIDATORS: [
5 Validators.required,
6 Validators.minLength(3),
7 Validators.maxLength(20),
8 Validators.pattern(/^[a-z0-9._]+$/)
9 ],
10 MESSAGES: {
11 'required': 'Username is required.',
12 'minlength': 'Username must be at least 3 characters long.',
13 'maxlength': 'Username cannot be more than 20 characters long.',
14 'pattern': 'Username should be only lowercase alphanumeric characters.'
15 }
16}
17export const USER_EMAIL = {
18 VALIDATORS: [ Validators.required, Validators.email ],
19 MESSAGES: {
20 'required': 'Email is required.',
21 'email': 'Email must be valid.'
22 }
23}
24export const USER_PASSWORD = {
25 VALIDATORS: [
26 Validators.required,
27 Validators.minLength(6),
28 Validators.maxLength(255)
29 ],
30 MESSAGES: {
31 'required': 'Password is required.',
32 'minlength': 'Password must be at least 6 characters long.',
33 'maxlength': 'Password cannot be more than 255 characters long.'
34 }
35}
36export const USER_VIDEO_QUOTA = {
37 VALIDATORS: [ Validators.required, Validators.min(-1) ],
38 MESSAGES: {
39 'required': 'Video quota is required.',
40 'min': 'Quota must be greater than -1.'
41 }
42}
43export const USER_ROLE = {
44 VALIDATORS: [ Validators.required ],
45 MESSAGES: {
46 'required': 'User role is required.'
47 }
48}
49export const USER_DISPLAY_NAME = {
50 VALIDATORS: [
51 Validators.required,
52 Validators.minLength(3),
53 Validators.maxLength(120)
54 ],
55 MESSAGES: {
56 'required': 'Display name is required.',
57 'minlength': 'Display name must be at least 3 characters long.',
58 'maxlength': 'Display name cannot be more than 120 characters long.'
59 }
60}
61export const USER_DESCRIPTION = {
62 VALIDATORS: [
63 Validators.minLength(3),
64 Validators.maxLength(250)
65 ],
66 MESSAGES: {
67 'minlength': 'Description must be at least 3 characters long.',
68 'maxlength': 'Description cannot be more than 250 characters long.'
69 }
70}
diff --git a/client/src/app/shared/forms/form-validators/validator-message.ts b/client/src/app/shared/forms/form-validators/validator-message.ts
deleted file mode 100644
index 5ce45833b..000000000
--- a/client/src/app/shared/forms/form-validators/validator-message.ts
+++ /dev/null
@@ -1,5 +0,0 @@
1export type ValidatorMessage = {
2 [ id: string ]: {
3 [ error: string ]: string
4 }
5}
diff --git a/client/src/app/shared/forms/form-validators/video-abuse-validators.service.ts b/client/src/app/shared/forms/form-validators/video-abuse-validators.service.ts
new file mode 100644
index 000000000..774e6a488
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/video-abuse-validators.service.ts
@@ -0,0 +1,20 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { Injectable } from '@angular/core'
4import { BuildFormValidator } from '@app/shared'
5
6@Injectable()
7export class VideoAbuseValidatorsService {
8 readonly VIDEO_ABUSE_REASON: BuildFormValidator
9
10 constructor (private i18n: I18n) {
11 this.VIDEO_ABUSE_REASON = {
12 VALIDATORS: [ Validators.required, Validators.minLength(2), Validators.maxLength(300) ],
13 MESSAGES: {
14 'required': this.i18n('Report reason is required.'),
15 'minlength': this.i18n('Report reason must be at least 2 characters long.'),
16 'maxlength': this.i18n('Report reason cannot be more than 300 characters long.')
17 }
18 }
19 }
20}
diff --git a/client/src/app/shared/forms/form-validators/video-abuse.ts b/client/src/app/shared/forms/form-validators/video-abuse.ts
deleted file mode 100644
index 4b2a2b789..000000000
--- a/client/src/app/shared/forms/form-validators/video-abuse.ts
+++ /dev/null
@@ -1,10 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const VIDEO_ABUSE_REASON = {
4 VALIDATORS: [ Validators.required, Validators.minLength(2), Validators.maxLength(300) ],
5 MESSAGES: {
6 'required': 'Report reason is required.',
7 'minlength': 'Report reason must be at least 2 characters long.',
8 'maxlength': 'Report reason cannot be more than 300 characters long.'
9 }
10}
diff --git a/client/src/app/shared/forms/form-validators/video-channel-validators.service.ts b/client/src/app/shared/forms/form-validators/video-channel-validators.service.ts
new file mode 100644
index 000000000..28b063f89
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/video-channel-validators.service.ts
@@ -0,0 +1,48 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { Injectable } from '@angular/core'
4import { BuildFormValidator } from '@app/shared'
5
6@Injectable()
7export class VideoChannelValidatorsService {
8 readonly VIDEO_CHANNEL_DISPLAY_NAME: BuildFormValidator
9 readonly VIDEO_CHANNEL_DESCRIPTION: BuildFormValidator
10 readonly VIDEO_CHANNEL_SUPPORT: BuildFormValidator
11
12 constructor (private i18n: I18n) {
13 this.VIDEO_CHANNEL_DISPLAY_NAME = {
14 VALIDATORS: [
15 Validators.required,
16 Validators.minLength(3),
17 Validators.maxLength(120)
18 ],
19 MESSAGES: {
20 'required': i18n('Display name is required.'),
21 'minlength': i18n('Display name must be at least 3 characters long.'),
22 'maxlength': i18n('Display name cannot be more than 120 characters long.')
23 }
24 }
25
26 this.VIDEO_CHANNEL_DESCRIPTION = {
27 VALIDATORS: [
28 Validators.minLength(3),
29 Validators.maxLength(500)
30 ],
31 MESSAGES: {
32 'minlength': i18n('Description must be at least 3 characters long.'),
33 'maxlength': i18n('Description cannot be more than 500 characters long.')
34 }
35 }
36
37 this.VIDEO_CHANNEL_SUPPORT = {
38 VALIDATORS: [
39 Validators.minLength(3),
40 Validators.maxLength(500)
41 ],
42 MESSAGES: {
43 'minlength': i18n('Support text must be at least 3 characters long.'),
44 'maxlength': i18n('Support text cannot be more than 500 characters long.')
45 }
46 }
47 }
48}
diff --git a/client/src/app/shared/forms/form-validators/video-channel.ts b/client/src/app/shared/forms/form-validators/video-channel.ts
deleted file mode 100644
index 2185cdaa9..000000000
--- a/client/src/app/shared/forms/form-validators/video-channel.ts
+++ /dev/null
@@ -1,34 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const VIDEO_CHANNEL_DISPLAY_NAME = {
4 VALIDATORS: [
5 Validators.required,
6 Validators.minLength(3),
7 Validators.maxLength(120)
8 ],
9 MESSAGES: {
10 'required': 'Display name is required.',
11 'minlength': 'Display name must be at least 3 characters long.',
12 'maxlength': 'Display name cannot be more than 120 characters long.'
13 }
14}
15export const VIDEO_CHANNEL_DESCRIPTION = {
16 VALIDATORS: [
17 Validators.minLength(3),
18 Validators.maxLength(500)
19 ],
20 MESSAGES: {
21 'minlength': 'Description must be at least 3 characters long.',
22 'maxlength': 'Description cannot be more than 500 characters long.'
23 }
24}
25export const VIDEO_CHANNEL_SUPPORT = {
26 VALIDATORS: [
27 Validators.minLength(3),
28 Validators.maxLength(500)
29 ],
30 MESSAGES: {
31 'minlength': 'Support text must be at least 3 characters long.',
32 'maxlength': 'Support text cannot be more than 500 characters long.'
33 }
34}
diff --git a/client/src/app/shared/forms/form-validators/video-comment-validators.service.ts b/client/src/app/shared/forms/form-validators/video-comment-validators.service.ts
new file mode 100644
index 000000000..45c7081ef
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/video-comment-validators.service.ts
@@ -0,0 +1,20 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { Injectable } from '@angular/core'
4import { BuildFormValidator } from '@app/shared'
5
6@Injectable()
7export class VideoCommentValidatorsService {
8 readonly VIDEO_COMMENT_TEXT: BuildFormValidator
9
10 constructor (private i18n: I18n) {
11 this.VIDEO_COMMENT_TEXT = {
12 VALIDATORS: [ Validators.required, Validators.minLength(1), Validators.maxLength(3000) ],
13 MESSAGES: {
14 'required': this.i18n('Comment is required.'),
15 'minlength': this.i18n('Comment must be at least 2 characters long.'),
16 'maxlength': this.i18n('Comment cannot be more than 3000 characters long.')
17 }
18 }
19 }
20}
diff --git a/client/src/app/shared/forms/form-validators/video-comment.ts b/client/src/app/shared/forms/form-validators/video-comment.ts
deleted file mode 100644
index 290d83195..000000000
--- a/client/src/app/shared/forms/form-validators/video-comment.ts
+++ /dev/null
@@ -1,10 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const VIDEO_COMMENT_TEXT = {
4 VALIDATORS: [ Validators.required, Validators.minLength(1), Validators.maxLength(3000) ],
5 MESSAGES: {
6 'required': 'Comment is required.',
7 'minlength': 'Comment must be at least 2 characters long.',
8 'maxlength': 'Comment cannot be more than 3000 characters long.'
9 }
10}
diff --git a/client/src/app/shared/forms/form-validators/video-validators.service.ts b/client/src/app/shared/forms/form-validators/video-validators.service.ts
new file mode 100644
index 000000000..76fc5cf04
--- /dev/null
+++ b/client/src/app/shared/forms/form-validators/video-validators.service.ts
@@ -0,0 +1,88 @@
1import { I18n } from '@ngx-translate/i18n-polyfill'
2import { Validators } from '@angular/forms'
3import { Injectable } from '@angular/core'
4import { BuildFormValidator } from '@app/shared'
5
6@Injectable()
7export class VideoValidatorsService {
8 readonly VIDEO_NAME: BuildFormValidator
9 readonly VIDEO_PRIVACY: BuildFormValidator
10 readonly VIDEO_CATEGORY: BuildFormValidator
11 readonly VIDEO_LICENCE: BuildFormValidator
12 readonly VIDEO_LANGUAGE: BuildFormValidator
13 readonly VIDEO_IMAGE: BuildFormValidator
14 readonly VIDEO_CHANNEL: BuildFormValidator
15 readonly VIDEO_DESCRIPTION: BuildFormValidator
16 readonly VIDEO_TAGS: BuildFormValidator
17 readonly VIDEO_SUPPORT: BuildFormValidator
18
19 constructor (private i18n: I18n) {
20
21 this.VIDEO_NAME = {
22 VALIDATORS: [ Validators.required, Validators.minLength(3), Validators.maxLength(120) ],
23 MESSAGES: {
24 'required': this.i18n('Video name is required.'),
25 'minlength': this.i18n('Video name must be at least 3 characters long.'),
26 'maxlength': this.i18n('Video name cannot be more than 120 characters long.')
27 }
28 }
29
30 this.VIDEO_PRIVACY = {
31 VALIDATORS: [ Validators.required ],
32 MESSAGES: {
33 'required': this.i18n('Video privacy is required.')
34 }
35 }
36
37 this.VIDEO_CATEGORY = {
38 VALIDATORS: [ ],
39 MESSAGES: {}
40 }
41
42 this.VIDEO_LICENCE = {
43 VALIDATORS: [ ],
44 MESSAGES: {}
45 }
46
47 this.VIDEO_LANGUAGE = {
48 VALIDATORS: [ ],
49 MESSAGES: {}
50 }
51
52 this.VIDEO_IMAGE = {
53 VALIDATORS: [ ],
54 MESSAGES: {}
55 }
56
57 this.VIDEO_CHANNEL = {
58 VALIDATORS: [ Validators.required ],
59 MESSAGES: {
60 'required': this.i18n('Video channel is required.')
61 }
62 }
63
64 this.VIDEO_DESCRIPTION = {
65 VALIDATORS: [ Validators.minLength(3), Validators.maxLength(10000) ],
66 MESSAGES: {
67 'minlength': this.i18n('Video description must be at least 3 characters long.'),
68 'maxlength': this.i18n('Video description cannot be more than 10000 characters long.')
69 }
70 }
71
72 this.VIDEO_TAGS = {
73 VALIDATORS: [ Validators.minLength(2), Validators.maxLength(30) ],
74 MESSAGES: {
75 'minlength': this.i18n('A tag should be more than 2 characters long.'),
76 'maxlength': this.i18n('A tag should be less than 30 characters long.')
77 }
78 }
79
80 this.VIDEO_SUPPORT = {
81 VALIDATORS: [ Validators.minLength(3), Validators.maxLength(500) ],
82 MESSAGES: {
83 'minlength': this.i18n('Video support must be at least 3 characters long.'),
84 'maxlength': this.i18n('Video support cannot be more than 500 characters long.')
85 }
86 }
87 }
88}
diff --git a/client/src/app/shared/forms/form-validators/video.ts b/client/src/app/shared/forms/form-validators/video.ts
deleted file mode 100644
index a986243df..000000000
--- a/client/src/app/shared/forms/form-validators/video.ts
+++ /dev/null
@@ -1,68 +0,0 @@
1import { Validators } from '@angular/forms'
2
3export const VIDEO_NAME = {
4 VALIDATORS: [ Validators.required, Validators.minLength(3), Validators.maxLength(120) ],
5 MESSAGES: {
6 'required': 'Video name is required.',
7 'minlength': 'Video name must be at least 3 characters long.',
8 'maxlength': 'Video name cannot be more than 120 characters long.'
9 }
10}
11
12export const VIDEO_PRIVACY = {
13 VALIDATORS: [ Validators.required ],
14 MESSAGES: {
15 'required': 'Video privacy is required.'
16 }
17}
18
19export const VIDEO_CATEGORY = {
20 VALIDATORS: [ ],
21 MESSAGES: {}
22}
23
24export const VIDEO_LICENCE = {
25 VALIDATORS: [ ],
26 MESSAGES: {}
27}
28
29export const VIDEO_LANGUAGE = {
30 VALIDATORS: [ ],
31 MESSAGES: {}
32}
33
34export const VIDEO_IMAGE = {
35 VALIDATORS: [ ],
36 MESSAGES: {}
37}
38
39export const VIDEO_CHANNEL = {
40 VALIDATORS: [ Validators.required ],
41 MESSAGES: {
42 'required': 'Video channel is required.'
43 }
44}
45
46export const VIDEO_DESCRIPTION = {
47 VALIDATORS: [ Validators.minLength(3), Validators.maxLength(10000) ],
48 MESSAGES: {
49 'minlength': 'Video description must be at least 3 characters long.',
50 'maxlength': 'Video description cannot be more than 10000 characters long.'
51 }
52}
53
54export const VIDEO_TAGS = {
55 VALIDATORS: [ Validators.minLength(2), Validators.maxLength(30) ],
56 MESSAGES: {
57 'minlength': 'A tag should be more than 2 characters long.',
58 'maxlength': 'A tag should be less than 30 characters long.'
59 }
60}
61
62export const VIDEO_SUPPORT = {
63 VALIDATORS: [ Validators.minLength(3), Validators.maxLength(500) ],
64 MESSAGES: {
65 'minlength': 'Video support must be at least 3 characters long.',
66 'maxlength': 'Video support cannot be more than 500 characters long.'
67 }
68}