scrapbox-file-uploader
簡単にfileをbrowserに取り込むscriptをTSで書き直したもの
2022-04-17 14:14:38 ファイルが選択されていなかったらundefinedを返す
$ deno check --remote -r=https://scrapbox.io https://scrapbox.io/api/code/takker/scrapbox-file-uploader/mod.ts
code:mod.ts
/// <reference no-default-lib="true" />
/// <reference lib="esnext" />
/// <reference lib="dom" />
export interface UploadInit {
/** uploadできるファイルの種類 */
accept: string;
/** 複数個ファイルをuploadできるかどうか */
multiple?: boolean;
}
export function upload(
init: Omit<UploadInit, "multiple"> & { multiple?: false },
): Promise<File | undefined>;
export function upload(
init: Omit<UploadInit, "multiple"> & { multiple: true },
): Promise<FileList | undefined>;
export function upload(init: UploadInit): Promise<FileList | File | undefined> {
return new Promise((resolve, reject) => {
const input = document.createElement("input");
input.type = "file";
input.accept = init.accept;
input.multiple = init.multiple ?? false;
input.addEventListener("change", () => {
resolve(
init.multiple === true
? (!input.files ? undefined : input.files.length === 0 ? undefined : input.files)
: (input.files?.0 ?? undefined),
);
});
input.addEventListener("error", reject);
input.click();
});
}
code:mod.js
function i(n){return new Promise((t,l)=>{const e=document.createElement("input");e.type="file",e.accept=n.accept,e.multiple=n.multiple??!1,e.addEventListener("change",()=>{t(n.multiple===!0?e.files?e.files.length===0?void 0:e.files:void 0:e.files?.0??void 0)}),e.addEventListener("error",l),e.click()})}export{i as upload};
#2023-04-11 08:34:31
#2022-08-25 19:22:55
#2022-04-17 13:36:40
#2022-04-13 09:32:20