Skip to content

Commit

Permalink
main - 7cd3f02 fix(cdk/drag-drop): use native popover to avoid stacki…
Browse files Browse the repository at this point in the history
…ng issues with preview
  • Loading branch information
crisbeto committed Apr 24, 2024
1 parent bb87bde commit a49e7f1
Show file tree
Hide file tree
Showing 7 changed files with 385 additions and 232 deletions.
12 changes: 4 additions & 8 deletions drag-drop/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -653,8 +653,11 @@ declare interface DragHelperTemplate<T = any> {
}

/** Template that can be used to create a drag preview element. */
declare interface DragPreviewTemplate<T = any> extends DragHelperTemplate<T> {
declare interface DragPreviewTemplate<T = any> {
matchSize?: boolean;
template: TemplateRef<T> | null;
viewContainer: ViewContainerRef;
context: T;
}

/**
Expand All @@ -668,8 +671,6 @@ export declare class DragRef<T = any> {
private _dragDropRegistry;
/** Element displayed next to the user's pointer while the element is dragged. */
private _preview;
/** Reference to the view of the preview element. */
private _previewRef;
/** Container into which to insert the preview. */
private _previewContainer;
/** Reference to the view of the placeholder element. */
Expand Down Expand Up @@ -967,11 +968,6 @@ export declare class DragRef<T = any> {
* into a new one, depending on its current drag position.
*/
private _updateActiveDropContainer;
/**
* Creates the element that will be rendered next to the user's pointer
* and will be used as a preview of the element that is being dragged.
*/
private _createPreviewElement;
/**
* Animates the preview element from its current position to the location of the drop placeholder.
* @returns Promise that resolves when the animation completes.
Expand Down
21 changes: 21 additions & 0 deletions esm2022/drag-drop/dom/root-node.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/**
* Gets the root HTML element of an embedded view.
* If the root is not an HTML element it gets wrapped in one.
*/
export function getRootNode(viewRef, _document) {
const rootNodes = viewRef.rootNodes;
if (rootNodes.length === 1 && rootNodes[0].nodeType === _document.ELEMENT_NODE) {
return rootNodes[0];
}
const wrapper = _document.createElement('div');
rootNodes.forEach(node => wrapper.appendChild(node));
return wrapper;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9kcmFnLWRyb3AvZG9tL3Jvb3Qtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFJSDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQTZCLEVBQUUsU0FBbUI7SUFDNUUsTUFBTSxTQUFTLEdBQVcsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUU1QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9FLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtFbWJlZGRlZFZpZXdSZWZ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIEdldHMgdGhlIHJvb3QgSFRNTCBlbGVtZW50IG9mIGFuIGVtYmVkZGVkIHZpZXcuXG4gKiBJZiB0aGUgcm9vdCBpcyBub3QgYW4gSFRNTCBlbGVtZW50IGl0IGdldHMgd3JhcHBlZCBpbiBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290Tm9kZSh2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8YW55PiwgX2RvY3VtZW50OiBEb2N1bWVudCk6IEhUTUxFbGVtZW50IHtcbiAgY29uc3Qgcm9vdE5vZGVzOiBOb2RlW10gPSB2aWV3UmVmLnJvb3ROb2RlcztcblxuICBpZiAocm9vdE5vZGVzLmxlbmd0aCA9PT0gMSAmJiByb290Tm9kZXNbMF0ubm9kZVR5cGUgPT09IF9kb2N1bWVudC5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gcm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlciA9IF9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgcm9vdE5vZGVzLmZvckVhY2gobm9kZSA9PiB3cmFwcGVyLmFwcGVuZENoaWxkKG5vZGUpKTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=
22 changes: 21 additions & 1 deletion esm2022/drag-drop/dom/styling.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,24 @@ export function combineTransforms(transform, initialTransform) {
? transform + ' ' + initialTransform
: transform;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvZHJhZy1kcm9wL2RvbS9zdHlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQVlIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUF5QixFQUN6QixNQUE4QixFQUM5QixtQkFBaUM7SUFFakMsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE9BQW9CLEVBQUUsTUFBZTtJQUNoRixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXhDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQzFCLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNwQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUN6Qyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUMxRCxhQUFhLEVBQUUsVUFBVTtRQUN6QixpQkFBaUIsRUFBRSxVQUFVO1FBQzdCLHFCQUFxQixFQUFFLFVBQVU7UUFDakMsa0JBQWtCLEVBQUUsVUFBVTtLQUMvQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFvQixFQUNwQixNQUFlLEVBQ2YsbUJBQWlDO0lBRWpDLFlBQVksQ0FDVixPQUFPLENBQUMsS0FBSyxFQUNiO1FBQ0UsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQy9CLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRztRQUN0QixPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7UUFDMUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRO0tBQzdCLEVBQ0QsbUJBQW1CLENBQ3BCLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQWlCLEVBQUUsZ0JBQXlCO0lBQzVFLE9BQU8sZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksTUFBTTtRQUNuRCxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxnQkFBZ0I7UUFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogRXh0ZW5kZWQgQ1NTU3R5bGVEZWNsYXJhdGlvbiB0aGF0IGluY2x1ZGVzIGEgY291cGxlIG9mIGRyYWctcmVsYXRlZFxuICogcHJvcGVydGllcyB0aGF0IGFyZW4ndCBpbiB0aGUgYnVpbHQtaW4gVFMgdHlwaW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmFnQ1NTU3R5bGVEZWNsYXJhdGlvbiBleHRlbmRzIENTU1N0eWxlRGVjbGFyYXRpb24ge1xuICBtc1Njcm9sbFNuYXBUeXBlOiBzdHJpbmc7XG4gIHNjcm9sbFNuYXBUeXBlOiBzdHJpbmc7XG4gIHdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2hhbGxvdy1leHRlbmRzIGEgc3R5bGVzaGVldCBvYmplY3Qgd2l0aCBhbm90aGVyIHN0eWxlc2hlZXQtbGlrZSBvYmplY3QuXG4gKiBOb3RlIHRoYXQgdGhlIGtleXMgaW4gYHNvdXJjZWAgaGF2ZSB0byBiZSBkYXNoLWNhc2VkLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kU3R5bGVzKFxuICBkZXN0OiBDU1NTdHlsZURlY2xhcmF0aW9uLFxuICBzb3VyY2U6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gIGltcG9ydGFudFByb3BlcnRpZXM/OiBTZXQ8c3RyaW5nPixcbikge1xuICBmb3IgKGxldCBrZXkgaW4gc291cmNlKSB7XG4gICAgaWYgKHNvdXJjZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZGVzdC5zZXRQcm9wZXJ0eShrZXksIHZhbHVlLCBpbXBvcnRhbnRQcm9wZXJ0aWVzPy5oYXMoa2V5KSA/ICdpbXBvcnRhbnQnIDogJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVzdC5yZW1vdmVQcm9wZXJ0eShrZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufVxuXG4vKipcbiAqIFRvZ2dsZXMgd2hldGhlciB0aGUgbmF0aXZlIGRyYWcgaW50ZXJhY3Rpb25zIHNob3VsZCBiZSBlbmFibGVkIGZvciBhbiBlbGVtZW50LlxuICogQHBhcmFtIGVsZW1lbnQgRWxlbWVudCBvbiB3aGljaCB0byB0b2dnbGUgdGhlIGRyYWcgaW50ZXJhY3Rpb25zLlxuICogQHBhcmFtIGVuYWJsZSBXaGV0aGVyIHRoZSBkcmFnIGludGVyYWN0aW9ucyBzaG91bGQgYmUgZW5hYmxlZC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQsIGVuYWJsZTogYm9vbGVhbikge1xuICBjb25zdCB1c2VyU2VsZWN0ID0gZW5hYmxlID8gJycgOiAnbm9uZSc7XG5cbiAgZXh0ZW5kU3R5bGVzKGVsZW1lbnQuc3R5bGUsIHtcbiAgICAndG91Y2gtYWN0aW9uJzogZW5hYmxlID8gJycgOiAnbm9uZScsXG4gICAgJy13ZWJraXQtdXNlci1kcmFnJzogZW5hYmxlID8gJycgOiAnbm9uZScsXG4gICAgJy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcic6IGVuYWJsZSA/ICcnIDogJ3RyYW5zcGFyZW50JyxcbiAgICAndXNlci1zZWxlY3QnOiB1c2VyU2VsZWN0LFxuICAgICctbXMtdXNlci1zZWxlY3QnOiB1c2VyU2VsZWN0LFxuICAgICctd2Via2l0LXVzZXItc2VsZWN0JzogdXNlclNlbGVjdCxcbiAgICAnLW1vei11c2VyLXNlbGVjdCc6IHVzZXJTZWxlY3QsXG4gIH0pO1xufVxuXG4vKipcbiAqIFRvZ2dsZXMgd2hldGhlciBhbiBlbGVtZW50IGlzIHZpc2libGUgd2hpbGUgcHJlc2VydmluZyBpdHMgZGltZW5zaW9ucy5cbiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgd2hvc2UgdmlzaWJpbGl0eSB0byB0b2dnbGVcbiAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgZWxlbWVudCBzaG91bGQgYmUgdmlzaWJsZS5cbiAqIEBwYXJhbSBpbXBvcnRhbnRQcm9wZXJ0aWVzIFByb3BlcnRpZXMgdG8gYmUgc2V0IGFzIGAhaW1wb3J0YW50YC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVZpc2liaWxpdHkoXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBlbmFibGU6IGJvb2xlYW4sXG4gIGltcG9ydGFudFByb3BlcnRpZXM/OiBTZXQ8c3RyaW5nPixcbikge1xuICBleHRlbmRTdHlsZXMoXG4gICAgZWxlbWVudC5zdHlsZSxcbiAgICB7XG4gICAgICBwb3NpdGlvbjogZW5hYmxlID8gJycgOiAnZml4ZWQnLFxuICAgICAgdG9wOiBlbmFibGUgPyAnJyA6ICcwJyxcbiAgICAgIG9wYWNpdHk6IGVuYWJsZSA/ICcnIDogJzAnLFxuICAgICAgbGVmdDogZW5hYmxlID8gJycgOiAnLTk5OWVtJyxcbiAgICB9LFxuICAgIGltcG9ydGFudFByb3BlcnRpZXMsXG4gICk7XG59XG5cbi8qKlxuICogQ29tYmluZXMgYSB0cmFuc2Zvcm0gc3RyaW5nIHdpdGggYW4gb3B0aW9uYWwgb3RoZXIgdHJhbnNmb3JtXG4gKiB0aGF0IGV4aXRlZCBiZWZvcmUgdGhlIGJhc2UgdHJhbnNmb3JtIHdhcyBhcHBsaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZVRyYW5zZm9ybXModHJhbnNmb3JtOiBzdHJpbmcsIGluaXRpYWxUcmFuc2Zvcm0/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5pdGlhbFRyYW5zZm9ybSAmJiBpbml0aWFsVHJhbnNmb3JtICE9ICdub25lJ1xuICAgID8gdHJhbnNmb3JtICsgJyAnICsgaW5pdGlhbFRyYW5zZm9ybVxuICAgIDogdHJhbnNmb3JtO1xufVxuIl19
/**
* Matches the target element's size to the source's size.
* @param target Element that needs to be resized.
* @param sourceRect Dimensions of the source element.
*/
export function matchElementSize(target, sourceRect) {
target.style.width = `${sourceRect.width}px`;
target.style.height = `${sourceRect.height}px`;
target.style.transform = getTransform(sourceRect.left, sourceRect.top);
}
/**
* Gets a 3d `transform` that can be applied to an element.
* @param x Desired position of the element along the X axis.
* @param y Desired position of the element along the Y axis.
*/
export function getTransform(x, y) {
// Round the transforms since some browsers will
// blur the elements for sub-pixel transforms.
return `translate3d(${Math.round(x)}px, ${Math.round(y)}px, 0)`;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvZHJhZy1kcm9wL2RvbS9zdHlsaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQVlIOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUMxQixJQUF5QixFQUN6QixNQUE4QixFQUM5QixtQkFBaUM7SUFFakMsS0FBSyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2pGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE9BQW9CLEVBQUUsTUFBZTtJQUNoRixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRXhDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO1FBQzFCLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUNwQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTtRQUN6Qyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYTtRQUMxRCxhQUFhLEVBQUUsVUFBVTtRQUN6QixpQkFBaUIsRUFBRSxVQUFVO1FBQzdCLHFCQUFxQixFQUFFLFVBQVU7UUFDakMsa0JBQWtCLEVBQUUsVUFBVTtLQUMvQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFvQixFQUNwQixNQUFlLEVBQ2YsbUJBQWlDO0lBRWpDLFlBQVksQ0FDVixPQUFPLENBQUMsS0FBSyxFQUNiO1FBQ0UsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPO1FBQy9CLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRztRQUN0QixPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUc7UUFDMUIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRO0tBQzdCLEVBQ0QsbUJBQW1CLENBQ3BCLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQWlCLEVBQUUsZ0JBQXlCO0lBQzVFLE9BQU8sZ0JBQWdCLElBQUksZ0JBQWdCLElBQUksTUFBTTtRQUNuRCxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsR0FBRyxnQkFBZ0I7UUFDcEMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFtQixFQUFFLFVBQW1CO0lBQ3ZFLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsQ0FBUyxFQUFFLENBQVM7SUFDL0MsZ0RBQWdEO0lBQ2hELDhDQUE4QztJQUM5QyxPQUFPLGVBQWUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDbEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEV4dGVuZGVkIENTU1N0eWxlRGVjbGFyYXRpb24gdGhhdCBpbmNsdWRlcyBhIGNvdXBsZSBvZiBkcmFnLXJlbGF0ZWRcbiAqIHByb3BlcnRpZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGJ1aWx0LWluIFRTIHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJhZ0NTU1N0eWxlRGVjbGFyYXRpb24gZXh0ZW5kcyBDU1NTdHlsZURlY2xhcmF0aW9uIHtcbiAgbXNTY3JvbGxTbmFwVHlwZTogc3RyaW5nO1xuICBzY3JvbGxTbmFwVHlwZTogc3RyaW5nO1xuICB3ZWJraXRUYXBIaWdobGlnaHRDb2xvcjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNoYWxsb3ctZXh0ZW5kcyBhIHN0eWxlc2hlZXQgb2JqZWN0IHdpdGggYW5vdGhlciBzdHlsZXNoZWV0LWxpa2Ugb2JqZWN0LlxuICogTm90ZSB0aGF0IHRoZSBrZXlzIGluIGBzb3VyY2VgIGhhdmUgdG8gYmUgZGFzaC1jYXNlZC5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZFN0eWxlcyhcbiAgZGVzdDogQ1NTU3R5bGVEZWNsYXJhdGlvbixcbiAgc291cmNlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBpbXBvcnRhbnRQcm9wZXJ0aWVzPzogU2V0PHN0cmluZz4sXG4pIHtcbiAgZm9yIChsZXQga2V5IGluIHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGRlc3Quc2V0UHJvcGVydHkoa2V5LCB2YWx1ZSwgaW1wb3J0YW50UHJvcGVydGllcz8uaGFzKGtleSkgPyAnaW1wb3J0YW50JyA6ICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlc3QucmVtb3ZlUHJvcGVydHkoa2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVzdDtcbn1cblxuLyoqXG4gKiBUb2dnbGVzIHdoZXRoZXIgdGhlIG5hdGl2ZSBkcmFnIGludGVyYWN0aW9ucyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgYW4gZWxlbWVudC5cbiAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgb24gd2hpY2ggdG8gdG9nZ2xlIHRoZSBkcmFnIGludGVyYWN0aW9ucy5cbiAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgZHJhZyBpbnRlcmFjdGlvbnMgc2hvdWxkIGJlIGVuYWJsZWQuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBlbmFibGU6IGJvb2xlYW4pIHtcbiAgY29uc3QgdXNlclNlbGVjdCA9IGVuYWJsZSA/ICcnIDogJ25vbmUnO1xuXG4gIGV4dGVuZFN0eWxlcyhlbGVtZW50LnN0eWxlLCB7XG4gICAgJ3RvdWNoLWFjdGlvbic6IGVuYWJsZSA/ICcnIDogJ25vbmUnLFxuICAgICctd2Via2l0LXVzZXItZHJhZyc6IGVuYWJsZSA/ICcnIDogJ25vbmUnLFxuICAgICctd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3InOiBlbmFibGUgPyAnJyA6ICd0cmFuc3BhcmVudCcsXG4gICAgJ3VzZXItc2VsZWN0JzogdXNlclNlbGVjdCxcbiAgICAnLW1zLXVzZXItc2VsZWN0JzogdXNlclNlbGVjdCxcbiAgICAnLXdlYmtpdC11c2VyLXNlbGVjdCc6IHVzZXJTZWxlY3QsXG4gICAgJy1tb3otdXNlci1zZWxlY3QnOiB1c2VyU2VsZWN0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBUb2dnbGVzIHdoZXRoZXIgYW4gZWxlbWVudCBpcyB2aXNpYmxlIHdoaWxlIHByZXNlcnZpbmcgaXRzIGRpbWVuc2lvbnMuXG4gKiBAcGFyYW0gZWxlbWVudCBFbGVtZW50IHdob3NlIHZpc2liaWxpdHkgdG8gdG9nZ2xlXG4gKiBAcGFyYW0gZW5hYmxlIFdoZXRoZXIgdGhlIGVsZW1lbnQgc2hvdWxkIGJlIHZpc2libGUuXG4gKiBAcGFyYW0gaW1wb3J0YW50UHJvcGVydGllcyBQcm9wZXJ0aWVzIHRvIGJlIHNldCBhcyBgIWltcG9ydGFudGAuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVWaXNpYmlsaXR5KFxuICBlbGVtZW50OiBIVE1MRWxlbWVudCxcbiAgZW5hYmxlOiBib29sZWFuLFxuICBpbXBvcnRhbnRQcm9wZXJ0aWVzPzogU2V0PHN0cmluZz4sXG4pIHtcbiAgZXh0ZW5kU3R5bGVzKFxuICAgIGVsZW1lbnQuc3R5bGUsXG4gICAge1xuICAgICAgcG9zaXRpb246IGVuYWJsZSA/ICcnIDogJ2ZpeGVkJyxcbiAgICAgIHRvcDogZW5hYmxlID8gJycgOiAnMCcsXG4gICAgICBvcGFjaXR5OiBlbmFibGUgPyAnJyA6ICcwJyxcbiAgICAgIGxlZnQ6IGVuYWJsZSA/ICcnIDogJy05OTllbScsXG4gICAgfSxcbiAgICBpbXBvcnRhbnRQcm9wZXJ0aWVzLFxuICApO1xufVxuXG4vKipcbiAqIENvbWJpbmVzIGEgdHJhbnNmb3JtIHN0cmluZyB3aXRoIGFuIG9wdGlvbmFsIG90aGVyIHRyYW5zZm9ybVxuICogdGhhdCBleGl0ZWQgYmVmb3JlIHRoZSBiYXNlIHRyYW5zZm9ybSB3YXMgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVUcmFuc2Zvcm1zKHRyYW5zZm9ybTogc3RyaW5nLCBpbml0aWFsVHJhbnNmb3JtPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGluaXRpYWxUcmFuc2Zvcm0gJiYgaW5pdGlhbFRyYW5zZm9ybSAhPSAnbm9uZSdcbiAgICA/IHRyYW5zZm9ybSArICcgJyArIGluaXRpYWxUcmFuc2Zvcm1cbiAgICA6IHRyYW5zZm9ybTtcbn1cblxuLyoqXG4gKiBNYXRjaGVzIHRoZSB0YXJnZXQgZWxlbWVudCdzIHNpemUgdG8gdGhlIHNvdXJjZSdzIHNpemUuXG4gKiBAcGFyYW0gdGFyZ2V0IEVsZW1lbnQgdGhhdCBuZWVkcyB0byBiZSByZXNpemVkLlxuICogQHBhcmFtIHNvdXJjZVJlY3QgRGltZW5zaW9ucyBvZiB0aGUgc291cmNlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaEVsZW1lbnRTaXplKHRhcmdldDogSFRNTEVsZW1lbnQsIHNvdXJjZVJlY3Q6IERPTVJlY3QpOiB2b2lkIHtcbiAgdGFyZ2V0LnN0eWxlLndpZHRoID0gYCR7c291cmNlUmVjdC53aWR0aH1weGA7XG4gIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBgJHtzb3VyY2VSZWN0LmhlaWdodH1weGA7XG4gIHRhcmdldC5zdHlsZS50cmFuc2Zvcm0gPSBnZXRUcmFuc2Zvcm0oc291cmNlUmVjdC5sZWZ0LCBzb3VyY2VSZWN0LnRvcCk7XG59XG5cbi8qKlxuICogR2V0cyBhIDNkIGB0cmFuc2Zvcm1gIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB4IERlc2lyZWQgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgYWxvbmcgdGhlIFggYXhpcy5cbiAqIEBwYXJhbSB5IERlc2lyZWQgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgYWxvbmcgdGhlIFkgYXhpcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zZm9ybSh4OiBudW1iZXIsIHk6IG51bWJlcik6IHN0cmluZyB7XG4gIC8vIFJvdW5kIHRoZSB0cmFuc2Zvcm1zIHNpbmNlIHNvbWUgYnJvd3NlcnMgd2lsbFxuICAvLyBibHVyIHRoZSBlbGVtZW50cyBmb3Igc3ViLXBpeGVsIHRyYW5zZm9ybXMuXG4gIHJldHVybiBgdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKHgpfXB4LCAke01hdGgucm91bmQoeSl9cHgsIDApYDtcbn1cbiJdfQ==

0 comments on commit a49e7f1

Please sign in to comment.