]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Relax on tags (accept any characters and not required anymore)
authorChocobozzz <florian.bigard@gmail.com>
Wed, 22 Mar 2017 20:47:05 +0000 (21:47 +0100)
committerChocobozzz <florian.bigard@gmail.com>
Wed, 22 Mar 2017 20:56:02 +0000 (21:56 +0100)
client/src/app/shared/forms/form-validators/video.ts
client/src/app/videos/video-add/video-add.component.ts
client/src/app/videos/video-list/video-miniature.component.scss
server/helpers/custom-validators/videos.js
server/initializers/constants.js
server/middlewares/validators/videos.js
server/tests/api/check-params/videos.js

index d972ee44bf548c2e1a1d4cc719dccca716ad05f5..de5112238083910a9dc8dc6a046bc386e213597c 100644 (file)
@@ -24,8 +24,8 @@ export const VIDEO_DESCRIPTION = {
 };
 
 export const VIDEO_TAGS = {
-  VALIDATORS: [ Validators.pattern('^[a-zA-Z0-9]{0,10}$') ],
+  VALIDATORS: [ Validators.maxLength(10) ],
   MESSAGES: {
-    'pattern': 'A tag should be between 2 and 10 alphanumeric characters long.'
+    'maxlength': 'A tag should be less than 10 characters long.'
   }
 };
index 2ef666e17eedb2a7ce64ed0d88232c217c30fa93..5ed1d8841de6a562d30febba79417670373a76e1 100644 (file)
@@ -105,10 +105,6 @@ export class VideoAddComponent extends FormReactive implements OnInit {
   checkForm() {
     this.forceCheck();
 
-    if (this.tags.length === 0) {
-      this.tagsError = 'You have 0 tags';
-    }
-
     if (this.filename === null) {
       this.fileError = 'You did not add a file.';
     }
@@ -121,25 +117,9 @@ export class VideoAddComponent extends FormReactive implements OnInit {
   }
 
   onTagKeyPress(event: KeyboardEvent) {
-    const currentTag = this.form.value['currentTag'];
-
     // Enter press
     if (event.keyCode === 13) {
-      // Check if the tag is valid and does not already exist
-      if (
-        currentTag.length >= 2 &&
-        this.form.controls['currentTag'].valid &&
-        this.tags.indexOf(currentTag) === -1
-      ) {
-        this.tags.push(currentTag);
-        this.form.patchValue({ currentTag: '' });
-
-        if (this.tags.length >= 3) {
-          this.form.get('currentTag').disable();
-        }
-
-        this.tagsError = '';
-      }
+      this.addTagIfPossible();
     }
   }
 
@@ -153,6 +133,9 @@ export class VideoAddComponent extends FormReactive implements OnInit {
   }
 
   upload() {
+    // Maybe the user forgot to press "enter" when he filled the field
+    this.addTagIfPossible();
+
     if (this.checkForm() === false) {
       return;
     }
@@ -199,4 +182,25 @@ export class VideoAddComponent extends FormReactive implements OnInit {
 
     this.uploader.uploadAll();
   }
+
+  private addTagIfPossible() {
+    const currentTag = this.form.value['currentTag'];
+    if (currentTag === undefined) return;
+
+    // Check if the tag is valid and does not already exist
+    if (
+      currentTag.length >= 2 &&
+      this.form.controls['currentTag'].valid &&
+      this.tags.indexOf(currentTag) === -1
+    ) {
+      this.tags.push(currentTag);
+      this.form.patchValue({ currentTag: '' });
+
+      if (this.tags.length >= 3) {
+        this.form.get('currentTag').disable();
+      }
+
+      this.tagsError = '';
+    }
+  }
 }
index 0d309062a24113b3ba95e914823437c93a209e44..b5d24271a821b4045cb428f444881cb884f14339 100644 (file)
@@ -9,6 +9,7 @@
   display: inline-block;
   position: relative;
   min-width: 220px;
+  height: 190px;
 
   .video-miniature-thumbnail {
     display: inline-block;
index 92b36671702b381179a8a0046b900cfad9ee6397..efa89c427d363c2b0092efd07bc3f3b685e2641a 100644 (file)
@@ -69,8 +69,7 @@ function isVideoTagsValid (tags) {
   return miscValidators.isArray(tags) &&
          validator.isInt(tags.length, VIDEOS_CONSTRAINTS_FIELDS.TAGS) &&
          tags.every(function (tag) {
-           return validator.isAlphanumeric(tag) &&
-                  validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
+           return validator.isLength(tag, VIDEOS_CONSTRAINTS_FIELDS.TAG)
          })
 }
 
index 6c5287b190aca2611dbae11a22a7d2a4b4c62326..40f01e389f123f18d8b6b9fbb83d678069bc0da4 100644 (file)
@@ -85,7 +85,7 @@ const CONSTRAINTS_FIELDS = {
     EXTNAME: [ '.mp4', '.ogv', '.webm' ],
     INFO_HASH: { min: 40, max: 40 }, // Length, infohash is 20 bytes length but we represent it in hexa so 20 * 2
     DURATION: { min: 1, max: 7200 }, // Number
-    TAGS: { min: 1, max: 3 }, // Number of total tags
+    TAGS: { min: 0, max: 3 }, // Number of total tags
     TAG: { min: 2, max: 10 }, // Length
     THUMBNAIL: { min: 2, max: 30 },
     THUMBNAIL_DATA: { min: 0, max: 20000 }, // Bytes
index 37cc1337298ce696a6067f5c42bd9ff5ab5d4fb1..cf3874a978e55aead83389f7fdde3dc4a1f87422 100644 (file)
@@ -23,7 +23,7 @@ function videosAdd (req, res, next) {
   req.checkBody('name', 'Should have a valid name').isVideoNameValid()
   req.checkBody('category', 'Should have a valid category').isVideoCategoryValid()
   req.checkBody('description', 'Should have a valid description').isVideoDescriptionValid()
-  req.checkBody('tags', 'Should have correct tags').isVideoTagsValid()
+  req.checkBody('tags', 'Should have correct tags').optional().isVideoTagsValid()
 
   logger.debug('Checking videosAdd parameters', { parameters: req.body, files: req.files })
 
index fbfe6f137ab66d751a86392f48653e156cb6b89f..25b4eae310ba1a9d6932ca46d277b6c0a1f2b01b 100644 (file)
@@ -251,19 +251,6 @@ describe('Test videos API validator', function () {
       requestsUtils.makePostUploadRequest(server.url, path, server.accessToken, data, attach, done)
     })
 
-    it('Should fail with malformed tags', function (done) {
-      const data = {
-        name: 'my super name',
-        category: 5,
-        description: 'my super description',
-        tags: [ 'my tag' ]
-      }
-      const attach = {
-        'videofile': pathUtils.join(__dirname, '..', 'fixtures', 'video_short.webm')
-      }
-      requestsUtils.makePostUploadRequest(server.url, path, server.accessToken, data, attach, done)
-    })
-
     it('Should fail without an input file', function (done) {
       const data = {
         name: 'my super name',