Sanitized public release v1.0.3
Source-Tag: v1.0.3 Manifest-SHA256: b7b09bf48f9e092ed8ad82f99c0319d6c3837d0a1549bd0cc4a374276c0f3896
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
$timeout(function() {
|
||||
var sidebar = document.getElementById('sidebar');
|
||||
if (!sidebar || document.getElementById('sidebar-resizer')) {
|
||||
return;
|
||||
}
|
||||
|
||||
var sidebarResizer = document.createElement('div');
|
||||
var desktopSidebarMedia = window.matchMedia('(min-width: 969px)');
|
||||
var activeSidebarPointer = null;
|
||||
var workingSidebarWidth = 0;
|
||||
|
||||
sidebarResizer.id = 'sidebar-resizer';
|
||||
sidebarResizer.tabIndex = 0;
|
||||
sidebarResizer.setAttribute('role', 'separator');
|
||||
sidebarResizer.setAttribute('aria-orientation', 'vertical');
|
||||
sidebarResizer.setAttribute('aria-controls', 'sidebar');
|
||||
sidebarResizer.setAttribute('aria-label', 'Resize channel sidebar');
|
||||
sidebarResizer.setAttribute('aria-valuemin', '120');
|
||||
sidebarResizer.setAttribute('aria-valuemax', '480');
|
||||
sidebar.parentNode.insertBefore(sidebarResizer, sidebar.nextSibling);
|
||||
|
||||
var maximumSidebarWidth = function() {
|
||||
return Math.min(480, window.innerWidth * 0.4);
|
||||
};
|
||||
|
||||
var applySidebarWidth = function(value, limitToViewport) {
|
||||
var width = Number(value);
|
||||
if (!Number.isFinite(width) || width <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
width = Math.max(120, Math.min(limitToViewport ? maximumSidebarWidth() : 480, width));
|
||||
width = Math.round(width);
|
||||
document.documentElement.style.setProperty('--neorelay-sidebar-preferred-width', width + 'px');
|
||||
sidebarResizer.setAttribute('aria-valuenow', width);
|
||||
workingSidebarWidth = width;
|
||||
};
|
||||
|
||||
applySidebarWidth(settings.neorelaySidebarWidth, false);
|
||||
|
||||
sidebarResizer.addEventListener('pointerdown', function(event) {
|
||||
if (!desktopSidebarMedia.matches || event.button !== 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
activeSidebarPointer = event.pointerId;
|
||||
workingSidebarWidth = Math.round(sidebar.getBoundingClientRect().width);
|
||||
sidebarResizer.setPointerCapture(event.pointerId);
|
||||
document.body.classList.add('neorelay-sidebar-resizing');
|
||||
event.preventDefault();
|
||||
});
|
||||
|
||||
sidebarResizer.addEventListener('pointermove', function(event) {
|
||||
if (event.pointerId === activeSidebarPointer && desktopSidebarMedia.matches) {
|
||||
applySidebarWidth(event.clientX, true);
|
||||
}
|
||||
});
|
||||
|
||||
var finishSidebarResize = function(event) {
|
||||
if (event.pointerId !== activeSidebarPointer) {
|
||||
return;
|
||||
}
|
||||
|
||||
activeSidebarPointer = null;
|
||||
document.body.classList.remove('neorelay-sidebar-resizing');
|
||||
if (workingSidebarWidth > 0) {
|
||||
settings.neorelaySidebarWidth = workingSidebarWidth;
|
||||
}
|
||||
};
|
||||
|
||||
sidebarResizer.addEventListener('pointerup', finishSidebarResize);
|
||||
sidebarResizer.addEventListener('pointercancel', finishSidebarResize);
|
||||
sidebarResizer.addEventListener('keydown', function(event) {
|
||||
if (!desktopSidebarMedia.matches ||
|
||||
(event.key !== 'ArrowLeft' && event.key !== 'ArrowRight')) {
|
||||
return;
|
||||
}
|
||||
|
||||
var direction = event.key === 'ArrowLeft' ? -1 : 1;
|
||||
var step = event.shiftKey ? 25 : 10;
|
||||
applySidebarWidth(sidebar.getBoundingClientRect().width + direction * step, true);
|
||||
settings.neorelaySidebarWidth = workingSidebarWidth;
|
||||
event.preventDefault();
|
||||
});
|
||||
}, 0);
|
||||
Reference in New Issue
Block a user