make tab title legit
This commit is contained in:
parent
f23264406d
commit
78a8be969f
4 changed files with 21 additions and 4 deletions
|
@ -31,6 +31,7 @@ export default {
|
||||||
poll,
|
poll,
|
||||||
timeoutId: null,
|
timeoutId: null,
|
||||||
title: '<span></span>',
|
title: '<span></span>',
|
||||||
|
titleText: '',
|
||||||
description: '<span></span>',
|
description: '<span></span>',
|
||||||
descriptionText: '',
|
descriptionText: '',
|
||||||
descriptionChange: false,
|
descriptionChange: false,
|
||||||
|
@ -40,16 +41,18 @@ export default {
|
||||||
methods: {
|
methods: {
|
||||||
renderResponse(res) {
|
renderResponse(res) {
|
||||||
const data = JSON.parse(res.body);
|
const data = JSON.parse(res.body);
|
||||||
|
this.issueIID = data.issue_number;
|
||||||
this.triggerAnimation(data);
|
this.triggerAnimation(data);
|
||||||
},
|
},
|
||||||
updateTaskHTML(data) {
|
updateTaskHTML(data) {
|
||||||
this.taskStatus = data.task_status;
|
this.taskStatus = data.task_status;
|
||||||
document.querySelector('#task_status').innerText = this.taskStatus;
|
document.querySelector('#task_status').innerText = this.taskStatus;
|
||||||
},
|
},
|
||||||
elementsToVisualize(noTitleChange, noDescriptionChange) {
|
elementsToVisualize(noTitleChange, noDescriptionChange, data) {
|
||||||
const elementStack = [];
|
const elementStack = [];
|
||||||
|
|
||||||
if (!noTitleChange) {
|
if (!noTitleChange) {
|
||||||
|
this.titleText = data.title_text;
|
||||||
elementStack.push(this.$el.querySelector('.title'));
|
elementStack.push(this.$el.querySelector('.title'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,11 +69,17 @@ export default {
|
||||||
|
|
||||||
return elementStack;
|
return elementStack;
|
||||||
},
|
},
|
||||||
|
setTabTitle() {
|
||||||
|
const currentTabTitle = document.querySelector('title');
|
||||||
|
const currentTabTitleScope = currentTabTitle.innerText.split('·');
|
||||||
|
currentTabTitleScope[0] = `${this.titleText} (#${this.issueIID}) `;
|
||||||
|
currentTabTitle.innerText = currentTabTitleScope.join('·');
|
||||||
|
},
|
||||||
animate(title, description, elementsToVisualize) {
|
animate(title, description, elementsToVisualize) {
|
||||||
this.timeoutId = setTimeout(() => {
|
this.timeoutId = setTimeout(() => {
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
document.querySelector('title').innerText = title;
|
this.setTabTitle();
|
||||||
|
|
||||||
elementsToVisualize.forEach((element) => {
|
elementsToVisualize.forEach((element) => {
|
||||||
element.classList.remove('issue-realtime-pre-pulse');
|
element.classList.remove('issue-realtime-pre-pulse');
|
||||||
|
@ -99,6 +108,7 @@ export default {
|
||||||
const elementsToVisualize = this.elementsToVisualize(
|
const elementsToVisualize = this.elementsToVisualize(
|
||||||
noTitleChange,
|
noTitleChange,
|
||||||
noDescriptionChange,
|
noDescriptionChange,
|
||||||
|
data,
|
||||||
);
|
);
|
||||||
|
|
||||||
this.animate(title, description, elementsToVisualize);
|
this.animate(title, description, elementsToVisualize);
|
||||||
|
|
|
@ -201,9 +201,11 @@ class Projects::IssuesController < Projects::ApplicationController
|
||||||
|
|
||||||
render json: {
|
render json: {
|
||||||
title: view_context.markdown_field(@issue, :title),
|
title: view_context.markdown_field(@issue, :title),
|
||||||
|
title_text: @issue.title,
|
||||||
description: view_context.markdown_field(@issue, :description),
|
description: view_context.markdown_field(@issue, :description),
|
||||||
description_text: @issue.description,
|
description_text: @issue.description,
|
||||||
task_status: @issue.task_status,
|
task_status: @issue.task_status,
|
||||||
|
issue_number: @issue.iid,
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,9 @@ const issueShowInterceptor = (request, next) => {
|
||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('Issue Title', () => {
|
fdescribe('Issue Title', () => {
|
||||||
|
document.body.innerHTML = '<span id="task_status"></span>';
|
||||||
|
|
||||||
const comps = {
|
const comps = {
|
||||||
IssueTitleComponent: {},
|
IssueTitleComponent: {},
|
||||||
};
|
};
|
||||||
|
@ -40,7 +42,7 @@ describe('Issue Title', () => {
|
||||||
// need setTimeout because actual setTimeout in code :P
|
// need setTimeout because actual setTimeout in code :P
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
expect(document.querySelector('title').innerText)
|
expect(document.querySelector('title').innerText)
|
||||||
.toContain('this is a title');
|
.toContain('this is a title (#1)');
|
||||||
|
|
||||||
expect(issueShowComponent.$el.querySelector('.title').innerHTML)
|
expect(issueShowComponent.$el.querySelector('.title').innerHTML)
|
||||||
.toContain('<p>this is a title</p>');
|
.toContain('<p>this is a title</p>');
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
export default {
|
export default {
|
||||||
title: '<p>this is a title</p>',
|
title: '<p>this is a title</p>',
|
||||||
|
title_text: 'this is a title',
|
||||||
description: '<p>this is a description!</p>',
|
description: '<p>this is a description!</p>',
|
||||||
description_text: 'this is a description',
|
description_text: 'this is a description',
|
||||||
|
issue_number: 1,
|
||||||
|
task_status: '2/4 completed',
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue