diff --git a/frontend/src/components/DropdownModal.vue b/frontend/src/components/DropdownModal.vue
new file mode 100644
index 00000000..66780120
--- /dev/null
+++ b/frontend/src/components/DropdownModal.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/components/files/CsvViewer.vue b/frontend/src/components/files/CsvViewer.vue
index 38c2de59..9e1904af 100644
--- a/frontend/src/components/files/CsvViewer.vue
+++ b/frontend/src/components/files/CsvViewer.vue
@@ -21,19 +21,37 @@
@@ -74,10 +92,11 @@
diff --git a/frontend/src/types/global.d.ts b/frontend/src/types/global.d.ts
index 5475c908..287388f0 100644
--- a/frontend/src/types/global.d.ts
+++ b/frontend/src/types/global.d.ts
@@ -10,4 +10,8 @@ declare global {
// TODO: no idea what the exact type is
__vue__: any;
}
+
+ interface HTMLElement {
+ clickOutsideEvent?: (event: Event) => void;
+ }
}
diff --git a/frontend/src/utils/encodings.ts b/frontend/src/utils/encodings.ts
index 80f1e219..9be1017a 100644
--- a/frontend/src/utils/encodings.ts
+++ b/frontend/src/utils/encodings.ts
@@ -1,4 +1,5 @@
export const availableEncodings = [
+ // encodings
"utf-8",
"ibm866",
"iso-8859-2",
@@ -37,6 +38,178 @@ export const availableEncodings = [
"euc-kr",
"utf-16be",
"utf-16le",
+ // label encodings
+ "unicode-1-1-utf-8",
+ "utf8",
+ "866",
+ "cp866",
+ "csibm866",
+ "csisolatin2",
+ "iso-ir-101",
+ "iso8859-2",
+ "iso88592",
+ "iso_8859-2",
+ "iso_8859-2:1987",
+ "l2",
+ "latin2",
+ "csisolatin3",
+ "iso-ir-109",
+ "iso8859-3",
+ "iso88593",
+ "iso_8859-3",
+ "iso_8859-3:1988",
+ "l3",
+ "latin3",
+ "csisolatin4",
+ "iso-ir-110",
+ "iso8859-4",
+ "iso88594",
+ "iso_8859-4",
+ "iso_8859-4:1988",
+ "l4",
+ "latin4",
+ "csisolatincyrillic",
+ "cyrillic",
+ "iso-ir-144",
+ "iso88595",
+ "iso_8859-5",
+ "iso_8859-5:1988",
+ "arabic",
+ "asmo-708",
+ "csiso88596e",
+ "csiso88596i",
+ "csisolatinarabic",
+ "ecma-114",
+ "iso-8859-6-e",
+ "iso-8859-6-i",
+ "iso-ir-127",
+ "iso8859-6",
+ "iso88596",
+ "iso_8859-6",
+ "iso_8859-6:1987",
+ "csisolatingreek",
+ "ecma-118",
+ "elot_928",
+ "greek",
+ "greek8",
+ "iso-ir-126",
+ "iso8859-7",
+ "iso88597",
+ "iso_8859-7",
+ "iso_8859-7:1987",
+ "sun_eu_greek",
+ "csiso88598e",
+ "csisolatinhebrew",
+ "hebrew",
+ "iso-8859-8-e",
+ "iso-ir-138",
+ "iso8859-8",
+ "iso88598",
+ "iso_8859-8",
+ "iso_8859-8:1988",
+ "visual",
+ "csiso88598i",
+ "logical",
+ "csisolatin6",
+ "iso-ir-157",
+ "iso8859-10",
+ "iso885910",
+ "l6",
+ "latin6",
+ "iso8859-13",
+ "iso885913",
+ "iso8859-14",
+ "iso885914",
+ "csisolatin9",
+ "iso8859-15",
+ "iso885915",
+ "l9",
+ "latin9",
+ "cskoi8r",
+ "koi",
+ "koi8",
+ "koi8_r",
+ "csmacintosh",
+ "mac",
+ "x-mac-roman",
+ "dos-874",
+ "iso-8859-11",
+ "iso8859-11",
+ "iso885911",
+ "tis-620",
+ "cp1250",
+ "x-cp1250",
+ "cp1251",
+ "x-cp1251",
+ "ansi_x3.4-1968",
+ "ascii",
+ "cp1252",
+ "cp819",
+ "csisolatin1",
+ "ibm819",
+ "iso-8859-1",
+ "iso-ir-100",
+ "iso8859-1",
+ "iso88591",
+ "iso_8859-1",
+ "iso_8859-1:1987",
+ "l1",
+ "latin1",
+ "us-ascii",
+ "x-cp1252",
+ "cp1253",
+ "x-cp1253",
+ "cp1254",
+ "csisolatin5",
+ "iso-8859-9",
+ "iso-ir-148",
+ "iso8859-9",
+ "iso88599",
+ "iso_8859-9",
+ "iso_8859-9:1989",
+ "l5",
+ "latin5",
+ "x-cp1254",
+ "cp1255",
+ "x-cp1255",
+ "cp1256",
+ "x-cp1256",
+ "cp1257",
+ "x-cp1257",
+ "cp1258",
+ "x-cp1258",
+ "x-mac-ukrainian",
+ "chinese",
+ "csgb2312",
+ "csiso58gb231280",
+ "gb2312",
+ "gb_2312",
+ "gb_2312-80",
+ "iso-ir-58",
+ "x-gbk",
+ "big5-hkscs",
+ "cn-big5",
+ "csbig5",
+ "x-x-big5",
+ "cseucpkdfmtjapanese",
+ "x-euc-jp",
+ "csiso2022jp",
+ "csshiftjis",
+ "ms_kanji",
+ "shift-jis",
+ "sjis",
+ "windows-31j",
+ "x-sjis",
+ "cseuckr",
+ "csksc56011987",
+ "iso-ir-149",
+ "korean",
+ "ks_c_5601-1987",
+ "ks_c_5601-1989",
+ "ksc5601",
+ "ksc_5601",
+ "windows-949",
+ "utf-16",
];
export function decode(content: ArrayBuffer, encoding: string): string {
diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts
index d7f0bd9b..faca1539 100644
--- a/frontend/src/utils/index.ts
+++ b/frontend/src/utils/index.ts
@@ -4,3 +4,25 @@ import { partial } from "filesize";
* Formats filesize as KiB/MiB/...
*/
export const filesize = partial({ base: 2 });
+
+export const vClickOutside = {
+ created(el: HTMLElement, binding: any) {
+ el.clickOutsideEvent = (event: Event) => {
+ const target = event.target;
+
+ if (target instanceof Node) {
+ if (!el.contains(target)) {
+ binding.value(event);
+ }
+ }
+ };
+
+ document.addEventListener("click", el.clickOutsideEvent);
+ },
+
+ unmounted(el: HTMLElement) {
+ if (el.clickOutsideEvent) {
+ document.removeEventListener("click", el.clickOutsideEvent);
+ }
+ },
+};
diff --git a/frontend/src/views/files/Preview.vue b/frontend/src/views/files/Preview.vue
index 9a67de2d..2a60e7df 100644
--- a/frontend/src/views/files/Preview.vue
+++ b/frontend/src/views/files/Preview.vue
@@ -311,7 +311,11 @@ const isPdf = computed(() => fileStore.req?.extension.toLowerCase() == ".pdf");
const isEpub = computed(
() => fileStore.req?.extension.toLowerCase() == ".epub"
);
-const isCsv = computed(() => fileStore.req?.extension.toLowerCase() == ".csv");
+const isCsv = computed(
+ () =>
+ fileStore.req?.extension.toLowerCase() == ".csv" &&
+ fileStore.req.size <= CSV_MAX_SIZE
+);
const isResizeEnabled = computed(() => resizePreview);
diff --git a/http/resource.go b/http/resource.go
index 7066f35a..f528473d 100644
--- a/http/resource.go
+++ b/http/resource.go
@@ -43,7 +43,7 @@ var resourceGetHandler = withUser(func(w http.ResponseWriter, r *http.Request, d
return renderJSON(w, r, file)
} else if encoding == "true" {
if file.Type != "text" {
- return http.StatusUnsupportedMediaType, fmt.Errorf("file is not a text file")
+ return renderJSON(w, r, file)
}
f, err := d.user.Fs.Open(r.URL.Path)