@piveau/piveau-hub-ui-modules 4.6.9 → 4.6.11
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/dist/data-provider-interface/components/SimpleSelect.vue.mjs +78 -73
- package/dist/data-provider-interface/components/SimpleSelect.vue.mjs.map +1 -1
- package/dist/datasetDetails/distributions/DownloadAllDistributions.vue.d.ts +2 -0
- package/dist/datasetDetails/distributions/DownloadAllDistributions.vue.mjs +128 -125
- package/dist/datasetDetails/distributions/DownloadAllDistributions.vue.mjs.map +1 -1
- package/dist/piveau-hub-ui-modules.css +1 -1
- package/dist/widgets/ResourceAccessPopup.vue.mjs +8 -8
- package/dist/widgets/ResourceAccessPopup.vue.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { mapGetters as
|
|
2
|
-
import { onUnmounted as
|
|
3
|
-
import { useRouter as
|
|
4
|
-
import { has as T, isNil as
|
|
5
|
-
import
|
|
6
|
-
import { saveAs as
|
|
7
|
-
import
|
|
8
|
-
import { getTranslationFor as
|
|
1
|
+
import { mapGetters as C } from "vuex";
|
|
2
|
+
import { onUnmounted as _, resolveComponent as I, openBlock as m, createElementBlock as h, createBlock as y, withCtx as F, createElementVNode as l, createTextVNode as w, toDisplayString as u, normalizeStyle as S, createCommentVNode as f } from "vue";
|
|
3
|
+
import { useRouter as U } from "vue-router";
|
|
4
|
+
import { has as T, isNil as M } from "lodash-es";
|
|
5
|
+
import O from "axios";
|
|
6
|
+
import { saveAs as R } from "file-saver";
|
|
7
|
+
import k from "jquery";
|
|
8
|
+
import { getTranslationFor as Z } from "../../utils/helpers.mjs";
|
|
9
9
|
import x from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
10
10
|
const $ = {
|
|
11
11
|
name: "DownloadAllDistributions",
|
|
@@ -19,25 +19,25 @@ const $ = {
|
|
|
19
19
|
"small"
|
|
20
20
|
],
|
|
21
21
|
computed: {
|
|
22
|
-
...
|
|
22
|
+
...C("datasetDetails", [
|
|
23
23
|
"getDistributions",
|
|
24
24
|
"getTitle",
|
|
25
25
|
"getCatalog",
|
|
26
26
|
"getLanguages"
|
|
27
27
|
]),
|
|
28
28
|
files() {
|
|
29
|
-
const s = (
|
|
30
|
-
if (T(
|
|
31
|
-
const
|
|
32
|
-
return
|
|
29
|
+
const s = (t) => t.lastIndexOf(".") !== -1 ? t.substring(0, t.lastIndexOf(".")) : t, e = (t) => {
|
|
30
|
+
if (T(t, "format.id") && !M(t.format.id)) {
|
|
31
|
+
const a = t.format.id;
|
|
32
|
+
return a.lastIndexOf(".") === -1 ? a.toLowerCase() : a.substring(a.lastIndexOf(".") + 1, a.length).toLowerCase();
|
|
33
33
|
}
|
|
34
34
|
return "";
|
|
35
|
-
},
|
|
36
|
-
return this.getDistributions.map((
|
|
37
|
-
title:
|
|
38
|
-
...
|
|
39
|
-
format: t
|
|
40
|
-
csvReportTitle: o(
|
|
35
|
+
}, r = (t, a) => `${s(this.getDistributionTitle(t)).substring(0, this.bulkDownload.MAX_FILE_TITLE_LENGTH).replace(/\//g, " ").trim()}-${a}` || `${s(this.getDistributionDescription(t)).substring(0, this.bulkDownload.MAX_FILE_TITLE_LENGTH).replace(/\//g, " ").trim()}-${a}`, i = (t) => this.showDownloadUrls(t) ? { accessUrl: `${t.accessUrl[0]}`, downloadUrl: `${t.downloadUrls[0]}` } : { accessUrl: `${t.accessUrl[0]}` }, o = (t) => this.getDistributionTitle(t).replace(/,/g, "") || this.getDistributionDescription(t).replace(/,/g, "");
|
|
36
|
+
return this.getDistributions.map((t, a) => ({
|
|
37
|
+
title: r(t, a + 1),
|
|
38
|
+
...i(t),
|
|
39
|
+
format: e(t),
|
|
40
|
+
csvReportTitle: o(t)
|
|
41
41
|
}));
|
|
42
42
|
}
|
|
43
43
|
},
|
|
@@ -61,48 +61,48 @@ const $ = {
|
|
|
61
61
|
};
|
|
62
62
|
},
|
|
63
63
|
methods: {
|
|
64
|
-
getTranslationFor:
|
|
65
|
-
async fetchDistributionFiles(s,
|
|
64
|
+
getTranslationFor: Z,
|
|
65
|
+
async fetchDistributionFiles(s, e, r, i) {
|
|
66
66
|
const o = [];
|
|
67
67
|
let d = `filename,status, issue_cause downloadURL, issue_cause accessURL
|
|
68
|
-
`,
|
|
69
|
-
const
|
|
70
|
-
this.cancelDownloadAllAxiosRequestSource =
|
|
71
|
-
const b = this.$bulkDownloadAxiosInstance, A = { responseType: "blob", cancelToken: this.cancelDownloadAllAxiosRequestSource.token, timeout: this.bulkDownload.TIMEOUT_MS },
|
|
72
|
-
const v =
|
|
68
|
+
`, t;
|
|
69
|
+
const a = ["wms", "wfs"], L = O.CancelToken;
|
|
70
|
+
this.cancelDownloadAllAxiosRequestSource = L.source();
|
|
71
|
+
const b = this.$bulkDownloadAxiosInstance, A = { responseType: "blob", cancelToken: this.cancelDownloadAllAxiosRequestSource.token, timeout: this.bulkDownload.TIMEOUT_MS }, E = e.map(async (n) => {
|
|
72
|
+
const v = a.find((g) => g === n.format);
|
|
73
73
|
if (v)
|
|
74
|
-
o.push([
|
|
74
|
+
o.push([n.csvReportTitle, "issue", `We can't download ${v} files using the download all button. Please try to download this file using the download button next to the file name.`]);
|
|
75
75
|
else {
|
|
76
|
-
let g = !0,
|
|
77
|
-
T(
|
|
78
|
-
g = !0,
|
|
79
|
-
}) :
|
|
80
|
-
g = !0, o.push([
|
|
81
|
-
})), g ||
|
|
76
|
+
let g = !0, p, D = n.format;
|
|
77
|
+
T(n, "downloadUrl") ? p = await b.get(n.downloadUrl, A).then((c) => c.status === 200 ? (g = !1, !n.format.length > 0 && (D = i(c.headers["content-type"])), o.push([n.csvReportTitle, "delivered"]), c.data) : Promise.reject(new Error(c.statusText))).catch((c) => {
|
|
78
|
+
g = !0, t = c;
|
|
79
|
+
}) : t = "no download url available", this.isUrlInvalid(n.downloadUrl) && o.push([n.csvReportTitle, "issue", "url is invalid"]), g && (p = await b.get(n.accessUrl, A).then((c) => c.status === 200 ? (g = !1, n.format.length > 0 && (D = i(c.headers["content-type"])), o.push([n.csvReportTitle, "delivered", t]), c.data) : Promise.reject(new Error(c.statusText))).catch((c) => {
|
|
80
|
+
g = !0, o.push([n.csvReportTitle, "issue", t, c]);
|
|
81
|
+
})), g || r.file(`${n.title}.${D}`, p, { binary: !0 }), this.isDownloadAllDistributionsCanceled ? (this.downloadedFilesCounter = 0, this.downloadProgress = 0, this.failedDownloads = 0) : (this.downloadedFilesCounter += 1, this.downloadProgress = Math.floor(100 * this.downloadedFilesCounter / this.getDistributions.length), g && (this.failedDownloads += 1));
|
|
82
82
|
}
|
|
83
83
|
});
|
|
84
|
-
await Promise.all(
|
|
85
|
-
d +=
|
|
84
|
+
await Promise.all(E), o.forEach((n) => {
|
|
85
|
+
d += n.join(","), d += `
|
|
86
86
|
`;
|
|
87
87
|
}), s.file("file_report.csv", d, { binary: !0 });
|
|
88
88
|
},
|
|
89
89
|
hideDownloadAllModal() {
|
|
90
|
-
|
|
90
|
+
k("#downloadAllModal").modal("hide");
|
|
91
91
|
},
|
|
92
|
-
generateAndSaveZip(s,
|
|
92
|
+
generateAndSaveZip(s, e) {
|
|
93
93
|
this.isDownloadAllDistributionsCanceled || (this.numberOfFilesToZip = Object.keys(s.files).length, this.isGeneratingZip = !0);
|
|
94
|
-
class
|
|
94
|
+
class r {
|
|
95
95
|
constructor(o) {
|
|
96
96
|
this.message = o, this.name = "UserInterruptException";
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
s.generateAsync({ type: "blob", compression: "DEFLATE" }, () => {
|
|
100
100
|
if (this.isDownloadAllDistributionsCanceled)
|
|
101
|
-
throw new
|
|
102
|
-
}).then((
|
|
103
|
-
this.isGeneratingZip = !1, this.isGeneratingZipDone = !0, this.isLoadingAllDistributionFiles = !1, this.downloadAllSuccess = !0,
|
|
104
|
-
}).catch((
|
|
105
|
-
this.isGeneratingZip = !1, this.isDownloadAllDistributionsCanceled = !1, this.isLoadingAllDistributionFiles = !1, this.downloadAllError = !0, this.downloadedFilesCounter = 0, this.downloadProgress = 0, this.numberOfFilesToZip = 0, console.warn(
|
|
101
|
+
throw new r("user canceled generate zip operation");
|
|
102
|
+
}).then((i) => {
|
|
103
|
+
this.isGeneratingZip = !1, this.isGeneratingZipDone = !0, this.isLoadingAllDistributionFiles = !1, this.downloadAllSuccess = !0, R(i, e);
|
|
104
|
+
}).catch((i) => {
|
|
105
|
+
this.isGeneratingZip = !1, this.isDownloadAllDistributionsCanceled = !1, this.isLoadingAllDistributionFiles = !1, this.downloadAllError = !0, this.downloadedFilesCounter = 0, this.downloadProgress = 0, this.numberOfFilesToZip = 0, console.warn(i);
|
|
106
106
|
});
|
|
107
107
|
},
|
|
108
108
|
cancelDownloadAll(s) {
|
|
@@ -119,170 +119,173 @@ const $ = {
|
|
|
119
119
|
), await this.downloadAllDistributions();
|
|
120
120
|
},
|
|
121
121
|
async downloadAllDistributions() {
|
|
122
|
-
this.downloadedFilesCounter = 0, this.downloadProgress = 0, this.failedDownloads = 0, this.numberOfFilesToZip = 0, this.isGeneratingZip = !1, this.isGeneratingZipDone = !1, this.isLoadingAllDistributionFiles = !0, this.isDownloadAllDistributionsCanceled = !1, this.downloadAllSuccess = !1, this.downloadAllError = !1;
|
|
122
|
+
k("#downloadAllModal").modal("show"), this.downloadedFilesCounter = 0, this.downloadProgress = 0, this.failedDownloads = 0, this.numberOfFilesToZip = 0, this.isGeneratingZip = !1, this.isGeneratingZipDone = !1, this.isLoadingAllDistributionFiles = !0, this.isDownloadAllDistributionsCanceled = !1, this.downloadAllSuccess = !1, this.downloadAllError = !1;
|
|
123
123
|
const s = (d) => {
|
|
124
|
-
const
|
|
125
|
-
return d.substring(
|
|
126
|
-
}, { default:
|
|
127
|
-
await this.fetchDistributionFiles(
|
|
124
|
+
const t = d.lastIndexOf("/") + 1, a = d.indexOf(";") !== -1 ? d.indexOf(";") : d.length;
|
|
125
|
+
return d.substring(t, a);
|
|
126
|
+
}, { default: e } = await import("jszip"), r = new e(), i = `${this.getTranslationFor(this.getTitle, this.$route.query.locale, this.getLanguages)}.zip`, o = r.folder(this.getTranslationFor(this.getCatalog.title, this.$route.query.locale, this.getLanguages));
|
|
127
|
+
await this.fetchDistributionFiles(r, this.files, o, s), await this.generateAndSaveZip(r, i);
|
|
128
128
|
},
|
|
129
129
|
// handle navigation to extern website (cancel bulk download and hide modal)
|
|
130
130
|
beforeWindowUnload(s) {
|
|
131
131
|
this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled && (s.preventDefault(), s.returnValue = "");
|
|
132
|
+
},
|
|
133
|
+
openRessourceAccessPopup() {
|
|
134
|
+
this.openModal(this.trackAndDownloadAllDistributions, !0);
|
|
135
|
+
},
|
|
136
|
+
onClose(s) {
|
|
137
|
+
console.log("CLOSING");
|
|
132
138
|
}
|
|
133
139
|
},
|
|
134
140
|
created() {
|
|
135
141
|
window.addEventListener("beforeunload", this.beforeWindowUnload);
|
|
136
142
|
},
|
|
143
|
+
// mounted() {
|
|
144
|
+
// setTimeout(() => {
|
|
145
|
+
// const modal = document.getElementById('externalAccess');
|
|
146
|
+
// modal.addEventListener('click', function() {
|
|
147
|
+
// console.log("CLOSING");
|
|
148
|
+
// });
|
|
149
|
+
// })
|
|
150
|
+
// },
|
|
137
151
|
beforeUnmount() {
|
|
138
152
|
window.removeEventListener("beforeunload", this.beforeWindowUnload);
|
|
139
153
|
},
|
|
140
154
|
setup() {
|
|
141
|
-
const s =
|
|
142
|
-
|
|
143
|
-
s.beforeEach((
|
|
144
|
-
this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled ? window.confirm(this.$t("message.datasetDetails.datasets.leavePageWindow.text")) ? (this.hideDownloadAllModal(), this.cancelDownloadAll(this.cancelDownloadAllAxiosRequestSource),
|
|
155
|
+
const s = U();
|
|
156
|
+
_(() => {
|
|
157
|
+
s.beforeEach((e, r, i) => {
|
|
158
|
+
this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled ? window.confirm(this.$t("message.datasetDetails.datasets.leavePageWindow.text")) ? (this.hideDownloadAllModal(), this.cancelDownloadAll(this.cancelDownloadAllAxiosRequestSource), i()) : i(!1) : (this.hideDownloadAllModal(), i());
|
|
145
159
|
})();
|
|
146
160
|
});
|
|
147
161
|
}
|
|
148
162
|
}, G = {
|
|
149
163
|
key: 0,
|
|
150
164
|
class: "dsd-download-all-distributions-button"
|
|
151
|
-
},
|
|
165
|
+
}, P = {
|
|
152
166
|
class: "modal fade",
|
|
167
|
+
"data-backdrop": "static",
|
|
168
|
+
"data-keyboard": "false",
|
|
153
169
|
id: "downloadAllModal",
|
|
170
|
+
ref: "downloadAllModal",
|
|
154
171
|
tabindex: "-1",
|
|
155
172
|
role: "dialog",
|
|
156
173
|
"aria-labelledby": "download progress",
|
|
157
174
|
"aria-hidden": "true"
|
|
158
|
-
},
|
|
175
|
+
}, N = {
|
|
159
176
|
class: "modal-dialog",
|
|
160
177
|
role: "document"
|
|
161
178
|
}, q = { class: "modal-content" }, j = { class: "modal-header" }, z = { class: "modal-title" }, V = { class: "modal-body" }, W = { class: "progress" }, H = ["aria-valuenow"], X = { class: "d-flex justify-content-between align-items-center" }, B = ["title"], J = { class: "d-flex justify-content-between align-items-center" }, K = { key: 0 }, Q = { key: 1 }, Y = {
|
|
162
179
|
key: 0,
|
|
163
180
|
class: "spinner-grow text-primary",
|
|
164
181
|
role: "status"
|
|
165
|
-
},
|
|
182
|
+
}, ee = {
|
|
166
183
|
key: 1,
|
|
167
184
|
class: "material-icons check-icon"
|
|
168
|
-
},
|
|
169
|
-
type: "button",
|
|
170
|
-
class: "btn btn-secondary",
|
|
171
|
-
"data-dismiss": "modal"
|
|
172
|
-
}, ot = {
|
|
185
|
+
}, te = { class: "modal-footer" }, se = {
|
|
173
186
|
key: 2,
|
|
174
187
|
type: "button",
|
|
175
188
|
class: "btn btn-success",
|
|
176
189
|
"data-dismiss": "modal"
|
|
177
190
|
};
|
|
178
|
-
function
|
|
179
|
-
const
|
|
180
|
-
return s.getDistributions.length > 1 && s.getCatalog.is_part_of !== "erpd" ? (
|
|
181
|
-
o.isLoadingAllDistributionFiles ? (
|
|
191
|
+
function oe(s, e, r, i, o, d) {
|
|
192
|
+
const t = I("pv-button");
|
|
193
|
+
return s.getDistributions.length > 1 && s.getCatalog.is_part_of !== "erpd" ? (m(), h("div", G, [
|
|
194
|
+
o.isLoadingAllDistributionFiles ? (m(), y(t, {
|
|
182
195
|
key: 0,
|
|
183
|
-
small:
|
|
196
|
+
small: r.small,
|
|
184
197
|
rounded: !0,
|
|
185
|
-
primary:
|
|
198
|
+
primary: r.primary,
|
|
186
199
|
download: !0,
|
|
187
|
-
class: "download-all-btn"
|
|
188
|
-
"data-toggle": "modal",
|
|
189
|
-
"data-target": "#downloadAllModal"
|
|
200
|
+
class: "download-all-btn"
|
|
190
201
|
}, {
|
|
191
|
-
default: F(() =>
|
|
192
|
-
|
|
193
|
-
|
|
202
|
+
default: F(() => [
|
|
203
|
+
e[2] || (e[2] = l("div", { class: "loading-spinner" }, null, -1)),
|
|
204
|
+
w(" " + u(s.$t("message.datasetDetails.datasets.downloadAll")), 1)
|
|
205
|
+
]),
|
|
194
206
|
_: 1
|
|
195
|
-
}, 8, ["small", "primary"])) : (
|
|
207
|
+
}, 8, ["small", "primary"])) : (m(), y(t, {
|
|
196
208
|
key: 1,
|
|
197
209
|
class: "download-all-btn",
|
|
198
|
-
small:
|
|
210
|
+
small: r.small,
|
|
199
211
|
rounded: !0,
|
|
200
|
-
primary:
|
|
212
|
+
primary: r.primary,
|
|
201
213
|
download: !0,
|
|
202
|
-
action:
|
|
214
|
+
action: d.openRessourceAccessPopup
|
|
203
215
|
}, {
|
|
204
216
|
default: F(() => [
|
|
205
|
-
|
|
217
|
+
w(u(s.$t("message.datasetDetails.datasets.downloadAll")), 1)
|
|
206
218
|
]),
|
|
207
219
|
_: 1
|
|
208
220
|
}, 8, ["small", "primary", "action"])),
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
t[3] || (t[3] = m()),
|
|
216
|
-
t[4] || (t[4] = i("button", {
|
|
217
|
-
type: "button",
|
|
218
|
-
class: "close",
|
|
219
|
-
"data-dismiss": "modal",
|
|
220
|
-
"aria-label": "Close"
|
|
221
|
-
}, [
|
|
222
|
-
i("span", { "aria-hidden": "true" }, "×")
|
|
223
|
-
], -1))
|
|
221
|
+
e[12] || (e[12] = w()),
|
|
222
|
+
l("div", P, [
|
|
223
|
+
l("div", N, [
|
|
224
|
+
l("div", q, [
|
|
225
|
+
l("div", j, [
|
|
226
|
+
l("h3", z, u(s.$t("message.datasetDetails.datasets.modal.downloadProgress")), 1)
|
|
224
227
|
]),
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
228
|
+
e[10] || (e[10] = w()),
|
|
229
|
+
l("div", V, [
|
|
230
|
+
l("div", W, [
|
|
231
|
+
l("div", {
|
|
229
232
|
class: "progress-bar",
|
|
230
233
|
role: "progressbar",
|
|
231
|
-
style:
|
|
234
|
+
style: S({ width: `${o.downloadProgress}%` }),
|
|
232
235
|
"aria-valuenow": o.downloadProgress,
|
|
233
236
|
"aria-valuemin": "0",
|
|
234
237
|
"aria-valuemax": "100"
|
|
235
238
|
}, null, 12, H)
|
|
236
239
|
]),
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
240
|
+
e[6] || (e[6] = w()),
|
|
241
|
+
l("div", null, u(s.$t("message.datasetDetails.datasets.modal.downloadingFiles")) + " " + u(o.downloadedFilesCounter.toLocaleString("fi")) + "/" + u(s.getDistributions.length.toLocaleString("fi")), 1),
|
|
242
|
+
e[7] || (e[7] = w()),
|
|
243
|
+
l("div", X, [
|
|
244
|
+
l("div", null, u(s.$t("message.datasetDetails.datasets.modal.notDownloaded")) + " " + u(o.failedDownloads.toLocaleString("fi")), 1),
|
|
245
|
+
e[3] || (e[3] = w()),
|
|
246
|
+
l("i", {
|
|
244
247
|
class: "material-icons help-icon",
|
|
245
248
|
"data-toggle": "tooltip",
|
|
246
249
|
"data-placement": "bottom",
|
|
247
250
|
title: s.$t("message.datasetDetails.datasets.modal.notDownloadedTooltip")
|
|
248
251
|
}, "help", 8, B)
|
|
249
252
|
]),
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
o.isLoadingAllDistributionFiles && o.numberOfFilesToZip > 0 ? (
|
|
253
|
+
e[8] || (e[8] = w()),
|
|
254
|
+
l("div", J, [
|
|
255
|
+
l("div", null, [
|
|
256
|
+
w(u(s.$t("message.datasetDetails.datasets.modal.zipNumberOfFiles", { number: o.numberOfFilesToZip.toLocaleString("fi") })) + " ", 1),
|
|
257
|
+
o.isLoadingAllDistributionFiles && o.numberOfFilesToZip > 0 ? (m(), h("span", K, u(s.$t("message.datasetDetails.datasets.modal.coupleOfMinutes")), 1)) : o.isLoadingAllDistributionFiles ? (m(), h("span", Q, u(s.$t("message.datasetDetails.datasets.modal.waitingForDownload")), 1)) : f("", !0)
|
|
255
258
|
]),
|
|
256
|
-
|
|
257
|
-
o.isGeneratingZip ? (
|
|
258
|
-
|
|
259
|
-
]))) : o.isGeneratingZipDone ? (
|
|
259
|
+
e[5] || (e[5] = w()),
|
|
260
|
+
o.isGeneratingZip ? (m(), h("div", Y, e[4] || (e[4] = [
|
|
261
|
+
l("span", { class: "sr-only" }, "Loading...", -1)
|
|
262
|
+
]))) : o.isGeneratingZipDone ? (m(), h("i", ee, "check_circle")) : f("", !0)
|
|
260
263
|
])
|
|
261
264
|
]),
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
t[11] || (t[11] = m()),
|
|
266
|
-
!o.downloadAllSuccess && !o.downloadAllError ? (w(), h("button", {
|
|
265
|
+
e[11] || (e[11] = w()),
|
|
266
|
+
l("div", te, [
|
|
267
|
+
!o.downloadAllSuccess && !o.downloadAllError ? (m(), h("button", {
|
|
267
268
|
key: 0,
|
|
268
269
|
type: "button",
|
|
269
270
|
class: "btn btn-danger",
|
|
270
271
|
"data-dismiss": "modal",
|
|
271
|
-
onClick:
|
|
272
|
-
}, u(s.$t("message.datasetDetails.datasets.modal.cancel")), 1)) :
|
|
272
|
+
onClick: e[0] || (e[0] = (a) => d.cancelDownloadAll(o.cancelDownloadAllAxiosRequestSource))
|
|
273
|
+
}, u(s.$t("message.datasetDetails.datasets.modal.cancel")), 1)) : f("", !0),
|
|
274
|
+
e[9] || (e[9] = w()),
|
|
275
|
+
o.downloadAllError ? (m(), h("button", {
|
|
273
276
|
key: 1,
|
|
274
277
|
type: "button",
|
|
275
278
|
class: "btn btn-danger",
|
|
276
|
-
onClick:
|
|
277
|
-
}, u(s.$t("message.datasetDetails.datasets.modal.error")), 1)) : o.downloadAllSuccess ? (
|
|
279
|
+
onClick: e[1] || (e[1] = (a) => d.trackAndDownloadAllDistributions())
|
|
280
|
+
}, u(s.$t("message.datasetDetails.datasets.modal.error")), 1)) : o.downloadAllSuccess ? (m(), h("button", se, u(s.$t("message.datasetDetails.datasets.modal.okay")), 1)) : f("", !0)
|
|
278
281
|
])
|
|
279
282
|
])
|
|
280
283
|
])
|
|
281
|
-
])
|
|
284
|
+
], 512)
|
|
282
285
|
])) : f("", !0);
|
|
283
286
|
}
|
|
284
|
-
const
|
|
287
|
+
const me = /* @__PURE__ */ x($, [["render", oe]]);
|
|
285
288
|
export {
|
|
286
|
-
|
|
289
|
+
me as default
|
|
287
290
|
};
|
|
288
291
|
//# sourceMappingURL=DownloadAllDistributions.vue.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DownloadAllDistributions.vue.mjs","sources":["../../../lib/datasetDetails/distributions/DownloadAllDistributions.vue"],"sourcesContent":["<template>\n <div v-if=\"getDistributions.length > 1 && getCatalog.is_part_of !== 'erpd'\" class=\"dsd-download-all-distributions-button\">\n <pv-button v-if=\"isLoadingAllDistributionFiles\" :small=\"small\" :rounded=\"true\" :primary=\"primary\" :download=\"true\"\n class=\"download-all-btn\"\n data-toggle=\"modal\" data-target=\"#downloadAllModal\"\n > \n <div class=\"loading-spinner\"></div>\n </pv-button>\n <pv-button v-else class=\"download-all-btn\" :small=\"small\" :rounded=\"true\" :primary=\"primary\" :download=\"true\" :action=\"() => openModal(trackAndDownloadAllDistributions, true)\">\n {{ $t('message.datasetDetails.datasets.downloadAll') }}\n </pv-button>\n <div class=\"modal fade\" id=\"downloadAllModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"download progress\" aria-hidden=\"true\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\">{{ $t('message.datasetDetails.datasets.modal.downloadProgress') }}</h3>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div class=\"progress\">\n <div class=\"progress-bar\" role=\"progressbar\" :style=\"{width: `${downloadProgress}%`}\" :aria-valuenow=\"downloadProgress\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n </div>\n <div>\n {{ $t('message.datasetDetails.datasets.modal.downloadingFiles') }} {{ downloadedFilesCounter.toLocaleString('fi') }}/{{getDistributions.length.toLocaleString('fi')}}\n </div>\n <div class=\"d-flex justify-content-between align-items-center\">\n <div>{{ $t('message.datasetDetails.datasets.modal.notDownloaded') }} {{ failedDownloads.toLocaleString('fi') }}</div>\n <i class=\"material-icons help-icon\" data-toggle=\"tooltip\" data-placement=\"bottom\" :title=\"$t('message.datasetDetails.datasets.modal.notDownloadedTooltip')\">help</i>\n </div>\n <div class=\"d-flex justify-content-between align-items-center\">\n <div>{{ $t('message.datasetDetails.datasets.modal.zipNumberOfFiles', { number: numberOfFilesToZip.toLocaleString('fi') }) }}\n <span v-if=\"isLoadingAllDistributionFiles && numberOfFilesToZip > 0\">\n {{ $t('message.datasetDetails.datasets.modal.coupleOfMinutes') }}\n </span> <span v-else-if=\"isLoadingAllDistributionFiles\">\n {{ $t('message.datasetDetails.datasets.modal.waitingForDownload')}}\n </span>\n </div>\n <div v-if=\"isGeneratingZip\" class=\"spinner-grow text-primary\" role=\"status\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n <i v-else-if=\"isGeneratingZipDone\" class=\"material-icons check-icon\">check_circle</i>\n </div>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">{{ $t('message.datasetDetails.datasets.modal.close') }}</button>\n <button v-if=\"!downloadAllSuccess && !downloadAllError\" type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" @click=\"cancelDownloadAll(cancelDownloadAllAxiosRequestSource)\">\n {{ $t('message.datasetDetails.datasets.modal.cancel') }}\n </button>\n <button v-else-if=\"downloadAllError\" type=\"button\" class=\"btn btn-danger\" @click=\"trackAndDownloadAllDistributions()\">{{ $t('message.datasetDetails.datasets.modal.error') }}</button>\n <button v-else-if=\"downloadAllSuccess\" type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\">{{ $t('message.datasetDetails.datasets.modal.okay') }}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters } from \"vuex\";\nimport { onUnmounted } from 'vue';\nimport { useRouter } from 'vue-router';\n\nimport {has, isNil} from \"lodash\";\nimport axios from \"axios\";\nimport { saveAs } from 'file-saver';\nimport $ from \"jquery\";\nimport { getTranslationFor } from \"../../utils/helpers\";\n\n\nexport default {\n name: \"DownloadAllDistributions\",\n props: [\n 'getDistributionDescription',\n 'getDistributionTitle',\n 'openModal',\n 'isUrlInvalid',\n 'showDownloadUrls',\n 'primary',\n 'small'\n ],\n computed: {\n ...mapGetters('datasetDetails', [\n 'getDistributions',\n 'getTitle',\n 'getCatalog',\n 'getLanguages'\n ]),\n files() {\n const cutFormatEnding = string => (string.lastIndexOf('.') !== -1 ? string.substring(0, string.lastIndexOf('.')) : string);\n const getFormat = (distribution) => {\n if (has(distribution, 'format.id') && !isNil(distribution.format.id)) {\n const type = distribution.format.id;\n return type.lastIndexOf('.') === -1 ? type.toLowerCase() : type.substring(type.lastIndexOf('.') + 1, type.length).toLowerCase();\n }\n return '';\n };\n const getFileName = (distribution, i) =>\n `${cutFormatEnding(this.getDistributionTitle(distribution)).substring(0, this.bulkDownload.MAX_FILE_TITLE_LENGTH)\n .replace(/\\//g, ' ').trim()}-${i}`\n || `${cutFormatEnding(this.getDistributionDescription(distribution)).substring(0, this.bulkDownload.MAX_FILE_TITLE_LENGTH)\n .replace(/\\//g, ' ').trim()}-${i}`;\n const getUrls = distribution => (this.showDownloadUrls(distribution) ?\n { accessUrl: `${distribution.accessUrl[0]}`, downloadUrl: `${distribution.downloadUrls[0]}` }\n : { accessUrl: `${distribution.accessUrl[0]}` });\n const getFileNameForCSV = distribution => this.getDistributionTitle(distribution).replace(/,/g, '')\n || this.getDistributionDescription(distribution).replace(/,/g, '');\n const files = this.getDistributions\n .map((distribution, i) => ({\n title: getFileName(distribution, i + 1), ...getUrls(distribution), format: getFormat(distribution), csvReportTitle: getFileNameForCSV(distribution),\n }));\n return files\n }\n },\n data() {\n return {\n downloadedFilesCounter: 0,\n numberOfFilesToZip: 0,\n downloadProgress: 0,\n failedDownloads: 0,\n isGeneratingZip: false,\n isGeneratingZipDone: false,\n isLoadingAllDistributionFiles: false,\n cancelDownloadAllAxiosRequestSource: null,\n isDownloadAllDistributionsCanceled: false,\n downloadAllSuccess: false,\n downloadAllError: false,\n bulkDownload: {\n MAX_FILE_TITLE_LENGTH: this.$env.content.datasetDetails.bulkDownload.MAX_FILE_TITLE_LENGTH,\n TIMEOUT_MS: this.$env.content.datasetDetails.bulkDownload.TIMEOUT_MS,\n }\n }\n },\n methods: {\n getTranslationFor,\n async fetchDistributionFiles(zip, files, folder, getContentTypeFormat) {\n const csvReportArray = [];\n let csvReport = 'filename,status, issue_cause downloadURL, issue_cause accessURL\\n';\n let csvDownloadURLIssue;\n const problematicFormats = ['wms', 'wfs'];\n\n const CancelToken = axios.CancelToken;\n this.cancelDownloadAllAxiosRequestSource = CancelToken.source();\n const axiosInstance = this.$bulkDownloadAxiosInstance;\n const requestSettings = { responseType: 'blob', cancelToken: this.cancelDownloadAllAxiosRequestSource.token, timeout: this.bulkDownload.TIMEOUT_MS };\n\n const promises = files.map(async (file) => {\n const problematicFormat = problematicFormats.find(format => format === file.format);\n if (!problematicFormat) {\n let isRejected = true;\n let responseData;\n let fileFormat = file.format;\n\n // try to download from download url\n if (has(file, 'downloadUrl')) {\n responseData = await axiosInstance.get(file.downloadUrl, requestSettings).then((responseDownloadUrl) => {\n if (responseDownloadUrl.status === 200) {\n isRejected = false;\n if (!file.format.length > 0) fileFormat = getContentTypeFormat(responseDownloadUrl.headers['content-type']);\n csvReportArray.push([file.csvReportTitle, 'delivered']);\n return responseDownloadUrl.data;\n }\n return Promise.reject(new Error(responseDownloadUrl.statusText));\n }).catch((error) => {\n isRejected = true;\n csvDownloadURLIssue = error;\n });\n } else csvDownloadURLIssue = 'no download url available';\n if (this.isUrlInvalid(file.downloadUrl)) {\n csvReportArray.push([file.csvReportTitle, 'issue', 'url is invalid']);\n }\n // try to download from access url\n if (isRejected) {\n responseData = await axiosInstance.get(file.accessUrl, requestSettings).then((responseAccessUrl) => {\n if (responseAccessUrl.status === 200) {\n isRejected = false;\n if (file.format.length > 0) fileFormat = getContentTypeFormat(responseAccessUrl.headers['content-type']);\n csvReportArray.push([file.csvReportTitle, 'delivered', csvDownloadURLIssue]);\n return responseAccessUrl.data;\n }\n return Promise.reject(new Error(responseAccessUrl.statusText));\n }).catch((error) => {\n isRejected = true;\n csvReportArray.push([file.csvReportTitle, 'issue', csvDownloadURLIssue, error]);\n });\n }\n if (!isRejected) folder.file(`${file.title}.${fileFormat}`, responseData, { binary: true });\n if (!this.isDownloadAllDistributionsCanceled) {\n this.downloadedFilesCounter += 1;\n this.downloadProgress = Math.floor(100 * this.downloadedFilesCounter / this.getDistributions.length);\n if (isRejected) this.failedDownloads += 1;\n } else {\n this.downloadedFilesCounter = 0;\n this.downloadProgress = 0;\n this.failedDownloads = 0;\n }\n } else csvReportArray.push([file.csvReportTitle, 'issue', `We can't download ${problematicFormat} files using the download all button. Please try to download this file using the download button next to the file name.`]);\n });\n\n await Promise.all(promises);\n csvReportArray.forEach((row) => {\n csvReport += row.join(',');\n csvReport += '\\n';\n });\n zip.file('file_report.csv', csvReport, { binary: true });\n },\n hideDownloadAllModal() {\n $('#downloadAllModal').modal('hide');\n },\n generateAndSaveZip(zip, zipName) {\n if (!this.isDownloadAllDistributionsCanceled) {\n this.numberOfFilesToZip = Object.keys(zip.files).length;\n this.isGeneratingZip = true;\n }\n\n class UserInterruptException {\n constructor(message) {\n this.message = message;\n this.name = 'UserInterruptException';\n }\n }\n\n zip.generateAsync({ type: 'blob', compression: 'DEFLATE' }, () => {\n if (this.isDownloadAllDistributionsCanceled) throw new UserInterruptException('user canceled generate zip operation');\n })\n .then((blob) => {\n this.isGeneratingZip = false;\n this.isGeneratingZipDone = true;\n this.isLoadingAllDistributionFiles = false;\n this.downloadAllSuccess = true;\n saveAs(blob, zipName);\n })\n .catch((e) => {\n this.isGeneratingZip = false;\n this.isDownloadAllDistributionsCanceled = false;\n this.isLoadingAllDistributionFiles = false;\n this.downloadAllError = true;\n this.downloadedFilesCounter = 0;\n this.downloadProgress = 0;\n this.numberOfFilesToZip = 0;\n console.warn(e); // eslint-disable-line\n });\n\n // works with chrome => to make it compatible to more browsers look here https://jimmywarting.github.io/StreamSaver.js/examples/saving-multiple-files.html open developer tools and find saving-multiple-files.html\n // install stream saver and import it + script src=\"https://cdn.jsdelivr.net/npm/web-streams-polyfill@2.0.2/dist/ponyfill.min.js\"\n // if we don't want to use his service worker we can configure something (I think we have to change the mitm url) => read the api https://jimmywarting.github.io/StreamSaver.js\n // I think IE will never work with this solution\n /* const writeStream = streamSaver.createWriteStream(zipName).getWriter();\n zip.generateInternalStream({ type: 'uint8array', streamFiles: true })\n .on('data', data => writeStream.write(data))\n .on('error', err => console.error(err))\n .on('end', () => writeStream.close())\n .resume(); */\n },\n cancelDownloadAll(source) {\n // stops axios operations\n source.cancel('user canceled axios operation');\n // stops zip operation\n this.isDownloadAllDistributionsCanceled = true;\n },\n async trackAndDownloadAllDistributions() {\n if (this.$piwik && this.$piwik.trackDownload) {\n this.$piwik.trackDownload(\n window.location.href,\n {\n files: JSON.stringify(this.files),\n downloadAll: 'true',\n format: 'all',\n }\n );\n }\n return await this.downloadAllDistributions();\n },\n async downloadAllDistributions() {\n this.downloadedFilesCounter = 0;\n this.downloadProgress = 0;\n this.failedDownloads = 0;\n this.numberOfFilesToZip = 0;\n this.isGeneratingZip = false;\n this.isGeneratingZipDone = false;\n this.isLoadingAllDistributionFiles = true;\n this.isDownloadAllDistributionsCanceled = false;\n this.downloadAllSuccess = false;\n this.downloadAllError = false;\n const getContentTypeFormat = (contentType) => {\n const startIndex = contentType.lastIndexOf('/') + 1;\n const endIndex = contentType.indexOf(';') !== -1 ? contentType.indexOf(';') : contentType.length;\n return contentType.substring(startIndex, endIndex);\n };\n\n const {default: JSZip} = await import('jszip');\n const zip = new JSZip();\n const zipName = `${this.getTranslationFor(this.getTitle, this.$route.query.locale, this.getLanguages)}.zip`;\n const folder = zip.folder(this.getTranslationFor(this.getCatalog.title, this.$route.query.locale, this.getLanguages));\n await this.fetchDistributionFiles(zip, this.files, folder, getContentTypeFormat);\n await this.generateAndSaveZip(zip, zipName);\n },\n // handle navigation to extern website (cancel bulk download and hide modal)\n beforeWindowUnload(e) {\n if (this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled) {\n e.preventDefault();\n // Chrome requires returnValue to be set\n e.returnValue = ''; // eslint-disable-line\n }\n }\n },\n created() {\n window.addEventListener('beforeunload', this.beforeWindowUnload);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.beforeWindowUnload);\n },\n setup() {\n const router = useRouter();\n \n onUnmounted(() => {\n router.beforeEach((to, from, next) => {\n if (this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled) {\n const answer = window.confirm(this.$t('message.datasetDetails.datasets.leavePageWindow.text')); // eslint-disable-line\n if (answer) {\n // if modal is open we have to hide it when user tries to navigate back\n this.hideDownloadAllModal();\n this.cancelDownloadAll(this.cancelDownloadAllAxiosRequestSource);\n next();\n } else {\n next(false);\n }\n } else {\n this.hideDownloadAllModal();\n next();\n }\n })();\n })\n },\n}\n</script>\n\n<style scoped>\n\n</style>\n"],"names":["_sfc_main","mapGetters","cutFormatEnding","string","getFormat","distribution","has","isNil","type","getFileName","i","getUrls","getFileNameForCSV","getTranslationFor","zip","files","folder","getContentTypeFormat","csvReportArray","csvReport","csvDownloadURLIssue","problematicFormats","CancelToken","axios","axiosInstance","requestSettings","promises","file","problematicFormat","format","isRejected","responseData","fileFormat","responseDownloadUrl","error","responseAccessUrl","row","$","zipName","UserInterruptException","message","blob","saveAs","e","source","contentType","startIndex","endIndex","JSZip","router","useRouter","onUnmounted","to","from","next","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_17","_ctx","_openBlock","_createElementBlock","_hoisted_1","$data","_createBlock","_component_pv_button","$props","_withCtx","_cache","_createElementVNode","$options","_createTextVNode","_toDisplayString","_hoisted_2","_hoisted_3","_normalizeStyle","_hoisted_13","_hoisted_14","_createCommentVNode","_hoisted_15","_hoisted_16","_hoisted_18","$event","_hoisted_19"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DownloadAllDistributions.vue.mjs","sources":["../../../lib/datasetDetails/distributions/DownloadAllDistributions.vue"],"sourcesContent":["<template>\n <div v-if=\"getDistributions.length > 1 && getCatalog.is_part_of !== 'erpd'\" class=\"dsd-download-all-distributions-button\">\n <pv-button v-if=\"isLoadingAllDistributionFiles\" :small=\"small\" :rounded=\"true\" :primary=\"primary\" :download=\"true\"\n class=\"download-all-btn\"\n >\n <div class=\"loading-spinner\"></div>\n {{ $t('message.datasetDetails.datasets.downloadAll') }}\n </pv-button>\n <pv-button v-else class=\"download-all-btn\" :small=\"small\" :rounded=\"true\" :primary=\"primary\" :download=\"true\" :action=\"openRessourceAccessPopup\">\n {{ $t('message.datasetDetails.datasets.downloadAll') }}\n </pv-button>\n <div class=\"modal fade\" data-backdrop=\"static\" data-keyboard=\"false\" id=\"downloadAllModal\" ref=\"downloadAllModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"download progress\" aria-hidden=\"true\">\n <div class=\"modal-dialog\" role=\"document\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h3 class=\"modal-title\">{{ $t('message.datasetDetails.datasets.modal.downloadProgress') }}</h3>\n<!-- <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">-->\n<!-- <span aria-hidden=\"true\">×</span>-->\n<!-- </button>-->\n </div>\n <div class=\"modal-body\">\n <div class=\"progress\">\n <div class=\"progress-bar\" role=\"progressbar\" :style=\"{width: `${downloadProgress}%`}\" :aria-valuenow=\"downloadProgress\" aria-valuemin=\"0\" aria-valuemax=\"100\"></div>\n </div>\n <div>\n {{ $t('message.datasetDetails.datasets.modal.downloadingFiles') }} {{ downloadedFilesCounter.toLocaleString('fi') }}/{{getDistributions.length.toLocaleString('fi')}}\n </div>\n <div class=\"d-flex justify-content-between align-items-center\">\n <div>{{ $t('message.datasetDetails.datasets.modal.notDownloaded') }} {{ failedDownloads.toLocaleString('fi') }}</div>\n <i class=\"material-icons help-icon\" data-toggle=\"tooltip\" data-placement=\"bottom\" :title=\"$t('message.datasetDetails.datasets.modal.notDownloadedTooltip')\">help</i>\n </div>\n <div class=\"d-flex justify-content-between align-items-center\">\n <div>{{ $t('message.datasetDetails.datasets.modal.zipNumberOfFiles', { number: numberOfFilesToZip.toLocaleString('fi') }) }}\n <span v-if=\"isLoadingAllDistributionFiles && numberOfFilesToZip > 0\">\n {{ $t('message.datasetDetails.datasets.modal.coupleOfMinutes') }}\n </span> <span v-else-if=\"isLoadingAllDistributionFiles\">\n {{ $t('message.datasetDetails.datasets.modal.waitingForDownload')}}\n </span>\n </div>\n <div v-if=\"isGeneratingZip\" class=\"spinner-grow text-primary\" role=\"status\">\n <span class=\"sr-only\">Loading...</span>\n </div>\n <i v-else-if=\"isGeneratingZipDone\" class=\"material-icons check-icon\">check_circle</i>\n </div>\n </div>\n <div class=\"modal-footer\">\n<!-- <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\">{{ $t('message.datasetDetails.datasets.modal.close') }}</button>-->\n <button v-if=\"!downloadAllSuccess && !downloadAllError\" type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\" @click=\"cancelDownloadAll(cancelDownloadAllAxiosRequestSource)\">\n {{ $t('message.datasetDetails.datasets.modal.cancel') }}\n </button>\n <button v-if=\"downloadAllError\" type=\"button\" class=\"btn btn-danger\" @click=\"trackAndDownloadAllDistributions()\">{{ $t('message.datasetDetails.datasets.modal.error') }}</button>\n <button v-else-if=\"downloadAllSuccess\" type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\">{{ $t('message.datasetDetails.datasets.modal.okay') }}</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters } from \"vuex\";\nimport { onUnmounted } from 'vue';\nimport { useRouter } from 'vue-router';\n\nimport {has, isNil} from \"lodash\";\nimport axios from \"axios\";\nimport { saveAs } from 'file-saver';\nimport $ from \"jquery\";\nimport { getTranslationFor } from \"../../utils/helpers\";\n\n\nexport default {\n name: \"DownloadAllDistributions\",\n props: [\n 'getDistributionDescription',\n 'getDistributionTitle',\n 'openModal',\n 'isUrlInvalid',\n 'showDownloadUrls',\n 'primary',\n 'small'\n ],\n computed: {\n ...mapGetters('datasetDetails', [\n 'getDistributions',\n 'getTitle',\n 'getCatalog',\n 'getLanguages'\n ]),\n files() {\n const cutFormatEnding = string => (string.lastIndexOf('.') !== -1 ? string.substring(0, string.lastIndexOf('.')) : string);\n const getFormat = (distribution) => {\n if (has(distribution, 'format.id') && !isNil(distribution.format.id)) {\n const type = distribution.format.id;\n return type.lastIndexOf('.') === -1 ? type.toLowerCase() : type.substring(type.lastIndexOf('.') + 1, type.length).toLowerCase();\n }\n return '';\n };\n const getFileName = (distribution, i) =>\n `${cutFormatEnding(this.getDistributionTitle(distribution)).substring(0, this.bulkDownload.MAX_FILE_TITLE_LENGTH)\n .replace(/\\//g, ' ').trim()}-${i}`\n || `${cutFormatEnding(this.getDistributionDescription(distribution)).substring(0, this.bulkDownload.MAX_FILE_TITLE_LENGTH)\n .replace(/\\//g, ' ').trim()}-${i}`;\n const getUrls = distribution => (this.showDownloadUrls(distribution) ?\n { accessUrl: `${distribution.accessUrl[0]}`, downloadUrl: `${distribution.downloadUrls[0]}` }\n : { accessUrl: `${distribution.accessUrl[0]}` });\n const getFileNameForCSV = distribution => this.getDistributionTitle(distribution).replace(/,/g, '')\n || this.getDistributionDescription(distribution).replace(/,/g, '');\n const files = this.getDistributions\n .map((distribution, i) => ({\n title: getFileName(distribution, i + 1), ...getUrls(distribution), format: getFormat(distribution), csvReportTitle: getFileNameForCSV(distribution),\n }));\n return files\n }\n },\n data() {\n return {\n downloadedFilesCounter: 0,\n numberOfFilesToZip: 0,\n downloadProgress: 0,\n failedDownloads: 0,\n isGeneratingZip: false,\n isGeneratingZipDone: false,\n isLoadingAllDistributionFiles: false,\n cancelDownloadAllAxiosRequestSource: null,\n isDownloadAllDistributionsCanceled: false,\n downloadAllSuccess: false,\n downloadAllError: false,\n bulkDownload: {\n MAX_FILE_TITLE_LENGTH: this.$env.content.datasetDetails.bulkDownload.MAX_FILE_TITLE_LENGTH,\n TIMEOUT_MS: this.$env.content.datasetDetails.bulkDownload.TIMEOUT_MS,\n }\n }\n },\n methods: {\n getTranslationFor,\n async fetchDistributionFiles(zip, files, folder, getContentTypeFormat) {\n const csvReportArray = [];\n let csvReport = 'filename,status, issue_cause downloadURL, issue_cause accessURL\\n';\n let csvDownloadURLIssue;\n const problematicFormats = ['wms', 'wfs'];\n\n const CancelToken = axios.CancelToken;\n this.cancelDownloadAllAxiosRequestSource = CancelToken.source();\n const axiosInstance = this.$bulkDownloadAxiosInstance;\n const requestSettings = { responseType: 'blob', cancelToken: this.cancelDownloadAllAxiosRequestSource.token, timeout: this.bulkDownload.TIMEOUT_MS };\n\n const promises = files.map(async (file) => {\n const problematicFormat = problematicFormats.find(format => format === file.format);\n if (!problematicFormat) {\n let isRejected = true;\n let responseData;\n let fileFormat = file.format;\n\n // try to download from download url\n if (has(file, 'downloadUrl')) {\n responseData = await axiosInstance.get(file.downloadUrl, requestSettings).then((responseDownloadUrl) => {\n if (responseDownloadUrl.status === 200) {\n isRejected = false;\n if (!file.format.length > 0) fileFormat = getContentTypeFormat(responseDownloadUrl.headers['content-type']);\n csvReportArray.push([file.csvReportTitle, 'delivered']);\n return responseDownloadUrl.data;\n }\n return Promise.reject(new Error(responseDownloadUrl.statusText));\n }).catch((error) => {\n isRejected = true;\n csvDownloadURLIssue = error;\n });\n } else csvDownloadURLIssue = 'no download url available';\n if (this.isUrlInvalid(file.downloadUrl)) {\n csvReportArray.push([file.csvReportTitle, 'issue', 'url is invalid']);\n }\n // try to download from access url\n if (isRejected) {\n responseData = await axiosInstance.get(file.accessUrl, requestSettings).then((responseAccessUrl) => {\n if (responseAccessUrl.status === 200) {\n isRejected = false;\n if (file.format.length > 0) fileFormat = getContentTypeFormat(responseAccessUrl.headers['content-type']);\n csvReportArray.push([file.csvReportTitle, 'delivered', csvDownloadURLIssue]);\n return responseAccessUrl.data;\n }\n return Promise.reject(new Error(responseAccessUrl.statusText));\n }).catch((error) => {\n isRejected = true;\n csvReportArray.push([file.csvReportTitle, 'issue', csvDownloadURLIssue, error]);\n });\n }\n if (!isRejected) folder.file(`${file.title}.${fileFormat}`, responseData, { binary: true });\n if (!this.isDownloadAllDistributionsCanceled) {\n this.downloadedFilesCounter += 1;\n this.downloadProgress = Math.floor(100 * this.downloadedFilesCounter / this.getDistributions.length);\n if (isRejected) this.failedDownloads += 1;\n } else {\n this.downloadedFilesCounter = 0;\n this.downloadProgress = 0;\n this.failedDownloads = 0;\n }\n } else csvReportArray.push([file.csvReportTitle, 'issue', `We can't download ${problematicFormat} files using the download all button. Please try to download this file using the download button next to the file name.`]);\n });\n\n await Promise.all(promises);\n csvReportArray.forEach((row) => {\n csvReport += row.join(',');\n csvReport += '\\n';\n });\n zip.file('file_report.csv', csvReport, { binary: true });\n },\n hideDownloadAllModal() {\n $('#downloadAllModal').modal('hide');\n },\n generateAndSaveZip(zip, zipName) {\n if (!this.isDownloadAllDistributionsCanceled) {\n this.numberOfFilesToZip = Object.keys(zip.files).length;\n this.isGeneratingZip = true;\n }\n\n class UserInterruptException {\n constructor(message) {\n this.message = message;\n this.name = 'UserInterruptException';\n }\n }\n\n zip.generateAsync({ type: 'blob', compression: 'DEFLATE' }, () => {\n if (this.isDownloadAllDistributionsCanceled) throw new UserInterruptException('user canceled generate zip operation');\n })\n .then((blob) => {\n this.isGeneratingZip = false;\n this.isGeneratingZipDone = true;\n this.isLoadingAllDistributionFiles = false;\n this.downloadAllSuccess = true;\n saveAs(blob, zipName);\n })\n .catch((e) => {\n this.isGeneratingZip = false;\n this.isDownloadAllDistributionsCanceled = false;\n this.isLoadingAllDistributionFiles = false;\n this.downloadAllError = true;\n this.downloadedFilesCounter = 0;\n this.downloadProgress = 0;\n this.numberOfFilesToZip = 0;\n console.warn(e); // eslint-disable-line\n });\n\n // works with chrome => to make it compatible to more browsers look here https://jimmywarting.github.io/StreamSaver.js/examples/saving-multiple-files.html open developer tools and find saving-multiple-files.html\n // install stream saver and import it + script src=\"https://cdn.jsdelivr.net/npm/web-streams-polyfill@2.0.2/dist/ponyfill.min.js\"\n // if we don't want to use his service worker we can configure something (I think we have to change the mitm url) => read the api https://jimmywarting.github.io/StreamSaver.js\n // I think IE will never work with this solution\n /* const writeStream = streamSaver.createWriteStream(zipName).getWriter();\n zip.generateInternalStream({ type: 'uint8array', streamFiles: true })\n .on('data', data => writeStream.write(data))\n .on('error', err => console.error(err))\n .on('end', () => writeStream.close())\n .resume(); */\n },\n cancelDownloadAll(source) {\n // stops axios operations\n source.cancel('user canceled axios operation');\n // stops zip operation\n this.isDownloadAllDistributionsCanceled = true;\n },\n async trackAndDownloadAllDistributions() {\n if (this.$piwik && this.$piwik.trackDownload) {\n this.$piwik.trackDownload(\n window.location.href,\n {\n files: JSON.stringify(this.files),\n downloadAll: 'true',\n format: 'all',\n }\n );\n }\n return await this.downloadAllDistributions();\n },\n async downloadAllDistributions() {\n $('#downloadAllModal').modal('show');\n this.downloadedFilesCounter = 0;\n this.downloadProgress = 0;\n this.failedDownloads = 0;\n this.numberOfFilesToZip = 0;\n this.isGeneratingZip = false;\n this.isGeneratingZipDone = false;\n this.isLoadingAllDistributionFiles = true;\n this.isDownloadAllDistributionsCanceled = false;\n this.downloadAllSuccess = false;\n this.downloadAllError = false;\n const getContentTypeFormat = (contentType) => {\n const startIndex = contentType.lastIndexOf('/') + 1;\n const endIndex = contentType.indexOf(';') !== -1 ? contentType.indexOf(';') : contentType.length;\n return contentType.substring(startIndex, endIndex);\n };\n\n const {default: JSZip} = await import('jszip');\n const zip = new JSZip();\n const zipName = `${this.getTranslationFor(this.getTitle, this.$route.query.locale, this.getLanguages)}.zip`;\n const folder = zip.folder(this.getTranslationFor(this.getCatalog.title, this.$route.query.locale, this.getLanguages));\n await this.fetchDistributionFiles(zip, this.files, folder, getContentTypeFormat);\n await this.generateAndSaveZip(zip, zipName);\n },\n // handle navigation to extern website (cancel bulk download and hide modal)\n beforeWindowUnload(e) {\n if (this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled) {\n e.preventDefault();\n // Chrome requires returnValue to be set\n e.returnValue = ''; // eslint-disable-line\n }\n },\n openRessourceAccessPopup() {\n // const modal = this.$refs.downloadAllModal;\n // const modal = document.getElementById('externalAccess');\n // console.log(\"openRessourceAccessPopup\", modal)\n // modal.addEventListener('shown.bs.modal', function() {\n // console.log(\"CLOSING\");\n // });\n this.openModal(this.trackAndDownloadAllDistributions, true);\n },\n onClose(e) {\n console.log(\"CLOSING\");\n }\n },\n created() {\n window.addEventListener('beforeunload', this.beforeWindowUnload);\n },\n // mounted() {\n // setTimeout(() => {\n // const modal = document.getElementById('externalAccess');\n // modal.addEventListener('click', function() {\n // console.log(\"CLOSING\");\n // });\n // })\n // },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.beforeWindowUnload);\n // const modal = this.$refs.downloadAllModal.$el;\n // modal.removeEventListener('hide.bs.modal', this.onClose);\n },\n setup() {\n const router = useRouter();\n\n onUnmounted(() => {\n router.beforeEach((to, from, next) => {\n if (this.isLoadingAllDistributionFiles && !this.isDownloadAllDistributionsCanceled) {\n const answer = window.confirm(this.$t('message.datasetDetails.datasets.leavePageWindow.text')); // eslint-disable-line\n if (answer) {\n // if modal is open we have to hide it when user tries to navigate back\n this.hideDownloadAllModal();\n this.cancelDownloadAll(this.cancelDownloadAllAxiosRequestSource);\n next();\n } else {\n next(false);\n }\n } else {\n this.hideDownloadAllModal();\n next();\n }\n })();\n })\n },\n}\n</script>\n\n<style scoped>\n\n</style>\n"],"names":["_sfc_main","mapGetters","cutFormatEnding","string","getFormat","distribution","has","isNil","type","getFileName","i","getUrls","getFileNameForCSV","getTranslationFor","zip","files","folder","getContentTypeFormat","csvReportArray","csvReport","csvDownloadURLIssue","problematicFormats","CancelToken","axios","axiosInstance","requestSettings","promises","file","problematicFormat","format","isRejected","responseData","fileFormat","responseDownloadUrl","error","responseAccessUrl","row","$","zipName","UserInterruptException","message","blob","saveAs","e","source","contentType","startIndex","endIndex","JSZip","router","useRouter","onUnmounted","to","from","next","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_17","_ctx","_openBlock","_createElementBlock","_hoisted_1","$data","_createBlock","_component_pv_button","$props","_withCtx","_createElementVNode","_createTextVNode","$options","_toDisplayString","_cache","_hoisted_2","_hoisted_3","_normalizeStyle","_hoisted_13","_hoisted_14","_createCommentVNode","_hoisted_15","_hoisted_16","$event","_hoisted_18"],"mappings":";;;;;;;;;AAuEA,MAAKA,IAAU;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACD,UAAU;AAAA,IACR,GAAGC,EAAW,kBAAkB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,QAAQ;AACN,YAAMC,IAAkB,CAAAC,MAAWA,EAAO,YAAY,GAAG,MAAM,KAAKA,EAAO,UAAU,GAAGA,EAAO,YAAY,GAAG,CAAC,IAAIA,GAC7GC,IAAY,CAACC,MAAiB;AAClC,YAAIC,EAAID,GAAc,WAAW,KAAK,CAACE,EAAMF,EAAa,OAAO,EAAE,GAAG;AACpE,gBAAMG,IAAOH,EAAa,OAAO;AACjC,iBAAOG,EAAK,YAAY,GAAG,MAAM,KAAKA,EAAK,YAAW,IAAKA,EAAK,UAAUA,EAAK,YAAY,GAAG,IAAI,GAAGA,EAAK,MAAM,EAAE;QACpH;AACA,eAAO;AAAA,SAEHC,IAAc,CAACJ,GAAcK,MACjC,GAAGR,EAAgB,KAAK,qBAAqBG,CAAY,CAAC,EAAE,UAAU,GAAG,KAAK,aAAa,qBAAqB,EAC7G,QAAQ,OAAO,GAAG,EAAE,KAAI,CAAE,IAAIK,CAAC,MAC/B,GAAGR,EAAgB,KAAK,2BAA2BG,CAAY,CAAC,EAAE,UAAU,GAAG,KAAK,aAAa,qBAAqB,EACtH,QAAQ,OAAO,GAAG,EAAE,KAAI,CAAE,IAAIK,CAAC,IAC9BC,IAAU,CAAAN,MAAiB,KAAK,iBAAiBA,CAAY,IACjE,EAAE,WAAW,GAAGA,EAAa,UAAU,CAAC,CAAC,IAAI,aAAa,GAAGA,EAAa,aAAa,CAAC,CAAC,GAAG,IAC1F,EAAE,WAAW,GAAGA,EAAa,UAAU,CAAC,CAAC,GAAC,GACxCO,IAAoB,CAAAP,MAAgB,KAAK,qBAAqBA,CAAY,EAAE,QAAQ,MAAM,EAAE,KAC7F,KAAK,2BAA2BA,CAAY,EAAE,QAAQ,MAAM,EAAE;AAKjE,aAJY,KAAK,iBAChB,IAAI,CAACA,GAAcK,OAAO;AAAA,QACzB,OAAOD,EAAYJ,GAAcK,IAAI,CAAC;AAAA,QAAG,GAAGC,EAAQN,CAAY;AAAA,QAAG,QAAQD,EAAUC,CAAY;AAAA,QAAG,gBAAgBO,EAAkBP,CAAY;AAAA,MACnJ,EAAC;AAAA,IAEN;AAAA,EACD;AAAA,EACD,OAAO;AACL,WAAO;AAAA,MACL,wBAAwB;AAAA,MACxB,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,iBAAiB;AAAA,MACjB,qBAAqB;AAAA,MACrB,+BAA+B;AAAA,MAC/B,qCAAqC;AAAA,MACrC,oCAAoC;AAAA,MACpC,oBAAoB;AAAA,MACpB,kBAAkB;AAAA,MAClB,cAAc;AAAA,QACZ,uBAAuB,KAAK,KAAK,QAAQ,eAAe,aAAa;AAAA,QACrE,YAAY,KAAK,KAAK,QAAQ,eAAe,aAAa;AAAA,MAC5D;AAAA,IACF;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACP,mBAAAQ;AAAA,IACA,MAAM,uBAAuBC,GAAKC,GAAOC,GAAQC,GAAsB;AACrE,YAAMC,IAAiB,CAAA;AACvB,UAAIC,IAAY;AAAA,GACZC;AACJ,YAAMC,IAAqB,CAAC,OAAO,KAAK,GAElCC,IAAcC,EAAM;AAC1B,WAAK,sCAAsCD,EAAY;AACvD,YAAME,IAAgB,KAAK,4BACrBC,IAAkB,EAAE,cAAc,QAAQ,aAAa,KAAK,oCAAoC,OAAO,SAAS,KAAK,aAAa,cAElIC,IAAWX,EAAM,IAAI,OAAOY,MAAS;AACzC,cAAMC,IAAoBP,EAAmB,KAAK,CAAAQ,MAAUA,MAAWF,EAAK,MAAM;AAClF,YAAKC;AAgDE,UAAAV,EAAe,KAAK,CAACS,EAAK,gBAAgB,SAAS,qBAAqBC,CAAiB,yHAAyH,CAAC;AAAA,aAhDlM;AACtB,cAAIE,IAAa,IACbC,GACAC,IAAaL,EAAK;AAGtB,UAAIrB,EAAIqB,GAAM,aAAa,IACzBI,IAAe,MAAMP,EAAc,IAAIG,EAAK,aAAaF,CAAe,EAAE,KAAK,CAACQ,MAC1EA,EAAoB,WAAW,OACjCH,IAAa,IACT,CAACH,EAAK,OAAO,SAAS,MAAGK,IAAaf,EAAqBgB,EAAoB,QAAQ,cAAc,CAAC,IAC1Gf,EAAe,KAAK,CAACS,EAAK,gBAAgB,WAAW,CAAC,GAC/CM,EAAoB,QAEtB,QAAQ,OAAO,IAAI,MAAMA,EAAoB,UAAU,CAAC,CAChE,EAAE,MAAM,CAACC,MAAU;AAClB,YAAAJ,IAAa,IACbV,IAAsBc;AAAA,UACxB,CAAC,IACId,IAAsB,6BACzB,KAAK,aAAaO,EAAK,WAAW,KACpCT,EAAe,KAAK,CAACS,EAAK,gBAAgB,SAAS,gBAAgB,CAAC,GAGlEG,MACFC,IAAe,MAAMP,EAAc,IAAIG,EAAK,WAAWF,CAAe,EAAE,KAAK,CAACU,MACxEA,EAAkB,WAAW,OAC/BL,IAAa,IACTH,EAAK,OAAO,SAAS,MAAGK,IAAaf,EAAqBkB,EAAkB,QAAQ,cAAc,CAAC,IACvGjB,EAAe,KAAK,CAACS,EAAK,gBAAgB,aAAaP,CAAmB,CAAC,GACpEe,EAAkB,QAEpB,QAAQ,OAAO,IAAI,MAAMA,EAAkB,UAAU,CAAC,CAC9D,EAAE,MAAM,CAACD,MAAU;AAClB,YAAAJ,IAAa,IACbZ,EAAe,KAAK,CAACS,EAAK,gBAAgB,SAASP,GAAqBc,CAAK,CAAC;AAAA,UAChF,CAAC,IAEEJ,KAAYd,EAAO,KAAK,GAAGW,EAAK,KAAK,IAAIK,CAAU,IAAID,GAAc,EAAE,QAAQ,GAAM,CAAA,GACrF,KAAK,sCAKR,KAAK,yBAAyB,GAC9B,KAAK,mBAAmB,GACxB,KAAK,kBAAkB,MANvB,KAAK,0BAA0B,GAC/B,KAAK,mBAAmB,KAAK,MAAM,MAAM,KAAK,yBAAyB,KAAK,iBAAiB,MAAM,GAC/FD,MAAY,KAAK,mBAAmB;AAAA,QAM1C;AAAA,MACJ,CAAC;AAED,YAAM,QAAQ,IAAIJ,CAAQ,GAC1BR,EAAe,QAAQ,CAACkB,MAAQ;AAC9B,QAAAjB,KAAaiB,EAAI,KAAK,GAAG,GACzBjB,KAAa;AAAA;AAAA,MACf,CAAC,GACDL,EAAI,KAAK,mBAAmBK,GAAW,EAAE,QAAQ,GAAK,CAAC;AAAA,IACxD;AAAA,IACD,uBAAuB;AACrB,MAAAkB,EAAE,mBAAmB,EAAE,MAAM,MAAM;AAAA,IACpC;AAAA,IACD,mBAAmBvB,GAAKwB,GAAS;AAC/B,MAAK,KAAK,uCACR,KAAK,qBAAqB,OAAO,KAAKxB,EAAI,KAAK,EAAE,QACjD,KAAK,kBAAkB;AAAA,MAGzB,MAAMyB,EAAuB;AAAA,QAC3B,YAAYC,GAAS;AACnB,eAAK,UAAUA,GACf,KAAK,OAAO;AAAA,QACd;AAAA,MACF;AAEA,MAAA1B,EAAI,cAAc,EAAE,MAAM,QAAQ,aAAa,UAAU,GAAG,MAAM;AAChE,YAAI,KAAK;AAAoC,gBAAM,IAAIyB,EAAuB,sCAAsC;AAAA,OACrH,EACE,KAAK,CAACE,MAAS;AACd,aAAK,kBAAkB,IACvB,KAAK,sBAAsB,IAC3B,KAAK,gCAAgC,IACrC,KAAK,qBAAqB,IAC1BC,EAAOD,GAAMH,CAAO;AAAA,OACrB,EACA,MAAM,CAACK,MAAM;AACZ,aAAK,kBAAkB,IACvB,KAAK,qCAAqC,IAC1C,KAAK,gCAAgC,IACrC,KAAK,mBAAmB,IACxB,KAAK,yBAAyB,GAC9B,KAAK,mBAAmB,GACxB,KAAK,qBAAqB,GAC1B,QAAQ,KAAKA,CAAC;AAAA,MAChB,CAAC;AAAA,IAYJ;AAAA,IACD,kBAAkBC,GAAQ;AAExB,MAAAA,EAAO,OAAO,+BAA+B,GAE7C,KAAK,qCAAqC;AAAA,IAC3C;AAAA,IACD,MAAM,mCAAmC;AACvC,aAAI,KAAK,UAAU,KAAK,OAAO,iBAC7B,KAAK,OAAO;AAAA,QACV,OAAO,SAAS;AAAA,QAChB;AAAA,UACE,OAAO,KAAK,UAAU,KAAK,KAAK;AAAA,UAChC,aAAa;AAAA,UACb,QAAQ;AAAA,QACV;AAAA,SAGG,MAAM,KAAK;IACnB;AAAA,IACD,MAAM,2BAA2B;AAC/B,MAAAP,EAAE,mBAAmB,EAAE,MAAM,MAAM,GACnC,KAAK,yBAAyB,GAC9B,KAAK,mBAAmB,GACxB,KAAK,kBAAkB,GACvB,KAAK,qBAAqB,GAC1B,KAAK,kBAAkB,IACvB,KAAK,sBAAsB,IAC3B,KAAK,gCAAgC,IACrC,KAAK,qCAAqC,IAC1C,KAAK,qBAAqB,IAC1B,KAAK,mBAAmB;AACxB,YAAMpB,IAAuB,CAAC4B,MAAgB;AAC5C,cAAMC,IAAaD,EAAY,YAAY,GAAG,IAAI,GAC5CE,IAAWF,EAAY,QAAQ,GAAG,MAAM,KAAKA,EAAY,QAAQ,GAAG,IAAIA,EAAY;AAC1F,eAAOA,EAAY,UAAUC,GAAYC,CAAQ;AAAA,SAG7C,EAAC,SAASC,EAAK,IAAI,MAAM,OAAO,OAAO,GACvClC,IAAM,IAAIkC,KACVV,IAAU,GAAG,KAAK,kBAAkB,KAAK,UAAU,KAAK,OAAO,MAAM,QAAQ,KAAK,YAAY,CAAC,QAC/FtB,IAASF,EAAI,OAAO,KAAK,kBAAkB,KAAK,WAAW,OAAO,KAAK,OAAO,MAAM,QAAQ,KAAK,YAAY,CAAC;AACpH,YAAM,KAAK,uBAAuBA,GAAK,KAAK,OAAOE,GAAQC,CAAoB,GAC/E,MAAM,KAAK,mBAAmBH,GAAKwB,CAAO;AAAA,IAC3C;AAAA;AAAA,IAED,mBAAmBK,GAAG;AACpB,MAAI,KAAK,iCAAiC,CAAC,KAAK,uCAC9CA,EAAE,eAAc,GAEhBA,EAAE,cAAc;AAAA,IAEnB;AAAA,IACD,2BAA2B;AAOzB,WAAK,UAAU,KAAK,kCAAkC,EAAI;AAAA,IAC3D;AAAA,IACD,QAAQA,GAAG;AACT,cAAQ,IAAI,SAAS;AAAA,IACvB;AAAA,EACD;AAAA,EACD,UAAU;AACR,WAAO,iBAAiB,gBAAgB,KAAK,kBAAkB;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASD,gBAAgB;AACd,WAAO,oBAAoB,gBAAgB,KAAK,kBAAkB;AAAA,EAGnE;AAAA,EACD,QAAQ;AACN,UAAMM,IAASC;AAEf,IAAAC,EAAY,MAAM;AAChB,MAAAF,EAAO,WAAW,CAACG,GAAIC,GAAMC,MAAS;AACpC,QAAI,KAAK,iCAAiC,CAAC,KAAK,qCAC/B,OAAO,QAAQ,KAAK,GAAG,sDAAsD,CAAC,KAG3F,KAAK,qBAAoB,GACzB,KAAK,kBAAkB,KAAK,mCAAmC,GAC/DA,OAEAA,EAAK,EAAK,KAGZ,KAAK,qBAAoB,GACzBA;MAEH,CAAA;KACF;AAAA,EACF;AACH;EAtWA,KAAA;AAAA,EAC+E,OAAM;;EAU5E,OAAM;AAAA,EAAa,iBAAc;AAAA,EAAS,iBAAc;AAAA,EAAQ,IAAG;AAAA,EAAmB,KAAI;AAAA,EAAmB,UAAS;AAAA,EAAK,MAAK;AAAA,EAAS,mBAAgB;AAAA,EAAoB,eAAY;;EACvL,OAAM;AAAA,EAAe,MAAK;GACxBC,IAAA,EAAA,OAAM,gBAAe,GACnBC,IAAA,EAAA,OAAM,eAAc,GACnBC,IAAA,EAAA,OAAM,cAAa,GAKpBC,IAAA,EAAA,OAAM,aAAY,GAChBC,IAAA,EAAA,OAAM,WAAU,GArBjCC,IAAA,CAAA,eAAA,GA2BiBC,IAAA,EAAA,OAAM,oDAAmD,GA3B1EC,IAAA,CAAA,OAAA,GA+BiBC,IAAA,EAAA,OAAM,oDAAmD,SA/B1E,KAAA,EAAA,SAAA,KAAA,EAAA;EAAA,KAAA;AAAA,EAuC0C,OAAM;AAAA,EAA4B,MAAK;;EAvCjF,KAAA;AAAA,EA0CiD,OAAM;GAGxCC,KAAA,EAAA,OAAM,eAAc;EA7CnC,KAAA;AAAA,EAmDmD,MAAK;AAAA,EAAS,OAAM;AAAA,EAAkB,gBAAa;;;;AAlDzF,SAAAC,EAAA,iBAAiB,SAAc,KAAAA,EAAA,WAAW,eAAU,UAA/DC,KAAAC,EAuDM,OAvDNC,GAuDM;AAAA,IAtDaC,EAA6B,sCAA9CC,EAKYC,GAAA;AAAA,MAPhB,KAAA;AAAA,MAEqD,OAAOC,EAAK;AAAA,MAAG,SAAS;AAAA,MAAO,SAASA,EAAO;AAAA,MAAG,UAAU;AAAA,MACrG,OAAM;AAAA;MAHlB,SAAAC,EAKM,MAAmC;AAAA,wBAAnCC,EAAmC,OAAA,EAA9B,OAAM,kBAAiB,GAAA,MAAA,EAAA;AAAA,QALlCC,EAKyC,QAChCV,EAAE,GAAA,6CAAA,CAAA,GAAA,CAAA;AAAA;MANX,GAAA;AAAA,yCAQIK,EAEYC,GAAA;AAAA,MAVhB,KAAA;AAAA,MAQsB,OAAM;AAAA,MAAoB,OAAOC,EAAK;AAAA,MAAG,SAAS;AAAA,MAAO,SAASA,EAAO;AAAA,MAAG,UAAU;AAAA,MAAO,QAAQI,EAAwB;AAAA;MARnJ,SAAAH,EASM,MAAuD;AAAA,QAT7DE,EAAAE,EASSZ,EAAE,GAAA,6CAAA,CAAA,GAAA,CAAA;AAAA;MATX,GAAA;AAAA;IAAAa,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAH,EAAA;AAAA,IAWID,EA4CM,OA5CNK,GA4CM;AAAA,MA3CJL,EA0CM,OA1CNM,GA0CM;AAAA,QAzCJN,EAwCM,OAxCNnB,GAwCM;AAAA,UAvCJmB,EAKM,OALNlB,GAKM;AAAA,YAJJkB,EAA+F,MAA/FjB,GAA+FoB,EAApEZ,EAAE,GAAA,wDAAA,CAAA,GAAA,CAAA;AAAA;UAfzCa,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAH,EAAA;AAAA,UAoBUD,EAwBM,OAxBNhB,GAwBM;AAAA,YAvBJgB,EAEM,OAFNf,GAEM;AAAA,cADJe,EAAoK,OAAA;AAAA,gBAA/J,OAAM;AAAA,gBAAe,MAAK;AAAA,gBAAe,OAtB5DO,cAsB8EZ,EAAgB,gBAAA,IAAA,CAAA;AAAA,gBAAO,iBAAeA,EAAgB;AAAA,gBAAE,iBAAc;AAAA,gBAAI,iBAAc;AAAA,cAtBtK,GAAA,MAAA,IAAAT,CAAA;AAAA;YAAAkB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAA;AAAA,YAwBYD,EAEM,OADD,MAAAG,EAAAZ,EAAA,GAA+D,wDAAA,CAAA,IAAA,QAAII,EAAsB,uBAAC,eAAc,IAAA,CAAA,IAAS,MAAGQ,EAAAZ,EAAA,iBAAiB,OAAO,eAAc,IAAA,CAAA,GAAA,CAAA;AAAA,YAzB3Ka,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAA;AAAA,YA2BYD,EAGM,OAHNb,GAGM;AAAA,cAFJa,EAAqH,eAA7GT,EAAE,GAAA,qDAAA,CAAA,IAA0D,MAAIY,EAAAR,EAAA,gBAAgB,eAAc,IAAA,CAAA,GAAA,CAAA;AAAA,cA5BpHS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAA;AAAA,cA6BcD,EAAoK,KAAA;AAAA,gBAAjK,OAAM;AAAA,gBAA2B,eAAY;AAAA,gBAAU,kBAAe;AAAA,gBAAU,OAAOT,EAAE,GAAA,4DAAA;AAAA,cAAgE,GAAA,QA7B1K,GAAAH,CAAA;AAAA;YAAAgB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAA;AAAA,YA+BYD,EAYM,OAZNX,GAYM;AAAA,cAXJW,EAMM,OAAA,MAAA;AAAA,gBAtCpBC,EAAAE,EAgCsBZ,KAAuE,0DAAA,EAAA,QAAAI,EAAA,mBAAmB,2BAA0B,KAC1H,CAAA;AAAA,gBAAYA,EAAA,iCAAiCA,EAAkB,qBAAA,UAA/DF,EAEO,QAnCvBe,KAkCqBjB,EAAE,GAAA,uDAAA,CAAA,GAAA,CAAA,KACkBI,EAA6B,sCAA9CF,EAED,QArCvBgB,KAoCqBlB,EAAE,GAAA,0DAAA,CAAA,GAAA,CAAA,KApCvBmB,EAAA,IAAA,EAAA;AAAA;cAAAN,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAA;AAAA,cAuCyBN,EAAe,mBAA1BH,EAAA,GAAAC,EAEM,OAFNkB,GAEMP,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,gBADJJ,EAAuC,QAAjC,EAAA,OAAM,UAAS,GAAC,cAAU,EAAA;AAAA,qBAEpBL,EAAmB,4BAAjCF,EAAqF,KAArFmB,IAAqE,cAAY,KA1C/FF,EAAA,IAAA,EAAA;AAAA;;UAAAN,EAAA,EAAA,MAAAA,EAAA,EAAA,IAAAH,EAAA;AAAA,UA6CUD,EAOM,OAPNV,IAOM;AAAA,YALW,CAAAK,EAAA,uBAAuBA,EAAgB,yBAAtDF,EAES,UAAA;AAAA,cAjDrB,KAAA;AAAA,cA+CoE,MAAK;AAAA,cAAS,OAAM;AAAA,cAAiB,gBAAa;AAAA,cAAS,SAAKW,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAS,MAAEX,EAAiB,kBAACP,EAAmC,mCAAA;AAAA,iBAC1KJ,EAAE,GAAA,8CAAA,CAAA,GAAA,CAAA,KAhDnBmB,EAAA,IAAA,EAAA;AAAA,YAAAN,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAH,EAAA;AAAA,YAkD0BN,EAAgB,yBAA9BF,EAAiL,UAAA;AAAA,cAlD7L,KAAA;AAAA,cAkD4C,MAAK;AAAA,cAAS,OAAM;AAAA,cAAkB,gCAAOS,EAAgC,iCAAA;AAAA,iBAAOX,EAAE,GAAA,6CAAA,CAAA,GAAA,CAAA,KACnGI,EAAkB,2BAArCF,EAAiK,UAAjKqB,IAAiKX,EAA5DZ,EAAE,GAAA,4CAAA,CAAA,GAAA,CAAA,KAnDnHmB,EAAA,IAAA,EAAA;AAAA;;;;QAAAA,EAAA,IAAA,EAAA;;;"}
|