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

174 lines
5.4 KiB
JavaScript
Raw Normal View History

2020-04-08 14:13:33 +05:30
/* eslint-disable func-names, consistent-return, no-param-reassign */
2017-08-17 22:00:37 +05:30
2018-05-09 12:01:36 +05:30
import $ from 'jquery';
2022-04-04 11:22:00 +05:30
import { setCookie } from '~/lib/utils/common_utils';
2021-11-11 11:23:49 +05:30
import { hide, fixTitle } from '~/tooltips';
2022-08-27 11:52:29 +05:30
import { __ } from './locale';
2018-03-17 18:26:18 +05:30
2022-07-16 23:28:13 +05:30
const updateSidebarClasses = (layoutPage, rightSidebar) => {
2022-07-23 23:45:48 +05:30
if (window.innerWidth >= 992) {
2022-07-16 23:28:13 +05:30
layoutPage.classList.remove('right-sidebar-expanded', 'right-sidebar-collapsed');
rightSidebar.classList.remove('right-sidebar-collapsed');
rightSidebar.classList.add('right-sidebar-expanded');
} else {
layoutPage.classList.add('right-sidebar-collapsed', 'is-merge-request');
rightSidebar.classList.add('right-sidebar-collapsed');
rightSidebar.classList.remove('right-sidebar-expanded');
}
};
2019-12-04 20:38:33 +05:30
function Sidebar() {
2018-03-17 18:26:18 +05:30
this.sidebar = $('aside');
this.removeListeners();
this.addEventListeners();
}
2021-03-08 18:12:59 +05:30
Sidebar.initialize = function () {
2018-03-17 18:26:18 +05:30
if (!this.instance) {
2019-12-04 20:38:33 +05:30
this.instance = new Sidebar();
2018-03-17 18:26:18 +05:30
}
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.removeListeners = function () {
2018-03-17 18:26:18 +05:30
this.sidebar.off('click', '.sidebar-collapsed-icon');
2021-02-22 17:27:13 +05:30
// eslint-disable-next-line @gitlab/no-global-event-off
2018-03-17 18:26:18 +05:30
this.sidebar.off('hidden.gl.dropdown');
2021-02-22 17:27:13 +05:30
// eslint-disable-next-line @gitlab/no-global-event-off
2021-04-17 20:07:23 +05:30
this.sidebar.off('hiddenGlDropdown');
// eslint-disable-next-line @gitlab/no-global-event-off
2018-03-17 18:26:18 +05:30
$('.dropdown').off('loading.gl.dropdown');
2021-02-22 17:27:13 +05:30
// eslint-disable-next-line @gitlab/no-global-event-off
2018-03-17 18:26:18 +05:30
$('.dropdown').off('loaded.gl.dropdown');
$(document).off('click', '.js-sidebar-toggle');
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.addEventListeners = function () {
2018-03-17 18:26:18 +05:30
const $document = $(document);
this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked);
this.sidebar.on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden);
2021-04-17 20:07:23 +05:30
this.sidebar.on('hiddenGlDropdown', this, this.onSidebarDropdownHidden);
2018-03-17 18:26:18 +05:30
$document.on('click', '.js-sidebar-toggle', this.sidebarToggleClicked);
2022-07-16 23:28:13 +05:30
if (window.gon?.features?.movedMrSidebar) {
const layoutPage = document.querySelector('.layout-page');
const rightSidebar = document.querySelector('.js-right-sidebar');
updateSidebarClasses(layoutPage, rightSidebar);
window.addEventListener('resize', () => updateSidebarClasses(layoutPage, rightSidebar));
}
2018-03-17 18:26:18 +05:30
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.sidebarToggleClicked = function (e, triggered) {
2019-12-26 22:10:19 +05:30
const $this = $(this);
2022-07-16 23:28:13 +05:30
if ($this.hasClass('right-sidebar-merge-requests')) return;
2021-01-03 14:25:43 +05:30
const $collapseIcon = $('.js-sidebar-collapse');
const $expandIcon = $('.js-sidebar-expand');
const $toggleContainer = $('.js-sidebar-toggle-container');
const isExpanded = $toggleContainer.data('is-expanded');
2023-05-27 22:25:52 +05:30
const tooltipLabel = isExpanded ? __('Collapse sidebar') : __('Expand sidebar');
2018-03-17 18:26:18 +05:30
e.preventDefault();
2018-10-15 14:42:47 +05:30
if (isExpanded) {
2021-01-03 14:25:43 +05:30
$toggleContainer.data('is-expanded', false);
$collapseIcon.addClass('hidden');
$expandIcon.removeClass('hidden');
2018-12-13 13:39:08 +05:30
$('aside.right-sidebar')
.removeClass('right-sidebar-expanded')
.addClass('right-sidebar-collapsed');
2021-03-08 18:12:59 +05:30
$('.layout-page').removeClass('right-sidebar-expanded').addClass('right-sidebar-collapsed');
2018-03-17 18:26:18 +05:30
} else {
2021-01-03 14:25:43 +05:30
$toggleContainer.data('is-expanded', true);
$expandIcon.addClass('hidden');
$collapseIcon.removeClass('hidden');
2018-12-13 13:39:08 +05:30
$('aside.right-sidebar')
.removeClass('right-sidebar-collapsed')
.addClass('right-sidebar-expanded');
2021-03-08 18:12:59 +05:30
$('.layout-page').removeClass('right-sidebar-collapsed').addClass('right-sidebar-expanded');
2018-03-17 18:26:18 +05:30
}
2018-10-15 14:42:47 +05:30
$this.attr('data-original-title', tooltipLabel);
2021-11-11 11:23:49 +05:30
$this.attr('title', tooltipLabel);
fixTitle($this);
hide($this);
2018-10-15 14:42:47 +05:30
2018-03-17 18:26:18 +05:30
if (!triggered) {
2022-04-04 11:22:00 +05:30
setCookie('collapsed_gutter', $('.right-sidebar').hasClass('right-sidebar-collapsed'));
2018-03-17 18:26:18 +05:30
}
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.sidebarCollapseClicked = function (e) {
2021-11-18 22:05:49 +05:30
if ($(e.currentTarget).hasClass('js-dont-change-state')) {
2018-03-17 18:26:18 +05:30
return;
}
2019-12-26 22:10:19 +05:30
const sidebar = e.data;
2018-03-17 18:26:18 +05:30
e.preventDefault();
2019-12-26 22:10:19 +05:30
const $block = $(this).closest('.block');
2018-03-17 18:26:18 +05:30
return sidebar.openDropdown($block);
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.openDropdown = function (blockOrName) {
2020-05-24 23:13:21 +05:30
const $block = typeof blockOrName === 'string' ? this.getBlock(blockOrName) : blockOrName;
2018-03-17 18:26:18 +05:30
if (!this.isOpen()) {
this.setCollapseAfterUpdate($block);
this.toggleSidebar('open');
}
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.setCollapseAfterUpdate = function ($block) {
2018-03-17 18:26:18 +05:30
$block.addClass('collapse-after-update');
return $('.layout-page').addClass('with-overlay');
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.onSidebarDropdownHidden = function (e) {
2019-12-26 22:10:19 +05:30
const sidebar = e.data;
2018-03-17 18:26:18 +05:30
e.preventDefault();
2019-12-26 22:10:19 +05:30
const $block = $(e.target).closest('.block');
2018-03-17 18:26:18 +05:30
return sidebar.sidebarDropdownHidden($block);
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.sidebarDropdownHidden = function ($block) {
2018-03-17 18:26:18 +05:30
if ($block.hasClass('collapse-after-update')) {
$block.removeClass('collapse-after-update');
$('.layout-page').removeClass('with-overlay');
return this.toggleSidebar('hide');
}
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.triggerOpenSidebar = function () {
2018-03-17 18:26:18 +05:30
return this.sidebar.find('.js-sidebar-toggle').trigger('click');
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.toggleSidebar = function (action) {
2018-03-17 18:26:18 +05:30
if (action == null) {
action = 'toggle';
}
if (action === 'toggle') {
this.triggerOpenSidebar();
}
if (action === 'open') {
if (!this.isOpen()) {
this.triggerOpenSidebar();
2016-09-13 17:45:13 +05:30
}
2018-03-17 18:26:18 +05:30
}
if (action === 'hide') {
if (this.isOpen()) {
return this.triggerOpenSidebar();
}
}
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.isOpen = function () {
2018-03-17 18:26:18 +05:30
return this.sidebar.is('.right-sidebar-expanded');
};
2021-03-08 18:12:59 +05:30
Sidebar.prototype.getBlock = function (name) {
2019-12-21 20:55:43 +05:30
return this.sidebar.find(`.block.${name}`);
2018-03-17 18:26:18 +05:30
};
2016-09-13 17:45:13 +05:30
2018-03-17 18:26:18 +05:30
export default Sidebar;