diff options
author | Adam Niedzielski <adamsunday@gmail.com> | 2017-01-04 16:26:50 +0100 |
---|---|---|
committer | Adam Niedzielski <adamsunday@gmail.com> | 2017-01-04 16:26:50 +0100 |
commit | 0ff73feb5598959d8c9feb721977f9f2d371075d (patch) | |
tree | 3a03910d0f65add2c9b6606eb993548459e7c18b | |
parent | 9835bba0cdf7729549d17570db67bc8f469ea656 (diff) | |
download | gitlab-ce-adam-issue-title-vue.tar.gz |
Pass digest to avoid processing Markdown at all if issue title did not changeadam-issue-title-vue
-rw-r--r-- | app/assets/javascripts/vue_issue_show/index.js.es6 | 2 | ||||
-rw-r--r-- | app/assets/javascripts/vue_issue_show/issue_title.js.es6 | 13 | ||||
-rw-r--r-- | app/controllers/projects/issues_controller.rb | 13 | ||||
-rw-r--r-- | app/views/projects/issues/show.html.haml | 1 |
4 files changed, 23 insertions, 6 deletions
diff --git a/app/assets/javascripts/vue_issue_show/index.js.es6 b/app/assets/javascripts/vue_issue_show/index.js.es6 index f6f62d2c791..40fb251245d 100644 --- a/app/assets/javascripts/vue_issue_show/index.js.es6 +++ b/app/assets/javascripts/vue_issue_show/index.js.es6 @@ -40,6 +40,7 @@ return { initialTitle: vueData.initialTitle, endpoint: vueData.endpoint, + initialTitleDigest: vueData.initialTitleDigest, user, token, }; @@ -50,6 +51,7 @@ :initialTitle='initialTitle' :endpoint='endpoint' :user='user' + :initialTitleDigest='initialTitleDigest' > </vue-title> </div> diff --git a/app/assets/javascripts/vue_issue_show/issue_title.js.es6 b/app/assets/javascripts/vue_issue_show/issue_title.js.es6 index 4562b229f73..14b1868745e 100644 --- a/app/assets/javascripts/vue_issue_show/issue_title.js.es6 +++ b/app/assets/javascripts/vue_issue_show/issue_title.js.es6 @@ -4,12 +4,14 @@ gl.VueIssueTitle = Vue.extend({ props: [ 'initialTitle', - 'endpoint' + 'endpoint', + 'initialTitleDigest', ], data() { return { intervalId: '', title: this.initialTitle, + titleDigest: this.initialTitleDigest, failedCount: 0, pageRequest: false, }; @@ -22,16 +24,17 @@ Vue.activeResources = 1; this.intervalId = setInterval(() => { if (!this.pageRequest) { - this.$http.get(this.endpoint) + this.$http.get(this.endpoint, { params: { digest: this.titleDigest } }) .then((res) => { Vue.activeResources = 0; - let title = JSON.parse(res.body).title; - if (this.title === title) { + let body = JSON.parse(res.body); + if (!body.changed) { return; } + this.titleDigest = body.digest; this.$el.style.opacity = 0; setTimeout(() => { - this.title = title; + this.title = body.title; this.$el.style.transition = 'opacity 0.2s ease'; this.$el.style.opacity = 1; }, 100); diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 0f0c7f377f8..53cb0e70d90 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -165,9 +165,20 @@ class Projects::IssuesController < Projects::ApplicationController end def rendered_title + digest = hexdigest(@issue.title) + if digest == params.fetch(:digest) + response = { changed: false } + else + response = { + changed: true, + digest: digest, + title: view_context.markdown_field(@issue, :title) + } + end + respond_to do |format| format.json do - render json: { title: view_context.markdown_field(@issue, :title) } + render json: response end end end diff --git a/app/views/projects/issues/show.html.haml b/app/views/projects/issues/show.html.haml index e37502aba93..cd669d7890e 100644 --- a/app/views/projects/issues/show.html.haml +++ b/app/views/projects/issues/show.html.haml @@ -57,6 +57,7 @@ .vue-data.hidden{ "data" => { "initial-title" => markdown_field(@issue, :title), "endpoint" => rendered_title_namespace_project_issue_path(@project.namespace, @project, @issue), "user" => "#{current_user.nil?}", + "initial-title-digest" => hexdigest(@issue.title), } } .issue-title-vue - if @issue.description.present? |