12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- ## - `FormData` for the JavaScript target: https://developer.mozilla.org/en-US/docs/Web/API/FormData
- when not defined(js):
- {.fatal: "Module jsformdata is designed to be used with the JavaScript backend.".}
- from std/dom import Blob
- type FormData* = ref object of JsRoot ## FormData API.
- func newFormData*(): FormData {.importjs: "new FormData()".}
- func add*(self: FormData; name: cstring; value: SomeNumber | bool | cstring | Blob) {.importjs: "#.append(#, #)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/append
- ##
- ## .. hint:: Duplicate keys are allowed and order is preserved.
- func add*(self: FormData; name: cstring; value: SomeNumber | bool | cstring | Blob; filename: cstring) {.importjs: "#.append(#, #, #)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/append
- ##
- ## .. hint:: Duplicate keys are allowed and order is preserved.
- func delete*(self: FormData; name: cstring) {.importjs: "#.$1(#)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/delete
- ##
- ## .. warning:: Deletes *all items* with the same key name.
- func getAll*(self: FormData; name: cstring): seq[cstring] {.importjs: "#.$1(#)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/getAll
- func hasKey*(self: FormData; name: cstring): bool {.importjs: "#.has(#)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/has
- func keys*(self: FormData): seq[cstring] {.importjs: "Array.from(#.$1())".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/keys
- func values*(self: FormData): seq[cstring] {.importjs: "Array.from(#.$1())".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/values
- func pairs*(self: FormData): seq[tuple[key, val: cstring]] {.importjs: "Array.from(#.entries())".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries
- func put*(self: FormData; name: cstring; value: SomeNumber | bool | cstring | Blob; filename: cstring) {.importjs: "#.set(#, #, #)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/set
- func `[]=`*(self: FormData; name: cstring; value: SomeNumber | bool | cstring | Blob) {.importjs: "#.set(#, #)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/set
- func `[]`*(self: FormData; name: cstring): cstring {.importjs: "#.get(#)".}
- ## https://developer.mozilla.org/en-US/docs/Web/API/FormData/get
- func clear*(self: FormData) {.importjs:
- "(() => { const frmdt = #; Array.from(frmdt.keys()).forEach((key) => frmdt.delete(key)) })()".}
- ## Convenience func to delete all items from `FormData`.
- func toCstring*(self: FormData): cstring {.importjs: "JSON.stringify(#)".}
- func `$`*(self: FormData): string = $toCstring(self)
- func len*(self: FormData): int {.importjs: "Array.from(#.entries()).length".}
- runnableExamples("-r:off"):
- let data: FormData = newFormData()
- data["key0"] = "value0".cstring
- data.add("key1".cstring, "value1".cstring)
- data.delete("key1")
- assert data.hasKey("key0")
- assert data["key0"] == "value0".cstring
- data.clear()
- assert data.len == 0
|