wj-elements 0.0.11 → 0.0.13
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/localize-20081fd1.js +55 -0
- package/dist/router-links-26e4a166.js +204 -0
- package/dist/style.css +2243 -2
- package/dist/wj-animation.js +35 -23
- package/dist/wj-aside.js +22 -16
- package/dist/wj-avatar.js +49 -30
- package/dist/wj-badge.js +22 -18
- package/dist/wj-breadcrumb.js +102 -50
- package/dist/wj-breadcrumbs.js +36 -19
- package/dist/wj-button-group.js +36 -22
- package/dist/wj-button.js +104 -39
- package/dist/wj-card-content.js +18 -14
- package/dist/wj-card-controls.js +18 -14
- package/dist/wj-card-header.js +20 -14
- package/dist/wj-card-subtitle.js +19 -15
- package/dist/wj-card-title.js +18 -14
- package/dist/wj-card.js +20 -14
- package/dist/wj-carousel-item.js +22 -16
- package/dist/wj-carousel.js +169 -92
- package/dist/wj-checkbox.js +46 -24
- package/dist/wj-chip.js +39 -21
- package/dist/wj-col.js +31 -17
- package/dist/wj-color-picker.js +877 -509
- package/dist/wj-container.js +20 -16
- package/dist/wj-copy-button.js +112 -64
- package/dist/wj-dialog.js +68 -42
- package/dist/wj-divider.js +20 -14
- package/dist/wj-dropdown.js +29 -17
- package/dist/wj-element.js +415 -241
- package/dist/wj-fetchAndParseCSS.js +49 -32
- package/dist/wj-file-upload-item.js +64 -38
- package/dist/wj-file-upload.js +237 -137
- package/dist/wj-footer.js +18 -14
- package/dist/wj-form.js +18 -14
- package/dist/wj-format-digital.js +40 -25
- package/dist/wj-grid.js +20 -16
- package/dist/wj-header.js +22 -16
- package/dist/wj-icon-picker.js +122 -68
- package/dist/wj-icon.js +144 -64
- package/dist/wj-img-comparer.js +72 -41
- package/dist/wj-img.js +31 -19
- package/dist/wj-infinite-scroll.js +90 -52
- package/dist/wj-input-file.js +50 -27
- package/dist/wj-input.js +169 -70
- package/dist/wj-item.js +34 -17
- package/dist/wj-label.js +21 -19
- package/dist/wj-list.js +20 -15
- package/dist/wj-main.js +18 -14
- package/dist/wj-masonry.js +140 -83
- package/dist/wj-master.js +492 -350
- package/dist/wj-menu-button.js +19 -15
- package/dist/wj-menu-item.js +150 -64
- package/dist/wj-menu-label.js +21 -17
- package/dist/wj-menu.js +24 -18
- package/dist/wj-popup.js +1140 -712
- package/dist/wj-progress-bar.js +100 -40
- package/dist/wj-radio-group.js +38 -25
- package/dist/wj-radio.js +46 -22
- package/dist/wj-rate.js +121 -71
- package/dist/wj-relative-time.js +48 -24
- package/dist/wj-route.js +11 -8
- package/dist/wj-router-link.js +22 -17
- package/dist/wj-router-outlet.js +135 -71
- package/dist/wj-routerx.js +1124 -641
- package/dist/wj-row.js +21 -19
- package/dist/wj-slider.js +97 -55
- package/dist/wj-split-view.js +81 -43
- package/dist/wj-store.js +195 -110
- package/dist/wj-textarea.js +86 -37
- package/dist/wj-thumbnail.js +19 -15
- package/dist/wj-toast.js +87 -34
- package/dist/wj-toggle.js +42 -24
- package/dist/wj-toolbar-action.js +27 -16
- package/dist/wj-toolbar.js +26 -19
- package/dist/wj-tooltip.js +40 -24
- package/dist/wj-visually-hidden.js +18 -14
- package/package.json +1 -1
- package/dist/localize-762a9f0f.js +0 -43
- package/dist/router-links-e0087f84.js +0 -146
package/dist/wj-file-upload.js
CHANGED
|
@@ -1,138 +1,176 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
import WJElement from "./wj-element.js";
|
|
8
|
+
import { L as Localizer } from "./localize-20081fd1.js";
|
|
6
9
|
import "./wj-store.js";
|
|
7
|
-
function
|
|
10
|
+
function fileType() {
|
|
8
11
|
return [
|
|
9
12
|
{
|
|
10
|
-
type: ["jpg", "jpeg", "png", "gif", "bpm", "tiff", "svg"],
|
|
11
|
-
name: "photo"
|
|
13
|
+
"type": ["jpg", "jpeg", "png", "gif", "bpm", "tiff", "svg"],
|
|
14
|
+
"name": "photo"
|
|
12
15
|
},
|
|
13
16
|
{
|
|
14
|
-
type: ["zip", "rar", "cab", "jar", "tar", "gzip", "uue", "bz2", "scorm", "war"],
|
|
15
|
-
name: "file-type-zip"
|
|
17
|
+
"type": ["zip", "rar", "cab", "jar", "tar", "gzip", "uue", "bz2", "scorm", "war"],
|
|
18
|
+
"name": "file-type-zip"
|
|
16
19
|
},
|
|
17
20
|
{
|
|
18
|
-
type: ["mov", "mp4", "avi", "flv"],
|
|
19
|
-
name: "video"
|
|
21
|
+
"type": ["mov", "mp4", "avi", "flv"],
|
|
22
|
+
"name": "video"
|
|
20
23
|
},
|
|
21
24
|
{
|
|
22
|
-
type: ["m4a", "mp3", "wav"],
|
|
23
|
-
name: "audio"
|
|
25
|
+
"type": ["m4a", "mp3", "wav"],
|
|
26
|
+
"name": "audio"
|
|
24
27
|
},
|
|
25
28
|
{
|
|
26
|
-
type: ["html", "html"],
|
|
27
|
-
name: "file-type-html"
|
|
29
|
+
"type": ["html", "html"],
|
|
30
|
+
"name": "file-type-html"
|
|
28
31
|
},
|
|
29
32
|
{
|
|
30
|
-
type: ["css"],
|
|
31
|
-
name: "code"
|
|
33
|
+
"type": ["css"],
|
|
34
|
+
"name": "code"
|
|
32
35
|
},
|
|
33
36
|
{
|
|
34
|
-
type: ["txt"],
|
|
35
|
-
name: "file-type-txt"
|
|
37
|
+
"type": ["txt"],
|
|
38
|
+
"name": "file-type-txt"
|
|
36
39
|
},
|
|
37
40
|
{
|
|
38
|
-
type: ["doc", "docx"],
|
|
39
|
-
name: "file-type-doc"
|
|
41
|
+
"type": ["doc", "docx"],
|
|
42
|
+
"name": "file-type-doc"
|
|
40
43
|
},
|
|
41
44
|
{
|
|
42
|
-
type: ["xls", "xlsx"],
|
|
43
|
-
name: "file-type-xls"
|
|
45
|
+
"type": ["xls", "xlsx"],
|
|
46
|
+
"name": "file-type-xls"
|
|
44
47
|
},
|
|
45
48
|
{
|
|
46
|
-
type: ["pdf"],
|
|
47
|
-
name: "file-type-pdf"
|
|
49
|
+
"type": ["pdf"],
|
|
50
|
+
"name": "file-type-pdf"
|
|
48
51
|
},
|
|
49
52
|
{
|
|
50
|
-
type: ["ppt", "pptx", "odp"],
|
|
51
|
-
name: "file-type-ppt"
|
|
53
|
+
"type": ["ppt", "pptx", "odp"],
|
|
54
|
+
"name": "file-type-ppt"
|
|
52
55
|
}
|
|
53
56
|
];
|
|
54
57
|
}
|
|
55
|
-
function
|
|
56
|
-
let
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
function getFileTypeIcon(type) {
|
|
59
|
+
let searchType;
|
|
60
|
+
if (type.toLowerCase() !== "folder") {
|
|
61
|
+
fileType().forEach((i) => {
|
|
62
|
+
if (i.type.includes(type.toLowerCase())) {
|
|
63
|
+
searchType = i.name;
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
} else {
|
|
67
|
+
searchType = "folder";
|
|
68
|
+
}
|
|
69
|
+
return searchType;
|
|
60
70
|
}
|
|
61
|
-
function
|
|
62
|
-
console.log("FILE",
|
|
63
|
-
const
|
|
64
|
-
console.log("BASE MIME TYPE",
|
|
65
|
-
let
|
|
66
|
-
|
|
71
|
+
function isValidFileType(file, acceptedFileTypes) {
|
|
72
|
+
console.log("FILE", file, acceptedFileTypes);
|
|
73
|
+
const baseMimeType = file.type.split("/")[0];
|
|
74
|
+
console.log("BASE MIME TYPE", baseMimeType);
|
|
75
|
+
let acceptedTypes = Array.isArray(acceptedFileTypes) ? acceptedFileTypes : acceptedFileTypes.split(",");
|
|
76
|
+
console.log("ACCEPTED TYPES", acceptedTypes);
|
|
77
|
+
if (acceptedTypes.length === 0) {
|
|
67
78
|
throw new Error("acceptedFileTypes is empty");
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
79
|
+
}
|
|
80
|
+
for (let type of acceptedTypes) {
|
|
81
|
+
if (type.includes(baseMimeType + "/*")) {
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
if (type.includes(file.type) || type.includes(file.type.split("/")[1])) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
72
89
|
}
|
|
73
|
-
function
|
|
74
|
-
console.log("UPLOAD FILE:",
|
|
75
|
-
let
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
function uploadFile(file, chunkSize, preview) {
|
|
91
|
+
console.log("UPLOAD FILE:", file, chunkSize, preview);
|
|
92
|
+
let start = 0;
|
|
93
|
+
const progressArray = new Array(Math.ceil(file.size / chunkSize)).fill(0);
|
|
94
|
+
const readAndUploadChunk = (start2, end) => {
|
|
95
|
+
const reader = new FileReader();
|
|
96
|
+
const chunkIndex = start2 / chunkSize;
|
|
97
|
+
const chunk = file.slice(start2, end);
|
|
98
|
+
reader.onload = (e) => {
|
|
99
|
+
const xhr = new XMLHttpRequest();
|
|
100
|
+
xhr.open("POST", "/upload", true);
|
|
101
|
+
xhr.setRequestHeader("Content-Range", `${start2}-${end}/${file.size}`);
|
|
102
|
+
xhr.upload.onprogress = (event) => {
|
|
103
|
+
if (event.lengthComputable) {
|
|
104
|
+
const progress = event.loaded / event.total * 100;
|
|
105
|
+
progressArray[chunkIndex] = progress;
|
|
106
|
+
progressArray.reduce((a, b) => a + b, 0) / progressArray.length;
|
|
84
107
|
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
108
|
+
};
|
|
109
|
+
xhr.onload = () => {
|
|
110
|
+
if (xhr.status == 200 || xhr.status == 201) {
|
|
111
|
+
progressArray[chunkIndex] = 100;
|
|
112
|
+
start2 += chunkSize;
|
|
113
|
+
if (start2 < file.size) {
|
|
114
|
+
preview.setAttribute("uploaded", start2);
|
|
115
|
+
readAndUploadChunk(start2, Math.min(start2 + chunkSize, file.size));
|
|
116
|
+
} else {
|
|
117
|
+
preview.setAttribute("uploaded", start2);
|
|
118
|
+
console.log("Upload complete");
|
|
119
|
+
}
|
|
120
|
+
} else {
|
|
121
|
+
console.error("Error during upload: ", xhr.statusText);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
xhr.send(e.target.result);
|
|
125
|
+
};
|
|
126
|
+
reader.readAsArrayBuffer(chunk);
|
|
89
127
|
};
|
|
90
|
-
|
|
128
|
+
readAndUploadChunk(start, Math.min(start + chunkSize, file.size));
|
|
91
129
|
}
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
class F extends v {
|
|
130
|
+
const styles = '/*\n[ WJ File Upload ]\n*/\n:host {\n width: 100%;\n}\n\n.native-file-upload {\n width: 100%;\n}\n\n.file-label {\n background: var(--wj-color-contrast-0);\n border: 1px dashed var(--wj-border-color);\n border-radius: var(--wj-border-radius-medium);\n align-items: center;\n justify-content: center;\n display: flex;\n padding: 1rem;\n margin-bottom: 0.5rem;\n flex-direction: column;\n}\n\n.file-preview {\n display: grid;\n grid-template-columns: auto 1fr 1fr;\n grid-template-rows: auto auto auto;\n gap: 0 0;\n grid-template-areas: "image name name" "image size size" "progress progress progress";\n}\n\n.file-image {\n grid-area: image;\n align-items: center;\n display: flex;\n}\n\n.file-name {\n grid-area: name;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.file-size {\n grid-area: size;\n display: flex;\n}\n\n.file-progress {\n grid-area: progress;\n}\n\nwj-icon {\n margin-right: 0.25rem;\n}\n\nwj-img {\n margin-right: 0.25rem;\n}\n\n.file-info > span {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\nwj-slider {\n flex-basis: 100%;\n margin-top: 0.5rem;\n}\n\n::part(slider)::-webkit-slider-thumb {\n visibility: hidden;\n}\n::part(slider)::-moz-range-thumb {\n visibility: hidden;\n}\n::part(slider)::-ms-thumb {\n visibility: hidden;\n}\n\nwj-img {\n width: 50px;\n height: 50px;\n display: flex;\n align-items: center;\n padding: 0.25rem;\n border: 1px solid var(--wj-border-color);\n border-radius: var(--wj-border-radius-medium);\n}';
|
|
131
|
+
class FileUpload extends WJElement {
|
|
95
132
|
constructor() {
|
|
96
133
|
super();
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
this.resetFormState()
|
|
134
|
+
__publicField(this, "className", "FileUpload");
|
|
135
|
+
__publicField(this, "handleDrop", (event) => {
|
|
136
|
+
const fileList = event.dataTransfer.files;
|
|
137
|
+
this.resetFormState();
|
|
138
|
+
this.uploadFiles(fileList);
|
|
101
139
|
});
|
|
102
|
-
|
|
140
|
+
__publicField(this, "handleInputChange", (event) => {
|
|
103
141
|
this.resetFormState();
|
|
104
142
|
try {
|
|
105
|
-
this.handleSubmit(
|
|
106
|
-
} catch (
|
|
107
|
-
console.log("NOT VALID 1",
|
|
143
|
+
this.handleSubmit(event);
|
|
144
|
+
} catch (err) {
|
|
145
|
+
console.log("NOT VALID 1", err);
|
|
108
146
|
return;
|
|
109
147
|
}
|
|
110
148
|
});
|
|
111
|
-
this.localizer = new
|
|
149
|
+
this.localizer = new Localizer(this);
|
|
112
150
|
}
|
|
113
|
-
set acceptedTypes(
|
|
114
|
-
this.setAttribute("accepted-types",
|
|
151
|
+
set acceptedTypes(value) {
|
|
152
|
+
this.setAttribute("accepted-types", value);
|
|
115
153
|
}
|
|
116
154
|
get acceptedTypes() {
|
|
117
|
-
const
|
|
118
|
-
return this.hasAttribute("accepted-types") ?
|
|
155
|
+
const accepted = this.getAttribute("accepted-types");
|
|
156
|
+
return this.hasAttribute("accepted-types") ? accepted : "";
|
|
119
157
|
}
|
|
120
|
-
set chunkSize(
|
|
121
|
-
this.setAttribute("chunk-size",
|
|
158
|
+
set chunkSize(value) {
|
|
159
|
+
this.setAttribute("chunk-size", value);
|
|
122
160
|
}
|
|
123
161
|
get chunkSize() {
|
|
124
|
-
const
|
|
125
|
-
return this.hasAttribute("chunk-size") ?
|
|
162
|
+
const chunk = this.getAttribute("chunk-size");
|
|
163
|
+
return this.hasAttribute("chunk-size") ? chunk : 1024 * 1024;
|
|
126
164
|
}
|
|
127
|
-
set maxFileSize(
|
|
128
|
-
this.setAttribute("max-file-size",
|
|
165
|
+
set maxFileSize(value) {
|
|
166
|
+
this.setAttribute("max-file-size", value);
|
|
129
167
|
}
|
|
130
168
|
get maxFileSize() {
|
|
131
|
-
const
|
|
132
|
-
return this.hasAttribute("max-file-size") ?
|
|
169
|
+
const fileSize = this.getAttribute("max-file-size");
|
|
170
|
+
return this.hasAttribute("max-file-size") ? fileSize * 1024 * 1024 : 1024 * 1024;
|
|
133
171
|
}
|
|
134
172
|
static get cssStyleSheet() {
|
|
135
|
-
return
|
|
173
|
+
return styles;
|
|
136
174
|
}
|
|
137
175
|
static get observedAttributes() {
|
|
138
176
|
return [];
|
|
@@ -140,82 +178,144 @@ class F extends v {
|
|
|
140
178
|
setupAttributes() {
|
|
141
179
|
this.isShadowRoot = "open";
|
|
142
180
|
}
|
|
143
|
-
draw(
|
|
144
|
-
let
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
let
|
|
149
|
-
|
|
150
|
-
let
|
|
151
|
-
|
|
152
|
-
let
|
|
153
|
-
|
|
181
|
+
draw(context, store, params) {
|
|
182
|
+
let fragment = document.createDocumentFragment();
|
|
183
|
+
let native = document.createElement("div");
|
|
184
|
+
native.classList.add("native-file-upload");
|
|
185
|
+
native.setAttribute("part", "native");
|
|
186
|
+
let label = document.createElement("div");
|
|
187
|
+
label.classList.add("file-label");
|
|
188
|
+
let button = document.createElement("wj-button");
|
|
189
|
+
button.innerText = this.label || this.localizer.translate("wj.file.upload.button");
|
|
190
|
+
let slot = document.createElement("slot");
|
|
191
|
+
let fileInput = document.createElement("input");
|
|
192
|
+
fileInput.setAttribute("type", "file");
|
|
193
|
+
fileInput.setAttribute("multiple", "");
|
|
194
|
+
fileInput.setAttribute("style", "display:none;");
|
|
195
|
+
button.appendChild(slot);
|
|
196
|
+
button.appendChild(fileInput);
|
|
197
|
+
this.fileInput = fileInput;
|
|
198
|
+
let fileList = document.createElement("div");
|
|
199
|
+
fileList.classList.add("file-list");
|
|
200
|
+
label.appendChild(slot);
|
|
201
|
+
label.appendChild(button);
|
|
202
|
+
native.appendChild(fileInput);
|
|
203
|
+
native.appendChild(label);
|
|
204
|
+
native.appendChild(fileList);
|
|
205
|
+
fragment.appendChild(native);
|
|
206
|
+
this.native = native;
|
|
207
|
+
this.fileList = fileList;
|
|
208
|
+
this.button = button;
|
|
209
|
+
return fragment;
|
|
154
210
|
}
|
|
155
211
|
afterDraw() {
|
|
156
212
|
this.button.addEventListener("click", () => {
|
|
157
213
|
this.fileInput.click();
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
this.native.addEventListener("
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
214
|
+
});
|
|
215
|
+
this.fileInput.addEventListener("change", this.handleInputChange);
|
|
216
|
+
this.native.addEventListener("drop", this.handleDrop);
|
|
217
|
+
let dragEventCounter = 0;
|
|
218
|
+
this.native.addEventListener("dragenter", (event) => {
|
|
219
|
+
event.preventDefault();
|
|
220
|
+
if (dragEventCounter === 0) {
|
|
221
|
+
this.native.classList.add("highlight");
|
|
222
|
+
}
|
|
223
|
+
dragEventCounter += 1;
|
|
224
|
+
});
|
|
225
|
+
this.native.addEventListener("dragover", (event) => {
|
|
226
|
+
event.preventDefault();
|
|
227
|
+
if (dragEventCounter === 0) {
|
|
228
|
+
dragEventCounter = 1;
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
this.native.addEventListener("dragleave", (event) => {
|
|
232
|
+
event.preventDefault();
|
|
233
|
+
dragEventCounter -= 1;
|
|
234
|
+
if (dragEventCounter <= 0) {
|
|
235
|
+
dragEventCounter = 0;
|
|
236
|
+
this.native.classList.remove("highlight");
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
this.native.addEventListener("drop", (event) => {
|
|
240
|
+
event.preventDefault();
|
|
241
|
+
dragEventCounter = 0;
|
|
242
|
+
this.native.classList.remove("highlight");
|
|
168
243
|
});
|
|
169
244
|
}
|
|
170
245
|
createButton() {
|
|
171
|
-
let
|
|
172
|
-
|
|
173
|
-
let
|
|
174
|
-
|
|
246
|
+
let button = document.createElement("wj-button");
|
|
247
|
+
button.innerText = this.label || this.localizer.translate("wj.file.upload.button");
|
|
248
|
+
let slot = document.createElement("slot");
|
|
249
|
+
let fileInput = document.createElement("input");
|
|
250
|
+
fileInput.setAttribute("type", "file");
|
|
251
|
+
fileInput.setAttribute("multiple", "");
|
|
252
|
+
fileInput.setAttribute("style", "display:none;");
|
|
253
|
+
button.appendChild(slot);
|
|
254
|
+
button.appendChild(fileInput);
|
|
255
|
+
this.fileInput = fileInput;
|
|
256
|
+
return button;
|
|
175
257
|
}
|
|
176
|
-
handleSubmit(
|
|
177
|
-
|
|
258
|
+
handleSubmit(event) {
|
|
259
|
+
event.preventDefault();
|
|
260
|
+
this.uploadFiles(this.fileInput.files);
|
|
178
261
|
}
|
|
179
262
|
// tu treba pridat kontrolu chunku
|
|
180
|
-
uploadFiles(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
263
|
+
uploadFiles(files) {
|
|
264
|
+
if (files.length === 0) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
Array.from(files).forEach((file) => {
|
|
268
|
+
this.assertFilesValid(file);
|
|
269
|
+
let preview;
|
|
270
|
+
let reader = new FileReader();
|
|
271
|
+
reader.onload = (e) => {
|
|
272
|
+
preview = this.createPreview(file, reader);
|
|
273
|
+
this.fileList.appendChild(preview);
|
|
274
|
+
uploadFile(file, this.chunkSize, preview);
|
|
275
|
+
};
|
|
276
|
+
reader.readAsDataURL(file);
|
|
187
277
|
});
|
|
188
278
|
}
|
|
189
|
-
createPreview(
|
|
190
|
-
let
|
|
191
|
-
|
|
279
|
+
createPreview(file, reader) {
|
|
280
|
+
let preview = document.createElement("wj-file-upload-item");
|
|
281
|
+
preview.setAttribute("name", file.name);
|
|
282
|
+
preview.setAttribute("size", file.size);
|
|
283
|
+
preview.setAttribute("uploaded", "0");
|
|
284
|
+
preview.setAttribute("progress", "0");
|
|
285
|
+
preview.innerHTML = `<wj-icon slot="img" name="${getFileTypeIcon(file.type.split("/")[1])}" size="large"></wj-icon>`;
|
|
286
|
+
return preview;
|
|
192
287
|
}
|
|
193
|
-
createThumbnail(
|
|
194
|
-
let
|
|
195
|
-
|
|
288
|
+
createThumbnail(file, reader) {
|
|
289
|
+
let img = document.createElement("img");
|
|
290
|
+
img.setAttribute("src", reader.result);
|
|
291
|
+
return img;
|
|
196
292
|
}
|
|
197
293
|
// TODO: alowed types a size limit by malo byt cez attributy
|
|
198
|
-
assertFilesValid(
|
|
199
|
-
const { name:
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
294
|
+
assertFilesValid(file) {
|
|
295
|
+
const { name: fileName, size: fileSize } = file;
|
|
296
|
+
console.log("FILE", file, this.acceptedTypes);
|
|
297
|
+
if (!isValidFileType(file, this.acceptedTypes)) {
|
|
298
|
+
throw new Error(`❌ FILE: "${fileName}" Valid file types are: "${this.acceptedTypes}"`);
|
|
299
|
+
}
|
|
300
|
+
if (fileSize > this.maxFileSize) {
|
|
301
|
+
throw new Error(`❌ File "${fileName}" could not be uploaded. Only images up to ${this.maxFileSize} MB are allowed. Nie je to ${fileSize}`);
|
|
302
|
+
}
|
|
204
303
|
}
|
|
205
|
-
updateStatusMessage(
|
|
304
|
+
updateStatusMessage(text) {
|
|
206
305
|
}
|
|
207
|
-
updateProgressBar(
|
|
208
|
-
const
|
|
209
|
-
this.context.querySelector("#id-" +
|
|
306
|
+
updateProgressBar(value, id) {
|
|
307
|
+
const percent = Math.round(value);
|
|
308
|
+
this.context.querySelector("#id-" + id).value = percent;
|
|
210
309
|
}
|
|
211
310
|
showPendingState() {
|
|
212
311
|
this.updateStatusMessage("⏳ Pending...");
|
|
213
312
|
}
|
|
214
313
|
resetFormState() {
|
|
215
|
-
this.fileList.textContent = ""
|
|
314
|
+
this.fileList.textContent = "";
|
|
315
|
+
this.updateStatusMessage(`🤷♂ Nothing's uploaded`);
|
|
216
316
|
}
|
|
217
317
|
}
|
|
218
|
-
customElements.get("wj-file-upload") || window.customElements.define("wj-file-upload",
|
|
318
|
+
customElements.get("wj-file-upload") || window.customElements.define("wj-file-upload", FileUpload);
|
|
219
319
|
export {
|
|
220
|
-
|
|
320
|
+
FileUpload
|
|
221
321
|
};
|
package/dist/wj-footer.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
import WJElement from "./wj-element.js";
|
|
5
8
|
import "./wj-store.js";
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
class l extends i {
|
|
9
|
+
const styles = "/*\n[ Wj Footer ]\n*/\n:host {\n --wj-footer-height: 60px;\n padding: 0 20px;\n flex-shrink: 0;\n height: var(--wj-footer-height);\n display: block;\n}";
|
|
10
|
+
class Footer extends WJElement {
|
|
9
11
|
constructor() {
|
|
10
12
|
super();
|
|
11
|
-
|
|
13
|
+
__publicField(this, "className", "Footer");
|
|
12
14
|
}
|
|
13
15
|
static get cssStyleSheet() {
|
|
14
|
-
return
|
|
16
|
+
return styles;
|
|
15
17
|
}
|
|
16
18
|
static get observedAttributes() {
|
|
17
19
|
return [];
|
|
@@ -19,12 +21,14 @@ class l extends i {
|
|
|
19
21
|
setupAttributes() {
|
|
20
22
|
this.isShadowRoot = "open";
|
|
21
23
|
}
|
|
22
|
-
draw(
|
|
23
|
-
let
|
|
24
|
-
|
|
24
|
+
draw(context, store, params) {
|
|
25
|
+
let fragment = document.createDocumentFragment();
|
|
26
|
+
let element = document.createElement("slot");
|
|
27
|
+
fragment.appendChild(element);
|
|
28
|
+
return fragment;
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
|
-
customElements.get("wj-footer") || window.customElements.define("wj-footer",
|
|
31
|
+
customElements.get("wj-footer") || window.customElements.define("wj-footer", Footer);
|
|
28
32
|
export {
|
|
29
|
-
|
|
33
|
+
Footer
|
|
30
34
|
};
|
package/dist/wj-form.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
+
var __publicField = (obj, key, value) => {
|
|
4
|
+
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
+
return value;
|
|
6
|
+
};
|
|
7
|
+
import WJElement from "./wj-element.js";
|
|
5
8
|
import "./wj-store.js";
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
class u extends a {
|
|
9
|
+
const styles = "/*\n[ Wj Form ]\n*/\n:host {\n width: 100%;\n}";
|
|
10
|
+
class Form extends WJElement {
|
|
9
11
|
constructor() {
|
|
10
12
|
super();
|
|
11
|
-
|
|
13
|
+
__publicField(this, "className", "Form");
|
|
12
14
|
}
|
|
13
15
|
static get cssStyleSheet() {
|
|
14
|
-
return
|
|
16
|
+
return styles;
|
|
15
17
|
}
|
|
16
18
|
static get observedAttributes() {
|
|
17
19
|
return [];
|
|
@@ -19,12 +21,14 @@ class u extends a {
|
|
|
19
21
|
setupAttributes() {
|
|
20
22
|
this.isShadowRoot = "open";
|
|
21
23
|
}
|
|
22
|
-
draw(
|
|
23
|
-
let
|
|
24
|
-
|
|
24
|
+
draw(context, store, params) {
|
|
25
|
+
let fragment = document.createDocumentFragment();
|
|
26
|
+
let element = document.createElement("slot");
|
|
27
|
+
fragment.appendChild(element);
|
|
28
|
+
return fragment;
|
|
25
29
|
}
|
|
26
30
|
}
|
|
27
|
-
customElements.get("wj-form") || window.customElements.define("wj-form",
|
|
31
|
+
customElements.get("wj-form") || window.customElements.define("wj-form", Form);
|
|
28
32
|
export {
|
|
29
|
-
|
|
33
|
+
Form
|
|
30
34
|
};
|