make tab title legit

This commit is contained in:
Regis 2017-05-01 15:45:50 -06:00
parent f23264406d
commit 78a8be969f
4 changed files with 21 additions and 4 deletions

View file

@ -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);

View file

@ -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

View file

@ -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>');

View file

@ -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',
}; };