Visitar URL original
USWDS - File Input: Replace inline javascript to meet content security policy (CSP) standards by jeffpw-goog · Pull Request #5997 · uswds/uswds · GitHub
Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 30 additions & 26 deletions packages/usa-file-input/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,22 @@ const addPreviewHeading = (fileInputEl, fileNames) => {
fileInputEl.setAttribute("aria-label", changeItemText);
};

/** Add an error listener to the image preview to set a fallback image
* @param {HTMLImageElement} previewImage - The image element
* @param {String} fallbackClass - The CSS class of the fallback image
*/
Comment thread
jeffpw-goog marked this conversation as resolved.
Resolved
const setPreviewFallback = (previewImage, fallbackClass) => {
previewImage.addEventListener(
"error",
() => {
const localPreviewImage = previewImage; // to avoid no-param-reassign from ESLint
localPreviewImage.src = SPACER_GIF;
localPreviewImage.classList.add(fallbackClass);
},
{ once: true },
);
};

/**
* When new files are applied to file input, this function generates previews
* and removes old ones.
Expand Down Expand Up @@ -393,37 +409,25 @@ const handleChange = (e, fileInputEl, instructions, dropTarget) => {
// Not all files will be able to generate previews. In case this happens, we provide several types "generic previews" based on the file extension.
reader.onloadend = function createFilePreview() {
const previewImage = document.getElementById(imageId);
if (fileName.indexOf(".pdf") > 0) {
previewImage.setAttribute(
"onerror",
`this.onerror=null;this.src="${SPACER_GIF}"; this.classList.add("${PDF_PREVIEW_CLASS}")`,
);
const fileExtension = fileName.split(".").pop();
Comment thread
jeffpw-goog marked this conversation as resolved.
Resolved
if (fileExtension === "pdf") {
setPreviewFallback(previewImage, PDF_PREVIEW_CLASS);
} else if (
fileName.indexOf(".doc") > 0 ||
fileName.indexOf(".pages") > 0
fileExtension === "doc" ||
fileExtension === "docx" ||
fileExtension === "pages"
) {
previewImage.setAttribute(
"onerror",
`this.onerror=null;this.src="${SPACER_GIF}"; this.classList.add("${WORD_PREVIEW_CLASS}")`,
);
setPreviewFallback(previewImage, WORD_PREVIEW_CLASS);
} else if (
fileName.indexOf(".xls") > 0 ||
fileName.indexOf(".numbers") > 0
fileExtension === "xls" ||
fileExtension === "xlsx" ||
fileExtension === "numbers"
) {
previewImage.setAttribute(
"onerror",
`this.onerror=null;this.src="${SPACER_GIF}"; this.classList.add("${EXCEL_PREVIEW_CLASS}")`,
);
} else if (fileName.indexOf(".mov") > 0 || fileName.indexOf(".mp4") > 0) {
previewImage.setAttribute(
"onerror",
`this.onerror=null;this.src="${SPACER_GIF}"; this.classList.add("${VIDEO_PREVIEW_CLASS}")`,
);
setPreviewFallback(previewImage, EXCEL_PREVIEW_CLASS);
} else if (fileExtension === "mov" || fileExtension === "mp4") {
setPreviewFallback(previewImage, VIDEO_PREVIEW_CLASS);
} else {
previewImage.setAttribute(
"onerror",
`this.onerror=null;this.src="${SPACER_GIF}"; this.classList.add("${GENERIC_PREVIEW_CLASS}")`,
);
setPreviewFallback(previewImage, GENERIC_PREVIEW_CLASS);
}

// Removes loader and displays preview
Expand Down