ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
111 lines • 12.1 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb21wb25lbnRzL2ltYWdlL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFERztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQU9yQztJQUNDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUVoQixJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRSxNQUFNLEdBQUc7WUFDUCxDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1NBQ0wsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3RSxNQUFNLEdBQUc7WUFDUCxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDO1lBQzFELENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUM7U0FDNUQsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFpQjtJQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO0lBRXpDLHVDQUF1QztJQUN2QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ25ILEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztLQUMvRyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhO0lBQzNCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO0lBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDM0UsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLFVBQWtCO0lBQy9ELE1BQU0sWUFBWSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLElBQUksUUFBUSxHQUFrQixJQUFJLENBQUM7SUFFbkMsSUFBSSxJQUFJLEdBQUcsVUFBVSxFQUFFLENBQUM7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzNDLFFBQVEsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksWUFBWSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzNDLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbi8qKlxuICogZml0IGNvbnRlbnQgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvcHVsbC82MTU0I2lzc3VlY29tbWVudC03NDUwMjU1NTRcbiAqXG4gKiBjYWxjIHBvc2l0aW9uIHgseSBwb2ludFxuICpcbiAqIENBU0UgKHdpZHRoIDw9IGNsaWVudFdpZHRoICYmIGhlaWdodCA8PSBjbGllbnRIZWlnaHQpOlxuICpcbiAqIC0tLS0tLS0tLS0tLS0gY2xpZW50V2lkdGggLS0tLS0tLS0tLS0tLVxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICAtLS0tLS0gd2lkdGggLS0tLS0tICAgICAgICAgIHxcbiAqIHwgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8XG4gKiBjbGllbnQgICBoZWlnaHQgICAgICAgICAgICB8ICAgICAgICAgIHxcbiAqIEhlaWdodCAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8XG4gKiB8ICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgIHxcbiAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGZpeGVkUG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfVxuICpcbiAqXG4gKlxuICogQ0FTRSAod2lkdGggPiBjbGllbnRXaWR0aCB8fCBoZWlnaHQgPiBjbGllbnRIZWlnaHQpOlxuICpcbiAqIC0tLS0tLS0tLS0tLS0gY2xpZW50V2lkdGggLS0tLS0tLS0tLS0tLVxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiB8ICAgICAgICB0b3AgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAqIHwgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfC0tbGVmdC0tfC0tLS0tLS0tLS0tLS0tLSB3aWR0aCAtLS0tLS0tLS0tLS0tLS0tLVxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogY2xpZW50ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogSGVpZ2h0ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgaGVpZ2h0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogfCAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogLS0tLS0tLS0tfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqXG4gKiAtIGxlZnQgfHwgdG9wID4gMFxuICogICBsZWZ0IC0+IDAgfHwgdG9wIC0+IDBcbiAqXG4gKiAtIChsZWZ0ICsgd2lkdGgpIDwgY2xpZW50V2lkdGggfHwgKHRvcCArIGhlaWdodCkgPCBjbGllbnRIZWlnaHRcbiAqIC0gbGVmdCB8IHRvcCArIHdpZHRoIHwgaGVpZ2h0IDwgY2xpZW50V2lkdGggfCBjbGllbnRIZWlnaHQgLT4gQmFjayBsZWZ0IHwgdG9wICsgd2lkdGggfCBoZWlnaHQgPT09IGNsaWVudFdpZHRoIHwgY2xpZW50SGVpZ2h0XG4gKlxuICogREVGQVVMVDpcbiAqIC0gaG9sZCBwb3NpdGlvblxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpdENvbnRlbnRQb3NpdGlvbihwYXJhbXM6IHtcbiAgd2lkdGg6IG51bWJlcjtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIGxlZnQ6IG51bWJlcjtcbiAgdG9wOiBudW1iZXI7XG4gIGNsaWVudFdpZHRoOiBudW1iZXI7XG4gIGNsaWVudEhlaWdodDogbnVtYmVyO1xufSk6IHsgeD86IG51bWJlcjsgeT86IG51bWJlciB9IHtcbiAgbGV0IGZpeFBvcyA9IHt9O1xuXG4gIGlmIChwYXJhbXMud2lkdGggPD0gcGFyYW1zLmNsaWVudFdpZHRoICYmIHBhcmFtcy5oZWlnaHQgPD0gcGFyYW1zLmNsaWVudEhlaWdodCkge1xuICAgIGZpeFBvcyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIGlmIChwYXJhbXMud2lkdGggPiBwYXJhbXMuY2xpZW50V2lkdGggfHwgcGFyYW1zLmhlaWdodCA+IHBhcmFtcy5jbGllbnRIZWlnaHQpIHtcbiAgICBmaXhQb3MgPSB7XG4gICAgICB4OiBmaXRQb2ludChwYXJhbXMubGVmdCwgcGFyYW1zLndpZHRoLCBwYXJhbXMuY2xpZW50V2lkdGgpLFxuICAgICAgeTogZml0UG9pbnQocGFyYW1zLnRvcCwgcGFyYW1zLmhlaWdodCwgcGFyYW1zLmNsaWVudEhlaWdodClcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZpeFBvcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldChub2RlOiBIVE1MRWxlbWVudCk6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlciB9IHtcbiAgY29uc3QgYm94ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAvLyB1c2UgZG9jRWxlbS5zY3JvbGxMZWZ0IHRvIHN1cHBvcnQgSUVcbiAgcmV0dXJuIHtcbiAgICBsZWZ0OiBib3gubGVmdCArICh3aW5kb3cucGFnZVhPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxMZWZ0KSAtIChkb2NFbGVtLmNsaWVudExlZnQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRMZWZ0IHx8IDApLFxuICAgIHRvcDogYm94LnRvcCArICh3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxUb3ApIC0gKGRvY0VsZW0uY2xpZW50VG9wIHx8IGRvY3VtZW50LmJvZHkuY2xpZW50VG9wIHx8IDApXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRTaXplKCk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSB7XG4gIGNvbnN0IHdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZml0UG9pbnQoc3RhcnQ6IG51bWJlciwgc2l6ZTogbnVtYmVyLCBjbGllbnRTaXplOiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3Qgc3RhcnRBZGRTaXplID0gc3RhcnQgKyBzaXplO1xuICBjb25zdCBvZmZzZXRTdGFydCA9IChzaXplIC0gY2xpZW50U2l6ZSkgLyAyO1xuICBsZXQgZGlzdGFuY2U6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChzaXplID4gY2xpZW50U2l6ZSkge1xuICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgIGRpc3RhbmNlID0gb2Zmc2V0U3RhcnQ7XG4gICAgfVxuICAgIGlmIChzdGFydCA8IDAgJiYgc3RhcnRBZGRTaXplIDwgY2xpZW50U2l6ZSkge1xuICAgICAgZGlzdGFuY2UgPSAtb2Zmc2V0U3RhcnQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChzdGFydCA8IDAgfHwgc3RhcnRBZGRTaXplID4gY2xpZW50U2l6ZSkge1xuICAgICAgZGlzdGFuY2UgPSBzdGFydCA8IDAgPyBvZmZzZXRTdGFydCA6IC1vZmZzZXRTdGFydDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzdGFuY2U7XG59XG4iXX0=