ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
111 lines • 12 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
/**
* fit content details: https://github.com/NG-ZORRO/ng-zorro-antd/pull/6154#issuecomment-745025554
*
* calc position x,y point
*
* CASE (width <= clientWidth && height <= clientHeight):
*
* ------------- clientWidth -------------
* | |
* | ------ width ------ |
* | | | |
* | | | |
* client height | |
* Height | | |
* | | | |
* | ------------------- |
* | |
* | |
* ---------------------------------------
* fixedPosition = { x: 0, y: 0 }
*
*
*
* CASE (width > clientWidth || height > clientHeight):
*
* ------------- clientWidth -------------
* | | |
* | top |
* | | |
* |--left--|--------------- width -----------------
* | | |
* client | |
* Height | |
* | | |
* | | |
* | height |
* | | |
* ---------| |
* | |
* | |
* | |
* ----------------------------------------
*
*
* - left || top > 0
* left -> 0 || top -> 0
*
* - (left + width) < clientWidth || (top + height) < clientHeight
* - left | top + width | height < clientWidth | clientHeight -> Back left | top + width | height === clientWidth | clientHeight
*
* DEFAULT:
* - hold position
*
*/
export function getFitContentPosition(params) {
let fixPos = {};
if (params.width <= params.clientWidth && params.height <= params.clientHeight) {
fixPos = {
x: 0,
y: 0
};
}
if (params.width > params.clientWidth || params.height > params.clientHeight) {
fixPos = {
x: fitPoint(params.left, params.width, params.clientWidth),
y: fitPoint(params.top, params.height, params.clientHeight)
};
}
return fixPos;
}
export function getOffset(node) {
const box = node.getBoundingClientRect();
const docElem = document.documentElement;
// use docElem.scrollLeft to support IE
return {
left: box.left + (window.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || document.body.clientLeft || 0),
top: box.top + (window.pageYOffset || docElem.scrollTop) - (docElem.clientTop || document.body.clientTop || 0)
};
}
export function getClientSize() {
const width = document.documentElement.clientWidth;
const height = window.innerHeight || document.documentElement.clientHeight;
return {
width,
height
};
}
function fitPoint(start, size, clientSize) {
const startAddSize = start + size;
const offsetStart = (size - clientSize) / 2;
let distance = null;
if (size > clientSize) {
if (start > 0) {
distance = offsetStart;
}
if (start < 0 && startAddSize < clientSize) {
distance = -offsetStart;
}
}
else {
if (start < 0 || startAddSize > clientSize) {
distance = start < 0 ? offsetStart : -offsetStart;
}
}
return distance;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL2ltYWdlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFERztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQU9yQztJQUNDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7UUFDOUUsTUFBTSxHQUFHO1lBQ1AsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNMLENBQUM7S0FDSDtJQUVELElBQUksTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRTtRQUM1RSxNQUFNLEdBQUc7WUFDUCxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQzFELENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7U0FDNUQsQ0FBQztLQUNIO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsSUFBaUI7SUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDekMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztJQUV6Qyx1Q0FBdUM7SUFDdkMsT0FBTztRQUNMLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUNuSCxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUM7S0FDL0csQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYTtJQUMzQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQztJQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQzNFLE9BQU87UUFDTCxLQUFLO1FBQ0wsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYSxFQUFFLElBQVksRUFBRSxVQUFrQjtJQUMvRCxNQUFNLFlBQVksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2xDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO0lBRW5DLElBQUksSUFBSSxHQUFHLFVBQVUsRUFBRTtRQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7WUFDYixRQUFRLEdBQUcsV0FBVyxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLFlBQVksR0FBRyxVQUFVLEVBQUU7WUFDMUMsUUFBUSxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQ3pCO0tBQ0Y7U0FBTTtRQUNMLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxZQUFZLEdBQUcsVUFBVSxFQUFFO1lBQzFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1NBQ25EO0tBQ0Y7SUFFRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuLyoqXG4gKiBmaXQgY29udGVudCBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9wdWxsLzYxNTQjaXNzdWVjb21tZW50LTc0NTAyNTU1NFxuICpcbiAqIGNhbGMgcG9zaXRpb24geCx5IHBvaW50XG4gKlxuICogQ0FTRSAod2lkdGggPD0gY2xpZW50V2lkdGggJiYgaGVpZ2h0IDw9IGNsaWVudEhlaWdodCk6XG4gKlxuICogLS0tLS0tLS0tLS0tLSBjbGllbnRXaWR0aCAtLS0tLS0tLS0tLS0tXG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgIC0tLS0tLSB3aWR0aCAtLS0tLS0gICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8XG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHxcbiAqIGNsaWVudCAgIGhlaWdodCAgICAgICAgICAgIHwgICAgICAgICAgfFxuICogSGVpZ2h0ICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8XG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHxcbiAqIHwgICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0gICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogZml4ZWRQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9XG4gKlxuICpcbiAqXG4gKiBDQVNFICh3aWR0aCA+IGNsaWVudFdpZHRoIHx8IGhlaWdodCA+IGNsaWVudEhlaWdodCk6XG4gKlxuICogLS0tLS0tLS0tLS0tLSBjbGllbnRXaWR0aCAtLS0tLS0tLS0tLS0tXG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgIHRvcCAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8LS1sZWZ0LS18LS0tLS0tLS0tLS0tLS0tIHdpZHRoIC0tLS0tLS0tLS0tLS0tLS0tXG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiBjbGllbnQgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiBIZWlnaHQgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICBoZWlnaHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAtLS0tLS0tLS18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICpcbiAqIC0gbGVmdCB8fCB0b3AgPiAwXG4gKiAgIGxlZnQgLT4gMCB8fCB0b3AgLT4gMFxuICpcbiAqIC0gKGxlZnQgKyB3aWR0aCkgPCBjbGllbnRXaWR0aCB8fCAodG9wICsgaGVpZ2h0KSA8IGNsaWVudEhlaWdodFxuICogLSBsZWZ0IHwgdG9wICsgd2lkdGggfCBoZWlnaHQgPCBjbGllbnRXaWR0aCB8IGNsaWVudEhlaWdodCAtPiBCYWNrIGxlZnQgfCB0b3AgKyB3aWR0aCB8IGhlaWdodCA9PT0gY2xpZW50V2lkdGggfCBjbGllbnRIZWlnaHRcbiAqXG4gKiBERUZBVUxUOlxuICogLSBob2xkIHBvc2l0aW9uXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rml0Q29udGVudFBvc2l0aW9uKHBhcmFtczoge1xuICB3aWR0aDogbnVtYmVyO1xuICBoZWlnaHQ6IG51bWJlcjtcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgY2xpZW50V2lkdGg6IG51bWJlcjtcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXI7XG59KTogeyB4PzogbnVtYmVyOyB5PzogbnVtYmVyIH0ge1xuICBsZXQgZml4UG9zID0ge307XG5cbiAgaWYgKHBhcmFtcy53aWR0aCA8PSBwYXJhbXMuY2xpZW50V2lkdGggJiYgcGFyYW1zLmhlaWdodCA8PSBwYXJhbXMuY2xpZW50SGVpZ2h0KSB7XG4gICAgZml4UG9zID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgaWYgKHBhcmFtcy53aWR0aCA+IHBhcmFtcy5jbGllbnRXaWR0aCB8fCBwYXJhbXMuaGVpZ2h0ID4gcGFyYW1zLmNsaWVudEhlaWdodCkge1xuICAgIGZpeFBvcyA9IHtcbiAgICAgIHg6IGZpdFBvaW50KHBhcmFtcy5sZWZ0LCBwYXJhbXMud2lkdGgsIHBhcmFtcy5jbGllbnRXaWR0aCksXG4gICAgICB5OiBmaXRQb2ludChwYXJhbXMudG9wLCBwYXJhbXMuaGVpZ2h0LCBwYXJhbXMuY2xpZW50SGVpZ2h0KVxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZml4UG9zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0KG5vZGU6IEhUTUxFbGVtZW50KTogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyIH0ge1xuICBjb25zdCBib3ggPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIC8vIHVzZSBkb2NFbGVtLnNjcm9sbExlZnQgdG8gc3VwcG9ydCBJRVxuICByZXR1cm4ge1xuICAgIGxlZnQ6IGJveC5sZWZ0ICsgKHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbExlZnQpIC0gKGRvY0VsZW0uY2xpZW50TGVmdCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudExlZnQgfHwgMCksXG4gICAgdG9wOiBib3gudG9wICsgKHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbFRvcCkgLSAoZG9jRWxlbS5jbGllbnRUb3AgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRUb3AgfHwgMClcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudFNpemUoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgY29uc3Qgd2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaXRQb2ludChzdGFydDogbnVtYmVyLCBzaXplOiBudW1iZXIsIGNsaWVudFNpemU6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBzdGFydEFkZFNpemUgPSBzdGFydCArIHNpemU7XG4gIGNvbnN0IG9mZnNldFN0YXJ0ID0gKHNpemUgLSBjbGllbnRTaXplKSAvIDI7XG4gIGxldCBkaXN0YW5jZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgaWYgKHNpemUgPiBjbGllbnRTaXplKSB7XG4gICAgaWYgKHN0YXJ0ID4gMCkge1xuICAgICAgZGlzdGFuY2UgPSBvZmZzZXRTdGFydDtcbiAgICB9XG4gICAgaWYgKHN0YXJ0IDwgMCAmJiBzdGFydEFkZFNpemUgPCBjbGllbnRTaXplKSB7XG4gICAgICBkaXN0YW5jZSA9IC1vZmZzZXRTdGFydDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydEFkZFNpemUgPiBjbGllbnRTaXplKSB7XG4gICAgICBkaXN0YW5jZSA9IHN0YXJ0IDwgMCA/IG9mZnNldFN0YXJ0IDogLW9mZnNldFN0YXJ0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXN0YW5jZTtcbn1cbiJdfQ==