From edbf9880f95c4bcdd71bf4414f287d4d3f3cc290 Mon Sep 17 00:00:00 2001
From: Regis <boudinot.regis@yahoo.com>
Date: Wed, 26 Apr 2017 17:31:09 -0600
Subject: [PATCH] update task_list n/n

---
 .../issue_show/issue_title_description.vue    | 63 +++++++++++--------
 app/controllers/projects/issues_controller.rb |  2 +
 2 files changed, 40 insertions(+), 25 deletions(-)

diff --git a/app/assets/javascripts/issue_show/issue_title_description.vue b/app/assets/javascripts/issue_show/issue_title_description.vue
index ef7ac83f336..d13e02b8cc0 100644
--- a/app/assets/javascripts/issue_show/issue_title_description.vue
+++ b/app/assets/javascripts/issue_show/issue_title_description.vue
@@ -32,7 +32,9 @@ export default {
       timeoutId: null,
       title: '<span></span>',
       description: '<span></span>',
+      descriptionText: '',
       descriptionChange: false,
+      taskStatus: '',
     };
   },
   methods: {
@@ -40,46 +42,35 @@ export default {
       const body = JSON.parse(res.body);
       this.triggerAnimation(body);
     },
-    triggerAnimation(body) {
-      // always reset to false before checking the change
-      this.descriptionChange = false;
-
-      const { title, description } = body;
-
-      this.descriptionText = body.description_text;
-
-      /**
-      * since opacity is changed, even if there is no diff for Vue to update
-      * we must check the title/description even on a 304 to ensure no visual change
-      */
-      const noTitleChange = this.title === title;
-      const noDescriptionChange = this.description === description;
-
-      if (noTitleChange && noDescriptionChange) return;
-
-      const elementsToVisualize = [];
+    updateTaskHTML(body) {
+      this.taskStatus = body.task_status;
+      document.querySelector('#task_status').innerText = this.taskStatus;
+    },
+    elementsToVisualize(noTitleChange, noDescriptionChange) {
+      const elementStack = [];
 
       if (!noTitleChange) {
-        elementsToVisualize.push(this.$el.querySelector('.title'));
+        elementStack.push(this.$el.querySelector('.title'));
       }
 
       if (!noDescriptionChange) {
         // only change to true when we need to bind TaskLists the html of description
         this.descriptionChange = true;
-
-        elementsToVisualize.push(this.$el.querySelector('.wiki'));
+        elementStack.push(this.$el.querySelector('.wiki'));
       }
 
-      elementsToVisualize.forEach((element) => {
+      elementStack.forEach((element) => {
         element.classList.remove('issue-realtime-trigger-pulse');
         element.classList.add('issue-realtime-pre-pulse');
       });
 
+      return elementStack;
+    },
+    animate(title, description, elementsToVisualize) {
       this.timeoutId = setTimeout(() => {
         this.title = title;
-        document.querySelector('title').innerText = title;
-
         this.description = description;
+        document.querySelector('title').innerText = title;
 
         elementsToVisualize.forEach((element) => {
           element.classList.remove('issue-realtime-pre-pulse');
@@ -89,6 +80,29 @@ export default {
         clearTimeout(this.timeoutId);
       }, 0);
     },
+    triggerAnimation(body) {
+      // always reset to false before checking the change
+      this.descriptionChange = false;
+
+      const { title, description } = body;
+      this.descriptionText = body.description_text;
+      this.updateTaskHTML(body);
+      /**
+      * since opacity is changed, even if there is no diff for Vue to update
+      * we must check the title/description even on a 304 to ensure no visual change
+      */
+      const noTitleChange = this.title === title;
+      const noDescriptionChange = this.description === description;
+
+      if (noTitleChange && noDescriptionChange) return;
+
+      const elementsToVisualize = this.elementsToVisualize(
+        noTitleChange,
+        noDescriptionChange,
+      );
+
+      this.animate(title, description, elementsToVisualize);
+    },
   },
   computed: {
     descriptionClass() {
@@ -118,7 +132,6 @@ export default {
       });
 
       $(this.$refs['issue-content-container-gfm-entry']).renderGFM();
-
       return tl;
     }
     return null;
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index b1df50ba849..e5c1505ece6 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -198,10 +198,12 @@ class Projects::IssuesController < Projects::ApplicationController
 
   def rendered_title
     Gitlab::PollingInterval.set_header(response, interval: 3_000)
+
     render json: {
       title: view_context.markdown_field(@issue, :title),
       description: view_context.markdown_field(@issue, :description),
       description_text: @issue.description,
+      task_status: @issue.task_status,
     }
   end
 
-- 
2.30.9