summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Niedzielski <adamsunday@gmail.com>2017-01-04 16:26:50 +0100
committerAdam Niedzielski <adamsunday@gmail.com>2017-01-04 16:26:50 +0100
commit0ff73feb5598959d8c9feb721977f9f2d371075d (patch)
tree3a03910d0f65add2c9b6606eb993548459e7c18b
parent9835bba0cdf7729549d17570db67bc8f469ea656 (diff)
downloadgitlab-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.es62
-rw-r--r--app/assets/javascripts/vue_issue_show/issue_title.js.es613
-rw-r--r--app/controllers/projects/issues_controller.rb13
-rw-r--r--app/views/projects/issues/show.html.haml1
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?