debian-mirror-gitlab/app/assets/javascripts/group_name.js

77 lines
2.2 KiB
JavaScript
Raw Normal View History

2017-09-10 17:25:29 +05:30
import Cookies from 'js-cookie';
2017-08-17 22:00:37 +05:30
import _ from 'underscore';
export default class GroupName {
constructor() {
2017-09-10 17:25:29 +05:30
this.titleContainer = document.querySelector('.js-title-container');
this.title = this.titleContainer.querySelector('.title');
if (this.title) {
this.titleWidth = this.title.offsetWidth;
this.groupTitle = this.titleContainer.querySelector('.group-title');
this.groups = this.titleContainer.querySelectorAll('.group-path');
this.toggle = null;
this.isHidden = false;
this.init();
}
2017-08-17 22:00:37 +05:30
}
init() {
if (this.groups.length > 0) {
this.groups[this.groups.length - 1].classList.remove('hidable');
this.toggleHandler();
window.addEventListener('resize', _.debounce(this.toggleHandler.bind(this), 100));
}
this.render();
}
toggleHandler() {
if (this.titleWidth > this.titleContainer.offsetWidth) {
if (!this.toggle) this.createToggle();
this.showToggle();
} else if (this.toggle) {
this.hideToggle();
}
}
createToggle() {
this.toggle = document.createElement('button');
2017-09-10 17:25:29 +05:30
this.toggle.setAttribute('type', 'button');
2017-08-17 22:00:37 +05:30
this.toggle.className = 'text-expander group-name-toggle';
this.toggle.setAttribute('aria-label', 'Toggle full path');
2017-09-10 17:25:29 +05:30
if (Cookies.get('new_nav') === 'true') {
this.toggle.innerHTML = '<i class="fa fa-ellipsis-h" aria-hidden="true"></i>';
} else {
this.toggle.innerHTML = '...';
}
2017-08-17 22:00:37 +05:30
this.toggle.addEventListener('click', this.toggleGroups.bind(this));
2017-09-10 17:25:29 +05:30
if (Cookies.get('new_nav') === 'true') {
this.title.insertBefore(this.toggle, this.groupTitle);
} else {
this.titleContainer.insertBefore(this.toggle, this.title);
}
2017-08-17 22:00:37 +05:30
this.toggleGroups();
}
showToggle() {
this.title.classList.add('wrap');
this.toggle.classList.remove('hidden');
2017-09-10 17:25:29 +05:30
if (this.isHidden) this.groupTitle.classList.add('hidden');
2017-08-17 22:00:37 +05:30
}
hideToggle() {
this.title.classList.remove('wrap');
this.toggle.classList.add('hidden');
2017-09-10 17:25:29 +05:30
if (this.isHidden) this.groupTitle.classList.remove('hidden');
2017-08-17 22:00:37 +05:30
}
toggleGroups() {
this.isHidden = !this.isHidden;
2017-09-10 17:25:29 +05:30
this.groupTitle.classList.toggle('hidden');
2017-08-17 22:00:37 +05:30
}
render() {
this.title.classList.remove('initializing');
}
}