@edugouvfr/ngx-dsfr-ext
Version:
NgxDsfrExt est une extension au package @edugouvfr/ngx-dsfr (portage Angular des éléments DSFR)
48 lines • 7.1 kB
JavaScript
export class DropdownUtils {
constructor() { }
/**
* Si appendTo est défini, trouver le container auquel le rattacher (element ou classe)
* Si le container parent ne correspond ni au body ni à une modale, le placer en position relative
* */
static setParentContainer(appendTo, comboBox) {
let containerToAttach = undefined;
if (appendTo === 'body') {
containerToAttach = document.querySelector('body');
}
else {
if (typeof appendTo === 'string') {
const elem = comboBox.closest(`.${appendTo}`);
containerToAttach = elem ?? undefined;
}
else {
containerToAttach = appendTo;
}
if (!containerToAttach) {
console.warn('`appendTo` must be equal to `body`, an element ref or a class of an ancestor container');
}
if (containerToAttach && !DropdownUtils.isBodyOrFixedElement(containerToAttach)) {
// surcharge du style de l'élément parent avec position relative si appendTo !== body
containerToAttach.style.position = 'relative';
}
}
return containerToAttach;
}
/**
* Get viewport for overlay position
* From primeNG */
static getViewport() {
const win = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], w = win.innerWidth || e.clientWidth || g.clientWidth, h = win.innerHeight || e.clientHeight || g.clientHeight;
return { width: w, height: h };
}
/**
* Get scroll from top for overlay position
* From primeNG */
static getWindowScrollTop() {
const doc = document.documentElement;
return (window.scrollY || doc.scrollTop) - (doc.clientTop || 0);
}
static isBodyOrFixedElement(container) {
return container.tagName === 'BODY' || container.tagName === 'DIALOG' || container.style.position === 'fixed';
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1leHQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9kcm9wZG93bi1jb250YWluZXIvZHJvcGRvd24udXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGFBQWE7SUFDeEIsZ0JBQXVCLENBQUM7SUFFeEI7OztVQUdNO0lBQ04sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQThCLEVBQUUsUUFBcUI7UUFDN0UsSUFBSSxpQkFBaUIsR0FBNEIsU0FBUyxDQUFDO1FBRTNELElBQUksUUFBUSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFFLENBQUM7UUFDdEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNqQyxNQUFNLElBQUksR0FBdUIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xFLGlCQUFpQixHQUFHLElBQUksSUFBSSxTQUFTLENBQUM7WUFDeEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGlCQUFpQixHQUFHLFFBQVEsQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztZQUN6RyxDQUFDO1lBQ0QsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hGLHFGQUFxRjtnQkFDckYsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLGlCQUFpQixDQUFDO0lBQzNCLENBQUM7SUFFRDs7dUJBRW1CO0lBQ25CLE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLE1BQU0sR0FBRyxHQUFHLE1BQU0sRUFDaEIsQ0FBQyxHQUFHLFFBQVEsRUFDWixDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFDckIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUNwRCxDQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFFMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7c0JBRWtCO0lBQ2xCLE1BQU0sQ0FBQyxrQkFBa0I7UUFDdkIsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUVyQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsU0FBc0I7UUFDaEQsT0FBTyxTQUFTLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUM7SUFDaEgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIERyb3Bkb3duVXRpbHMge1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogU2kgYXBwZW5kVG8gZXN0IGTDqWZpbmksIHRyb3V2ZXIgbGUgY29udGFpbmVyIGF1cXVlbCBsZSByYXR0YWNoZXIgKGVsZW1lbnQgb3UgY2xhc3NlKVxuICAgKiBTaSBsZSBjb250YWluZXIgcGFyZW50IG5lIGNvcnJlc3BvbmQgbmkgYXUgYm9keSBuaSDDoCB1bmUgbW9kYWxlLCBsZSBwbGFjZXIgZW4gcG9zaXRpb24gcmVsYXRpdmVcbiAgICogICovXG4gIHN0YXRpYyBzZXRQYXJlbnRDb250YWluZXIoYXBwZW5kVG86IEhUTUxFbGVtZW50IHwgc3RyaW5nLCBjb21ib0JveDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGNvbnRhaW5lclRvQXR0YWNoOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmIChhcHBlbmRUbyA9PT0gJ2JvZHknKSB7XG4gICAgICBjb250YWluZXJUb0F0dGFjaCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKSE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgYXBwZW5kVG8gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGVsZW06IEhUTUxFbGVtZW50IHwgbnVsbCA9IGNvbWJvQm94LmNsb3Nlc3QoYC4ke2FwcGVuZFRvfWApO1xuICAgICAgICBjb250YWluZXJUb0F0dGFjaCA9IGVsZW0gPz8gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGFpbmVyVG9BdHRhY2ggPSBhcHBlbmRUbztcbiAgICAgIH1cbiAgICAgIGlmICghY29udGFpbmVyVG9BdHRhY2gpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdgYXBwZW5kVG9gIG11c3QgYmUgZXF1YWwgdG8gYGJvZHlgLCBhbiBlbGVtZW50IHJlZiBvciBhIGNsYXNzIG9mIGFuIGFuY2VzdG9yIGNvbnRhaW5lcicpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRhaW5lclRvQXR0YWNoICYmICFEcm9wZG93blV0aWxzLmlzQm9keU9yRml4ZWRFbGVtZW50KGNvbnRhaW5lclRvQXR0YWNoKSkge1xuICAgICAgICAvLyBzdXJjaGFyZ2UgZHUgc3R5bGUgZGUgbCfDqWzDqW1lbnQgcGFyZW50IGF2ZWMgcG9zaXRpb24gcmVsYXRpdmUgc2kgYXBwZW5kVG8gIT09IGJvZHlcbiAgICAgICAgY29udGFpbmVyVG9BdHRhY2guc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXJUb0F0dGFjaDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdmlld3BvcnQgZm9yIG92ZXJsYXkgcG9zaXRpb25cbiAgICogRnJvbSBwcmltZU5HICAqL1xuICBzdGF0aWMgZ2V0Vmlld3BvcnQoKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IHtcbiAgICBjb25zdCB3aW4gPSB3aW5kb3csXG4gICAgICBkID0gZG9jdW1lbnQsXG4gICAgICBlID0gZC5kb2N1bWVudEVsZW1lbnQsXG4gICAgICBnID0gZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLFxuICAgICAgdyA9IHdpbi5pbm5lcldpZHRoIHx8IGUuY2xpZW50V2lkdGggfHwgZy5jbGllbnRXaWR0aCxcbiAgICAgIGggPSB3aW4uaW5uZXJIZWlnaHQgfHwgZS5jbGllbnRIZWlnaHQgfHwgZy5jbGllbnRIZWlnaHQ7XG5cbiAgICByZXR1cm4geyB3aWR0aDogdywgaGVpZ2h0OiBoIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNjcm9sbCBmcm9tIHRvcCBmb3Igb3ZlcmxheSBwb3NpdGlvblxuICAgKiBGcm9tIHByaW1lTkcgKi9cbiAgc3RhdGljIGdldFdpbmRvd1Njcm9sbFRvcCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIHJldHVybiAod2luZG93LnNjcm9sbFkgfHwgZG9jLnNjcm9sbFRvcCkgLSAoZG9jLmNsaWVudFRvcCB8fCAwKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0JvZHlPckZpeGVkRWxlbWVudChjb250YWluZXI6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci50YWdOYW1lID09PSAnQk9EWScgfHwgY29udGFpbmVyLnRhZ05hbWUgPT09ICdESUFMT0cnIHx8IGNvbnRhaW5lci5zdHlsZS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgfVxufVxuIl19