@catull/igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
91 lines • 14.3 kB
JavaScript
import { HorizontalAlignment, Util, VerticalAlignment } from './../utilities';
import { scaleInVerTop, scaleOutVerTop } from '../../../animations/main';
/**
* Positions the element based on the directions and start point passed in trough PositionSettings.
* It is possible to either pass a start point or an HTMLElement as a positioning base.
*/
var ConnectedPositioningStrategy = /** @class */ (function () {
function ConnectedPositioningStrategy(settings) {
this._defaultSettings = {
// default Point(0, 0) in getPointFromPositionsSettings
target: null,
horizontalDirection: HorizontalAlignment.Right,
verticalDirection: VerticalAlignment.Bottom,
horizontalStartPoint: HorizontalAlignment.Left,
verticalStartPoint: VerticalAlignment.Bottom,
openAnimation: scaleInVerTop,
closeAnimation: scaleOutVerTop,
minSize: { width: 0, height: 0 }
};
this.settings = Object.assign({}, this._defaultSettings, settings);
}
/**
* Obtains the ClientRect objects for the required elements - target and element to position
* @returns target and element ClientRect objects
*/
ConnectedPositioningStrategy.prototype.calculateElementRectangles = function (contentElement) {
return {
targetRect: Util.getTargetRect(this.settings),
elementRect: contentElement.getBoundingClientRect()
};
};
/** @inheritdoc */
ConnectedPositioningStrategy.prototype.position = function (contentElement, size, document, initialCall) {
var rects = this.calculateElementRectangles(contentElement);
this.setStyle(contentElement, rects.targetRect, rects.elementRect, {});
};
/**
* @inheritdoc
* Creates clone of this position strategy
* @returns clone of this position strategy
*/
ConnectedPositioningStrategy.prototype.clone = function () {
return Util.cloneInstance(this);
};
/**
* Sets element's style which effectively positions provided element according
* to provided position settings
* @param element Element to position
* @param targetRect Bounding rectangle of strategy target
* @param elementRect Bounding rectangle of the element
*/
ConnectedPositioningStrategy.prototype.setStyle = function (element, targetRect, elementRect, connectedFit) {
var horizontalOffset = connectedFit.horizontalOffset ? connectedFit.horizontalOffset : 0;
var verticalOffset = connectedFit.verticalOffset ? connectedFit.verticalOffset : 0;
var startPoint = {
x: targetRect.right + targetRect.width * this.settings.horizontalStartPoint + horizontalOffset,
y: targetRect.bottom + targetRect.height * this.settings.verticalStartPoint + verticalOffset
};
var wrapperRect = element.parentElement.getBoundingClientRect();
// clean up styles - if auto position strategy is chosen we may pass here several times
element.style.right = '';
element.style.left = '';
element.style.bottom = '';
element.style.top = '';
switch (this.settings.horizontalDirection) {
case HorizontalAlignment.Left:
element.style.right = Math.round(wrapperRect.right - startPoint.x) + "px";
break;
case HorizontalAlignment.Center:
element.style.left = Math.round(startPoint.x - wrapperRect.left - elementRect.width / 2) + "px";
break;
case HorizontalAlignment.Right:
element.style.left = Math.round(startPoint.x - wrapperRect.left) + "px";
break;
}
switch (this.settings.verticalDirection) {
case VerticalAlignment.Top:
element.style.bottom = Math.round(wrapperRect.bottom - startPoint.y) + "px";
break;
case VerticalAlignment.Middle:
element.style.top = Math.round(startPoint.y - wrapperRect.top - elementRect.height / 2) + "px";
break;
case VerticalAlignment.Bottom:
element.style.top = Math.round(startPoint.y - wrapperRect.top) + "px";
break;
}
};
return ConnectedPositioningStrategy;
}());
export { ConnectedPositioningStrategy };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdGVkLXBvc2l0aW9uaW5nLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6Im5nOi8vaWduaXRldWktYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9vdmVybGF5L3Bvc2l0aW9uL2Nvbm5lY3RlZC1wb3NpdGlvbmluZy1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsbUJBQW1CLEVBSW5CLElBQUksRUFDSixpQkFBaUIsRUFDbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3pFOzs7R0FHRztBQUNIO0lBZ0JFLHNDQUFZLFFBQTJCO1FBZi9CLHFCQUFnQixHQUFxQjtZQUMzQyx1REFBdUQ7WUFDdkQsTUFBTSxFQUFFLElBQUk7WUFDWixtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLO1lBQzlDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLE1BQU07WUFDM0Msb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtZQUM5QyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO1lBQzVDLGFBQWEsRUFBRSxhQUFhO1lBQzVCLGNBQWMsRUFBRSxjQUFjO1lBQzlCLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTtTQUNqQyxDQUFDO1FBTUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGlFQUEwQixHQUFwQyxVQUFxQyxjQUFjO1FBQy9DLE9BQU87WUFDSCxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdDLFdBQVcsRUFBRSxjQUFjLENBQUMscUJBQXFC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aUJBQWlCLENBQUMsTUFBTTtnQkFDM0IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsT0FBSSxDQUFDO2dCQUMvRixNQUFNO1lBQ1IsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO2dCQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBTSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFJLENBQUM7Z0JBQ3RFLE1BQU07U0FDVDtJQUNILENBQUM7SUFDSCxtQ0FBQztBQUFELENBQUMsQUE1RkQsSUE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJy4vSVBvc2l0aW9uU3RyYXRlZ3knO1xuaW1wb3J0IHtcbiAgSG9yaXpvbnRhbEFsaWdubWVudCxcbiAgUG9pbnQsXG4gIFBvc2l0aW9uU2V0dGluZ3MsXG4gIFNpemUsXG4gIFV0aWwsXG4gIFZlcnRpY2FsQWxpZ25tZW50XG59IGZyb20gJy4vLi4vdXRpbGl0aWVzJztcbmltcG9ydCB7IHNjYWxlSW5WZXJUb3AsIHNjYWxlT3V0VmVyVG9wIH0gZnJvbSAnLi4vLi4vLi4vYW5pbWF0aW9ucy9tYWluJztcbmltcG9ydCB7IENvbm5lY3RlZEZpdCB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5cbi8qKlxuICogUG9zaXRpb25zIHRoZSBlbGVtZW50IGJhc2VkIG9uIHRoZSBkaXJlY3Rpb25zIGFuZCBzdGFydCBwb2ludCBwYXNzZWQgaW4gdHJvdWdoIFBvc2l0aW9uU2V0dGluZ3MuXG4gKiBJdCBpcyBwb3NzaWJsZSB0byBlaXRoZXIgcGFzcyBhIHN0YXJ0IHBvaW50IG9yIGFuIEhUTUxFbGVtZW50IGFzIGEgcG9zaXRpb25pbmcgYmFzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3kgaW1wbGVtZW50cyBJUG9zaXRpb25TdHJhdGVneSB7XG4gIHByaXZhdGUgX2RlZmF1bHRTZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncyA9IHtcbiAgICAvLyBkZWZhdWx0IFBvaW50KDAsIDApIGluIGdldFBvaW50RnJvbVBvc2l0aW9uc1NldHRpbmdzXG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIGhvcml6b250YWxEaXJlY3Rpb246IEhvcml6b250YWxBbGlnbm1lbnQuUmlnaHQsXG4gICAgdmVydGljYWxEaXJlY3Rpb246IFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbSxcbiAgICBob3Jpem9udGFsU3RhcnRQb2ludDogSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0LFxuICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgIG9wZW5BbmltYXRpb246IHNjYWxlSW5WZXJUb3AsXG4gICAgY2xvc2VBbmltYXRpb246IHNjYWxlT3V0VmVyVG9wLFxuICAgIG1pblNpemU6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9XG4gIH07XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHB1YmxpYyBzZXR0aW5nczogUG9zaXRpb25TZXR0aW5ncztcblxuICBjb25zdHJ1Y3RvcihzZXR0aW5ncz86IFBvc2l0aW9uU2V0dGluZ3MpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmYXVsdFNldHRpbmdzLCBzZXR0aW5ncyk7XG4gIH1cblxuICAvKipcbiAgICogT2J0YWlucyB0aGUgQ2xpZW50UmVjdCBvYmplY3RzIGZvciB0aGUgcmVxdWlyZWQgZWxlbWVudHMgLSB0YXJnZXQgYW5kIGVsZW1lbnQgdG8gcG9zaXRpb25cbiAgICogQHJldHVybnMgdGFyZ2V0IGFuZCBlbGVtZW50IENsaWVudFJlY3Qgb2JqZWN0c1xuICAgKi9cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUVsZW1lbnRSZWN0YW5nbGVzKGNvbnRlbnRFbGVtZW50KTogeyB0YXJnZXRSZWN0OiBDbGllbnRSZWN0LCBlbGVtZW50UmVjdDogQ2xpZW50UmVjdCB9IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGFyZ2V0UmVjdDogVXRpbC5nZXRUYXJnZXRSZWN0KHRoaXMuc2V0dGluZ3MpLFxuICAgICAgICAgIGVsZW1lbnRSZWN0OiBjb250ZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBhcyBDbGllbnRSZWN0XG4gICAgICB9O1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHBvc2l0aW9uKGNvbnRlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgc2l6ZTogU2l6ZSwgZG9jdW1lbnQ/OiBEb2N1bWVudCwgaW5pdGlhbENhbGw/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgcmVjdHMgPSAgdGhpcy5jYWxjdWxhdGVFbGVtZW50UmVjdGFuZ2xlcyhjb250ZW50RWxlbWVudCk7XG4gICAgdGhpcy5zZXRTdHlsZShjb250ZW50RWxlbWVudCwgcmVjdHMudGFyZ2V0UmVjdCwgcmVjdHMuZWxlbWVudFJlY3QsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKiBDcmVhdGVzIGNsb25lIG9mIHRoaXMgcG9zaXRpb24gc3RyYXRlZ3lcbiAgICogQHJldHVybnMgY2xvbmUgb2YgdGhpcyBwb3NpdGlvbiBzdHJhdGVneVxuICAgKi9cbiAgY2xvbmUoKTogSVBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIHJldHVybiBVdGlsLmNsb25lSW5zdGFuY2UodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBlbGVtZW50J3Mgc3R5bGUgd2hpY2ggZWZmZWN0aXZlbHkgcG9zaXRpb25zIHByb3ZpZGVkIGVsZW1lbnQgYWNjb3JkaW5nXG4gICAqIHRvIHByb3ZpZGVkIHBvc2l0aW9uIHNldHRpbmdzXG4gICAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gcG9zaXRpb25cbiAgICogQHBhcmFtIHRhcmdldFJlY3QgQm91bmRpbmcgcmVjdGFuZ2xlIG9mIHN0cmF0ZWd5IHRhcmdldFxuICAgKiBAcGFyYW0gZWxlbWVudFJlY3QgQm91bmRpbmcgcmVjdGFuZ2xlIG9mIHRoZSBlbGVtZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgc2V0U3R5bGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldFJlY3Q6IENsaWVudFJlY3QsIGVsZW1lbnRSZWN0OiBDbGllbnRSZWN0LCBjb25uZWN0ZWRGaXQ6IENvbm5lY3RlZEZpdCkge1xuICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IGNvbm5lY3RlZEZpdC5ob3Jpem9udGFsT2Zmc2V0ID8gY29ubmVjdGVkRml0Lmhvcml6b250YWxPZmZzZXQgOiAwO1xuICAgICAgY29uc3QgdmVydGljYWxPZmZzZXQgPSBjb25uZWN0ZWRGaXQudmVydGljYWxPZmZzZXQgPyBjb25uZWN0ZWRGaXQudmVydGljYWxPZmZzZXQgOiAwO1xuICAgIGNvbnN0IHN0YXJ0UG9pbnQ6IFBvaW50ID0ge1xuICAgICAgeDogdGFyZ2V0UmVjdC5yaWdodCArIHRhcmdldFJlY3Qud2lkdGggKiB0aGlzLnNldHRpbmdzLmhvcml6b250YWxTdGFydFBvaW50ICsgaG9yaXpvbnRhbE9mZnNldCxcbiAgICAgIHk6IHRhcmdldFJlY3QuYm90dG9tICsgdGFyZ2V0UmVjdC5oZWlnaHQgKiB0aGlzLnNldHRpbmdzLnZlcnRpY2FsU3RhcnRQb2ludCArIHZlcnRpY2FsT2Zmc2V0XG4gICAgfTtcbiAgICBjb25zdCB3cmFwcGVyUmVjdDogQ2xpZW50UmVjdCA9IGVsZW1lbnQucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIC8vICBjbGVhbiB1cCBzdHlsZXMgLSBpZiBhdXRvIHBvc2l0aW9uIHN0cmF0ZWd5IGlzIGNob3NlbiB3ZSBtYXkgcGFzcyBoZXJlIHNldmVyYWwgdGltZXNcbiAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gJyc7XG4gICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gJyc7XG4gICAgZWxlbWVudC5zdHlsZS5ib3R0b20gPSAnJztcbiAgICBlbGVtZW50LnN0eWxlLnRvcCA9ICcnO1xuXG4gICAgc3dpdGNoICh0aGlzLnNldHRpbmdzLmhvcml6b250YWxEaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgSG9yaXpvbnRhbEFsaWdubWVudC5MZWZ0OlxuICAgICAgICBlbGVtZW50LnN0eWxlLnJpZ2h0ID0gYCR7TWF0aC5yb3VuZCh3cmFwcGVyUmVjdC5yaWdodCAtIHN0YXJ0UG9pbnQueCl9cHhgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSG9yaXpvbnRhbEFsaWdubWVudC5DZW50ZXI6XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IGAke01hdGgucm91bmQoc3RhcnRQb2ludC54IC0gd3JhcHBlclJlY3QubGVmdCAtIGVsZW1lbnRSZWN0LndpZHRoIC8gMil9cHhgO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSG9yaXpvbnRhbEFsaWdubWVudC5SaWdodDpcbiAgICAgICAgZWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7TWF0aC5yb3VuZChzdGFydFBvaW50LnggLSB3cmFwcGVyUmVjdC5sZWZ0KX1weGA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5zZXR0aW5ncy52ZXJ0aWNhbERpcmVjdGlvbikge1xuICAgICAgY2FzZSBWZXJ0aWNhbEFsaWdubWVudC5Ub3A6XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuYm90dG9tID0gYCR7TWF0aC5yb3VuZCh3cmFwcGVyUmVjdC5ib3R0b20gLSBzdGFydFBvaW50LnkpfXB4YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZlcnRpY2FsQWxpZ25tZW50Lk1pZGRsZTpcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtNYXRoLnJvdW5kKHN0YXJ0UG9pbnQueSAtIHdyYXBwZXJSZWN0LnRvcCAtIGVsZW1lbnRSZWN0LmhlaWdodCAvIDIpfXB4YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFZlcnRpY2FsQWxpZ25tZW50LkJvdHRvbTpcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHtNYXRoLnJvdW5kKHN0YXJ0UG9pbnQueSAtIHdyYXBwZXJSZWN0LnRvcCl9cHhgO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbn1cbiJdfQ==