source: trip-planner-front/node_modules/@angular/cdk/esm2015/overlay/position/global-position-strategy.js@ 6c1585f

Last change on this file since 6c1585f was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 22.5 KB
Line 
1/**
2 * @license
3 * Copyright Google LLC All Rights Reserved.
4 *
5 * Use of this source code is governed by an MIT-style license that can be
6 * found in the LICENSE file at https://angular.io/license
7 */
8/** Class to be added to the overlay pane wrapper. */
9const wrapperClass = 'cdk-global-overlay-wrapper';
10/**
11 * A strategy for positioning overlays. Using this strategy, an overlay is given an
12 * explicit position relative to the browser's viewport. We use flexbox, instead of
13 * transforms, in order to avoid issues with subpixel rendering which can cause the
14 * element to become blurry.
15 */
16export class GlobalPositionStrategy {
17 constructor() {
18 this._cssPosition = 'static';
19 this._topOffset = '';
20 this._bottomOffset = '';
21 this._leftOffset = '';
22 this._rightOffset = '';
23 this._alignItems = '';
24 this._justifyContent = '';
25 this._width = '';
26 this._height = '';
27 }
28 attach(overlayRef) {
29 const config = overlayRef.getConfig();
30 this._overlayRef = overlayRef;
31 if (this._width && !config.width) {
32 overlayRef.updateSize({ width: this._width });
33 }
34 if (this._height && !config.height) {
35 overlayRef.updateSize({ height: this._height });
36 }
37 overlayRef.hostElement.classList.add(wrapperClass);
38 this._isDisposed = false;
39 }
40 /**
41 * Sets the top position of the overlay. Clears any previously set vertical position.
42 * @param value New top offset.
43 */
44 top(value = '') {
45 this._bottomOffset = '';
46 this._topOffset = value;
47 this._alignItems = 'flex-start';
48 return this;
49 }
50 /**
51 * Sets the left position of the overlay. Clears any previously set horizontal position.
52 * @param value New left offset.
53 */
54 left(value = '') {
55 this._rightOffset = '';
56 this._leftOffset = value;
57 this._justifyContent = 'flex-start';
58 return this;
59 }
60 /**
61 * Sets the bottom position of the overlay. Clears any previously set vertical position.
62 * @param value New bottom offset.
63 */
64 bottom(value = '') {
65 this._topOffset = '';
66 this._bottomOffset = value;
67 this._alignItems = 'flex-end';
68 return this;
69 }
70 /**
71 * Sets the right position of the overlay. Clears any previously set horizontal position.
72 * @param value New right offset.
73 */
74 right(value = '') {
75 this._leftOffset = '';
76 this._rightOffset = value;
77 this._justifyContent = 'flex-end';
78 return this;
79 }
80 /**
81 * Sets the overlay width and clears any previously set width.
82 * @param value New width for the overlay
83 * @deprecated Pass the `width` through the `OverlayConfig`.
84 * @breaking-change 8.0.0
85 */
86 width(value = '') {
87 if (this._overlayRef) {
88 this._overlayRef.updateSize({ width: value });
89 }
90 else {
91 this._width = value;
92 }
93 return this;
94 }
95 /**
96 * Sets the overlay height and clears any previously set height.
97 * @param value New height for the overlay
98 * @deprecated Pass the `height` through the `OverlayConfig`.
99 * @breaking-change 8.0.0
100 */
101 height(value = '') {
102 if (this._overlayRef) {
103 this._overlayRef.updateSize({ height: value });
104 }
105 else {
106 this._height = value;
107 }
108 return this;
109 }
110 /**
111 * Centers the overlay horizontally with an optional offset.
112 * Clears any previously set horizontal position.
113 *
114 * @param offset Overlay offset from the horizontal center.
115 */
116 centerHorizontally(offset = '') {
117 this.left(offset);
118 this._justifyContent = 'center';
119 return this;
120 }
121 /**
122 * Centers the overlay vertically with an optional offset.
123 * Clears any previously set vertical position.
124 *
125 * @param offset Overlay offset from the vertical center.
126 */
127 centerVertically(offset = '') {
128 this.top(offset);
129 this._alignItems = 'center';
130 return this;
131 }
132 /**
133 * Apply the position to the element.
134 * @docs-private
135 */
136 apply() {
137 // Since the overlay ref applies the strategy asynchronously, it could
138 // have been disposed before it ends up being applied. If that is the
139 // case, we shouldn't do anything.
140 if (!this._overlayRef || !this._overlayRef.hasAttached()) {
141 return;
142 }
143 const styles = this._overlayRef.overlayElement.style;
144 const parentStyles = this._overlayRef.hostElement.style;
145 const config = this._overlayRef.getConfig();
146 const { width, height, maxWidth, maxHeight } = config;
147 const shouldBeFlushHorizontally = (width === '100%' || width === '100vw') &&
148 (!maxWidth || maxWidth === '100%' || maxWidth === '100vw');
149 const shouldBeFlushVertically = (height === '100%' || height === '100vh') &&
150 (!maxHeight || maxHeight === '100%' || maxHeight === '100vh');
151 styles.position = this._cssPosition;
152 styles.marginLeft = shouldBeFlushHorizontally ? '0' : this._leftOffset;
153 styles.marginTop = shouldBeFlushVertically ? '0' : this._topOffset;
154 styles.marginBottom = this._bottomOffset;
155 styles.marginRight = this._rightOffset;
156 if (shouldBeFlushHorizontally) {
157 parentStyles.justifyContent = 'flex-start';
158 }
159 else if (this._justifyContent === 'center') {
160 parentStyles.justifyContent = 'center';
161 }
162 else if (this._overlayRef.getConfig().direction === 'rtl') {
163 // In RTL the browser will invert `flex-start` and `flex-end` automatically, but we
164 // don't want that because our positioning is explicitly `left` and `right`, hence
165 // why we do another inversion to ensure that the overlay stays in the same position.
166 // TODO: reconsider this if we add `start` and `end` methods.
167 if (this._justifyContent === 'flex-start') {
168 parentStyles.justifyContent = 'flex-end';
169 }
170 else if (this._justifyContent === 'flex-end') {
171 parentStyles.justifyContent = 'flex-start';
172 }
173 }
174 else {
175 parentStyles.justifyContent = this._justifyContent;
176 }
177 parentStyles.alignItems = shouldBeFlushVertically ? 'flex-start' : this._alignItems;
178 }
179 /**
180 * Cleans up the DOM changes from the position strategy.
181 * @docs-private
182 */
183 dispose() {
184 if (this._isDisposed || !this._overlayRef) {
185 return;
186 }
187 const styles = this._overlayRef.overlayElement.style;
188 const parent = this._overlayRef.hostElement;
189 const parentStyles = parent.style;
190 parent.classList.remove(wrapperClass);
191 parentStyles.justifyContent = parentStyles.alignItems = styles.marginTop =
192 styles.marginBottom = styles.marginLeft = styles.marginRight = styles.position = '';
193 this._overlayRef = null;
194 this._isDisposed = true;
195 }
196}
197//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLXBvc2l0aW9uLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9vdmVybGF5L3Bvc2l0aW9uL2dsb2JhbC1wb3NpdGlvbi1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFLSCxxREFBcUQ7QUFDckQsTUFBTSxZQUFZLEdBQUcsNEJBQTRCLENBQUM7QUFFbEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBQW5DO1FBR1UsaUJBQVksR0FBVyxRQUFRLENBQUM7UUFDaEMsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQUMzQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQUMxQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3QixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLFlBQU8sR0FBVyxFQUFFLENBQUM7SUE0TC9CLENBQUM7SUF6TEMsTUFBTSxDQUFDLFVBQTRCO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUU5QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2hDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDN0M7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2xDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7U0FDL0M7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QUV0RixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtQb3NpdGlvblN0cmF0ZWd5fSBmcm9tICcuL3Bvc2l0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7T3ZlcmxheVJlZmVyZW5jZX0gZnJvbSAnLi4vb3ZlcmxheS1yZWZlcmVuY2UnO1xuXG4vKiogQ2xhc3MgdG8gYmUgYWRkZWQgdG8gdGhlIG92ZXJsYXkgcGFuZSB3cmFwcGVyLiAqL1xuY29uc3Qgd3JhcHBlckNsYXNzID0gJ2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJztcblxuLyoqXG4gKiBBIHN0cmF0ZWd5IGZvciBwb3NpdGlvbmluZyBvdmVybGF5cy4gVXNpbmcgdGhpcyBzdHJhdGVneSwgYW4gb3ZlcmxheSBpcyBnaXZlbiBhblxuICogZXhwbGljaXQgcG9zaXRpb24gcmVsYXRpdmUgdG8gdGhlIGJyb3dzZXIncyB2aWV3cG9ydC4gV2UgdXNlIGZsZXhib3gsIGluc3RlYWQgb2ZcbiAqIHRyYW5zZm9ybXMsIGluIG9yZGVyIHRvIGF2b2lkIGlzc3VlcyB3aXRoIHN1YnBpeGVsIHJlbmRlcmluZyB3aGljaCBjYW4gY2F1c2UgdGhlXG4gKiBlbGVtZW50IHRvIGJlY29tZSBibHVycnkuXG4gKi9cbmV4cG9ydCBjbGFzcyBHbG9iYWxQb3NpdGlvblN0cmF0ZWd5IGltcGxlbWVudHMgUG9zaXRpb25TdHJhdGVneSB7XG4gIC8qKiBUaGUgb3ZlcmxheSB0byB3aGljaCB0aGlzIHN0cmF0ZWd5IGlzIGF0dGFjaGVkLiAqL1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmZXJlbmNlO1xuICBwcml2YXRlIF9jc3NQb3NpdGlvbjogc3RyaW5nID0gJ3N0YXRpYyc7XG4gIHByaXZhdGUgX3RvcE9mZnNldDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2JvdHRvbU9mZnNldDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2xlZnRPZmZzZXQ6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9yaWdodE9mZnNldDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2FsaWduSXRlbXM6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9qdXN0aWZ5Q29udGVudDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3dpZHRoOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfaXNEaXNwb3NlZDogYm9vbGVhbjtcblxuICBhdHRhY2gob3ZlcmxheVJlZjogT3ZlcmxheVJlZmVyZW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZyA9IG92ZXJsYXlSZWYuZ2V0Q29uZmlnKCk7XG5cbiAgICB0aGlzLl9vdmVybGF5UmVmID0gb3ZlcmxheVJlZjtcblxuICAgIGlmICh0aGlzLl93aWR0aCAmJiAhY29uZmlnLndpZHRoKSB7XG4gICAgICBvdmVybGF5UmVmLnVwZGF0ZVNpemUoe3dpZHRoOiB0aGlzLl93aWR0aH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9oZWlnaHQgJiYgIWNvbmZpZy5oZWlnaHQpIHtcbiAgICAgIG92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7aGVpZ2h0OiB0aGlzLl9oZWlnaHR9KTtcbiAgICB9XG5cbiAgICBvdmVybGF5UmVmLmhvc3RFbGVtZW50LmNsYXNzTGlzdC5hZGQod3JhcHBlckNsYXNzKTtcbiAgICB0aGlzLl9pc0Rpc3Bvc2VkID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5LiBDbGVhcnMgYW55IHByZXZpb3VzbHkgc2V0IHZlcnRpY2FsIHBvc2l0aW9uLlxuICAgKiBAcGFyYW0gdmFsdWUgTmV3IHRvcCBvZmZzZXQuXG4gICAqL1xuICB0b3AodmFsdWU6IHN0cmluZyA9ICcnKTogdGhpcyB7XG4gICAgdGhpcy5fYm90dG9tT2Zmc2V0ID0gJyc7XG4gICAgdGhpcy5fdG9wT2Zmc2V0ID0gdmFsdWU7XG4gICAgdGhpcy5fYWxpZ25JdGVtcyA9ICdmbGV4LXN0YXJ0JztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsZWZ0IHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5LiBDbGVhcnMgYW55IHByZXZpb3VzbHkgc2V0IGhvcml6b250YWwgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB2YWx1ZSBOZXcgbGVmdCBvZmZzZXQuXG4gICAqL1xuICBsZWZ0KHZhbHVlOiBzdHJpbmcgPSAnJyk6IHRoaXMge1xuICAgIHRoaXMuX3JpZ2h0T2Zmc2V0ID0gJyc7XG4gICAgdGhpcy5fbGVmdE9mZnNldCA9IHZhbHVlO1xuICAgIHRoaXMuX2p1c3RpZnlDb250ZW50ID0gJ2ZsZXgtc3RhcnQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvdHRvbSBwb3NpdGlvbiBvZiB0aGUgb3ZlcmxheS4gQ2xlYXJzIGFueSBwcmV2aW91c2x5IHNldCB2ZXJ0aWNhbCBwb3NpdGlvbi5cbiAgICogQHBhcmFtIHZhbHVlIE5ldyBib3R0b20gb2Zmc2V0LlxuICAgKi9cbiAgYm90dG9tKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHRoaXMge1xuICAgIHRoaXMuX3RvcE9mZnNldCA9ICcnO1xuICAgIHRoaXMuX2JvdHRvbU9mZnNldCA9IHZhbHVlO1xuICAgIHRoaXMuX2FsaWduSXRlbXMgPSAnZmxleC1lbmQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHJpZ2h0IHBvc2l0aW9uIG9mIHRoZSBvdmVybGF5LiBDbGVhcnMgYW55IHByZXZpb3VzbHkgc2V0IGhvcml6b250YWwgcG9zaXRpb24uXG4gICAqIEBwYXJhbSB2YWx1ZSBOZXcgcmlnaHQgb2Zmc2V0LlxuICAgKi9cbiAgcmlnaHQodmFsdWU6IHN0cmluZyA9ICcnKTogdGhpcyB7XG4gICAgdGhpcy5fbGVmdE9mZnNldCA9ICcnO1xuICAgIHRoaXMuX3JpZ2h0T2Zmc2V0ID0gdmFsdWU7XG4gICAgdGhpcy5fanVzdGlmeUNvbnRlbnQgPSAnZmxleC1lbmQnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG92ZXJsYXkgd2lkdGggYW5kIGNsZWFycyBhbnkgcHJldmlvdXNseSBzZXQgd2lkdGguXG4gICAqIEBwYXJhbSB2YWx1ZSBOZXcgd2lkdGggZm9yIHRoZSBvdmVybGF5XG4gICAqIEBkZXByZWNhdGVkIFBhc3MgdGhlIGB3aWR0aGAgdGhyb3VnaCB0aGUgYE92ZXJsYXlDb25maWdgLlxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDguMC4wXG4gICAqL1xuICB3aWR0aCh2YWx1ZTogc3RyaW5nID0gJycpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHt3aWR0aDogdmFsdWV9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fd2lkdGggPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBvdmVybGF5IGhlaWdodCBhbmQgY2xlYXJzIGFueSBwcmV2aW91c2x5IHNldCBoZWlnaHQuXG4gICAqIEBwYXJhbSB2YWx1ZSBOZXcgaGVpZ2h0IGZvciB0aGUgb3ZlcmxheVxuICAgKiBAZGVwcmVjYXRlZCBQYXNzIHRoZSBgaGVpZ2h0YCB0aHJvdWdoIHRoZSBgT3ZlcmxheUNvbmZpZ2AuXG4gICAqIEBicmVha2luZy1jaGFuZ2UgOC4wLjBcbiAgICovXG4gIGhlaWdodCh2YWx1ZTogc3RyaW5nID0gJycpOiB0aGlzIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVTaXplKHtoZWlnaHQ6IHZhbHVlfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2hlaWdodCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENlbnRlcnMgdGhlIG92ZXJsYXkgaG9yaXpvbnRhbGx5IHdpdGggYW4gb3B0aW9uYWwgb2Zmc2V0LlxuICAgKiBDbGVhcnMgYW55IHByZXZpb3VzbHkgc2V0IGhvcml6b250YWwgcG9zaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBvZmZzZXQgT3ZlcmxheSBvZmZzZXQgZnJvbSB0aGUgaG9yaXpvbnRhbCBjZW50ZXIuXG4gICAqL1xuICBjZW50ZXJIb3Jpem9udGFsbHkob2Zmc2V0OiBzdHJpbmcgPSAnJyk6IHRoaXMge1xuICAgIHRoaXMubGVmdChvZmZzZXQpO1xuICAgIHRoaXMuX2p1c3RpZnlDb250ZW50ID0gJ2NlbnRlcic7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2VudGVycyB0aGUgb3ZlcmxheSB2ZXJ0aWNhbGx5IHdpdGggYW4gb3B0aW9uYWwgb2Zmc2V0LlxuICAgKiBDbGVhcnMgYW55IHByZXZpb3VzbHkgc2V0IHZlcnRpY2FsIHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb2Zmc2V0IE92ZXJsYXkgb2Zmc2V0IGZyb20gdGhlIHZlcnRpY2FsIGNlbnRlci5cbiAgICovXG4gIGNlbnRlclZlcnRpY2FsbHkob2Zmc2V0OiBzdHJpbmcgPSAnJyk6IHRoaXMge1xuICAgIHRoaXMudG9wKG9mZnNldCk7XG4gICAgdGhpcy5fYWxpZ25JdGVtcyA9ICdjZW50ZXInO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IHRoZSBwb3NpdGlvbiB0byB0aGUgZWxlbWVudC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgYXBwbHkoKTogdm9pZCB7XG4gICAgLy8gU2luY2UgdGhlIG92ZXJsYXkgcmVmIGFwcGxpZXMgdGhlIHN0cmF0ZWd5IGFzeW5jaHJvbm91c2x5LCBpdCBjb3VsZFxuICAgIC8vIGhhdmUgYmVlbiBkaXNwb3NlZCBiZWZvcmUgaXQgZW5kcyB1cCBiZWluZyBhcHBsaWVkLiBJZiB0aGF0IGlzIHRoZVxuICAgIC8vIGNhc2UsIHdlIHNob3VsZG4ndCBkbyBhbnl0aGluZy5cbiAgICBpZiAoIXRoaXMuX292ZXJsYXlSZWYgfHwgIXRoaXMuX292ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGU7XG4gICAgY29uc3QgcGFyZW50U3R5bGVzID0gdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudC5zdHlsZTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLl9vdmVybGF5UmVmLmdldENvbmZpZygpO1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBtYXhXaWR0aCwgbWF4SGVpZ2h0fSA9IGNvbmZpZztcbiAgICBjb25zdCBzaG91bGRCZUZsdXNoSG9yaXpvbnRhbGx5ID0gKHdpZHRoID09PSAnMTAwJScgfHwgd2lkdGggPT09ICcxMDB2dycpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghbWF4V2lkdGggfHwgbWF4V2lkdGggPT09ICcxMDAlJyB8fCBtYXhXaWR0aCA9PT0gJzEwMHZ3Jyk7XG4gICAgY29uc3Qgc2hvdWxkQmVGbHVzaFZlcnRpY2FsbHkgPSAoaGVpZ2h0ID09PSAnMTAwJScgfHwgaGVpZ2h0ID09PSAnMTAwdmgnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFtYXhIZWlnaHQgfHwgbWF4SGVpZ2h0ID09PSAnMTAwJScgfHwgbWF4SGVpZ2h0ID09PSAnMTAwdmgnKTtcblxuICAgIHN0eWxlcy5wb3NpdGlvbiA9IHRoaXMuX2Nzc1Bvc2l0aW9uO1xuICAgIHN0eWxlcy5tYXJnaW5MZWZ0ID0gc2hvdWxkQmVGbHVzaEhvcml6b250YWxseSA/ICcwJyA6IHRoaXMuX2xlZnRPZmZzZXQ7XG4gICAgc3R5bGVzLm1hcmdpblRvcCA9IHNob3VsZEJlRmx1c2hWZXJ0aWNhbGx5ID8gJzAnIDogdGhpcy5fdG9wT2Zmc2V0O1xuICAgIHN0eWxlcy5tYXJnaW5Cb3R0b20gPSB0aGlzLl9ib3R0b21PZmZzZXQ7XG4gICAgc3R5bGVzLm1hcmdpblJpZ2h0ID0gdGhpcy5fcmlnaHRPZmZzZXQ7XG5cbiAgICBpZiAoc2hvdWxkQmVGbHVzaEhvcml6b250YWxseSkge1xuICAgICAgcGFyZW50U3R5bGVzLmp1c3RpZnlDb250ZW50ID0gJ2ZsZXgtc3RhcnQnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fanVzdGlmeUNvbnRlbnQgPT09ICdjZW50ZXInKSB7XG4gICAgICBwYXJlbnRTdHlsZXMuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgLy8gSW4gUlRMIHRoZSBicm93c2VyIHdpbGwgaW52ZXJ0IGBmbGV4LXN0YXJ0YCBhbmQgYGZsZXgtZW5kYCBhdXRvbWF0aWNhbGx5LCBidXQgd2VcbiAgICAgIC8vIGRvbid0IHdhbnQgdGhhdCBiZWNhdXNlIG91ciBwb3NpdGlvbmluZyBpcyBleHBsaWNpdGx5IGBsZWZ0YCBhbmQgYHJpZ2h0YCwgaGVuY2VcbiAgICAgIC8vIHdoeSB3ZSBkbyBhbm90aGVyIGludmVyc2lvbiB0byBlbnN1cmUgdGhhdCB0aGUgb3ZlcmxheSBzdGF5cyBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cbiAgICAgIC8vIFRPRE86IHJlY29uc2lkZXIgdGhpcyBpZiB3ZSBhZGQgYHN0YXJ0YCBhbmQgYGVuZGAgbWV0aG9kcy5cbiAgICAgIGlmICh0aGlzLl9qdXN0aWZ5Q29udGVudCA9PT0gJ2ZsZXgtc3RhcnQnKSB7XG4gICAgICAgIHBhcmVudFN0eWxlcy5qdXN0aWZ5Q29udGVudCA9ICdmbGV4LWVuZCc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2p1c3RpZnlDb250ZW50ID09PSAnZmxleC1lbmQnKSB7XG4gICAgICAgIHBhcmVudFN0eWxlcy5qdXN0aWZ5Q29udGVudCA9ICdmbGV4LXN0YXJ0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50U3R5bGVzLmp1c3RpZnlDb250ZW50ID0gdGhpcy5fanVzdGlmeUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgcGFyZW50U3R5bGVzLmFsaWduSXRlbXMgPSBzaG91bGRCZUZsdXNoVmVydGljYWxseSA/ICdmbGV4LXN0YXJ0JyA6IHRoaXMuX2FsaWduSXRlbXM7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW5zIHVwIHRoZSBET00gY2hhbmdlcyBmcm9tIHRoZSBwb3NpdGlvbiBzdHJhdGVneS5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNEaXNwb3NlZCB8fCAhdGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuX292ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuc3R5bGU7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fb3ZlcmxheVJlZi5ob3N0RWxlbWVudDtcbiAgICBjb25zdCBwYXJlbnRTdHlsZXMgPSBwYXJlbnQuc3R5bGU7XG5cbiAgICBwYXJlbnQuY2xhc3NMaXN0LnJlbW92ZSh3cmFwcGVyQ2xhc3MpO1xuICAgIHBhcmVudFN0eWxlcy5qdXN0aWZ5Q29udGVudCA9IHBhcmVudFN0eWxlcy5hbGlnbkl0ZW1zID0gc3R5bGVzLm1hcmdpblRvcCA9XG4gICAgICBzdHlsZXMubWFyZ2luQm90dG9tID0gc3R5bGVzLm1hcmdpbkxlZnQgPSBzdHlsZXMubWFyZ2luUmlnaHQgPSBzdHlsZXMucG9zaXRpb24gPSAnJztcblxuICAgIHRoaXMuX292ZXJsYXlSZWYgPSBudWxsITtcbiAgICB0aGlzLl9pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgfVxufVxuIl19
Note: See TracBrowser for help on using the repository browser.