From edbf9880f95c4bcdd71bf4414f287d4d3f3cc290 Mon Sep 17 00:00:00 2001 From: Regis Date: Wed, 26 Apr 2017 17:31:09 -0600 Subject: [PATCH] update task_list n/n --- .../issue_show/issue_title_description.vue | 79 +++++++++++-------- app/controllers/projects/issues_controller.rb | 2 + 2 files changed, 48 insertions(+), 33 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: '', description: '', + descriptionText: '', descriptionChange: false, + taskStatus: '', }; }, methods: { @@ -40,14 +42,51 @@ export default { const body = JSON.parse(res.body); this.triggerAnimation(body); }, + updateTaskHTML(body) { + this.taskStatus = body.task_status; + document.querySelector('#task_status').innerText = this.taskStatus; + }, + elementsToVisualize(noTitleChange, noDescriptionChange) { + const elementStack = []; + + if (!noTitleChange) { + 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; + elementStack.push(this.$el.querySelector('.wiki')); + } + + 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; + this.description = description; + document.querySelector('title').innerText = title; + + elementsToVisualize.forEach((element) => { + element.classList.remove('issue-realtime-pre-pulse'); + element.classList.add('issue-realtime-trigger-pulse'); + }); + + 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 @@ -57,37 +96,12 @@ export default { if (noTitleChange && noDescriptionChange) return; - const elementsToVisualize = []; + const elementsToVisualize = this.elementsToVisualize( + noTitleChange, + noDescriptionChange, + ); - if (!noTitleChange) { - elementsToVisualize.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')); - } - - elementsToVisualize.forEach((element) => { - element.classList.remove('issue-realtime-trigger-pulse'); - element.classList.add('issue-realtime-pre-pulse'); - }); - - this.timeoutId = setTimeout(() => { - this.title = title; - document.querySelector('title').innerText = title; - - this.description = description; - - elementsToVisualize.forEach((element) => { - element.classList.remove('issue-realtime-pre-pulse'); - element.classList.add('issue-realtime-trigger-pulse'); - }); - - clearTimeout(this.timeoutId); - }, 0); + this.animate(title, description, elementsToVisualize); }, }, computed: { @@ -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