@libs-ui/utils 0.2.29 → 0.2.30-6.2
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/base64.d.ts +5 -0
- package/cache.d.ts +16 -15
- package/color.d.ts +1 -1
- package/communicate-micro.d.ts +4 -5
- package/constants.d.ts +3 -0
- package/crypto-3rd.d.ts +4 -0
- package/crypto.d.ts +4 -0
- package/date.d.ts +49 -0
- package/dom.d.ts +36 -1
- package/download.d.ts +3 -0
- package/esm2022/base64.mjs +43 -0
- package/esm2022/cache.mjs +121 -132
- package/esm2022/color.mjs +2 -2
- package/esm2022/communicate-micro.mjs +26 -24
- package/esm2022/constants.mjs +4 -1
- package/esm2022/crypto-3rd.mjs +5 -1
- package/esm2022/crypto.mjs +5 -1
- package/esm2022/date.mjs +189 -0
- package/esm2022/dom.mjs +200 -22
- package/esm2022/download.mjs +37 -0
- package/esm2022/file.mjs +79 -0
- package/esm2022/format-text.mjs +150 -0
- package/esm2022/get-smart-axis-scale.mjs +174 -0
- package/esm2022/helpers.mjs +402 -91
- package/esm2022/http-params.mjs +15 -3
- package/esm2022/index.mjs +12 -5
- package/esm2022/inject-token.mjs +5 -0
- package/esm2022/key-cache.mjs +20 -8
- package/esm2022/language.mjs +67 -4
- package/esm2022/pattern.mjs +21 -21
- package/esm2022/random.mjs +42 -0
- package/esm2022/two-way-signal-object.mjs +113 -0
- package/esm2022/uri.mjs +22 -0
- package/esm2022/uuid.mjs +3 -2
- package/esm2022/xss-filter.mjs +10 -0
- package/fesm2022/libs-ui-utils.mjs +2454 -1096
- package/fesm2022/libs-ui-utils.mjs.map +1 -1
- package/file.d.ts +18 -0
- package/format-text.d.ts +11 -0
- package/get-smart-axis-scale.d.ts +34 -0
- package/helpers.d.ts +218 -10
- package/http-params.d.ts +2 -2
- package/index.d.ts +11 -4
- package/inject-token.d.ts +4 -0
- package/language.d.ts +32 -0
- package/package.json +7 -4
- package/pattern.d.ts +20 -20
- package/random.d.ts +3 -0
- package/two-way-signal-object.d.ts +14 -0
- package/uri.d.ts +5 -0
- package/xss-filter.d.ts +3 -0
- package/delete-unicode.d.ts +0 -1
- package/escape-html.d.ts +0 -1
- package/esm2022/delete-unicode.mjs +0 -20
- package/esm2022/escape-html.mjs +0 -12
- package/esm2022/get-color-by-id.mjs +0 -17
- package/esm2022/remove-emoji.mjs +0 -10
- package/get-color-by-id.d.ts +0 -1
- package/remove-emoji.d.ts +0 -2
package/esm2022/dom.mjs
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
|
+
import DeviceDetector from 'device-detector-js';
|
|
2
|
+
import Quill from "quill";
|
|
3
|
+
import { finalize, fromEvent, lastValueFrom, mergeMap, startWith, takeUntil, tap, timer } from "rxjs";
|
|
4
|
+
import { decodeEscapeHtml } from "./format-text";
|
|
5
|
+
const deviceDetector = new DeviceDetector();
|
|
6
|
+
const parser = new DOMParser();
|
|
7
|
+
const quill = new Quill(document.createElement('div'));
|
|
8
|
+
export const getDeviceInfo = () => {
|
|
9
|
+
return deviceDetector.parse(window.navigator.userAgent);
|
|
10
|
+
};
|
|
1
11
|
export const getPlatFromBrowser = () => {
|
|
2
|
-
const
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
tem = userAgent.match(/\b(OPR|Edge)\/(\d+)/);
|
|
11
|
-
if (tem !== null) {
|
|
12
|
-
return tem.slice(1).join(' ').replace('OPR', 'Opera');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
match = match[2] ? [match[1], match[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
|
16
|
-
if ((tem = userAgent.match(/version\/(\d+)/i)) !== null) {
|
|
17
|
-
match.splice(1, 1, tem[1]);
|
|
12
|
+
const info = getDeviceInfo();
|
|
13
|
+
return `${info.client?.name} ${info.client?.version}`;
|
|
14
|
+
};
|
|
15
|
+
export const getEventNameHandleClick = (() => {
|
|
16
|
+
const deviceInfo = getDeviceInfo();
|
|
17
|
+
let nameEventHandleClick = deviceInfo.device?.type === 'desktop' ? 'click' : 'touchstart';
|
|
18
|
+
if ('onpointerdown' in window) {
|
|
19
|
+
nameEventHandleClick = 'pointerdown';
|
|
18
20
|
}
|
|
19
|
-
return
|
|
21
|
+
return nameEventHandleClick;
|
|
22
|
+
})();
|
|
23
|
+
export const getDocumentByString = (htmlStr) => {
|
|
24
|
+
return parser.parseFromString(htmlStr, 'text/html');
|
|
20
25
|
};
|
|
21
26
|
export const cloneIBoundingClientRect = (rect) => {
|
|
22
27
|
return {
|
|
@@ -24,10 +29,10 @@ export const cloneIBoundingClientRect = (rect) => {
|
|
|
24
29
|
left: rect['left'],
|
|
25
30
|
width: rect['width'],
|
|
26
31
|
height: rect['height'],
|
|
27
|
-
bottom: rect['bottom']
|
|
32
|
+
bottom: rect['bottom'],
|
|
28
33
|
};
|
|
29
34
|
};
|
|
30
|
-
export const
|
|
35
|
+
export const setStylesElement = (el, styles, render2) => {
|
|
31
36
|
Object.keys(styles).forEach((key) => render2.setStyle(el, key, styles[key]));
|
|
32
37
|
};
|
|
33
38
|
export const getViewport = (win = window) => {
|
|
@@ -63,7 +68,10 @@ export const checkViewInScreen = (container, element, elementScroll, maxTopLeft)
|
|
|
63
68
|
const limitLeft = leftContainer + scrollLeftContainer + widthContainer;
|
|
64
69
|
const maxTopItem = top + (maxTopLeft?.top || 0);
|
|
65
70
|
const maxLeftItem = left + (maxTopLeft?.left || 0);
|
|
66
|
-
if (topContainer <= maxTopItem &&
|
|
71
|
+
if (topContainer <= maxTopItem &&
|
|
72
|
+
maxTopItem <= limitTop &&
|
|
73
|
+
leftContainer <= maxLeftItem &&
|
|
74
|
+
maxLeftItem <= limitLeft) {
|
|
67
75
|
return true;
|
|
68
76
|
}
|
|
69
77
|
return false;
|
|
@@ -77,9 +85,179 @@ export const checkMouseOverInContainer = (mousePosition, element, rect) => {
|
|
|
77
85
|
const limitLeft = left + width;
|
|
78
86
|
const limitTop = top + height;
|
|
79
87
|
const { clientX, clientY } = mousePosition;
|
|
80
|
-
if (left <= clientX &&
|
|
88
|
+
if (left <= clientX &&
|
|
89
|
+
clientX <= limitLeft &&
|
|
90
|
+
top <= clientY &&
|
|
91
|
+
clientY <= limitTop) {
|
|
81
92
|
return true;
|
|
82
93
|
}
|
|
83
94
|
return false;
|
|
84
95
|
};
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUUsRUFBRTtJQUNwQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQ3RDLElBQUksR0FBRyxDQUFDO0lBQ1IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVsRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QixHQUFHLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUU5QyxPQUFPLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUM3QyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUVILENBQUM7SUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FB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LElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBYSxDQUFDO0lBQzlFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUMvQixNQUFNLFFBQVEsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0lBQzlCLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDO0lBRTNDLElBQUksSUFBSSxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVuZGVyZXIyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElCb3VuZGluZ0NsaWVudFJlY3QgfSBmcm9tIFwiQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgZ2V0UGxhdEZyb21Ccm93c2VyID0gKCk9PiB7XG4gIGNvbnN0IHVzZXJBZ2VudCA9IG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIGxldCB0ZW07XG4gIGxldCBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuXG4gIGlmICgvdHJpZGVudC9pLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVzZXJBZ2VudCkgfHwgW107XG5cbiAgICByZXR1cm4gJ0lFICcgKyAodGVtWzFdIHx8ICcnKTtcbiAgfVxuICBpZiAobWF0Y2hbMV0gPT09ICdDaHJvbWUnKSB7XG4gICAgdGVtID0gdXNlckFnZW50Lm1hdGNoKC9cXGIoT1BSfEVkZ2UpXFwvKFxcZCspLyk7XG4gICAgaWYgKHRlbSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRlbS5zbGljZSgxKS5qb2luKCcgJykucmVwbGFjZSgnT1BSJywgJ09wZXJhJyk7XG4gICAgfVxuXG4gIH1cbiAgbWF0Y2ggPSBtYXRjaFsyXSA/IFttYXRjaFsxXSwgbWF0Y2hbMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XG4gIGlmICgodGVtID0gdXNlckFnZW50Lm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPT0gbnVsbCkge1xuICAgIG1hdGNoLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xuICB9XG5cbiAgcmV0dXJuIG1hdGNoLmpvaW4oJyAnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGNsb25lSUJvdW5kaW5nQ2xpZW50UmVjdCA9IChyZWN0OiBJQm91bmRpbmdDbGllbnRSZWN0KTogSUJvdW5kaW5nQ2xpZW50UmVjdCA9PiB7XG4gIHJldHVybiB7XG4gICAgdG9wOiByZWN0Wyd0b3AnXSxcbiAgICBsZWZ0OiByZWN0WydsZWZ0J10sXG4gICAgd2lkdGg6IHJlY3RbJ3dpZHRoJ10sXG4gICAgaGVpZ2h0OiByZWN0WydoZWlnaHQnXSxcbiAgICBib3R0b206IHJlY3RbJ2JvdHRvbSddXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBzZXRTdHlsZXMgPSAoZWw6IEhUTUxFbGVtZW50LCBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJlbmRlcjI6IFJlbmRlcmVyMik6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhzdHlsZXMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiByZW5kZXIyLnNldFN0eWxlKGVsLCBrZXksIHN0eWxlc1trZXldKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydCA9ICh3aW46IFdpbmRvdyA9IHdpbmRvdyk6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSA9PiB7XG4gIGNvbnN0IGRvYyA9IHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4gICAgYm9keSA9IHdpbi5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdLFxuICAgIHcgPSB3aW4uaW5uZXJXaWR0aCB8fCBkb2MuY2xpZW50V2lkdGggfHwgYm9keS5jbGllbnRXaWR0aCxcbiAgICBoID0gd2luLmlubmVySGVpZ2h0IHx8IGRvYy5jbGllbnRIZWlnaHQgfHwgYm9keS5jbGllbnRIZWlnaHQ7XG5cbiAgcmV0dXJuIHsgd2lkdGg6IHcsIGhlaWdodDogaCB9O1xufVxuXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9IChlbGVtZW50OiBIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudCwgcG9zaXRpb246IG51bWJlcik6IHZvaWQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5mb2N1cygpO1xuICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG59XG5cbmV4cG9ydCBjb25zdCBjaGVja1ZpZXdJblNjcmVlbiA9IChjb250YWluZXI6IEhUTUxFbGVtZW50LCBlbGVtZW50OiBIVE1MRWxlbWVudCwgZWxlbWVudFNjcm9sbD86IEhUTUxFbGVtZW50LCBtYXhUb3BMZWZ0PzogeyB0b3A/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXIgfSk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWNvbnRhaW5lciB8fCAhZWxlbWVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlY3RDb250YWluZXIgPSBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QoY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcblxuICBpZiAoZWxlbWVudFNjcm9sbCkge1xuICAgIGNvbnN0IHJlY3RFbGVtZW50U2Nyb2xsID0gZWxlbWVudFNjcm9sbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIHJlY3RDb250YWluZXJbJ2xlZnQnXSA9IHJlY3RFbGVtZW50U2Nyb2xsLmxlZnQ7XG4gICAgcmVjdENvbnRhaW5lclsndG9wJ10gPSByZWN0RWxlbWVudFNjcm9sbC50b3A7XG5cbiAgfVxuXG4gIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHJlY3RFbGVtZW50O1xuICBjb25zdCB0b3BDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd0b3AnXTtcbiAgY29uc3QgbGVmdENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ2xlZnQnXTtcbiAgY29uc3Qgd2lkdGhDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd3aWR0aCddO1xuICBjb25zdCBoZWlnaHRDb250YWluZXIgPSByZWN0Q29udGFpbmVyWydoZWlnaHQnXTtcbiAgY29uc3Qgc2Nyb2xsVG9wQ29udGFpbmVyID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3Qgc2Nyb2xsTGVmdENvbnRhaW5lciA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICBjb25zdCBsaW1pdFRvcCA9IHRvcENvbnRhaW5lciArIHNjcm9sbFRvcENvbnRhaW5lciArIGhlaWdodENvbnRhaW5lcjtcbiAgY29uc3QgbGltaXRMZWZ0ID0gbGVmdENvbnRhaW5lciArIHNjcm9sbExlZnRDb250YWluZXIgKyB3aWR0aENvbnRhaW5lcjtcblxuICBjb25zdCBtYXhUb3BJdGVtID0gdG9wICsgKG1heFRvcExlZnQ/LnRvcCB8fCAwKTtcbiAgY29uc3QgbWF4TGVmdEl0ZW0gPSBsZWZ0ICsgKG1heFRvcExlZnQ/LmxlZnQgfHwgMCk7XG5cbiAgaWYgKHRvcENvbnRhaW5lciA8PSBtYXhUb3BJdGVtICYmIG1heFRvcEl0ZW0gPD0gbGltaXRUb3AgJiYgbGVmdENvbnRhaW5lciA8PSBtYXhMZWZ0SXRlbSAmJiBtYXhMZWZ0SXRlbSA8PSBsaW1pdExlZnQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja01vdXNlT3ZlckluQ29udGFpbmVyID0gKG1vdXNlUG9zaXRpb246IHsgY2xpZW50WDogbnVtYmVyOyBjbGllbnRZOiBudW1iZXIgfSwgZWxlbWVudD86IEhUTUxFbGVtZW50LCByZWN0PzogRE9NUmVjdCk6IGJvb2xlYW4gPT4ge1xuICBpZiAoIWVsZW1lbnQgJiYgIXJlY3QpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgcmVjdEVsZW1lbnQgPSByZWN0IHx8IGVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8IHt9IGFzIERPTVJlY3Q7XG4gIGNvbnN0IHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH0gPSByZWN0RWxlbWVudDtcbiAgY29uc3QgbGltaXRMZWZ0ID0gbGVmdCArIHdpZHRoO1xuICBjb25zdCBsaW1pdFRvcCA9IHRvcCArIGhlaWdodDtcbiAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBtb3VzZVBvc2l0aW9uO1xuXG4gIGlmIChsZWZ0IDw9IGNsaWVudFggJiYgY2xpZW50WCA8PSBsaW1pdExlZnQgJiYgdG9wIDw9IGNsaWVudFkgJiYgY2xpZW50WSA8PSBsaW1pdFRvcCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTsiXX0=
|
|
96
|
+
export const getDragEventByElement = (config) => {
|
|
97
|
+
let timer;
|
|
98
|
+
const addClass = () => {
|
|
99
|
+
timer = setTimeout(() => {
|
|
100
|
+
document.body.classList.add('!select-none');
|
|
101
|
+
document.body.classList.add('!cursor-grabbing');
|
|
102
|
+
}, 250);
|
|
103
|
+
};
|
|
104
|
+
const removeClass = () => {
|
|
105
|
+
document.body.classList.remove('!select-none');
|
|
106
|
+
document.body.classList.remove('!cursor-grabbing');
|
|
107
|
+
clearTimeout(timer);
|
|
108
|
+
};
|
|
109
|
+
fromEvent(config.elementMouseDown, 'mouseleave')
|
|
110
|
+
.pipe(tap(() => document.body.classList.remove('cursor-pointer')), takeUntil(config.onDestroy))
|
|
111
|
+
.subscribe();
|
|
112
|
+
fromEvent(config.elementMouseDown, 'mouseenter')
|
|
113
|
+
.pipe(tap(() => document.body.classList.add('cursor-pointer')), takeUntil(config.onDestroy))
|
|
114
|
+
.subscribe();
|
|
115
|
+
const mouseDown = fromEvent(config.elementMouseDown, 'mousedown').pipe(tap((e) => {
|
|
116
|
+
e.stopPropagation();
|
|
117
|
+
addClass();
|
|
118
|
+
config.functionMouseDown?.(e);
|
|
119
|
+
}));
|
|
120
|
+
const mouseup = fromEvent(config.elementMouseUp || document, 'mouseup').pipe(tap((e) => {
|
|
121
|
+
e.stopPropagation();
|
|
122
|
+
removeClass();
|
|
123
|
+
config.functionMouseUp?.(e);
|
|
124
|
+
}));
|
|
125
|
+
const mousemove = fromEvent(config.elementMouseMove || document, 'mousemove').pipe(tap((e) => {
|
|
126
|
+
e.stopPropagation();
|
|
127
|
+
config.functionMouseMove?.(e);
|
|
128
|
+
}), takeUntil(mouseup));
|
|
129
|
+
return mouseDown.pipe(mergeMap((e) => config.isStartWithMouseDownEvent
|
|
130
|
+
? mousemove.pipe(startWith(e))
|
|
131
|
+
: mousemove), takeUntil(config.onDestroy), finalize(removeClass));
|
|
132
|
+
};
|
|
133
|
+
export const getHTMLFromQuill = async (data, options) => {
|
|
134
|
+
const { replaceNewLineTo = '<br>', replaceTagBRTo, replaceTags, replaceBrToDiv } = options || {};
|
|
135
|
+
const delta = (typeof data === 'string') ? await getDeltaFromHTML(data) : data;
|
|
136
|
+
if (options?.functionReplaceDelta) {
|
|
137
|
+
options.functionReplaceDelta(delta);
|
|
138
|
+
}
|
|
139
|
+
delta.ops.forEach((op) => {
|
|
140
|
+
if (op.insert) {
|
|
141
|
+
if (typeof op.insert === 'string') {
|
|
142
|
+
if (replaceNewLineTo) {
|
|
143
|
+
op.insert = op.insert.replace(/\n/g, replaceNewLineTo);
|
|
144
|
+
}
|
|
145
|
+
if (replaceTagBRTo) {
|
|
146
|
+
op.insert = op.insert.replace(/<br>/g, replaceTagBRTo);
|
|
147
|
+
}
|
|
148
|
+
if (replaceTags?.length) {
|
|
149
|
+
for (const tag of replaceTags) {
|
|
150
|
+
op.insert = op.insert.replace(new RegExp(`<${tag.tag}>`, 'g'), `<${tag.replaceTo}>`);
|
|
151
|
+
op.insert = op.insert.replace(new RegExp(`</${tag.tag}>`, 'g'), `</${tag.replaceTo}>`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
quill.setContents(delta);
|
|
158
|
+
let htmlText = options?.getRootHtml ? quill.root.innerHTML : quill.root.firstElementChild?.innerHTML;
|
|
159
|
+
if (replaceBrToDiv) {
|
|
160
|
+
htmlText = convertHtmlToDivBlocks(htmlText || '');
|
|
161
|
+
}
|
|
162
|
+
return decodeEscapeHtml(htmlText || '');
|
|
163
|
+
};
|
|
164
|
+
export const convertHtmlToDivBlocks = (html) => {
|
|
165
|
+
const BREAK_TOKEN = '<<<BREAK>>>';
|
|
166
|
+
// Bước 1: thay <br> thành token tạm
|
|
167
|
+
const normalizedHtml = html.replace(/<br\s*\/?>/gi, BREAK_TOKEN);
|
|
168
|
+
// Bước 2: tách theo token
|
|
169
|
+
const parts = normalizedHtml.split(BREAK_TOKEN);
|
|
170
|
+
const parser = new DOMParser();
|
|
171
|
+
const divs = [];
|
|
172
|
+
for (const raw of parts) {
|
|
173
|
+
const trimmed = raw.trim();
|
|
174
|
+
if (!trimmed)
|
|
175
|
+
continue;
|
|
176
|
+
// parse mỗi phần nhỏ như một document riêng
|
|
177
|
+
const doc = parser.parseFromString(trimmed, 'text/html');
|
|
178
|
+
const body = doc.body;
|
|
179
|
+
// Lấy lại nội dung bên trong body
|
|
180
|
+
divs.push(`<div>${body.innerHTML}</div>`);
|
|
181
|
+
}
|
|
182
|
+
return divs.join('');
|
|
183
|
+
};
|
|
184
|
+
export const getDeltaFromHTML = async (html) => {
|
|
185
|
+
quill.root.innerHTML = html;
|
|
186
|
+
setTimeout(() => {
|
|
187
|
+
console.log(quill.getContents());
|
|
188
|
+
}, 1000);
|
|
189
|
+
await lastValueFrom(timer(1000));
|
|
190
|
+
return quill.getContents();
|
|
191
|
+
};
|
|
192
|
+
export const processPasteData = async (e, config) => {
|
|
193
|
+
const element = config.element;
|
|
194
|
+
const files = e.clipboardData?.files;
|
|
195
|
+
if (files?.length) {
|
|
196
|
+
e.preventDefault();
|
|
197
|
+
config.handlerPasteFile?.(files);
|
|
198
|
+
config.callBack?.('file');
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Lưu selection TRƯỚC khi prevent default
|
|
202
|
+
const selection = window.getSelection();
|
|
203
|
+
let savedRange = null;
|
|
204
|
+
if (selection && selection.rangeCount > 0) {
|
|
205
|
+
const range = selection.getRangeAt(0);
|
|
206
|
+
// Chỉ lưu nếu range nằm trong contentText element
|
|
207
|
+
const container = range.commonAncestorContainer;
|
|
208
|
+
const isInContentElement = element.contains(container.nodeType === Node.TEXT_NODE ? container.parentNode : container);
|
|
209
|
+
if (isInContentElement) {
|
|
210
|
+
savedRange = range.cloneRange();
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Prevent default để tự xử lý paste
|
|
214
|
+
e.preventDefault();
|
|
215
|
+
// Sử dụng Quill để clean HTML content
|
|
216
|
+
const htmlContent = e.clipboardData?.getData('text/html') || '';
|
|
217
|
+
const plainText = e.clipboardData?.getData('text/plain') || '';
|
|
218
|
+
let contentToInsert = (plainText || '').replace(/\n/g, '<br>');
|
|
219
|
+
if (htmlContent) {
|
|
220
|
+
contentToInsert = await getHTMLFromQuill(htmlContent);
|
|
221
|
+
}
|
|
222
|
+
if (!contentToInsert) {
|
|
223
|
+
config.callBack?.('no-content');
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (savedRange) {
|
|
227
|
+
insertContentWithRange(contentToInsert, savedRange, element);
|
|
228
|
+
config.callBack?.('range');
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
element.innerHTML += contentToInsert;
|
|
232
|
+
config.callBack?.('content');
|
|
233
|
+
};
|
|
234
|
+
export const insertContentWithRange = (content, savedRange, element) => {
|
|
235
|
+
const selection = window.getSelection();
|
|
236
|
+
if (!selection) {
|
|
237
|
+
// Fallback: append vào cuối
|
|
238
|
+
element.innerHTML += content;
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
// Restore selection
|
|
242
|
+
selection.removeAllRanges();
|
|
243
|
+
selection.addRange(savedRange);
|
|
244
|
+
// Xóa nội dung đã select (nếu có)
|
|
245
|
+
savedRange.deleteContents();
|
|
246
|
+
// Tạo document fragment từ HTML content
|
|
247
|
+
const tempDiv = document.createElement('div');
|
|
248
|
+
tempDiv.innerHTML = content;
|
|
249
|
+
const fragment = document.createDocumentFragment();
|
|
250
|
+
while (tempDiv.firstChild) {
|
|
251
|
+
fragment.appendChild(tempDiv.firstChild);
|
|
252
|
+
}
|
|
253
|
+
// Insert fragment tại vị trí range
|
|
254
|
+
savedRange.insertNode(fragment);
|
|
255
|
+
// Di chuyển cursor đến cuối nội dung vừa insert
|
|
256
|
+
if (fragment.lastChild) {
|
|
257
|
+
savedRange.setStartAfter(fragment.lastChild);
|
|
258
|
+
}
|
|
259
|
+
savedRange.collapse(true);
|
|
260
|
+
selection.removeAllRanges();
|
|
261
|
+
selection.addRange(savedRange);
|
|
262
|
+
};
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy11aS91dGlscy9zcmMvZG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBVyxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO0lBQ2hDLE9BQU8sY0FBYyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUM3QixPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUMzQyxNQUFNLFVBQVUsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUNuQyxJQUFJLG9CQUFvQixHQUFHLFVB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Q0FBQyxDQUFDO0lBQ2hDLGdEQUFnRDtJQUNoRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QixVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDNUIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBSZW5kZXJlcjIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUJvdW5kaW5nQ2xpZW50UmVjdCB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgRGV2aWNlRGV0ZWN0b3IgZnJvbSAnZGV2aWNlLWRldGVjdG9yLWpzJztcbmltcG9ydCBRdWlsbCBmcm9tIFwicXVpbGxcIjtcbmltcG9ydCBEZWx0YSBmcm9tIFwicXVpbGwtZGVsdGFcIjtcbmltcG9ydCB7IGZpbmFsaXplLCBmcm9tRXZlbnQsIGxhc3RWYWx1ZUZyb20sIG1lcmdlTWFwLCBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwLCB0aW1lciB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWNvZGVFc2NhcGVIdG1sIH0gZnJvbSBcIi4vZm9ybWF0LXRleHRcIjtcblxuY29uc3QgZGV2aWNlRGV0ZWN0b3IgPSBuZXcgRGV2aWNlRGV0ZWN0b3IoKTtcbmNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbmNvbnN0IHF1aWxsID0gbmV3IFF1aWxsKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcblxuZXhwb3J0IGNvbnN0IGdldERldmljZUluZm8gPSAoKSA9PiB7XG4gIHJldHVybiBkZXZpY2VEZXRlY3Rvci5wYXJzZSh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCk7XG59O1xuZXhwb3J0IGNvbnN0IGdldFBsYXRGcm9tQnJvd3NlciA9ICgpID0+IHtcbiAgY29uc3QgaW5mbyA9IGdldERldmljZUluZm8oKTtcbiAgcmV0dXJuIGAke2luZm8uY2xpZW50Py5uYW1lfSAke2luZm8uY2xpZW50Py52ZXJzaW9ufWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZlbnROYW1lSGFuZGxlQ2xpY2sgPSAoKCkgPT4ge1xuICBjb25zdCBkZXZpY2VJbmZvID0gZ2V0RGV2aWNlSW5mbygpO1xuICBsZXQgbmFtZUV2ZW50SGFuZGxlQ2xpY2sgPSBkZXZpY2VJbmZvLmRldmljZT8udHlwZSA9PT0gJ2Rlc2t0b3AnID8gJ2NsaWNrJyA6ICd0b3VjaHN0YXJ0JztcbiAgaWYgKCdvbnBvaW50ZXJkb3duJyBpbiB3aW5kb3cpIHtcbiAgICBuYW1lRXZlbnRIYW5kbGVDbGljayA9ICdwb2ludGVyZG93bic7XG4gIH1cblxuICByZXR1cm4gbmFtZUV2ZW50SGFuZGxlQ2xpY2s7XG59KSgpO1xuXG5leHBvcnQgY29uc3QgZ2V0RG9jdW1lbnRCeVN0cmluZyA9IChodG1sU3RyOiBzdHJpbmcpOiBEb2N1bWVudCA9PiB7XG4gIHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGh0bWxTdHIsICd0ZXh0L2h0bWwnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbG9uZUlCb3VuZGluZ0NsaWVudFJlY3QgPSAoXG4gIHJlY3Q6IElCb3VuZGluZ0NsaWVudFJlY3Rcbik6IElCb3VuZGluZ0NsaWVudFJlY3QgPT4ge1xuICByZXR1cm4ge1xuICAgIHRvcDogcmVjdFsndG9wJ10sXG4gICAgbGVmdDogcmVjdFsnbGVmdCddLFxuICAgIHdpZHRoOiByZWN0Wyd3aWR0aCddLFxuICAgIGhlaWdodDogcmVjdFsnaGVpZ2h0J10sXG4gICAgYm90dG9tOiByZWN0Wydib3R0b20nXSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTdHlsZXNFbGVtZW50ID0gKFxuICBlbDogSFRNTEVsZW1lbnQsXG4gIHN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgcmVuZGVyMjogUmVuZGVyZXIyXG4pOiB2b2lkID0+IHtcbiAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT5cbiAgICByZW5kZXIyLnNldFN0eWxlKGVsLCBrZXksIHN0eWxlc1trZXldKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0ID0gKFxuICB3aW46IFdpbmRvdyA9IHdpbmRvd1xuKTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9ID0+IHtcbiAgY29uc3QgZG9jID0gd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgICBib2R5ID0gd2luLmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0sXG4gICAgdyA9IHdpbi5pbm5lcldpZHRoIHx8IGRvYy5jbGllbnRXaWR0aCB8fCBib2R5LmNsaWVudFdpZHRoLFxuICAgIGggPSB3aW4uaW5uZXJIZWlnaHQgfHwgZG9jLmNsaWVudEhlaWdodCB8fCBib2R5LmNsaWVudEhlaWdodDtcblxuICByZXR1cm4geyB3aWR0aDogdywgaGVpZ2h0OiBoIH07XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2FyZXRQb3NpdGlvbiA9IChcbiAgZWxlbWVudDogSFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQsXG4gIHBvc2l0aW9uOiBudW1iZXJcbik6IHZvaWQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5mb2N1cygpO1xuICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tWaWV3SW5TY3JlZW4gPSAoXG4gIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50LFxuICBlbGVtZW50U2Nyb2xsPzogSFRNTEVsZW1lbnQsXG4gIG1heFRvcExlZnQ/OiB7IHRvcD86IG51bWJlcjsgbGVmdD86IG51bWJlciB9XG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFjb250YWluZXIgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByZWN0Q29udGFpbmVyID0gY2xvbmVJQm91bmRpbmdDbGllbnRSZWN0KFxuICAgIGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICApO1xuXG4gIGlmIChlbGVtZW50U2Nyb2xsKSB7XG4gICAgY29uc3QgcmVjdEVsZW1lbnRTY3JvbGwgPSBlbGVtZW50U2Nyb2xsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmVjdENvbnRhaW5lclsnbGVmdCddID0gcmVjdEVsZW1lbnRTY3JvbGwubGVmdDtcbiAgICByZWN0Q29udGFpbmVyWyd0b3AnXSA9IHJlY3RFbGVtZW50U2Nyb2xsLnRvcDtcbiAgfVxuXG4gIGNvbnN0IHJlY3RFbGVtZW50ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHJlY3RFbGVtZW50O1xuICBjb25zdCB0b3BDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd0b3AnXTtcbiAgY29uc3QgbGVmdENvbnRhaW5lciA9IHJlY3RDb250YWluZXJbJ2xlZnQnXTtcbiAgY29uc3Qgd2lkdGhDb250YWluZXIgPSByZWN0Q29udGFpbmVyWyd3aWR0aCddO1xuICBjb25zdCBoZWlnaHRDb250YWluZXIgPSByZWN0Q29udGFpbmVyWydoZWlnaHQnXTtcbiAgY29uc3Qgc2Nyb2xsVG9wQ29udGFpbmVyID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3Qgc2Nyb2xsTGVmdENvbnRhaW5lciA9IGNvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICBjb25zdCBsaW1pdFRvcCA9IHRvcENvbnRhaW5lciArIHNjcm9sbFRvcENvbnRhaW5lciArIGhlaWdodENvbnRhaW5lcjtcbiAgY29uc3QgbGltaXRMZWZ0ID0gbGVmdENvbnRhaW5lciArIHNjcm9sbExlZnRDb250YWluZXIgKyB3aWR0aENvbnRhaW5lcjtcblxuICBjb25zdCBtYXhUb3BJdGVtID0gdG9wICsgKG1heFRvcExlZnQ/LnRvcCB8fCAwKTtcbiAgY29uc3QgbWF4TGVmdEl0ZW0gPSBsZWZ0ICsgKG1heFRvcExlZnQ/LmxlZnQgfHwgMCk7XG5cbiAgaWYgKFxuICAgIHRvcENvbnRhaW5lciA8PSBtYXhUb3BJdGVtICYmXG4gICAgbWF4VG9wSXRlbSA8PSBsaW1pdFRvcCAmJlxuICAgIGxlZnRDb250YWluZXIgPD0gbWF4TGVmdEl0ZW0gJiZcbiAgICBtYXhMZWZ0SXRlbSA8PSBsaW1pdExlZnRcbiAgKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tNb3VzZU92ZXJJbkNvbnRhaW5lciA9IChcbiAgbW91c2VQb3NpdGlvbjogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9LFxuICBlbGVtZW50PzogSFRNTEVsZW1lbnQsXG4gIHJlY3Q/OiBET01SZWN0XG4pOiBib29sZWFuID0+IHtcbiAgaWYgKCFlbGVtZW50ICYmICFyZWN0KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlY3RFbGVtZW50ID1cbiAgICByZWN0IHx8IGVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHx8ICh7fSBhcyBET01SZWN0KTtcbiAgY29uc3QgeyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfSA9IHJlY3RFbGVtZW50O1xuICBjb25zdCBsaW1pdExlZnQgPSBsZWZ0ICsgd2lkdGg7XG4gIGNvbnN0IGxpbWl0VG9wID0gdG9wICsgaGVpZ2h0O1xuICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IG1vdXNlUG9zaXRpb247XG4gIGlmIChcbiAgICBsZWZ0IDw9IGNsaWVudFggJiZcbiAgICBjbGllbnRYIDw9IGxpbWl0TGVmdCAmJlxuICAgIHRvcCA8PSBjbGllbnRZICYmXG4gICAgY2xpZW50WSA8PSBsaW1pdFRvcFxuICApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREcmFnRXZlbnRCeUVsZW1lbnQgPSAoY29uZmlnOiB7XG4gIGVsZW1lbnRNb3VzZURvd246IEhUTUxFbGVtZW50O1xuICBmdW5jdGlvbk1vdXNlRG93bj86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgaXNTdGFydFdpdGhNb3VzZURvd25FdmVudD86IGJvb2xlYW47XG4gIGVsZW1lbnRNb3VzZU1vdmU/OiBIVE1MRWxlbWVudDtcbiAgZnVuY3Rpb25Nb3VzZU1vdmU/OiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGVsZW1lbnRNb3VzZVVwPzogSFRNTEVsZW1lbnQ7XG4gIGZ1bmN0aW9uTW91c2VVcD86IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgb25EZXN0cm95OiBTdWJqZWN0PGFueT47XG59KSA9PiB7XG4gIGxldCB0aW1lcjogbnVtYmVyO1xuICBjb25zdCBhZGRDbGFzcyA9ICgpID0+IHtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCchc2VsZWN0LW5vbmUnKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnIWN1cnNvci1ncmFiYmluZycpO1xuICAgIH0sIDI1MCk7XG4gIH07XG4gIGNvbnN0IHJlbW92ZUNsYXNzID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnIXNlbGVjdC1ub25lJyk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCchY3Vyc29yLWdyYWJiaW5nJyk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfTtcbiAgZnJvbUV2ZW50KGNvbmZpZy5lbGVtZW50TW91c2VEb3duLCAnbW91c2VsZWF2ZScpXG4gICAgLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCdjdXJzb3ItcG9pbnRlcicpKSxcbiAgICAgIHRha2VVbnRpbChjb25maWcub25EZXN0cm95KVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCk7XG4gIGZyb21FdmVudChjb25maWcuZWxlbWVudE1vdXNlRG93biwgJ21vdXNlZW50ZXInKVxuICAgIC5waXBlKFxuICAgICAgdGFwKCgpID0+IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnY3Vyc29yLXBvaW50ZXInKSksXG4gICAgICB0YWtlVW50aWwoY29uZmlnLm9uRGVzdHJveSlcbiAgICApXG4gICAgLnN1YnNjcmliZSgpO1xuXG4gIGNvbnN0IG1vdXNlRG93biA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihcbiAgICBjb25maWcuZWxlbWVudE1vdXNlRG93bixcbiAgICAnbW91c2Vkb3duJ1xuICApLnBpcGUoXG4gICAgdGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgYWRkQ2xhc3MoKTtcbiAgICAgIGNvbmZpZy5mdW5jdGlvbk1vdXNlRG93bj8uKGUpO1xuICAgIH0pXG4gICk7XG4gIGNvbnN0IG1vdXNldXAgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oXG4gICAgY29uZmlnLmVsZW1lbnRNb3VzZVVwIHx8IGRvY3VtZW50LFxuICAgICdtb3VzZXVwJ1xuICApLnBpcGUoXG4gICAgdGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmVtb3ZlQ2xhc3MoKTtcbiAgICAgIGNvbmZpZy5mdW5jdGlvbk1vdXNlVXA/LihlKTtcbiAgICB9KVxuICApO1xuXG4gIGNvbnN0IG1vdXNlbW92ZSA9IGZyb21FdmVudDxNb3VzZUV2ZW50PihcbiAgICBjb25maWcuZWxlbWVudE1vdXNlTW92ZSB8fCBkb2N1bWVudCxcbiAgICAnbW91c2Vtb3ZlJ1xuICApLnBpcGUoXG4gICAgdGFwKChlKSA9PiB7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uZmlnLmZ1bmN0aW9uTW91c2VNb3ZlPy4oZSk7XG4gICAgfSksXG4gICAgdGFrZVVudGlsKG1vdXNldXApXG4gICk7XG5cbiAgcmV0dXJuIG1vdXNlRG93bi5waXBlKFxuICAgIG1lcmdlTWFwKChlOiBNb3VzZUV2ZW50KSA9PlxuICAgICAgY29uZmlnLmlzU3RhcnRXaXRoTW91c2VEb3duRXZlbnRcbiAgICAgICAgPyBtb3VzZW1vdmUucGlwZShzdGFydFdpdGgoZSkpXG4gICAgICAgIDogbW91c2Vtb3ZlXG4gICAgKSxcbiAgICB0YWtlVW50aWwoY29uZmlnLm9uRGVzdHJveSksXG4gICAgZmluYWxpemUocmVtb3ZlQ2xhc3MpXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SFRNTEZyb21RdWlsbCA9IGFzeW5jIChkYXRhOiBEZWx0YSB8IHN0cmluZywgb3B0aW9ucz86IHtcbiAgZ2V0Um9vdEh0bWw/OmJvb2xlYW47XG4gIHJlcGxhY2VOZXdMaW5lVG8/OiBzdHJpbmc7XG4gIHJlcGxhY2VUYWdCUlRvPzogc3RyaW5nO1xuICByZXBsYWNlQnJUb0Rpdj86IGJvb2xlYW47XG4gIGZ1bmN0aW9uUmVwbGFjZURlbHRhPzogKG9wOkRlbHRhKT0+dm9pZDtcbiAgcmVwbGFjZVRhZ3M/OntcbiAgICB0YWc6c3RyaW5nO1xuICAgIHJlcGxhY2VUbzpzdHJpbmc7XG4gIH1bXTtcbn0pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB7IHJlcGxhY2VOZXdMaW5lVG8gPSAnPGJyPicsIHJlcGxhY2VUYWdCUlRvLHJlcGxhY2VUYWdzLHJlcGxhY2VCclRvRGl2fSA9IG9wdGlvbnMgfHwge307XG4gIGNvbnN0IGRlbHRhID0gKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgPyBhd2FpdCBnZXREZWx0YUZyb21IVE1MKGRhdGEpIDogZGF0YTtcbiAgaWYob3B0aW9ucz8uZnVuY3Rpb25SZXBsYWNlRGVsdGEpe1xuICAgIG9wdGlvbnMuZnVuY3Rpb25SZXBsYWNlRGVsdGEoZGVsdGEpO1xuICB9XG5cbiAgZGVsdGEub3BzLmZvckVhY2goKG9wKSA9PiB7XG4gICAgaWYgKG9wLmluc2VydCkge1xuICAgICAgaWYgKHR5cGVvZiBvcC5pbnNlcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChyZXBsYWNlTmV3TGluZVRvKSB7XG4gICAgICAgICAgb3AuaW5zZXJ0ID0gb3AuaW5zZXJ0LnJlcGxhY2UoL1xcbi9nLCByZXBsYWNlTmV3TGluZVRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVwbGFjZVRhZ0JSVG8pIHtcbiAgICAgICAgICBvcC5pbnNlcnQgPSBvcC5pbnNlcnQucmVwbGFjZSgvPGJyPi9nLCByZXBsYWNlVGFnQlJUbyk7XG4gICAgICAgIH1cbiAgICAgICBcbiAgICAgICAgaWYgKHJlcGxhY2VUYWdzPy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiByZXBsYWNlVGFncykge1xuICAgICAgICAgICAgb3AuaW5zZXJ0ID0gb3AuaW5zZXJ0LnJlcGxhY2UobmV3IFJlZ0V4cChgPCR7dGFnLnRhZ30+YCwgJ2cnKSwgYDwke3RhZy5yZXBsYWNlVG99PmApIGFzIHN0cmluZztcbiAgICAgICAgICAgIG9wLmluc2VydCA9IG9wLmluc2VydC5yZXBsYWNlKG5ldyBSZWdFeHAoYDwvJHt0YWcudGFnfT5gLCAnZycpLCBgPC8ke3RhZy5yZXBsYWNlVG99PmApIGFzIHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBxdWlsbC5zZXRDb250ZW50cyhkZWx0YSk7XG4gIGxldCBodG1sVGV4dCA9IG9wdGlvbnM/LmdldFJvb3RIdG1sID8gcXVpbGwucm9vdC5pbm5lckhUTUwgOiBxdWlsbC5yb290LmZpcnN0RWxlbWVudENoaWxkPy5pbm5lckhUTUw7XG4gIGlmKHJlcGxhY2VCclRvRGl2KXtcbiAgICBodG1sVGV4dCA9IGNvbnZlcnRIdG1sVG9EaXZCbG9ja3MoaHRtbFRleHQgfHwgJycpO1xuICB9XG4gIHJldHVybiBkZWNvZGVFc2NhcGVIdG1sKGh0bWxUZXh0IHx8ICcnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0SHRtbFRvRGl2QmxvY2tzID0gKGh0bWw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IEJSRUFLX1RPS0VOID0gJzw8PEJSRUFLPj4+JztcbiAgLy8gQsaw4bubYyAxOiB0aGF5IDxicj4gdGjDoG5oIHRva2VuIHThuqFtXG4gIGNvbnN0IG5vcm1hbGl6ZWRIdG1sID0gaHRtbC5yZXBsYWNlKC88YnJcXHMqXFwvPz4vZ2ksIEJSRUFLX1RPS0VOKTtcblxuICAvLyBCxrDhu5tjIDI6IHTDoWNoIHRoZW8gdG9rZW5cbiAgY29uc3QgcGFydHMgPSBub3JtYWxpemVkSHRtbC5zcGxpdChCUkVBS19UT0tFTik7XG5cbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICBjb25zdCBkaXZzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmF3IG9mIHBhcnRzKSB7XG4gICAgY29uc3QgdHJpbW1lZCA9IHJhdy50cmltKCk7XG4gICAgaWYgKCF0cmltbWVkKSBjb250aW51ZTtcblxuICAgIC8vIHBhcnNlIG3hu5dpIHBo4bqnbiBuaOG7jyBuaMawIG3hu5l0IGRvY3VtZW50IHJpw6puZ1xuICAgIGNvbnN0IGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodHJpbW1lZCwgJ3RleHQvaHRtbCcpO1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcblxuICAgIC8vIEzhuqV5IGzhuqFpIG7hu5lpIGR1bmcgYsOqbiB0cm9uZyBib2R5XG4gICAgZGl2cy5wdXNoKGA8ZGl2PiR7Ym9keS5pbm5lckhUTUx9PC9kaXY+YCk7XG4gIH1cblxuICByZXR1cm4gZGl2cy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldERlbHRhRnJvbUhUTUwgPSBhc3luYyAoaHRtbDogc3RyaW5nKTpQcm9taXNlPERlbHRhPiA9PiB7XG4gIHF1aWxsLnJvb3QuaW5uZXJIVE1MID0gaHRtbDtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgY29uc29sZS5sb2cocXVpbGwuZ2V0Q29udGVudHMoKSk7XG4gIH0sIDEwMDApO1xuXG4gIGF3YWl0IGxhc3RWYWx1ZUZyb20odGltZXIoMTAwMCkpO1xuICByZXR1cm4gcXVpbGwuZ2V0Q29udGVudHMoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9jZXNzUGFzdGVEYXRhID0gYXN5bmMgKGU6IENsaXBib2FyZEV2ZW50LGNvbmZpZzp7XG4gIGVsZW1lbnQ6SFRNTEVsZW1lbnQ7XG4gIGhhbmRsZXJQYXN0ZUZpbGU/OihmaWxlczpGaWxlTGlzdCk9PnZvaWQ7XG4gIGNhbGxCYWNrPzoocG9zaXRvblJldHVybjonZmlsZScgfCAncmFuZ2UnIHwgJ2NvbnRlbnQnIHwgJ25vLWNvbnRlbnQnKT0+dm9pZDtcbn0pID0+e1xuICBjb25zdCBlbGVtZW50ID0gY29uZmlnLmVsZW1lbnQ7XG4gIGNvbnN0IGZpbGVzID0gZS5jbGlwYm9hcmREYXRhPy5maWxlcztcbiAgaWYgKGZpbGVzPy5sZW5ndGgpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uZmlnLmhhbmRsZXJQYXN0ZUZpbGU/LihmaWxlcyk7XG4gICAgY29uZmlnLmNhbGxCYWNrPy4oJ2ZpbGUnKTtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gTMawdSBzZWxlY3Rpb24gVFLGr+G7mkMga2hpIHByZXZlbnQgZGVmYXVsdFxuICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gIGxldCBzYXZlZFJhbmdlOiBSYW5nZSB8IG51bGwgPSBudWxsO1xuICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgLy8gQ2jhu4kgbMawdSBu4bq/dSByYW5nZSBu4bqxbSB0cm9uZyBjb250ZW50VGV4dCBlbGVtZW50XG4gICAgY29uc3QgY29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgY29uc3QgaXNJbkNvbnRlbnRFbGVtZW50ID0gZWxlbWVudC5jb250YWlucyhcbiAgICAgIGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lclxuICAgICk7XG4gICAgaWYgKGlzSW5Db250ZW50RWxlbWVudCkge1xuICAgICAgc2F2ZWRSYW5nZSA9IHJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgICB9XG4gIH1cbiAgLy8gUHJldmVudCBkZWZhdWx0IMSR4buDIHThu7EgeOG7rSBsw70gcGFzdGVcbiAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAvLyBT4butIGThu6VuZyBRdWlsbCDEkeG7gyBjbGVhbiBIVE1MIGNvbnRlbnRcbiAgY29uc3QgaHRtbENvbnRlbnQgPSBlLmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvaHRtbCcpIHx8ICcnO1xuICBjb25zdCBwbGFpblRleHQgPSBlLmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQvcGxhaW4nKSB8fCAnJztcbiAgbGV0IGNvbnRlbnRUb0luc2VydCA9IChwbGFpblRleHR8fCAnJykucmVwbGFjZSgvXFxuL2csICc8YnI+Jyk7XG4gIGlmIChodG1sQ29udGVudCkge1xuICAgIGNvbnRlbnRUb0luc2VydCA9IGF3YWl0IGdldEhUTUxGcm9tUXVpbGwoaHRtbENvbnRlbnQpO1xuICB9XG5cbiAgaWYoIWNvbnRlbnRUb0luc2VydCl7XG4gICAgY29uZmlnLmNhbGxCYWNrPy4oJ25vLWNvbnRlbnQnKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2F2ZWRSYW5nZSkge1xuICAgIGluc2VydENvbnRlbnRXaXRoUmFuZ2UoY29udGVudFRvSW5zZXJ0LCBzYXZlZFJhbmdlLGVsZW1lbnQpO1xuICAgIGNvbmZpZy5jYWxsQmFjaz8uKCdyYW5nZScpO1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50LmlubmVySFRNTCArPSBjb250ZW50VG9JbnNlcnQ7XG4gIGNvbmZpZy5jYWxsQmFjaz8uKCdjb250ZW50Jyk7XG59XG5cblxuZXhwb3J0IGNvbnN0IGluc2VydENvbnRlbnRXaXRoUmFuZ2UgPSAoY29udGVudDogc3RyaW5nLCBzYXZlZFJhbmdlOiBSYW5nZSxlbGVtZW50OkhUTUxFbGVtZW50KTogdm9pZCA9PiB7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAvLyBGYWxsYmFjazogYXBwZW5kIHbDoG8gY3Xhu5FpXG4gICAgZWxlbWVudC5pbm5lckhUTUwgKz0gY29udGVudDtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gUmVzdG9yZSBzZWxlY3Rpb25cbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2F2ZWRSYW5nZSk7XG4gIC8vIFjDs2EgbuG7mWkgZHVuZyDEkcOjIHNlbGVjdCAobuG6v3UgY8OzKVxuICBzYXZlZFJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XG4gIC8vIFThuqFvIGRvY3VtZW50IGZyYWdtZW50IHThu6sgSFRNTCBjb250ZW50XG4gIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgdGVtcERpdi5pbm5lckhUTUwgPSBjb250ZW50O1xuICBjb25zdCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xuICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHRlbXBEaXYuZmlyc3RDaGlsZCk7XG4gIH1cbiAgLy8gSW5zZXJ0IGZyYWdtZW50IHThuqFpIHbhu4sgdHLDrSByYW5nZVxuICBzYXZlZFJhbmdlLmluc2VydE5vZGUoZnJhZ21lbnQpO1xuICAvLyBEaSBjaHV54buDbiBjdXJzb3IgxJHhur9uIGN14buRaSBu4buZaSBkdW5nIHbhu6thIGluc2VydFxuICBpZiAoZnJhZ21lbnQubGFzdENoaWxkKSB7XG4gICAgc2F2ZWRSYW5nZS5zZXRTdGFydEFmdGVyKGZyYWdtZW50Lmxhc3RDaGlsZCk7XG4gIH1cbiAgc2F2ZWRSYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICBzZWxlY3Rpb24uYWRkUmFuZ2Uoc2F2ZWRSYW5nZSk7XG59Il19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { convertBase64ToBlob } from "./base64";
|
|
2
|
+
export const downloadFileByUrlUseXmlRequest = (fileUrl, filename) => {
|
|
3
|
+
const xmlRequest = new XMLHttpRequest();
|
|
4
|
+
xmlRequest.open('GET', fileUrl, true);
|
|
5
|
+
xmlRequest.responseType = 'blob';
|
|
6
|
+
xmlRequest.onload = () => {
|
|
7
|
+
const url = window.URL.createObjectURL(xmlRequest.response);
|
|
8
|
+
downloadFileByUrl(url, filename);
|
|
9
|
+
};
|
|
10
|
+
xmlRequest.send();
|
|
11
|
+
};
|
|
12
|
+
export const downloadFileByUrl = async (fileUrl, filename, onlyOpen) => {
|
|
13
|
+
const downloadFileElement = document.createElement('a');
|
|
14
|
+
if (!onlyOpen) {
|
|
15
|
+
const response = await fetch(fileUrl);
|
|
16
|
+
if (response.ok) {
|
|
17
|
+
const blob = await response.blob();
|
|
18
|
+
fileUrl = URL.createObjectURL(blob);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
downloadFileElement.href = fileUrl;
|
|
22
|
+
downloadFileElement.download = filename;
|
|
23
|
+
downloadFileElement.target = '_blank';
|
|
24
|
+
downloadFileElement.click();
|
|
25
|
+
downloadFileElement.remove();
|
|
26
|
+
};
|
|
27
|
+
export const downloadImageFromELement = (imageElement, typeFileDownload, nameFile) => {
|
|
28
|
+
const parentElement = imageElement?.src;
|
|
29
|
+
const blobData = convertBase64ToBlob(parentElement);
|
|
30
|
+
const blob = new Blob([blobData], { type: typeFileDownload || "image/png" });
|
|
31
|
+
const url = window.URL.createObjectURL(blob);
|
|
32
|
+
const link = document.createElement('a');
|
|
33
|
+
link.href = url;
|
|
34
|
+
link.download = nameFile || 'barcode';
|
|
35
|
+
link.click();
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG93bmxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzLXVpL3V0aWxzL3NyYy9kb3dubG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxFQUFFO0lBQ2xGLE1BQU0sVUFBVSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7SUFFeEMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDO0lBQ2pDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1RCxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDO0lBQ0YsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLEtBQUssRUFBRSxPQUFlLEVBQUUsUUFBZ0IsRUFBRSxRQUFrQixFQUFFLEVBQUU7SUFDL0YsTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRDLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBRW5DLE9BQU8sR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBQ0QsbUJBQW1CLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUNuQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3hDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDdEMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxZQUE4QixFQUFFLGdCQUF5QixFQUFFLFFBQWlCLEVBQUUsRUFBRTtJQUN2SCxNQUFNLGFBQWEsR0FBRyxZQUFZLEVBQUUsR0FBRyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3RSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLFNBQVMsQ0FBQztJQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iIH0gZnJvbSBcIi4vYmFzZTY0XCI7XG5cbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGVCeVVybFVzZVhtbFJlcXVlc3QgPSAoZmlsZVVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHhtbFJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICB4bWxSZXF1ZXN0Lm9wZW4oJ0dFVCcsIGZpbGVVcmwsIHRydWUpO1xuICB4bWxSZXF1ZXN0LnJlc3BvbnNlVHlwZSA9ICdibG9iJztcbiAgeG1sUmVxdWVzdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoeG1sUmVxdWVzdC5yZXNwb25zZSk7XG5cbiAgICBkb3dubG9hZEZpbGVCeVVybCh1cmwsIGZpbGVuYW1lKTtcbiAgfTtcbiAgeG1sUmVxdWVzdC5zZW5kKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZG93bmxvYWRGaWxlQnlVcmwgPSBhc3luYyAoZmlsZVVybDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nLCBvbmx5T3Blbj86IGJvb2xlYW4pID0+IHtcbiAgY29uc3QgZG93bmxvYWRGaWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblxuICBpZiAoIW9ubHlPcGVuKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaWxlVXJsKTtcblxuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcblxuICAgICAgZmlsZVVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgfVxuICB9XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQuaHJlZiA9IGZpbGVVcmw7XG4gIGRvd25sb2FkRmlsZUVsZW1lbnQuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgZG93bmxvYWRGaWxlRWxlbWVudC50YXJnZXQgPSAnX2JsYW5rJztcbiAgZG93bmxvYWRGaWxlRWxlbWVudC5jbGljaygpO1xuICBkb3dubG9hZEZpbGVFbGVtZW50LnJlbW92ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkSW1hZ2VGcm9tRUxlbWVudCA9IChpbWFnZUVsZW1lbnQ6IEhUTUxJbWFnZUVsZW1lbnQsIHR5cGVGaWxlRG93bmxvYWQ/OiBzdHJpbmcsIG5hbWVGaWxlPzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBpbWFnZUVsZW1lbnQ/LnNyYztcbiAgY29uc3QgYmxvYkRhdGEgPSBjb252ZXJ0QmFzZTY0VG9CbG9iKHBhcmVudEVsZW1lbnQpO1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2Jsb2JEYXRhXSwgeyB0eXBlOiB0eXBlRmlsZURvd25sb2FkIHx8IFwiaW1hZ2UvcG5nXCIgfSk7XG4gIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXG4gIGxpbmsuaHJlZiA9IHVybDtcbiAgbGluay5kb3dubG9hZCA9IG5hbWVGaWxlIHx8ICdiYXJjb2RlJztcbiAgbGluay5jbGljaygpO1xufTsiXX0=
|
package/esm2022/file.mjs
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { convertBase64ToBlob } from "./base64";
|
|
2
|
+
import { get, set } from "./helpers";
|
|
3
|
+
import { uuid } from "./uuid";
|
|
4
|
+
export const isTypeImage = (file) => file.type.match(/image.*/) ? true : false;
|
|
5
|
+
export const isTypeVideo = (file) => file.type.match(/video.*/) ? true : false;
|
|
6
|
+
export const isTypeAudio = (file) => file.type.match(/audio.*/) ? true : false;
|
|
7
|
+
export const isTypeFile = (file) => file instanceof File || Object.prototype.toString.call(file) === '[object File]' ? true : false;
|
|
8
|
+
export const ExcelExtList = ['xls', 'xlsx', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];
|
|
9
|
+
export const DocumentExtList = ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'json', 'xml', 'application/msword',
|
|
10
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
11
|
+
'application/vnd.ms-excel',
|
|
12
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
13
|
+
'application/vnd.ms-powerpoint',
|
|
14
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
15
|
+
'application/pdf',
|
|
16
|
+
'application/json',
|
|
17
|
+
'application/xml'];
|
|
18
|
+
export const isIncludeDocumentExtList = (ext, listExt = DocumentExtList) => listExt.includes(ext) || listExt.includes(`application/${ext}`);
|
|
19
|
+
export const ImageExtList = ['gif', 'jpg', 'jpeg', 'png', 'image/gif', 'image/jpeg', 'image/jpeg', 'image/png'];
|
|
20
|
+
export const isIncludeImageExtList = (ext, listExt = ImageExtList) => listExt.includes(ext);
|
|
21
|
+
export const VideoExtList = ['mp4', 'mov', 'mpg', 'avi', 'wmv', 'video/mp4', 'video/quicktime', 'video/mpeg', 'video/x-msvideo', 'video/x-ms-wmv'];
|
|
22
|
+
export const isIncludeVideoExtList = (ext, listExt = VideoExtList) => listExt.includes(ext);
|
|
23
|
+
export const AudioExtList = ['mp3', 'wav', 'ogg', 'aac', 'm4a', 'flac', 'wma', 'audio/mpeg', 'audio/wav', 'audio/ogg', 'audio/aac', 'audio/mp4', 'audio/flac', 'audio/x-ms-wma'];
|
|
24
|
+
export const isIncludeAudioExtList = (ext, listExt = AudioExtList) => listExt.includes(ext);
|
|
25
|
+
export const getFileExtension = (file) => {
|
|
26
|
+
if (file instanceof File && file.type) {
|
|
27
|
+
return (file.type.split('/').pop() || '').toLowerCase();
|
|
28
|
+
}
|
|
29
|
+
file = file;
|
|
30
|
+
if (file.mimetype || file.file?.type) {
|
|
31
|
+
return file.mimetype || file.file?.type;
|
|
32
|
+
}
|
|
33
|
+
let fileName = file.name;
|
|
34
|
+
const url = get(file, 'url') || get(file, 'origin_url');
|
|
35
|
+
if (!fileName && !url) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (!fileName && url) {
|
|
39
|
+
fileName = url.split('/').pop() || '';
|
|
40
|
+
set(file, 'name', fileName);
|
|
41
|
+
}
|
|
42
|
+
const dots = fileName.split(".");
|
|
43
|
+
if (!dots) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
return (dots.pop() || '').toLowerCase();
|
|
47
|
+
};
|
|
48
|
+
export const getLabelBySizeFile = (size, toFixed = 2) => {
|
|
49
|
+
if (size < 1024 * 1024) {
|
|
50
|
+
return ` ${(size / 1024).toFixed(toFixed)} KB`;
|
|
51
|
+
}
|
|
52
|
+
return ` ${(size / (1024 * 1024)).toFixed(toFixed)} MB`;
|
|
53
|
+
};
|
|
54
|
+
export const convertBlobToFile = (blob, fileName) => {
|
|
55
|
+
const type = blob.type.split('/')[1];
|
|
56
|
+
const name = fileName ? `${fileName.split('.')[0]}.${type}` : `${uuid()}.${type}`;
|
|
57
|
+
return new File([blob], name, { type: blob.type, lastModified: Date.now() });
|
|
58
|
+
};
|
|
59
|
+
export const convertUrlToFile = (url, fileName) => {
|
|
60
|
+
return new Promise((resolve, reject) => {
|
|
61
|
+
const xhr = new XMLHttpRequest();
|
|
62
|
+
xhr.onload = function () {
|
|
63
|
+
const reader = new FileReader();
|
|
64
|
+
reader.onloadend = () => {
|
|
65
|
+
const file = convertBase64ToBlob(reader.result);
|
|
66
|
+
resolve(convertBlobToFile(file, fileName || Date.now().toLocaleString()));
|
|
67
|
+
};
|
|
68
|
+
reader.onerror = () => resolve(undefined);
|
|
69
|
+
reader.readAsDataURL(xhr.response);
|
|
70
|
+
};
|
|
71
|
+
xhr.onerror = (err) => {
|
|
72
|
+
reject(err);
|
|
73
|
+
};
|
|
74
|
+
xhr.open('GET', url);
|
|
75
|
+
xhr.responseType = 'blob';
|
|
76
|
+
xhr.send();
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMtdWkvdXRpbHMvc3JjL2ZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQzVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM1RixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDNUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksSUFBSSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBRTFJLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtB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Q2QsQ0FBQyxDQUFDO1FBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckIsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDMUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRmlsZSB9IGZyb20gXCJAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzXCI7XG5pbXBvcnQgeyBjb252ZXJ0QmFzZTY0VG9CbG9iIH0gZnJvbSBcIi4vYmFzZTY0XCI7XG5pbXBvcnQgeyBnZXQsIHNldCB9IGZyb20gXCIuL2hlbHBlcnNcIjtcbmltcG9ydCB7IHV1aWQgfSBmcm9tIFwiLi91dWlkXCI7XG5cbmV4cG9ydCBjb25zdCBpc1R5cGVJbWFnZSA9IChmaWxlOiBGaWxlIHwgQmxvYikgPT4gZmlsZS50eXBlLm1hdGNoKC9pbWFnZS4qLykgPyB0cnVlIDogZmFsc2U7XG5leHBvcnQgY29uc3QgaXNUeXBlVmlkZW8gPSAoZmlsZTogRmlsZSB8IEJsb2IpID0+IGZpbGUudHlwZS5tYXRjaCgvdmlkZW8uKi8pID8gdHJ1ZSA6IGZhbHNlO1xuZXhwb3J0IGNvbnN0IGlzVHlwZUF1ZGlvID0gKGZpbGU6IEZpbGUgfCBCbG9iKSA9PiBmaWxlLnR5cGUubWF0Y2goL2F1ZGlvLiovKSA/IHRydWUgOiBmYWxzZTtcbmV4cG9ydCBjb25zdCBpc1R5cGVGaWxlID0gKGZpbGU6IEZpbGUpID0+IGZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmaWxlKSA9PT0gJ1tvYmplY3QgRmlsZV0nID8gdHJ1ZSA6IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgRXhjZWxFeHRMaXN0ID0gWyd4bHMnLCAneGxzeCcsICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXTtcbmV4cG9ydCBjb25zdCBEb2N1bWVudEV4dExpc3QgPSBbJ2RvYycsICdkb2N4JywgJ3hscycsICd4bHN4JywgJ3BwdCcsICdwcHR4JywgJ3BkZicsICdqc29uJywgJ3htbCcsICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAnYXBwbGljYXRpb24vcGRmJyxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAnYXBwbGljYXRpb24veG1sJ107XG5leHBvcnQgY29uc3QgaXNJbmNsdWRlRG9jdW1lbnRFeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gRG9jdW1lbnRFeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCkgfHwgbGlzdEV4dC5pbmNsdWRlcyhgYXBwbGljYXRpb24vJHtleHR9YCk7XG5cbmV4cG9ydCBjb25zdCBJbWFnZUV4dExpc3QgPSBbJ2dpZicsICdqcGcnLCAnanBlZycsICdwbmcnLCAnaW1hZ2UvZ2lmJywgJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnXTtcbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVJbWFnZUV4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBJbWFnZUV4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KTtcblxuZXhwb3J0IGNvbnN0IFZpZGVvRXh0TGlzdCA9IFsnbXA0JywgJ21vdicsICdtcGcnLCAnYXZpJywgJ3dtdicsICd2aWRlby9tcDQnLCAndmlkZW8vcXVpY2t0aW1lJywgJ3ZpZGVvL21wZWcnLCAndmlkZW8veC1tc3ZpZGVvJywgJ3ZpZGVvL3gtbXMtd212J107XG5leHBvcnQgY29uc3QgaXNJbmNsdWRlVmlkZW9FeHRMaXN0ID0gKGV4dDogc3RyaW5nLCBsaXN0RXh0OiBBcnJheTxzdHJpbmc+ID0gVmlkZW9FeHRMaXN0KSA9PiBsaXN0RXh0LmluY2x1ZGVzKGV4dCk7XG5leHBvcnQgY29uc3QgQXVkaW9FeHRMaXN0ID0gWydtcDMnLCAnd2F2JywgJ29nZycsICdhYWMnLCAnbTRhJywgJ2ZsYWMnLCAnd21hJywgJ2F1ZGlvL21wZWcnLCAnYXVkaW8vd2F2JywgJ2F1ZGlvL29nZycsICdhdWRpby9hYWMnLCAnYXVkaW8vbXA0JywgJ2F1ZGlvL2ZsYWMnLCAnYXVkaW8veC1tcy13bWEnXTtcbmV4cG9ydCBjb25zdCBpc0luY2x1ZGVBdWRpb0V4dExpc3QgPSAoZXh0OiBzdHJpbmcsIGxpc3RFeHQ6IEFycmF5PHN0cmluZz4gPSBBdWRpb0V4dExpc3QpID0+IGxpc3RFeHQuaW5jbHVkZXMoZXh0KTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVFeHRlbnNpb24gPSAoZmlsZTogSUZpbGUgfCBGaWxlKSA9PiB7XG4gIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnR5cGUpIHtcbiAgICByZXR1cm4gKGZpbGUudHlwZS5zcGxpdCgnLycpLnBvcCgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIGZpbGUgPSBmaWxlIGFzIElGaWxlO1xuICBpZiAoZmlsZS5taW1ldHlwZSB8fCBmaWxlLmZpbGU/LnR5cGUpIHtcbiAgICByZXR1cm4gZmlsZS5taW1ldHlwZSB8fCBmaWxlLmZpbGU/LnR5cGU7XG4gIH1cblxuICBsZXQgZmlsZU5hbWUgPSBmaWxlLm5hbWUgYXMgc3RyaW5nO1xuICBjb25zdCB1cmwgPSBnZXQoZmlsZSwgJ3VybCcpIHx8IGdldChmaWxlLCAnb3JpZ2luX3VybCcpO1xuICBpZiAoIWZpbGVOYW1lICYmICF1cmwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFmaWxlTmFtZSAmJiB1cmwpIHtcbiAgICBmaWxlTmFtZSA9IHVybC5zcGxpdCgnLycpLnBvcCgpIHx8ICcnO1xuICAgIHNldChmaWxlLCAnbmFtZScsIGZpbGVOYW1lKTtcbiAgfVxuICBjb25zdCBkb3RzID0gZmlsZU5hbWUuc3BsaXQoXCIuXCIpO1xuXG4gIGlmICghZG90cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiAoZG90cy5wb3AoKSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMYWJlbEJ5U2l6ZUZpbGUgPSAoc2l6ZTogbnVtYmVyLCB0b0ZpeGVkID0gMikgPT4ge1xuICBpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0KSB7XG4gICAgcmV0dXJuIGAgJHsoc2l6ZSAvIDEwMjQpLnRvRml4ZWQodG9GaXhlZCl9IEtCYDtcbiAgfVxuXG4gIHJldHVybiBgICR7KHNpemUgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKHRvRml4ZWQpfSBNQmA7XG59O1xuXG5leHBvcnQgY29uc3QgY29udmVydEJsb2JUb0ZpbGUgPSAoYmxvYjogQmxvYiwgZmlsZU5hbWU/OiBzdHJpbmcpOiBGaWxlID0+IHtcbiAgY29uc3QgdHlwZSA9IGJsb2IudHlwZS5zcGxpdCgnLycpWzFdO1xuICBjb25zdCBuYW1lID0gZmlsZU5hbWUgPyBgJHtmaWxlTmFtZS5zcGxpdCgnLicpWzBdfS4ke3R5cGV9YCA6IGAke3V1aWQoKX0uJHt0eXBlfWA7XG5cbiAgcmV0dXJuIG5ldyBGaWxlKFtibG9iXSwgbmFtZSwgeyB0eXBlOiBibG9iLnR5cGUsIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0VXJsVG9GaWxlID0gKHVybDogc3RyaW5nLCBmaWxlTmFtZT86IHN0cmluZykgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8RmlsZSB8IHVuZGVmaW5lZD4oKHJlc29sdmUscmVqZWN0KSA9PiB7XG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlID0gY29udmVydEJhc2U2NFRvQmxvYihyZWFkZXIucmVzdWx0IGFzIHN0cmluZyk7XG4gICAgICAgIHJlc29sdmUoY29udmVydEJsb2JUb0ZpbGUoZmlsZSwgZmlsZU5hbWUgfHwgRGF0ZS5ub3coKS50b0xvY2FsZVN0cmluZygpKSk7XG4gICAgICB9O1xuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICByZWFkZXIucmVhZEFzRGF0YVVSTCh4aHIucmVzcG9uc2UpO1xuICAgIH07XG4gICAgeGhyLm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9O1xuICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgeGhyLnNlbmQoKTtcbiAgfSk7XG59OyJdfQ==
|