Panel resize handle window resize event
This commit is contained in:
@@ -29,27 +29,46 @@ class PanelResizer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
controller($scope, $element, modelManager, actionsManager) {
|
controller($scope, $element, modelManager, actionsManager, $timeout) {
|
||||||
'ngInject';
|
'ngInject';
|
||||||
|
|
||||||
let panel = document.getElementById($scope.panelId);
|
let panel = document.getElementById($scope.panelId);
|
||||||
if(!panel) {
|
if(!panel) {
|
||||||
console.log("Panel not found for", $scope.panelId);
|
console.log("Panel not found for", $scope.panelId);
|
||||||
}
|
}
|
||||||
|
|
||||||
let resizerColumn = $element[0];
|
let resizerColumn = $element[0];
|
||||||
let resizerWidth = resizerColumn.offsetWidth;
|
let resizerWidth = resizerColumn.offsetWidth;
|
||||||
let minWidth = $scope.minWidth || resizerWidth;
|
let minWidth = $scope.minWidth || resizerWidth;
|
||||||
|
var pressed = false;
|
||||||
|
var startWidth = panel.scrollWidth, startX = 0, lastDownX = 0, collapsed, lastWidth = startWidth, startLeft, lastLeft;
|
||||||
|
var appFrame;
|
||||||
|
|
||||||
function getParentRect() {
|
function getParentRect() {
|
||||||
return panel.parentNode.getBoundingClientRect();
|
return panel.parentNode.getBoundingClientRect();
|
||||||
}
|
}
|
||||||
|
|
||||||
var pressed = false;
|
if($scope.property == "right") {
|
||||||
var startWidth = panel.scrollWidth, startX, lastDownX, collapsed, lastWidth = startWidth, startLeft, lastLeft;
|
let handleReize = debounce((event) => {
|
||||||
let appFrame = document.getElementById("app").getBoundingClientRect();
|
reloadDefaultValues();
|
||||||
|
handleWidthEvent();
|
||||||
|
$timeout(() => { $scope.finishSettingWidth(); })
|
||||||
|
}, 250);
|
||||||
|
|
||||||
|
window.addEventListener('resize', handleReize);
|
||||||
|
|
||||||
|
$scope.$on("$destroy", function() {
|
||||||
|
window.removeEventListener('resize', handleReize);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadDefaultValues() {
|
||||||
|
startWidth = panel.scrollWidth;
|
||||||
|
appFrame = document.getElementById("app").getBoundingClientRect();
|
||||||
|
}
|
||||||
|
reloadDefaultValues();
|
||||||
|
|
||||||
if($scope.alwaysVisible) {
|
if($scope.alwaysVisible) {
|
||||||
console.log("Adding always visible", $scope.alwaysVisible);
|
|
||||||
resizerColumn.classList.add("always-visible");
|
resizerColumn.classList.add("always-visible");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -68,6 +87,11 @@ class PanelResizer {
|
|||||||
width = parentRect.width;
|
width = parentRect.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let maxWidth = appFrame.width - panel.getBoundingClientRect().x;
|
||||||
|
if(width > maxWidth) {
|
||||||
|
width = maxWidth;
|
||||||
|
}
|
||||||
|
|
||||||
if(width == parentRect.width) {
|
if(width == parentRect.width) {
|
||||||
panel.style.width = "100%";
|
panel.style.width = "100%";
|
||||||
panel.style.flexBasis = "100%";
|
panel.style.flexBasis = "100%";
|
||||||
@@ -76,7 +100,6 @@ class PanelResizer {
|
|||||||
panel.style.width = width + "px";
|
panel.style.width = width + "px";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
lastWidth = width;
|
lastWidth = width;
|
||||||
|
|
||||||
if(finish) {
|
if(finish) {
|
||||||
@@ -94,7 +117,6 @@ class PanelResizer {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(lastWidth <= minWidth) {
|
if(lastWidth <= minWidth) {
|
||||||
collapsed = true;
|
collapsed = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -137,7 +159,14 @@ class PanelResizer {
|
|||||||
var rect = panel.getBoundingClientRect();
|
var rect = panel.getBoundingClientRect();
|
||||||
var panelMaxX = rect.left + (startWidth || panel.style.maxWidth);
|
var panelMaxX = rect.left + (startWidth || panel.style.maxWidth);
|
||||||
|
|
||||||
var x = event.clientX;
|
var x;
|
||||||
|
if(event) {
|
||||||
|
x = event.clientX;
|
||||||
|
} else {
|
||||||
|
// coming from resize event
|
||||||
|
x = 0;
|
||||||
|
lastDownX = 0;
|
||||||
|
}
|
||||||
|
|
||||||
let deltaX = x - lastDownX;
|
let deltaX = x - lastDownX;
|
||||||
var newWidth = startWidth + deltaX;
|
var newWidth = startWidth + deltaX;
|
||||||
@@ -151,7 +180,7 @@ class PanelResizer {
|
|||||||
|
|
||||||
function handleLeftEvent(event) {
|
function handleLeftEvent(event) {
|
||||||
var panelRect = panel.getBoundingClientRect();
|
var panelRect = panel.getBoundingClientRect();
|
||||||
var x = event.clientX;
|
var x = event.clientX || panelRect.x;
|
||||||
let deltaX = x - lastDownX;
|
let deltaX = x - lastDownX;
|
||||||
var newLeft = startLeft + deltaX;
|
var newLeft = startLeft + deltaX;
|
||||||
if(newLeft < 0) {
|
if(newLeft < 0) {
|
||||||
@@ -199,3 +228,19 @@ class PanelResizer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
angular.module('app').directive('panelResizer', () => new PanelResizer);
|
angular.module('app').directive('panelResizer', () => new PanelResizer);
|
||||||
|
|
||||||
|
/* via https://davidwalsh.name/javascript-debounce-function */
|
||||||
|
function debounce(func, wait, immediate) {
|
||||||
|
var timeout;
|
||||||
|
return function() {
|
||||||
|
var context = this, args = arguments;
|
||||||
|
var later = function() {
|
||||||
|
timeout = null;
|
||||||
|
if (!immediate) func.apply(context, args);
|
||||||
|
};
|
||||||
|
var callNow = immediate && !timeout;
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = setTimeout(later, wait);
|
||||||
|
if (callNow) func.apply(context, args);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|||||||
@@ -48,7 +48,7 @@
|
|||||||
"ng-change" => "ctrl.contentChanged()", "ng-trim" => "false", "ng-click" => "ctrl.clickedTextArea()",
|
"ng-change" => "ctrl.contentChanged()", "ng-trim" => "false", "ng-click" => "ctrl.clickedTextArea()",
|
||||||
"ng-focus" => "ctrl.onContentFocus()", "dir" => "auto", "ng-attr-spellcheck" => "{{ctrl.spellcheck}}"}
|
"ng-focus" => "ctrl.onContentFocus()", "dir" => "auto", "ng-attr-spellcheck" => "{{ctrl.spellcheck}}"}
|
||||||
{{ctrl.onSystemEditorLoad()}}
|
{{ctrl.onSystemEditorLoad()}}
|
||||||
%panel-resizer{"panel-id" => "'editor-content'", "on-resize-finish" => "ctrl.onPanelResizeFinish","control" => "ctrl.resizeControl", "min-width" => 300, "hoverable" => "true"}
|
%panel-resizer{"panel-id" => "'editor-content'", "on-resize-finish" => "ctrl.onPanelResizeFinish","control" => "ctrl.resizeControl", "min-width" => 300, "hoverable" => "true", "property" => "'right'"}
|
||||||
|
|
||||||
%section.section{"ng-if" => "ctrl.note.errorDecrypting"}
|
%section.section{"ng-if" => "ctrl.note.errorDecrypting"}
|
||||||
%p.medium-padding{"style" => "padding-top: 0 !important;"} There was an error decrypting this item. Ensure you are running the latest version of this app, then sign out and sign back in to try again.
|
%p.medium-padding{"style" => "padding-top: 0 !important;"} There was an error decrypting this item. Ensure you are running the latest version of this app, then sign out and sign back in to try again.
|
||||||
|
|||||||
Reference in New Issue
Block a user