{/if}
</div>
{else}
- <ul class="fileUpload__fileList">
+ <ul class="fileList">
{foreach from=$files item=file}
- <li class="fileUpload__fileList__item">
+ <li class="fileList__item">
{unsafe:$file->toHtmlElement()}
</li>
{/foreach}
link.title = file.filename;
link.textContent = file.filename;
- const filename = element.querySelector(".attachment__item__filename")!;
+ const filename = element.querySelector(".fileList__item__filename")!;
filename.innerHTML = "";
filename.append(link);
moreOptions.innerHTML = '<fa-icon name="ellipsis-vertical"></fa-icon>';
const buttonList = document.createElement("div");
- buttonList.classList.add("attachment__item__buttons");
+ buttonList.classList.add("fileList__item__buttons");
insertButton.classList.add("button", "small");
buttonList.append(insertButton, moreOptions);
}
function markElementAsErroneous(element: HTMLElement, errorMessage: string): void {
- element.classList.add("attachment__item--error");
+ element.classList.add("fileList__item--error");
const errorElement = document.createElement("div");
errorElement.classList.add("attachemnt__item__errorMessage");
export function createAttachmentFromFile(file: WoltlabCoreFileElement, editor: HTMLElement) {
const element = document.createElement("li");
- element.classList.add("attachment__item");
+ element.classList.add("fileList__item", "attachment__item");
const fileWrapper = document.createElement("div");
- fileWrapper.classList.add("attachment__item__file");
+ fileWrapper.classList.add("fileList__item__file");
fileWrapper.append(file);
const filename = document.createElement("div");
- filename.classList.add("attachment__item__filename");
+ filename.classList.add("fileList__item__filename");
filename.textContent = file.filename || file.dataset.filename!;
const fileSize = document.createElement("div");
- fileSize.classList.add("attachment__item__fileSize");
+ fileSize.classList.add("fileList__item__fileSize");
fileSize.textContent = formatFilesize(file.fileSize || parseInt(file.dataset.fileSize!));
element.append(fileWrapper, filename, fileSize);
});
}
- let fileList = container.querySelector<HTMLElement>(".attachment__list");
+ let fileList = container.querySelector<HTMLElement>(".fileList");
if (fileList === null) {
fileList = document.createElement("ol");
- fileList.classList.add("attachment__list");
+ fileList.classList.add("fileList");
uploadButton.insertAdjacentElement("afterend", fileList);
}
}
get classPrefix(): string {
- return this.showBigPreview ? "fileUpload__preview__" : "fileUpload__fileList__";
+ return this.showBigPreview ? "fileUpload__preview__" : "fileList__";
}
get showBigPreview(): boolean {
return this.#singleFileUpload && this.#imageOnly;
}
- protected addButtons(element: WoltlabCoreFileElement): void {
+ protected addButtons(container: HTMLElement, element: WoltlabCoreFileElement): void {
const buttons = document.createElement("ul");
buttons.classList.add("buttonList");
buttons.classList.add(this.classPrefix + "item__buttons");
this.addReplaceButton(element, buttons);
}
- element.parentElement!.append(buttons);
+ container.append(buttons);
}
#markElementUploadHasFailed(container: HTMLElement, element: WoltlabCoreFileElement, reason: unknown): void {
}
}
- async #registerFile(element: WoltlabCoreFileElement, elementContainer: HTMLElement | null = null): Promise<void> {
- if (elementContainer === null) {
+ async #registerFile(element: WoltlabCoreFileElement, container: HTMLElement | null = null): Promise<void> {
+ if (container === null) {
if (this.showBigPreview) {
- elementContainer = this.#container.querySelector(".fileUpload__preview");
- if (elementContainer === null) {
- elementContainer = document.createElement("div");
- elementContainer.classList.add("fileUpload__preview");
- this.#uploadButton.insertAdjacentElement("beforebegin", elementContainer);
+ container = this.#container.querySelector(".fileUpload__preview");
+ if (container === null) {
+ container = document.createElement("div");
+ container.classList.add("fileUpload__preview");
+ this.#uploadButton.insertAdjacentElement("beforebegin", container);
}
+ container.append(element);
} else {
- elementContainer = document.createElement("li");
- elementContainer.classList.add("fileUpload__fileList__item");
- this.#container.querySelector(".fileUpload__fileList")!.append(elementContainer);
+ container = document.createElement("li");
+ container.classList.add("fileList__item");
+ this.#container.querySelector(".fileList")!.append(container);
}
- elementContainer.append(element);
}
- // add filename and filesize information
if (!this.showBigPreview) {
+ // create a new container for the file element
+ const fileContainer = document.createElement("div");
+ fileContainer.classList.add(this.classPrefix + "item__file");
+ fileContainer.append(element);
+ container.append(fileContainer);
+
+ // add filename and filesize information
const filename = document.createElement("div");
filename.classList.add(this.classPrefix + "item__filename");
filename.textContent = element.filename || element.dataset.filename!;
- elementContainer.append(filename);
+ container.append(filename);
const fileSize = document.createElement("div");
fileSize.classList.add(this.classPrefix + "item__fileSize");
fileSize.textContent = formatFilesize(element.fileSize || parseInt(element.dataset.fileSize!));
- elementContainer.append(fileSize);
+ container.append(fileSize);
}
try {
tmpContainer.append(element);
this.#uploadButton.insertAdjacentElement("afterend", tmpContainer);
- elementContainer = tmpContainer;
+ container = tmpContainer;
}
}
- this.#markElementUploadHasFailed(elementContainer, element, reason);
+ this.#markElementUploadHasFailed(container, element, reason);
return;
}
previewImage.classList.add(this.classPrefix + "item__previewImage");
filenameLink.append(previewImage);
- const filenameContainer = elementContainer.querySelector("." + this.classPrefix + "item__filename")!;
+ const filenameContainer = container.querySelector("." + this.classPrefix + "item__filename")!;
filenameContainer.innerHTML = "";
filenameContainer.append(filenameLink);
input.type = "hidden";
input.name = this.#singleFileUpload ? this.#fieldId : this.#fieldId + "[]";
input.value = element.fileId!.toString();
- elementContainer.append(input);
+ container.append(input);
- this.addButtons(element);
+ this.addButtons(container, element);
}
}
link.classList.add("jsImageViewer");
link.title = file.filename;
link.textContent = file.filename;
- const filename = element.querySelector(".attachment__item__filename");
+ const filename = element.querySelector(".fileList__item__filename");
filename.innerHTML = "";
filename.append(link);
Listener_1.default.trigger();
moreOptions.setAttribute("aria-label", (0, Language_1.getPhrase)("wcf.global.button.more"));
moreOptions.innerHTML = '<fa-icon name="ellipsis-vertical"></fa-icon>';
const buttonList = document.createElement("div");
- buttonList.classList.add("attachment__item__buttons");
+ buttonList.classList.add("fileList__item__buttons");
insertButton.classList.add("button", "small");
buttonList.append(insertButton, moreOptions);
element.append(buttonList);
markElementAsErroneous(element, errorMessage);
}
function markElementAsErroneous(element, errorMessage) {
- element.classList.add("attachment__item--error");
+ element.classList.add("fileList__item--error");
const errorElement = document.createElement("div");
errorElement.classList.add("attachemnt__item__errorMessage");
errorElement.textContent = errorMessage;
}
function createAttachmentFromFile(file, editor) {
const element = document.createElement("li");
- element.classList.add("attachment__item");
+ element.classList.add("fileList__item", "attachment__item");
const fileWrapper = document.createElement("div");
- fileWrapper.classList.add("attachment__item__file");
+ fileWrapper.classList.add("fileList__item__file");
fileWrapper.append(file);
const filename = document.createElement("div");
- filename.classList.add("attachment__item__filename");
+ filename.classList.add("fileList__item__filename");
filename.textContent = file.filename || file.dataset.filename;
const fileSize = document.createElement("div");
- fileSize.classList.add("attachment__item__fileSize");
+ fileSize.classList.add("fileList__item__fileSize");
fileSize.textContent = (0, FileUtil_1.formatFilesize)(file.fileSize || parseInt(file.dataset.fileSize));
element.append(fileWrapper, filename, fileSize);
void file.ready
},
});
}
- let fileList = container.querySelector(".attachment__list");
+ let fileList = container.querySelector(".fileList");
if (fileList === null) {
fileList = document.createElement("ol");
- fileList.classList.add("attachment__list");
+ fileList.classList.add("fileList");
uploadButton.insertAdjacentElement("afterend", fileList);
}
uploadButton.addEventListener("uploadStart", (event) => {
});
}
get classPrefix() {
- return this.showBigPreview ? "fileUpload__preview__" : "fileUpload__fileList__";
+ return this.showBigPreview ? "fileUpload__preview__" : "fileList__";
}
get showBigPreview() {
return this.#singleFileUpload && this.#imageOnly;
}
- addButtons(element) {
+ addButtons(container, element) {
const buttons = document.createElement("ul");
buttons.classList.add("buttonList");
buttons.classList.add(this.classPrefix + "item__buttons");
if (this.#singleFileUpload) {
this.addReplaceButton(element, buttons);
}
- element.parentElement.append(buttons);
+ container.append(buttons);
}
#markElementUploadHasFailed(container, element, reason) {
if (reason instanceof Error) {
element.parentElement.remove();
}
}
- async #registerFile(element, elementContainer = null) {
- if (elementContainer === null) {
+ async #registerFile(element, container = null) {
+ if (container === null) {
if (this.showBigPreview) {
- elementContainer = this.#container.querySelector(".fileUpload__preview");
- if (elementContainer === null) {
- elementContainer = document.createElement("div");
- elementContainer.classList.add("fileUpload__preview");
- this.#uploadButton.insertAdjacentElement("beforebegin", elementContainer);
+ container = this.#container.querySelector(".fileUpload__preview");
+ if (container === null) {
+ container = document.createElement("div");
+ container.classList.add("fileUpload__preview");
+ this.#uploadButton.insertAdjacentElement("beforebegin", container);
}
+ container.append(element);
}
else {
- elementContainer = document.createElement("li");
- elementContainer.classList.add("fileUpload__fileList__item");
- this.#container.querySelector(".fileUpload__fileList").append(elementContainer);
+ container = document.createElement("li");
+ container.classList.add("fileList__item");
+ this.#container.querySelector(".fileList").append(container);
}
- elementContainer.append(element);
}
- // add filename and filesize information
if (!this.showBigPreview) {
+ // create a new container for the file element
+ const fileContainer = document.createElement("div");
+ fileContainer.classList.add(this.classPrefix + "item__file");
+ fileContainer.append(element);
+ container.append(fileContainer);
+ // add filename and filesize information
const filename = document.createElement("div");
filename.classList.add(this.classPrefix + "item__filename");
filename.textContent = element.filename || element.dataset.filename;
- elementContainer.append(filename);
+ container.append(filename);
const fileSize = document.createElement("div");
fileSize.classList.add(this.classPrefix + "item__fileSize");
fileSize.textContent = (0, FileUtil_1.formatFilesize)(element.fileSize || parseInt(element.dataset.fileSize));
- elementContainer.append(fileSize);
+ container.append(fileSize);
}
try {
await element.ready;
const tmpContainer = document.createElement("div");
tmpContainer.append(element);
this.#uploadButton.insertAdjacentElement("afterend", tmpContainer);
- elementContainer = tmpContainer;
+ container = tmpContainer;
}
}
- this.#markElementUploadHasFailed(elementContainer, element, reason);
+ this.#markElementUploadHasFailed(container, element, reason);
return;
}
if (this.showBigPreview) {
previewImage.loading = "lazy";
previewImage.classList.add(this.classPrefix + "item__previewImage");
filenameLink.append(previewImage);
- const filenameContainer = elementContainer.querySelector("." + this.classPrefix + "item__filename");
+ const filenameContainer = container.querySelector("." + this.classPrefix + "item__filename");
filenameContainer.innerHTML = "";
filenameContainer.append(filenameLink);
Listener_1.default.trigger();
input.type = "hidden";
input.name = this.#singleFileUpload ? this.#fieldId : this.#fieldId + "[]";
input.value = element.fileId.toString();
- elementContainer.append(input);
- this.addButtons(element);
+ container.append(input);
+ this.addButtons(container, element);
}
}
exports.FileProcessor = FileProcessor;
}
/* attachments tab in editor */
-.attachment__list {
- display: grid;
- gap: 10px;
- grid-auto-flow: row;
- // TODO: use container queries to make this more dynamic?
- grid-template-columns: repeat(3, 1fr);
-}
-
-.attachment__list:not(:empty) {
- margin-top: 20px;
-}
-
-.attachment__item {
- border: 1px solid var(--wcfContentBorderInner);
- border-radius: var(--wcfBorderRadius);
- box-shadow: var(--wcfBoxShadowCard);
- display: grid;
- grid-template-areas:
- "file filename"
- "file fileSize"
- "file buttons";
- grid-template-columns: 80px auto;
- padding: 10px;
-}
-
-.attachment__item--error {
- border-color: var(--wcfStatusErrorBorder);
-}
-
-.attachment__item--error .attachment__item__file {
- color: var(--wcfStatusErrorText);
-}
-
-.attachment__item__file {
- display: flex;
- grid-area: file;
- justify-content: center;
- margin-right: 10px;
-}
-
-.attachment__item__filename {
- font-size: 12px;
- grid-area: filename;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.attachment__item__fileSize {
- color: var(--wcfContentDimmedText);
- font-size: 12px;
- grid-area: fileSize;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
-}
-
-.attachment__item__buttons {
- column-gap: 5px;
- display: flex;
- grid-area: buttons;
- justify-content: end;
-}
-
.formAttachmentContent {
.formAttachmentList {
display: flex;
--- /dev/null
+.fileList {
+ display: grid;
+ gap: 10px;
+ grid-auto-flow: row;
+ // TODO: use container queries to make this more dynamic?
+ grid-template-columns: repeat(3, 1fr);
+}
+
+.fileList:not(:empty) {
+ margin-top: 20px;
+}
+
+.fileList__item {
+ border: 1px solid var(--wcfContentBorderInner);
+ border-radius: var(--wcfBorderRadius);
+ box-shadow: var(--wcfBoxShadowCard);
+ display: grid;
+ grid-template-areas:
+ "file filename"
+ "file fileSize"
+ "file buttons";
+ grid-template-columns: 80px auto;
+ padding: 10px;
+}
+
+.fileList__item--error {
+ border-color: var(--wcfStatusErrorBorder);
+}
+
+.fileList__item--error .fileList__item__file {
+ color: var(--wcfStatusErrorText);
+}
+
+.fileList__item__file {
+ display: flex;
+ grid-area: file;
+ justify-content: center;
+ margin-right: 10px;
+}
+
+.fileList__item__filename {
+ font-size: 12px;
+ grid-area: filename;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.fileList__item__fileSize {
+ color: var(--wcfContentDimmedText);
+ font-size: 12px;
+ grid-area: fileSize;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.fileList__item__buttons {
+ column-gap: 5px;
+ display: flex;
+ grid-area: buttons;
+ justify-content: end;
+}
flex-direction: column;
woltlab-core-file {
-
img {
max-width: 100%;
max-height: 100%;
.fileUpload__preview__buttons {
margin-top: 5px;
}
-
-.fileUpload__fileList {
-
-}