@leanix/components 0.2.240 → 0.2.243
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/core-ui/pipes/linkify/linkify.pipe.mjs +66 -61
- package/esm2020/lib/core-ui/services/resize-observer.service.mjs +51 -2
- package/fesm2015/leanix-components.mjs +112 -62
- package/fesm2015/leanix-components.mjs.map +1 -1
- package/fesm2020/leanix-components.mjs +115 -62
- package/fesm2020/leanix-components.mjs.map +1 -1
- package/lib/core-ui/pipes/linkify/linkify.pipe.d.ts +2 -0
- package/lib/core-ui/services/resize-observer.service.d.ts +8 -0
- package/package.json +1 -1
@@ -13,72 +13,77 @@ import * as i0 from "@angular/core";
|
|
13
13
|
export class LxLinkifyPipe {
|
14
14
|
transform(text) {
|
15
15
|
if (text && typeof text === 'string') {
|
16
|
-
|
17
|
-
|
18
|
-
* Keeping track of this index prevents infinite loops
|
19
|
-
* where a previously processed link starts with the same characters
|
20
|
-
* as a second link.
|
21
|
-
* e.g. https://angular.io/docs followed by https://angular.io
|
22
|
-
*/
|
23
|
-
let nextIndexToStartReplacingFrom = 0;
|
24
|
-
const rawLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.HTTP_LINK_REGEX, text);
|
25
|
-
rawLinkMatches.forEach((rawLinkMatch) => {
|
26
|
-
const [url] = rawLinkMatch;
|
27
|
-
const wrapUrlInAnchor = (sanitizedUrlMatch) => {
|
28
|
-
const firstPart = textWithRawLinks.substring(0, nextIndexToStartReplacingFrom);
|
29
|
-
const anchorTagHtml = `<a href="${sanitizedUrlMatch}" target="_blank" rel="noopener noreferrer">${sanitizedUrlMatch}</a>`;
|
30
|
-
const secondPart = textWithRawLinks.substring(nextIndexToStartReplacingFrom).replace(sanitizedUrlMatch, anchorTagHtml);
|
31
|
-
textWithRawLinks = firstPart + secondPart;
|
32
|
-
nextIndexToStartReplacingFrom = rawLinkMatch.index + anchorTagHtml.length;
|
33
|
-
};
|
34
|
-
if (url) {
|
35
|
-
/*
|
36
|
-
* TODO: get rid of all this code once Safari supports negative lookbehinds in regular expressions
|
37
|
-
* The following is RegExp that handles the same stuff as the JS code below:
|
38
|
-
*
|
39
|
-
* /(?:(?:(?<!\]\())(?:https|http):\/\/)(?:[^\s/$.?#][^\s]*(?<![\.)]))/gi;
|
40
|
-
*
|
41
|
-
* Demo on regex101: https://regex101.com/r/7Vl9bg/1
|
42
|
-
*
|
43
|
-
* Check lookbehind support here: https://caniuse.com/?search=lookbehind
|
44
|
-
*/
|
45
|
-
const lastUrlCharacterIndex = rawLinkMatch.index + url.length - 1;
|
46
|
-
const textUsedToPerformMatching = rawLinkMatch.input;
|
47
|
-
const lastCharacterInUrl = textUsedToPerformMatching[lastUrlCharacterIndex];
|
48
|
-
if (lastCharacterInUrl === '.') {
|
49
|
-
const characterAfterUrl = textUsedToPerformMatching[lastUrlCharacterIndex + 1];
|
50
|
-
if (!characterAfterUrl || characterAfterUrl === ' ' || characterAfterUrl === '\n') {
|
51
|
-
const urlWithoutDotAtTheEnd = url.slice(0, -1);
|
52
|
-
wrapUrlInAnchor(urlWithoutDotAtTheEnd);
|
53
|
-
}
|
54
|
-
}
|
55
|
-
else if (rawLinkMatch.index > 3) {
|
56
|
-
const twoCharactersInFrontOfTheLink = `${textUsedToPerformMatching[rawLinkMatch.index - 2]}${textUsedToPerformMatching[rawLinkMatch.index - 1]}`;
|
57
|
-
if (twoCharactersInFrontOfTheLink && twoCharactersInFrontOfTheLink !== '](') {
|
58
|
-
// only wrap url in anchor when it is not a named markdown link
|
59
|
-
wrapUrlInAnchor(url);
|
60
|
-
}
|
61
|
-
}
|
62
|
-
else {
|
63
|
-
wrapUrlInAnchor(url);
|
64
|
-
}
|
65
|
-
}
|
66
|
-
});
|
67
|
-
let textWithRawAndNamedLinks = textWithRawLinks;
|
68
|
-
const namedLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.NAMED_LINK_REGEX, textWithRawLinks);
|
69
|
-
namedLinkMatches.forEach((namedLinkMatch) => {
|
70
|
-
const [source, name, url] = namedLinkMatch;
|
71
|
-
const urlIsValid = url && !/javascript\:/i.test(url);
|
72
|
-
if (source && name && urlIsValid) {
|
73
|
-
textWithRawAndNamedLinks = textWithRawAndNamedLinks.replace(source, `<a href="${url}" target="_blank" rel="noopener noreferrer">${name}</a>`);
|
74
|
-
}
|
75
|
-
});
|
16
|
+
const textWithRawLinks = this.wrapRawHttpLinksWithAnchorTags(text);
|
17
|
+
const textWithRawAndNamedLinks = this.turnMarkdownStyleLinksIntoAnchorTags(textWithRawLinks);
|
76
18
|
return textWithRawAndNamedLinks;
|
77
19
|
}
|
78
20
|
else {
|
79
21
|
return text;
|
80
22
|
}
|
81
23
|
}
|
24
|
+
turnMarkdownStyleLinksIntoAnchorTags(text) {
|
25
|
+
let textWithRawAndNamedLinks = text;
|
26
|
+
const namedLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.NAMED_LINK_REGEX, text);
|
27
|
+
namedLinkMatches.forEach((namedLinkMatch) => {
|
28
|
+
const [source, name, url] = namedLinkMatch;
|
29
|
+
const urlIsValid = url && !/javascript\:/i.test(url);
|
30
|
+
if (source && name && urlIsValid) {
|
31
|
+
textWithRawAndNamedLinks = textWithRawAndNamedLinks.replace(source, `<a href="${url}" target="_blank" rel="noopener noreferrer">${name}</a>`);
|
32
|
+
}
|
33
|
+
});
|
34
|
+
return textWithRawAndNamedLinks;
|
35
|
+
}
|
36
|
+
wrapRawHttpLinksWithAnchorTags(text) {
|
37
|
+
let textWithRawLinks = text;
|
38
|
+
/**
|
39
|
+
* Keeping track of this index prevents infinite loops
|
40
|
+
* where a previously processed link starts with the same characters
|
41
|
+
* as a second link.
|
42
|
+
* e.g. https://angular.io/docs followed by https://angular.io
|
43
|
+
*/
|
44
|
+
let nextIndexToStartReplacingFrom = 0;
|
45
|
+
const rawLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.HTTP_LINK_REGEX, text);
|
46
|
+
rawLinkMatches.forEach((rawLinkMatch) => {
|
47
|
+
const [url] = rawLinkMatch;
|
48
|
+
const wrapUrlInAnchor = (sanitizedUrlMatch) => {
|
49
|
+
const firstPart = textWithRawLinks.substring(0, nextIndexToStartReplacingFrom);
|
50
|
+
const anchorTagHtml = `<a href="${sanitizedUrlMatch}" target="_blank" rel="noopener noreferrer">${sanitizedUrlMatch}</a>`;
|
51
|
+
const secondPart = textWithRawLinks.substring(nextIndexToStartReplacingFrom).replace(sanitizedUrlMatch, anchorTagHtml);
|
52
|
+
textWithRawLinks = firstPart + secondPart;
|
53
|
+
nextIndexToStartReplacingFrom = rawLinkMatch.index + anchorTagHtml.length;
|
54
|
+
};
|
55
|
+
if (url) {
|
56
|
+
/*
|
57
|
+
* TODO: get rid of all this code once Safari supports negative lookbehinds in regular expressions
|
58
|
+
* The following is RegExp that handles the same stuff as the JS code below:
|
59
|
+
*
|
60
|
+
* /(?:(?:(?<!\]\())(?:https|http):\/\/)(?:[^\s/$.?#][^\s]*(?<![\.)]))/gi;
|
61
|
+
*
|
62
|
+
* Demo on regex101: https://regex101.com/r/7Vl9bg/1
|
63
|
+
*
|
64
|
+
* Check lookbehind support here: https://caniuse.com/?search=lookbehind
|
65
|
+
*/
|
66
|
+
const lastUrlCharacterIndex = rawLinkMatch.index + url.length - 1;
|
67
|
+
const textUsedToPerformMatching = rawLinkMatch.input;
|
68
|
+
const lastCharacterInUrl = textUsedToPerformMatching[lastUrlCharacterIndex];
|
69
|
+
const twoCharactersInFrontOfTheLink = rawLinkMatch.index > 3
|
70
|
+
? `${textUsedToPerformMatching[rawLinkMatch.index - 2]}${textUsedToPerformMatching[rawLinkMatch.index - 1]}`
|
71
|
+
: '';
|
72
|
+
const isMarkdownSyntaxLink = twoCharactersInFrontOfTheLink === '](';
|
73
|
+
if (!isMarkdownSyntaxLink && lastCharacterInUrl === '.') {
|
74
|
+
const characterAfterUrl = textUsedToPerformMatching[lastUrlCharacterIndex + 1];
|
75
|
+
if (!characterAfterUrl || characterAfterUrl === ' ' || characterAfterUrl === '\n') {
|
76
|
+
const urlWithoutDotAtTheEnd = url.slice(0, -1);
|
77
|
+
wrapUrlInAnchor(urlWithoutDotAtTheEnd);
|
78
|
+
}
|
79
|
+
}
|
80
|
+
else if (!isMarkdownSyntaxLink) {
|
81
|
+
wrapUrlInAnchor(url);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
});
|
85
|
+
return textWithRawLinks;
|
86
|
+
}
|
82
87
|
getAllRegexMatches(regex, input) {
|
83
88
|
let match;
|
84
89
|
const matches = [];
|
@@ -122,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
|
|
122
127
|
type: Pipe,
|
123
128
|
args: [{ name: 'lxLinkify' }]
|
124
129
|
}] });
|
125
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2lmeS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvY29yZS11aS9waXBlcy9saW5raWZ5L2xpbmtpZnkucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFFcEQ7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUErQnhCLFNBQVMsQ0FBQyxJQUFvQjtRQUM1QixJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDcEMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDNUI7Ozs7O2VBS0c7WUFDSCxJQUFJLDZCQUE2QixHQUFHLENBQUMsQ0FBQztZQUN0QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7Z0JBQzNCLE1BQU0sZUFBZSxHQUFHLENBQUMsaUJBQXlCLEVBQUUsRUFBRTtvQkFDcEQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO29CQUMvRSxNQUFNLGFBQWEsR0FBRyxZQUFZLGlCQUFpQiwrQ0FBK0MsaUJBQWlCLE1BQU0sQ0FBQztvQkFDMUgsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFrQixFQUFFLGFBQWEsQ0FBQyxDQUFDO29CQUN4SCxnQkFBZ0IsR0FBRyxTQUFTLEdBQUcsVUFBVSxDQUFDO29CQUMxQyw2QkFBNkIsR0FB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RkFBYixhQUFhO2tCQUR6QixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBUaGlzIHBpcGUgdHJhbnNmb3Jtcy4uLlxuICogLSBcInJhd1wiIGh0dHAocykgbGlua3NcbiAqIC0gbWFya2Rvd24gbGluayBzeW50YXhcbiAqIC4uLiBpbnRvIGNsaWNrYWJsZSBhbmNob3IgZWxlbWVudHMuXG4gKlxuICogWW91IGhhdmUgYW4gdXNlciBpbnRlcmZhY2Ugd2hlcmUgeW91IGRvbid0IHdhbnQgY2xpY2thYmxlIGxpbmtzIGJ1dCBhbHNvXG4gKiBkb24ndCB3YW50IHVzZXJzIHRvIHNlZSB0aGUgXCJ1Z2x5XCIgbWFya2Rvd24gbGluayBzeW50YXg/XG4gKiAtPiBVc2UgdGhlICdseFVubGlraWZ5JyBwaXBlIHRvIHJlcGxhY2UgbWFya2Rvd24gbGluayBzeW50YXggd2l0aCBqdXN0IHRoZSBsaW5rIG5hbWVcbiAqL1xuQFBpcGUoeyBuYW1lOiAnbHhMaW5raWZ5JyB9KVxuZXhwb3J0IGNsYXNzIEx4TGlua2lmeVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFRoaXMgaXMgbm90IHRoZSBcIm9uZSBVUkwgcmVnZXggdG8gcnVsZSB0aGVtIGFsbFwiLCBidXQgYSBtb3JlIHJlYWxpc3RpYyBvbmUgd2hpY2ggc2hvdWxkIHdvcmtcbiAgICogZm9yIGFueSBVUkxzIHRoYXQgb3VyIGN1c3RvbWVycyBpbmNsdWRlIGluIHRleHQgZmllbGRzIG9uIGEgRmFjdCBTaGVldC5cbiAgICpcbiAgICogUmVnZXggcnVsZXMgZXhwbGFpbmVkIGluIHBsYWluIHRleHQ6XG4gICAqXG4gICAqICg/Oig/Omh0dHBzPyk6XFwvXFwvKSAgICAgICAtPiAgICBMaW5rcyBtdXN0IHN0YXJ0IHdpdGggXCJodHRwczovL1wiIG9yIFwiaHR0cDovL1wiXG4gICAqXG4gICAqICg/OlteXFxzLyQuPyNdW15cXHNdKig/PCFbXFwuKV0pKSBMRVQnUyBTUExJVCBUSElTIE9ORSBVUFxuICAgKlxuICAgKiBbXlxccy8kLj8jXVteXFxzXSogICAtPiAgICBNYXRjaCBhbnkgbGVnYWwgVVJMIGNoYXJhY3RlciB1bnRpbCB0aGUgbmV4dCB3aGl0ZXNwYWNlXG4gICAqICg/PCFbXFwuKV0gICAgICAgICAgLT4gICAgQSBuZWdhdGl2ZSBsb29rYWhlYWQgdG8gcHJldmVudCBtYXRjaGluZyBhIGRvdCBvciBwYXJlbnRoZXNpcyBmb2xsb3dpbmcgYSBVUkxcbiAgICpcbiAgICogTGluayB0byByZWdleDEwMTogaHR0cHM6Ly9yZWdleDEwMS5jb20vci9kM0t0ZkgvMSAoTk9URTogcGxlYXNlIHVwZGF0ZSB0aGlzIGxpbmsgd2hlbiBjaGFuZ2luZyB0aGUgcmVnZXgpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhUVFBfTElOS19SRUdFWCA9IC8oPzooPzpodHRwcz8pOlxcL1xcLykoPzpbXlxccy8kLj8jXVteXFxzXSopL2dpO1xuXG4gIC8qKlxuICAgKiBUaGlzIHdpbGwgbWF0Y2ggdGhlIG1hcmtkb3duIGxpbmsgc3ludGF4OiBbbGluayBuYW1lXSh1cmwpXG4gICAqIFJlZ2V4IHJ1bGVzIGV4cGxhaW5lZCBpbiBwbGFpbiB0ZXh0OlxuICAgKlxuICAgKiAoPzpcXFsoW15cXF1dKilcXF0pICAgICAgICAgICAgLT4gICAgIE1hdGNoIGFueSBjaGFyYWN0ZXJzIGluc2lkZSBzcXVhcmUgYnJhY2tldHNcbiAgICogXFwoKFteXFxzXFwvJC4/I11bXlxcc10qKVxcKSAgICAgLT4gICAgIE5vdGljZSB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgcmVnZXggYXMgdGhlIEhUVFBfTElOS19SRUdFWCBhYm92ZSxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgd2l0aG91dCB0aGUgcmVxdWlyZW1lbnQgZm9yIHRoZSBodHRwIHByb3RvY29sLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgYWxsb3dzIGZvciBsaW5rcyB3aXRob3V0IGluY2x1ZGluZyB0aGUgcHJvdG9jb2wgb3IgYWxzbyBcIm1haWx0bzpoZWxsb0B3b3JsZC5kZVwiIGxpbmtzXG4gICAqXG4gICAqIExpbmsgdG8gcmVnZXgxMDE6IGh0dHBzOi8vcmVnZXgxMDEuY29tL3IvNVVNVUg4LzFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTkFNRURfTElOS19SRUdFWCA9IC8oPzpcXFsoW15cXF1dKilcXF0pXFwoKFteXFxzXFwvJC4/I11bXlxcc10qKVxcKS9naTtcblxuICB0cmFuc2Zvcm0odGV4dD86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICBpZiAodGV4dCAmJiB0eXBlb2YgdGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCB0ZXh0V2l0aFJhd0xpbmtzID0gdGV4dDtcbiAgICAgIC8qKlxuICAgICAgICogS2VlcGluZyB0cmFjayBvZiB0aGlzIGluZGV4IHByZXZlbnRzIGluZmluaXRlIGxvb3BzXG4gICAgICAgKiB3aGVyZSBhIHByZXZpb3VzbHkgcHJvY2Vzc2VkIGxpbmsgc3RhcnRzIHdpdGggdGhlIHNhbWUgY2hhcmFjdGVyc1xuICAgICAgICogYXMgYSBzZWNvbmQgbGluay5cbiAgICAgICAqIGUuZy4gaHR0cHM6Ly9hbmd1bGFyLmlvL2RvY3MgZm9sbG93ZWQgYnkgaHR0cHM6Ly9hbmd1bGFyLmlvXG4gICAgICAgKi9cbiAgICAgIGxldCBuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSA9IDA7XG4gICAgICBjb25zdCByYXdMaW5rTWF0Y2hlcyA9IHRoaXMuZ2V0QWxsUmVnZXhNYXRjaGVzKEx4TGlua2lmeVBpcGUuSFRUUF9MSU5LX1JFR0VYLCB0ZXh0KTtcbiAgICAgIHJhd0xpbmtNYXRjaGVzLmZvckVhY2goKHJhd0xpbmtNYXRjaCkgPT4ge1xuICAgICAgICBjb25zdCBbdXJsXSA9IHJhd0xpbmtNYXRjaDtcbiAgICAgICAgY29uc3Qgd3JhcFVybEluQW5jaG9yID0gKHNhbml0aXplZFVybE1hdGNoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdFBhcnQgPSB0ZXh0V2l0aFJhd0xpbmtzLnN1YnN0cmluZygwLCBuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSk7XG4gICAgICAgICAgY29uc3QgYW5jaG9yVGFnSHRtbCA9IGA8YSBocmVmPVwiJHtzYW5pdGl6ZWRVcmxNYXRjaH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+JHtzYW5pdGl6ZWRVcmxNYXRjaH08L2E+YDtcbiAgICAgICAgICBjb25zdCBzZWNvbmRQYXJ0ID0gdGV4dFdpdGhSYXdMaW5rcy5zdWJzdHJpbmcobmV4dEluZGV4VG9TdGFydFJlcGxhY2luZ0Zyb20pLnJlcGxhY2Uoc2FuaXRpemVkVXJsTWF0Y2ghLCBhbmNob3JUYWdIdG1sKTtcbiAgICAgICAgICB0ZXh0V2l0aFJhd0xpbmtzID0gZmlyc3RQYXJ0ICsgc2Vjb25kUGFydDtcbiAgICAgICAgICBuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSA9IHJhd0xpbmtNYXRjaC5pbmRleCArIGFuY2hvclRhZ0h0bWwubGVuZ3RoO1xuICAgICAgICB9O1xuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBUT0RPOiBnZXQgcmlkIG9mIGFsbCB0aGlzIGNvZGUgb25jZSBTYWZhcmkgc3VwcG9ydHMgbmVnYXRpdmUgbG9va2JlaGluZHMgaW4gcmVndWxhciBleHByZXNzaW9uc1xuICAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgaXMgUmVnRXhwIHRoYXQgaGFuZGxlcyB0aGUgc2FtZSBzdHVmZiBhcyB0aGUgSlMgY29kZSBiZWxvdzpcbiAgICAgICAgICAgKlxuICAgICAgICAgICAqIC8oPzooPzooPzwhXFxdXFwoKSkoPzpodHRwc3xodHRwKTpcXC9cXC8pKD86W15cXHMvJC4/I11bXlxcc10qKD88IVtcXC4pXSkpL2dpO1xuICAgICAgICAgICAqXG4gICAgICAgICAgICogRGVtbyBvbiByZWdleDEwMTogaHR0cHM6Ly9yZWdleDEwMS5jb20vci83Vmw5YmcvMVxuICAgICAgICAgICAqXG4gICAgICAgICAgICogQ2hlY2sgbG9va2JlaGluZCBzdXBwb3J0IGhlcmU6IGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD1sb29rYmVoaW5kXG4gICAgICAgICAgICovXG4gICAgICAgICAgY29uc3QgbGFzdFVybENoYXJhY3RlckluZGV4ID0gcmF3TGlua01hdGNoLmluZGV4ICsgdXJsLmxlbmd0aCAtIDE7XG4gICAgICAgICAgY29uc3QgdGV4dFVzZWRUb1BlcmZvcm1NYXRjaGluZyA9IHJhd0xpbmtNYXRjaC5pbnB1dDtcbiAgICAgICAgICBjb25zdCBsYXN0Q2hhcmFjdGVySW5VcmwgPSB0ZXh0VXNlZFRvUGVyZm9ybU1hdGNoaW5nW2xhc3RVcmxDaGFyYWN0ZXJJbmRleF07XG4gICAgICAgICAgaWYgKGxhc3RDaGFyYWN0ZXJJblVybCA9PT0gJy4nKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFyYWN0ZXJBZnRlclVybCA9IHRleHRVc2VkVG9QZXJmb3JtTWF0Y2hpbmdbbGFzdFVybENoYXJhY3RlckluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAoIWNoYXJhY3RlckFmdGVyVXJsIHx8IGNoYXJhY3RlckFmdGVyVXJsID09PSAnICcgfHwgY2hhcmFjdGVyQWZ0ZXJVcmwgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHVybFdpdGhvdXREb3RBdFRoZUVuZCA9IHVybC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICAgIHdyYXBVcmxJbkFuY2hvcih1cmxXaXRob3V0RG90QXRUaGVFbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocmF3TGlua01hdGNoLmluZGV4ID4gMykge1xuICAgICAgICAgICAgY29uc3QgdHdvQ2hhcmFjdGVyc0luRnJvbnRPZlRoZUxpbmsgPSBgJHt0ZXh0VXNlZFRvUGVyZm9ybU1hdGNoaW5nW3Jhd0xpbmtNYXRjaC5pbmRleCAtIDJdfSR7XG4gICAgICAgICAgICAgIHRleHRVc2VkVG9QZXJmb3JtTWF0Y2hpbmdbcmF3TGlua01hdGNoLmluZGV4IC0gMV1cbiAgICAgICAgICAgIH1gO1xuICAgICAgICAgICAgaWYgKHR3b0NoYXJhY3RlcnNJbkZyb250T2ZUaGVMaW5rICYmIHR3b0NoYXJhY3RlcnNJbkZyb250T2ZUaGVMaW5rICE9PSAnXSgnKSB7XG4gICAgICAgICAgICAgIC8vIG9ubHkgd3JhcCB1cmwgaW4gYW5jaG9yIHdoZW4gaXQgaXMgbm90IGEgbmFtZWQgbWFya2Rvd24gbGlua1xuICAgICAgICAgICAgICB3cmFwVXJsSW5BbmNob3IodXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd3JhcFVybEluQW5jaG9yKHVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbGV0IHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcyA9IHRleHRXaXRoUmF3TGlua3M7XG4gICAgICBjb25zdCBuYW1lZExpbmtNYXRjaGVzID0gdGhpcy5nZXRBbGxSZWdleE1hdGNoZXMoTHhMaW5raWZ5UGlwZS5OQU1FRF9MSU5LX1JFR0VYLCB0ZXh0V2l0aFJhd0xpbmtzKTtcbiAgICAgIG5hbWVkTGlua01hdGNoZXMuZm9yRWFjaCgobmFtZWRMaW5rTWF0Y2gpID0+IHtcbiAgICAgICAgY29uc3QgW3NvdXJjZSwgbmFtZSwgdXJsXSA9IG5hbWVkTGlua01hdGNoO1xuICAgICAgICBjb25zdCB1cmxJc1ZhbGlkID0gdXJsICYmICEvamF2YXNjcmlwdFxcOi9pLnRlc3QodXJsKTtcbiAgICAgICAgaWYgKHNvdXJjZSAmJiBuYW1lICYmIHVybElzVmFsaWQpIHtcbiAgICAgICAgICB0ZXh0V2l0aFJhd0FuZE5hbWVkTGlua3MgPSB0ZXh0V2l0aFJhd0FuZE5hbWVkTGlua3MucmVwbGFjZShcbiAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgIGA8YSBocmVmPVwiJHt1cmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiPiR7bmFtZX08L2E+YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gdGV4dFdpdGhSYXdBbmROYW1lZExpbmtzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFJlZ2V4TWF0Y2hlcyhyZWdleDogUmVnRXhwLCBpbnB1dDogc3RyaW5nKSB7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhpbnB1dCkpICE9PSBudWxsKSB7XG4gICAgICBtYXRjaGVzLnB1c2gobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxufVxuIl19
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlua2lmeS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvY29yZS11aS9waXBlcy9saW5raWZ5L2xpbmtpZnkucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7QUFFcEQ7Ozs7Ozs7OztHQVNHO0FBRUgsTUFBTSxPQUFPLGFBQWE7SUErQnhCLFNBQVMsQ0FBQyxJQUFvQjtRQUM1QixJQUFJLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkUsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsb0NBQW9DLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RixPQUFPLHdCQUF3QixDQUFDO1NBQ2pDO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVPLG9DQUFvQyxDQUFDLElBQVk7UUFDdkQsSUFBSSx3QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDcEMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUMzQyxNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxVQUFVLEVBQUU7Z0JBQ2hDLHdCQUF3QixHQUFHLHdCQUF3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QyxLQUFLLElBQUksRUFBRTtZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7QUFwSEQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDb0IsNkJBQWUsR0FBRywyQ0FBNEMsQ0FBQTtBQUVyRjs7Ozs7Ozs7OztHQVVHO0FBQ29CLDhCQUFnQixHQUFHLDJDQUE0QyxDQUFBOzBHQTdCM0UsYUFBYTt3R0FBYixhQUFhOzJGQUFiLGFBQWE7a0JBRHpCLElBQUk7bUJBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFRoaXMgcGlwZSB0cmFuc2Zvcm1zLi4uXG4gKiAtIFwicmF3XCIgaHR0cChzKSBsaW5rc1xuICogLSBtYXJrZG93biBsaW5rIHN5bnRheFxuICogLi4uIGludG8gY2xpY2thYmxlIGFuY2hvciBlbGVtZW50cy5cbiAqXG4gKiBZb3UgaGF2ZSBhbiB1c2VyIGludGVyZmFjZSB3aGVyZSB5b3UgZG9uJ3Qgd2FudCBjbGlja2FibGUgbGlua3MgYnV0IGFsc29cbiAqIGRvbid0IHdhbnQgdXNlcnMgdG8gc2VlIHRoZSBcInVnbHlcIiBtYXJrZG93biBsaW5rIHN5bnRheD9cbiAqIC0+IFVzZSB0aGUgJ2x4VW5saWtpZnknIHBpcGUgdG8gcmVwbGFjZSBtYXJrZG93biBsaW5rIHN5bnRheCB3aXRoIGp1c3QgdGhlIGxpbmsgbmFtZVxuICovXG5AUGlwZSh7IG5hbWU6ICdseExpbmtpZnknIH0pXG5leHBvcnQgY2xhc3MgTHhMaW5raWZ5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVGhpcyBpcyBub3QgdGhlIFwib25lIFVSTCByZWdleCB0byBydWxlIHRoZW0gYWxsXCIsIGJ1dCBhIG1vcmUgcmVhbGlzdGljIG9uZSB3aGljaCBzaG91bGQgd29ya1xuICAgKiBmb3IgYW55IFVSTHMgdGhhdCBvdXIgY3VzdG9tZXJzIGluY2x1ZGUgaW4gdGV4dCBmaWVsZHMgb24gYSBGYWN0IFNoZWV0LlxuICAgKlxuICAgKiBSZWdleCBydWxlcyBleHBsYWluZWQgaW4gcGxhaW4gdGV4dDpcbiAgICpcbiAgICogKD86KD86aHR0cHM/KTpcXC9cXC8pICAgICAgIC0+ICAgIExpbmtzIG11c3Qgc3RhcnQgd2l0aCBcImh0dHBzOi8vXCIgb3IgXCJodHRwOi8vXCJcbiAgICpcbiAgICogKD86W15cXHMvJC4/I11bXlxcc10qKD88IVtcXC4pXSkpIExFVCdTIFNQTElUIFRISVMgT05FIFVQXG4gICAqXG4gICAqIFteXFxzLyQuPyNdW15cXHNdKiAgIC0+ICAgIE1hdGNoIGFueSBsZWdhbCBVUkwgY2hhcmFjdGVyIHVudGlsIHRoZSBuZXh0IHdoaXRlc3BhY2VcbiAgICogKD88IVtcXC4pXSAgICAgICAgICAtPiAgICBBIG5lZ2F0aXZlIGxvb2thaGVhZCB0byBwcmV2ZW50IG1hdGNoaW5nIGEgZG90IG9yIHBhcmVudGhlc2lzIGZvbGxvd2luZyBhIFVSTFxuICAgKlxuICAgKiBMaW5rIHRvIHJlZ2V4MTAxOiBodHRwczovL3JlZ2V4MTAxLmNvbS9yL2QzS3RmSC8xIChOT1RFOiBwbGVhc2UgdXBkYXRlIHRoaXMgbGluayB3aGVuIGNoYW5naW5nIHRoZSByZWdleClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSFRUUF9MSU5LX1JFR0VYID0gLyg/Oig/Omh0dHBzPyk6XFwvXFwvKSg/OlteXFxzLyQuPyNdW15cXHNdKikvZ2k7XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBtYXRjaCB0aGUgbWFya2Rvd24gbGluayBzeW50YXg6IFtsaW5rIG5hbWVdKHVybClcbiAgICogUmVnZXggcnVsZXMgZXhwbGFpbmVkIGluIHBsYWluIHRleHQ6XG4gICAqXG4gICAqICg/OlxcWyhbXlxcXV0qKVxcXSkgICAgICAgICAgICAtPiAgICAgTWF0Y2ggYW55IGNoYXJhY3RlcnMgaW5zaWRlIHNxdWFyZSBicmFja2V0c1xuICAgKiBcXCgoW15cXHNcXC8kLj8jXVteXFxzXSopXFwpICAgICAtPiAgICAgTm90aWNlIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSByZWdleCBhcyB0aGUgSFRUUF9MSU5LX1JFR0VYIGFib3ZlLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCB3aXRob3V0IHRoZSByZXF1aXJlbWVudCBmb3IgdGhlIGh0dHAgcHJvdG9jb2wuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBhbGxvd3MgZm9yIGxpbmtzIHdpdGhvdXQgaW5jbHVkaW5nIHRoZSBwcm90b2NvbCBvciBhbHNvIFwibWFpbHRvOmhlbGxvQHdvcmxkLmRlXCIgbGlua3NcbiAgICpcbiAgICogTGluayB0byByZWdleDEwMTogaHR0cHM6Ly9yZWdleDEwMS5jb20vci81VU1VSDgvMVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBOQU1FRF9MSU5LX1JFR0VYID0gLyg/OlxcWyhbXlxcXV0qKVxcXSlcXCgoW15cXHNcXC8kLj8jXVteXFxzXSopXFwpL2dpO1xuXG4gIHRyYW5zZm9ybSh0ZXh0Pzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIGlmICh0ZXh0ICYmIHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdGV4dFdpdGhSYXdMaW5rcyA9IHRoaXMud3JhcFJhd0h0dHBMaW5rc1dpdGhBbmNob3JUYWdzKHRleHQpO1xuICAgICAgY29uc3QgdGV4dFdpdGhSYXdBbmROYW1lZExpbmtzID0gdGhpcy50dXJuTWFya2Rvd25TdHlsZUxpbmtzSW50b0FuY2hvclRhZ3ModGV4dFdpdGhSYXdMaW5rcyk7XG4gICAgICByZXR1cm4gdGV4dFdpdGhSYXdBbmROYW1lZExpbmtzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHR1cm5NYXJrZG93blN0eWxlTGlua3NJbnRvQW5jaG9yVGFncyh0ZXh0OiBzdHJpbmcpIHtcbiAgICBsZXQgdGV4dFdpdGhSYXdBbmROYW1lZExpbmtzID0gdGV4dDtcbiAgICBjb25zdCBuYW1lZExpbmtNYXRjaGVzID0gdGhpcy5nZXRBbGxSZWdleE1hdGNoZXMoTHhMaW5raWZ5UGlwZS5OQU1FRF9MSU5LX1JFR0VYLCB0ZXh0KTtcbiAgICBuYW1lZExpbmtNYXRjaGVzLmZvckVhY2goKG5hbWVkTGlua01hdGNoKSA9PiB7XG4gICAgICBjb25zdCBbc291cmNlLCBuYW1lLCB1cmxdID0gbmFtZWRMaW5rTWF0Y2g7XG4gICAgICBjb25zdCB1cmxJc1ZhbGlkID0gdXJsICYmICEvamF2YXNjcmlwdFxcOi9pLnRlc3QodXJsKTtcbiAgICAgIGlmIChzb3VyY2UgJiYgbmFtZSAmJiB1cmxJc1ZhbGlkKSB7XG4gICAgICAgIHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcyA9IHRleHRXaXRoUmF3QW5kTmFtZWRMaW5rcy5yZXBsYWNlKFxuICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICBgPGEgaHJlZj1cIiR7dXJsfVwiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIj4ke25hbWV9PC9hPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGV4dFdpdGhSYXdBbmROYW1lZExpbmtzO1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwUmF3SHR0cExpbmtzV2l0aEFuY2hvclRhZ3ModGV4dDogc3RyaW5nKSB7XG4gICAgbGV0IHRleHRXaXRoUmF3TGlua3MgPSB0ZXh0O1xuICAgIC8qKlxuICAgICAqIEtlZXBpbmcgdHJhY2sgb2YgdGhpcyBpbmRleCBwcmV2ZW50cyBpbmZpbml0ZSBsb29wc1xuICAgICAqIHdoZXJlIGEgcHJldmlvdXNseSBwcm9jZXNzZWQgbGluayBzdGFydHMgd2l0aCB0aGUgc2FtZSBjaGFyYWN0ZXJzXG4gICAgICogYXMgYSBzZWNvbmQgbGluay5cbiAgICAgKiBlLmcuIGh0dHBzOi8vYW5ndWxhci5pby9kb2NzIGZvbGxvd2VkIGJ5IGh0dHBzOi8vYW5ndWxhci5pb1xuICAgICAqL1xuICAgIGxldCBuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSA9IDA7XG4gICAgY29uc3QgcmF3TGlua01hdGNoZXMgPSB0aGlzLmdldEFsbFJlZ2V4TWF0Y2hlcyhMeExpbmtpZnlQaXBlLkhUVFBfTElOS19SRUdFWCwgdGV4dCk7XG4gICAgcmF3TGlua01hdGNoZXMuZm9yRWFjaCgocmF3TGlua01hdGNoKSA9PiB7XG4gICAgICBjb25zdCBbdXJsXSA9IHJhd0xpbmtNYXRjaDtcbiAgICAgIGNvbnN0IHdyYXBVcmxJbkFuY2hvciA9IChzYW5pdGl6ZWRVcmxNYXRjaDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpcnN0UGFydCA9IHRleHRXaXRoUmF3TGlua3Muc3Vic3RyaW5nKDAsIG5leHRJbmRleFRvU3RhcnRSZXBsYWNpbmdGcm9tKTtcbiAgICAgICAgY29uc3QgYW5jaG9yVGFnSHRtbCA9IGA8YSBocmVmPVwiJHtzYW5pdGl6ZWRVcmxNYXRjaH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+JHtzYW5pdGl6ZWRVcmxNYXRjaH08L2E+YDtcbiAgICAgICAgY29uc3Qgc2Vjb25kUGFydCA9IHRleHRXaXRoUmF3TGlua3Muc3Vic3RyaW5nKG5leHRJbmRleFRvU3RhcnRSZXBsYWNpbmdGcm9tKS5yZXBsYWNlKHNhbml0aXplZFVybE1hdGNoISwgYW5jaG9yVGFnSHRtbCk7XG4gICAgICAgIHRleHRXaXRoUmF3TGlua3MgPSBmaXJzdFBhcnQgKyBzZWNvbmRQYXJ0O1xuICAgICAgICBuZXh0SW5kZXhUb1N0YXJ0UmVwbGFjaW5nRnJvbSA9IHJhd0xpbmtNYXRjaC5pbmRleCArIGFuY2hvclRhZ0h0bWwubGVuZ3RoO1xuICAgICAgfTtcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogVE9ETzogZ2V0IHJpZCBvZiBhbGwgdGhpcyBjb2RlIG9uY2UgU2FmYXJpIHN1cHBvcnRzIG5lZ2F0aXZlIGxvb2tiZWhpbmRzIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnNcbiAgICAgICAgICogVGhlIGZvbGxvd2luZyBpcyBSZWdFeHAgdGhhdCBoYW5kbGVzIHRoZSBzYW1lIHN0dWZmIGFzIHRoZSBKUyBjb2RlIGJlbG93OlxuICAgICAgICAgKlxuICAgICAgICAgKiAvKD86KD86KD88IVxcXVxcKCkpKD86aHR0cHN8aHR0cCk6XFwvXFwvKSg/OlteXFxzLyQuPyNdW15cXHNdKig/PCFbXFwuKV0pKS9naTtcbiAgICAgICAgICpcbiAgICAgICAgICogRGVtbyBvbiByZWdleDEwMTogaHR0cHM6Ly9yZWdleDEwMS5jb20vci83Vmw5YmcvMVxuICAgICAgICAgKlxuICAgICAgICAgKiBDaGVjayBsb29rYmVoaW5kIHN1cHBvcnQgaGVyZTogaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWxvb2tiZWhpbmRcbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxhc3RVcmxDaGFyYWN0ZXJJbmRleCA9IHJhd0xpbmtNYXRjaC5pbmRleCArIHVybC5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCB0ZXh0VXNlZFRvUGVyZm9ybU1hdGNoaW5nID0gcmF3TGlua01hdGNoLmlucHV0O1xuICAgICAgICBjb25zdCBsYXN0Q2hhcmFjdGVySW5VcmwgPSB0ZXh0VXNlZFRvUGVyZm9ybU1hdGNoaW5nW2xhc3RVcmxDaGFyYWN0ZXJJbmRleF07XG4gICAgICAgIGNvbnN0IHR3b0NoYXJhY3RlcnNJbkZyb250T2ZUaGVMaW5rID1cbiAgICAgICAgICByYXdMaW5rTWF0Y2guaW5kZXggPiAzXG4gICAgICAgICAgICA/IGAke3RleHRVc2VkVG9QZXJmb3JtTWF0Y2hpbmdbcmF3TGlua01hdGNoLmluZGV4IC0gMl19JHt0ZXh0VXNlZFRvUGVyZm9ybU1hdGNoaW5nW3Jhd0xpbmtNYXRjaC5pbmRleCAtIDFdfWBcbiAgICAgICAgICAgIDogJyc7XG4gICAgICAgIGNvbnN0IGlzTWFya2Rvd25TeW50YXhMaW5rID0gdHdvQ2hhcmFjdGVyc0luRnJvbnRPZlRoZUxpbmsgPT09ICddKCc7XG5cbiAgICAgICAgaWYgKCFpc01hcmtkb3duU3ludGF4TGluayAmJiBsYXN0Q2hhcmFjdGVySW5VcmwgPT09ICcuJykge1xuICAgICAgICAgIGNvbnN0IGNoYXJhY3RlckFmdGVyVXJsID0gdGV4dFVzZWRUb1BlcmZvcm1NYXRjaGluZ1tsYXN0VXJsQ2hhcmFjdGVySW5kZXggKyAxXTtcbiAgICAgICAgICBpZiAoIWNoYXJhY3RlckFmdGVyVXJsIHx8IGNoYXJhY3RlckFmdGVyVXJsID09PSAnICcgfHwgY2hhcmFjdGVyQWZ0ZXJVcmwgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxXaXRob3V0RG90QXRUaGVFbmQgPSB1cmwuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgd3JhcFVybEluQW5jaG9yKHVybFdpdGhvdXREb3RBdFRoZUVuZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc01hcmtkb3duU3ludGF4TGluaykge1xuICAgICAgICAgIHdyYXBVcmxJbkFuY2hvcih1cmwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRleHRXaXRoUmF3TGlua3M7XG4gIH1cblxuICBwcml2YXRlIGdldEFsbFJlZ2V4TWF0Y2hlcyhyZWdleDogUmVnRXhwLCBpbnB1dDogc3RyaW5nKSB7XG4gICAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhpbnB1dCkpICE9PSBudWxsKSB7XG4gICAgICBtYXRjaGVzLnB1c2gobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxufVxuIl19
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { Injectable } from '@angular/core';
|
2
|
+
import { timer } from 'rxjs';
|
2
3
|
import * as i0 from "@angular/core";
|
3
4
|
function isResizeableElement(element) {
|
4
5
|
return element && !!element.handleResize;
|
@@ -19,7 +20,16 @@ function isResizeableElement(element) {
|
|
19
20
|
export class ResizeObserverService {
|
20
21
|
observe(element, callback, options) {
|
21
22
|
if (!this.resizeObserver) {
|
22
|
-
|
23
|
+
try {
|
24
|
+
this.resizeObserver = new ResizeObserver(this.resizeObserverCallback.bind(this));
|
25
|
+
}
|
26
|
+
catch {
|
27
|
+
// All the browsers we support implement the ResizeObserver API.
|
28
|
+
// For unsupported browsers, there's this "one time artifical resize event".
|
29
|
+
// They will not get the functionality tied to later resize events.
|
30
|
+
timer(500).subscribe(() => callback(this.getMockOneTimeResizeEventForUnsupportedBrowsers(element)));
|
31
|
+
return;
|
32
|
+
}
|
23
33
|
}
|
24
34
|
element.handleResize = callback;
|
25
35
|
this.resizeObserver.observe(element, options);
|
@@ -37,6 +47,45 @@ export class ResizeObserverService {
|
|
37
47
|
}
|
38
48
|
});
|
39
49
|
}
|
50
|
+
/**
|
51
|
+
* All browsers we officially support implement the ResizeObserver API.
|
52
|
+
* Still as a curtesy do customers who for some reason have older browsers
|
53
|
+
* we call the callback once with the initial dimensions of the element
|
54
|
+
* and then do not react on resize events afterwards.
|
55
|
+
* This should still make them happier than a "browser not supported" warning.
|
56
|
+
*/
|
57
|
+
getMockOneTimeResizeEventForUnsupportedBrowsers(element) {
|
58
|
+
const contentRect = {
|
59
|
+
bottom: element.clientHeight,
|
60
|
+
height: element.clientHeight,
|
61
|
+
left: 0,
|
62
|
+
right: element.clientWidth,
|
63
|
+
top: 0,
|
64
|
+
width: element.clientWidth,
|
65
|
+
x: 0,
|
66
|
+
y: 0
|
67
|
+
};
|
68
|
+
return {
|
69
|
+
borderBoxSize: [{ blockSize: element.clientHeight, inlineSize: element.clientWidth }],
|
70
|
+
contentBoxSize: [
|
71
|
+
{
|
72
|
+
blockSize: element.clientHeight,
|
73
|
+
inlineSize: element.clientWidth
|
74
|
+
}
|
75
|
+
],
|
76
|
+
contentRect: {
|
77
|
+
...contentRect,
|
78
|
+
toJSON: () => JSON.stringify(contentRect)
|
79
|
+
},
|
80
|
+
devicePixelContentBoxSize: [
|
81
|
+
{
|
82
|
+
blockSize: element.clientWidth,
|
83
|
+
inlineSize: element.clientWidth
|
84
|
+
}
|
85
|
+
],
|
86
|
+
target: element
|
87
|
+
};
|
88
|
+
}
|
40
89
|
}
|
41
90
|
ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
42
91
|
ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
|
@@ -44,4 +93,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
|
|
44
93
|
type: Injectable,
|
45
94
|
args: [{ providedIn: 'root' }]
|
46
95
|
}] });
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlLXVpL3NlcnZpY2VzL3Jlc2l6ZS1vYnNlcnZlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFRN0IsU0FBUyxtQkFBbUIsQ0FBQyxPQUFZO0lBQ3ZDLE9BQU8sT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQzNDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxNQUFNLE9BQU8scUJBQXFCO0lBR2hDLE9BQU8sQ0FBQyxPQUEwQixFQUFFLFFBQWtDLEVBQUUsT0FBK0I7UUFDckcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSTtnQkFDRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNsRjtZQUFDLE1BQU07Z0JBQ04sZ0VBQWdFO2dCQUNoRSw0RUFBNEU7Z0JBQzVFLG1FQUFtRTtnQkFDbkUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLCtDQUErQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDcEcsT0FBTzthQUNSO1NBQ0Y7UUFDRCxPQUFPLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFvQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sc0JBQXNCLENBQUMsT0FBOEIsRUFBRSxTQUF5QjtRQUN0RixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3JDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssK0NBQStDLENBQUMsT0FBMEI7UUFDaEYsTUFBTSxXQUFXLEdBQUc7WUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZO1lBQzVCLE1BQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtZQUM1QixJQUFJLEVBQUUsQ0FBQztZQUNQLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVztZQUMxQixHQUFHLEVBQUUsQ0FBQztZQUNOLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVztZQUMxQixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1NBQ0wsQ0FBQztRQUNGLE9BQU87WUFDTCxhQUFhLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckYsY0FBYyxFQUFFO2dCQUNkO29CQUNFLFNBQVMsRUFBRSxPQUFPLENBQUMsWUFBWTtvQkFDL0IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxXQUFXO2lCQUNoQzthQUNGO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLEdBQUcsV0FBVztnQkFDZCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7YUFDMUM7WUFDRCx5QkFBeUIsRUFBRTtnQkFDekI7b0JBQ0UsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXO29CQUM5QixVQUFVLEVBQUUsT0FBTyxDQUFDLFdBQVc7aUJBQ2hDO2FBQ0Y7WUFDRCxNQUFNLEVBQUUsT0FBTztTQUNoQixDQUFDO0lBQ0osQ0FBQzs7a0hBeEVVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRFIsTUFBTTsyRkFDbkIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCB0eXBlIEx4UmVzaXplT2JzZXJ2ZXJDYWxsYmFjayA9IChyZXNpemVkRWxlbWVudDogUmVzaXplT2JzZXJ2ZXJFbnRyeSkgPT4gdm9pZDtcblxuaW50ZXJmYWNlIFJlc2l6ZWFibGVFbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIGhhbmRsZVJlc2l6ZTogTHhSZXNpemVPYnNlcnZlckNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBpc1Jlc2l6ZWFibGVFbGVtZW50KGVsZW1lbnQ6IGFueSk6IGVsZW1lbnQgaXMgUmVzaXplYWJsZUVsZW1lbnQge1xuICByZXR1cm4gZWxlbWVudCAmJiAhIWVsZW1lbnQuaGFuZGxlUmVzaXplO1xufVxuXG4vKipcbiAqIFNoYXJpbmcgb25lIFJlc2l6ZU9ic2VydmVyIG9iamVjdCByZXN1bHRzIGluIG11Y2ggYmV0dGVyIHBlcmZvcm1hbmNlXG4gKiBvdmVyIGluZGl2aWR1YWwgY29tcG9uZW50cyBjcmVhdGluZyB0aGVpciBvd24gUmVzaXplT2JzZXJ2ZXIuXG4gKiBUaGlzIGlzIHdoeSB0aGlzIHNlcnZpY2UgZXhpc3RzLlxuICogU291cmNlOlxuICogLSBodHRwczovL2dpdGh1Yi5jb20vV0lDRy9yZXNpemUtb2JzZXJ2ZXIvaXNzdWVzLzU5I2lzc3VlY29tbWVudC00MDgwOTgxNTFcbiAqIC0gaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9nL2JsaW5rLWRldi9jL3o2aWVuT05VYjVBL20vRjUtVmNVWnRCQUFKXG4gKlxuICogTGVhcm4gbW9yZSBhYm91dCB0aGUgUmVzaXplT2JzZXJ2ZXIgQVBJOlxuICogLSBodHRwczovL3d3dy53My5vcmcvVFIvcmVzaXplLW9ic2VydmVyL1xuICogLSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVzaXplT2JzZXJ2ZXJcbiAqIC0gaHR0cHM6Ly93d3cuZGlnaXRhbG9jZWFuLmNvbS9jb21tdW5pdHkvdHV0b3JpYWxzL2pzLXJlc2l6ZS1vYnNlcnZlclxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlc2l6ZU9ic2VydmVyU2VydmljZSB7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcblxuICBvYnNlcnZlKGVsZW1lbnQ6IFJlc2l6ZWFibGVFbGVtZW50LCBjYWxsYmFjazogTHhSZXNpemVPYnNlcnZlckNhbGxiYWNrLCBvcHRpb25zPzogUmVzaXplT2JzZXJ2ZXJPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMucmVzaXplT2JzZXJ2ZXJDYWxsYmFjay5iaW5kKHRoaXMpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBBbGwgdGhlIGJyb3dzZXJzIHdlIHN1cHBvcnQgaW1wbGVtZW50IHRoZSBSZXNpemVPYnNlcnZlciBBUEkuXG4gICAgICAgIC8vIEZvciB1bnN1cHBvcnRlZCBicm93c2VycywgdGhlcmUncyB0aGlzIFwib25lIHRpbWUgYXJ0aWZpY2FsIHJlc2l6ZSBldmVudFwiLlxuICAgICAgICAvLyBUaGV5IHdpbGwgbm90IGdldCB0aGUgZnVuY3Rpb25hbGl0eSB0aWVkIHRvIGxhdGVyIHJlc2l6ZSBldmVudHMuXG4gICAgICAgIHRpbWVyKDUwMCkuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKHRoaXMuZ2V0TW9ja09uZVRpbWVSZXNpemVFdmVudEZvclVuc3VwcG9ydGVkQnJvd3NlcnMoZWxlbWVudCkpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50LmhhbmRsZVJlc2l6ZSA9IGNhbGxiYWNrO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgfVxuXG4gIHVub2JzZXJ2ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghdGhpcy5yZXNpemVPYnNlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShlbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzOiBSZXNpemVPYnNlcnZlckVudHJ5W10sIF9vYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBpZiAoaXNSZXNpemVhYmxlRWxlbWVudChlbnRyeS50YXJnZXQpKSB7XG4gICAgICAgIGVudHJ5LnRhcmdldC5oYW5kbGVSZXNpemUoZW50cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBicm93c2VycyB3ZSBvZmZpY2lhbGx5IHN1cHBvcnQgaW1wbGVtZW50IHRoZSBSZXNpemVPYnNlcnZlciBBUEkuXG4gICAqIFN0aWxsIGFzIGEgY3VydGVzeSBkbyBjdXN0b21lcnMgd2hvIGZvciBzb21lIHJlYXNvbiBoYXZlIG9sZGVyIGJyb3dzZXJzXG4gICAqIHdlIGNhbGwgdGhlIGNhbGxiYWNrIG9uY2Ugd2l0aCB0aGUgaW5pdGlhbCBkaW1lbnNpb25zIG9mIHRoZSBlbGVtZW50XG4gICAqIGFuZCB0aGVuIGRvIG5vdCByZWFjdCBvbiByZXNpemUgZXZlbnRzIGFmdGVyd2FyZHMuXG4gICAqIFRoaXMgc2hvdWxkIHN0aWxsIG1ha2UgdGhlbSBoYXBwaWVyIHRoYW4gYSBcImJyb3dzZXIgbm90IHN1cHBvcnRlZFwiIHdhcm5pbmcuXG4gICAqL1xuICBwcml2YXRlIGdldE1vY2tPbmVUaW1lUmVzaXplRXZlbnRGb3JVbnN1cHBvcnRlZEJyb3dzZXJzKGVsZW1lbnQ6IFJlc2l6ZWFibGVFbGVtZW50KSB7XG4gICAgY29uc3QgY29udGVudFJlY3QgPSB7XG4gICAgICBib3R0b206IGVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgaGVpZ2h0OiBlbGVtZW50LmNsaWVudEhlaWdodCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogZWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgIHRvcDogMCxcbiAgICAgIHdpZHRoOiBlbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXJCb3hTaXplOiBbeyBibG9ja1NpemU6IGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBpbmxpbmVTaXplOiBlbGVtZW50LmNsaWVudFdpZHRoIH1dLFxuICAgICAgY29udGVudEJveFNpemU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGJsb2NrU2l6ZTogZWxlbWVudC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgaW5saW5lU2l6ZTogZWxlbWVudC5jbGllbnRXaWR0aFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgY29udGVudFJlY3Q6IHtcbiAgICAgICAgLi4uY29udGVudFJlY3QsXG4gICAgICAgIHRvSlNPTjogKCkgPT4gSlNPTi5zdHJpbmdpZnkoY29udGVudFJlY3QpXG4gICAgICB9LFxuICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogW1xuICAgICAgICB7XG4gICAgICAgICAgYmxvY2tTaXplOiBlbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgIGlubGluZVNpemU6IGVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHRhcmdldDogZWxlbWVudFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
@@ -8,7 +8,7 @@ import * as i1 from '@angular/cdk/overlay';
|
|
8
8
|
import { OverlayModule, CdkConnectedOverlay } from '@angular/cdk/overlay';
|
9
9
|
import { __decorate, __awaiter } from 'tslib';
|
10
10
|
import * as i6 from 'rxjs';
|
11
|
-
import { BehaviorSubject, Subject, combineLatest, merge, concat, fromEvent, Observable, ReplaySubject, of
|
11
|
+
import { BehaviorSubject, timer, Subject, combineLatest, merge, concat, fromEvent, Observable, ReplaySubject, of } from 'rxjs';
|
12
12
|
import { skipWhile, map, switchMap, startWith, pairwise, filter, take, debounceTime, skip, withLatestFrom, distinctUntilChanged, takeUntil, first, delay, mapTo, tap } from 'rxjs/operators';
|
13
13
|
import * as i1$1 from '@ngx-translate/core';
|
14
14
|
import { TranslatePipe, TranslateModule } from '@ngx-translate/core';
|
@@ -518,7 +518,16 @@ function isResizeableElement(element) {
|
|
518
518
|
class ResizeObserverService {
|
519
519
|
observe(element, callback, options) {
|
520
520
|
if (!this.resizeObserver) {
|
521
|
-
|
521
|
+
try {
|
522
|
+
this.resizeObserver = new ResizeObserver(this.resizeObserverCallback.bind(this));
|
523
|
+
}
|
524
|
+
catch (_a) {
|
525
|
+
// All the browsers we support implement the ResizeObserver API.
|
526
|
+
// For unsupported browsers, there's this "one time artifical resize event".
|
527
|
+
// They will not get the functionality tied to later resize events.
|
528
|
+
timer(500).subscribe(() => callback(this.getMockOneTimeResizeEventForUnsupportedBrowsers(element)));
|
529
|
+
return;
|
530
|
+
}
|
522
531
|
}
|
523
532
|
element.handleResize = callback;
|
524
533
|
this.resizeObserver.observe(element, options);
|
@@ -536,6 +545,42 @@ class ResizeObserverService {
|
|
536
545
|
}
|
537
546
|
});
|
538
547
|
}
|
548
|
+
/**
|
549
|
+
* All browsers we officially support implement the ResizeObserver API.
|
550
|
+
* Still as a curtesy do customers who for some reason have older browsers
|
551
|
+
* we call the callback once with the initial dimensions of the element
|
552
|
+
* and then do not react on resize events afterwards.
|
553
|
+
* This should still make them happier than a "browser not supported" warning.
|
554
|
+
*/
|
555
|
+
getMockOneTimeResizeEventForUnsupportedBrowsers(element) {
|
556
|
+
const contentRect = {
|
557
|
+
bottom: element.clientHeight,
|
558
|
+
height: element.clientHeight,
|
559
|
+
left: 0,
|
560
|
+
right: element.clientWidth,
|
561
|
+
top: 0,
|
562
|
+
width: element.clientWidth,
|
563
|
+
x: 0,
|
564
|
+
y: 0
|
565
|
+
};
|
566
|
+
return {
|
567
|
+
borderBoxSize: [{ blockSize: element.clientHeight, inlineSize: element.clientWidth }],
|
568
|
+
contentBoxSize: [
|
569
|
+
{
|
570
|
+
blockSize: element.clientHeight,
|
571
|
+
inlineSize: element.clientWidth
|
572
|
+
}
|
573
|
+
],
|
574
|
+
contentRect: Object.assign(Object.assign({}, contentRect), { toJSON: () => JSON.stringify(contentRect) }),
|
575
|
+
devicePixelContentBoxSize: [
|
576
|
+
{
|
577
|
+
blockSize: element.clientWidth,
|
578
|
+
inlineSize: element.clientWidth
|
579
|
+
}
|
580
|
+
],
|
581
|
+
target: element
|
582
|
+
};
|
583
|
+
}
|
539
584
|
}
|
540
585
|
ResizeObserverService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ResizeObserverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
541
586
|
ResizeObserverService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ResizeObserverService, providedIn: 'root' });
|
@@ -1167,72 +1212,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
|
|
1167
1212
|
class LxLinkifyPipe {
|
1168
1213
|
transform(text) {
|
1169
1214
|
if (text && typeof text === 'string') {
|
1170
|
-
|
1171
|
-
|
1172
|
-
* Keeping track of this index prevents infinite loops
|
1173
|
-
* where a previously processed link starts with the same characters
|
1174
|
-
* as a second link.
|
1175
|
-
* e.g. https://angular.io/docs followed by https://angular.io
|
1176
|
-
*/
|
1177
|
-
let nextIndexToStartReplacingFrom = 0;
|
1178
|
-
const rawLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.HTTP_LINK_REGEX, text);
|
1179
|
-
rawLinkMatches.forEach((rawLinkMatch) => {
|
1180
|
-
const [url] = rawLinkMatch;
|
1181
|
-
const wrapUrlInAnchor = (sanitizedUrlMatch) => {
|
1182
|
-
const firstPart = textWithRawLinks.substring(0, nextIndexToStartReplacingFrom);
|
1183
|
-
const anchorTagHtml = `<a href="${sanitizedUrlMatch}" target="_blank" rel="noopener noreferrer">${sanitizedUrlMatch}</a>`;
|
1184
|
-
const secondPart = textWithRawLinks.substring(nextIndexToStartReplacingFrom).replace(sanitizedUrlMatch, anchorTagHtml);
|
1185
|
-
textWithRawLinks = firstPart + secondPart;
|
1186
|
-
nextIndexToStartReplacingFrom = rawLinkMatch.index + anchorTagHtml.length;
|
1187
|
-
};
|
1188
|
-
if (url) {
|
1189
|
-
/*
|
1190
|
-
* TODO: get rid of all this code once Safari supports negative lookbehinds in regular expressions
|
1191
|
-
* The following is RegExp that handles the same stuff as the JS code below:
|
1192
|
-
*
|
1193
|
-
* /(?:(?:(?<!\]\())(?:https|http):\/\/)(?:[^\s/$.?#][^\s]*(?<![\.)]))/gi;
|
1194
|
-
*
|
1195
|
-
* Demo on regex101: https://regex101.com/r/7Vl9bg/1
|
1196
|
-
*
|
1197
|
-
* Check lookbehind support here: https://caniuse.com/?search=lookbehind
|
1198
|
-
*/
|
1199
|
-
const lastUrlCharacterIndex = rawLinkMatch.index + url.length - 1;
|
1200
|
-
const textUsedToPerformMatching = rawLinkMatch.input;
|
1201
|
-
const lastCharacterInUrl = textUsedToPerformMatching[lastUrlCharacterIndex];
|
1202
|
-
if (lastCharacterInUrl === '.') {
|
1203
|
-
const characterAfterUrl = textUsedToPerformMatching[lastUrlCharacterIndex + 1];
|
1204
|
-
if (!characterAfterUrl || characterAfterUrl === ' ' || characterAfterUrl === '\n') {
|
1205
|
-
const urlWithoutDotAtTheEnd = url.slice(0, -1);
|
1206
|
-
wrapUrlInAnchor(urlWithoutDotAtTheEnd);
|
1207
|
-
}
|
1208
|
-
}
|
1209
|
-
else if (rawLinkMatch.index > 3) {
|
1210
|
-
const twoCharactersInFrontOfTheLink = `${textUsedToPerformMatching[rawLinkMatch.index - 2]}${textUsedToPerformMatching[rawLinkMatch.index - 1]}`;
|
1211
|
-
if (twoCharactersInFrontOfTheLink && twoCharactersInFrontOfTheLink !== '](') {
|
1212
|
-
// only wrap url in anchor when it is not a named markdown link
|
1213
|
-
wrapUrlInAnchor(url);
|
1214
|
-
}
|
1215
|
-
}
|
1216
|
-
else {
|
1217
|
-
wrapUrlInAnchor(url);
|
1218
|
-
}
|
1219
|
-
}
|
1220
|
-
});
|
1221
|
-
let textWithRawAndNamedLinks = textWithRawLinks;
|
1222
|
-
const namedLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.NAMED_LINK_REGEX, textWithRawLinks);
|
1223
|
-
namedLinkMatches.forEach((namedLinkMatch) => {
|
1224
|
-
const [source, name, url] = namedLinkMatch;
|
1225
|
-
const urlIsValid = url && !/javascript\:/i.test(url);
|
1226
|
-
if (source && name && urlIsValid) {
|
1227
|
-
textWithRawAndNamedLinks = textWithRawAndNamedLinks.replace(source, `<a href="${url}" target="_blank" rel="noopener noreferrer">${name}</a>`);
|
1228
|
-
}
|
1229
|
-
});
|
1215
|
+
const textWithRawLinks = this.wrapRawHttpLinksWithAnchorTags(text);
|
1216
|
+
const textWithRawAndNamedLinks = this.turnMarkdownStyleLinksIntoAnchorTags(textWithRawLinks);
|
1230
1217
|
return textWithRawAndNamedLinks;
|
1231
1218
|
}
|
1232
1219
|
else {
|
1233
1220
|
return text;
|
1234
1221
|
}
|
1235
1222
|
}
|
1223
|
+
turnMarkdownStyleLinksIntoAnchorTags(text) {
|
1224
|
+
let textWithRawAndNamedLinks = text;
|
1225
|
+
const namedLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.NAMED_LINK_REGEX, text);
|
1226
|
+
namedLinkMatches.forEach((namedLinkMatch) => {
|
1227
|
+
const [source, name, url] = namedLinkMatch;
|
1228
|
+
const urlIsValid = url && !/javascript\:/i.test(url);
|
1229
|
+
if (source && name && urlIsValid) {
|
1230
|
+
textWithRawAndNamedLinks = textWithRawAndNamedLinks.replace(source, `<a href="${url}" target="_blank" rel="noopener noreferrer">${name}</a>`);
|
1231
|
+
}
|
1232
|
+
});
|
1233
|
+
return textWithRawAndNamedLinks;
|
1234
|
+
}
|
1235
|
+
wrapRawHttpLinksWithAnchorTags(text) {
|
1236
|
+
let textWithRawLinks = text;
|
1237
|
+
/**
|
1238
|
+
* Keeping track of this index prevents infinite loops
|
1239
|
+
* where a previously processed link starts with the same characters
|
1240
|
+
* as a second link.
|
1241
|
+
* e.g. https://angular.io/docs followed by https://angular.io
|
1242
|
+
*/
|
1243
|
+
let nextIndexToStartReplacingFrom = 0;
|
1244
|
+
const rawLinkMatches = this.getAllRegexMatches(LxLinkifyPipe.HTTP_LINK_REGEX, text);
|
1245
|
+
rawLinkMatches.forEach((rawLinkMatch) => {
|
1246
|
+
const [url] = rawLinkMatch;
|
1247
|
+
const wrapUrlInAnchor = (sanitizedUrlMatch) => {
|
1248
|
+
const firstPart = textWithRawLinks.substring(0, nextIndexToStartReplacingFrom);
|
1249
|
+
const anchorTagHtml = `<a href="${sanitizedUrlMatch}" target="_blank" rel="noopener noreferrer">${sanitizedUrlMatch}</a>`;
|
1250
|
+
const secondPart = textWithRawLinks.substring(nextIndexToStartReplacingFrom).replace(sanitizedUrlMatch, anchorTagHtml);
|
1251
|
+
textWithRawLinks = firstPart + secondPart;
|
1252
|
+
nextIndexToStartReplacingFrom = rawLinkMatch.index + anchorTagHtml.length;
|
1253
|
+
};
|
1254
|
+
if (url) {
|
1255
|
+
/*
|
1256
|
+
* TODO: get rid of all this code once Safari supports negative lookbehinds in regular expressions
|
1257
|
+
* The following is RegExp that handles the same stuff as the JS code below:
|
1258
|
+
*
|
1259
|
+
* /(?:(?:(?<!\]\())(?:https|http):\/\/)(?:[^\s/$.?#][^\s]*(?<![\.)]))/gi;
|
1260
|
+
*
|
1261
|
+
* Demo on regex101: https://regex101.com/r/7Vl9bg/1
|
1262
|
+
*
|
1263
|
+
* Check lookbehind support here: https://caniuse.com/?search=lookbehind
|
1264
|
+
*/
|
1265
|
+
const lastUrlCharacterIndex = rawLinkMatch.index + url.length - 1;
|
1266
|
+
const textUsedToPerformMatching = rawLinkMatch.input;
|
1267
|
+
const lastCharacterInUrl = textUsedToPerformMatching[lastUrlCharacterIndex];
|
1268
|
+
const twoCharactersInFrontOfTheLink = rawLinkMatch.index > 3
|
1269
|
+
? `${textUsedToPerformMatching[rawLinkMatch.index - 2]}${textUsedToPerformMatching[rawLinkMatch.index - 1]}`
|
1270
|
+
: '';
|
1271
|
+
const isMarkdownSyntaxLink = twoCharactersInFrontOfTheLink === '](';
|
1272
|
+
if (!isMarkdownSyntaxLink && lastCharacterInUrl === '.') {
|
1273
|
+
const characterAfterUrl = textUsedToPerformMatching[lastUrlCharacterIndex + 1];
|
1274
|
+
if (!characterAfterUrl || characterAfterUrl === ' ' || characterAfterUrl === '\n') {
|
1275
|
+
const urlWithoutDotAtTheEnd = url.slice(0, -1);
|
1276
|
+
wrapUrlInAnchor(urlWithoutDotAtTheEnd);
|
1277
|
+
}
|
1278
|
+
}
|
1279
|
+
else if (!isMarkdownSyntaxLink) {
|
1280
|
+
wrapUrlInAnchor(url);
|
1281
|
+
}
|
1282
|
+
}
|
1283
|
+
});
|
1284
|
+
return textWithRawLinks;
|
1285
|
+
}
|
1236
1286
|
getAllRegexMatches(regex, input) {
|
1237
1287
|
let match;
|
1238
1288
|
const matches = [];
|