Module dnd
HTML drag and drop for JavaScript (src/page/dnd.odin; native/js/runtime/web_dnd.c): the drag data store behind a DataTransfer (its items, its mode, dropEffect and effectAllowed, the drag image), the files a page was given (by a drop, an <input type=file>) as browser objects read on demand, and HTMLInputElement.files. The store's mode follows the event being dispatched (HTML "drag data store mode"): read/write in dragstart, read-only in drop, protected otherwise (types and kinds are visible, data and files are not).
Exposed to: Window. Source: api/js_dnd.widl.
Odin: import "wren:dnd".
Types
handle DataTransfer : Object
Checked by the browser on every call (lookup_DataTransfer).
handle LocalFile : Object
Checked by the browser on every call (lookup_LocalFile).
enum DragItemKind : i32
DataTransferItem.kind
| member | value | |
|---|---|---|
String | 0 | |
File | 1 |
struct LocalFileInfo
The size and time of a file.
| field | type | |
|---|---|---|
size | i64 | bytes |
last_modified | f64 | File.lastModified (ms since the epoch) |
Functions
DataTransfer_create
DataTransfer DataTransfer_create()new DataTransfer(): an empty store in read/write mode.
Host: DataTransfer_create :: proc(c: ^Call) -> u64
DataTransfer_get_dropEffect
string DataTransfer_get_dropEffect(DataTransfer dt)dataTransfer.dropEffect ("none", "copy", "link", "move")
Host: DataTransfer_get_dropEffect :: proc(c: ^Call, dt: Api_DataTransfer) -> string
DataTransfer_set_dropEffect
void DataTransfer_set_dropEffect(DataTransfer dt, string value)Values other than the four are ignored.
Host: DataTransfer_set_dropEffect :: proc(c: ^Call, dt: Api_DataTransfer, value: string)
DataTransfer_get_effectAllowed
string DataTransfer_get_effectAllowed(DataTransfer dt)dataTransfer.effectAllowed
Host: DataTransfer_get_effectAllowed :: proc(c: ^Call, dt: Api_DataTransfer) -> string
DataTransfer_set_effectAllowed
void DataTransfer_set_effectAllowed(DataTransfer dt, string value)Ignored outside read/write mode and for a value that is not one of the nine.
Host: DataTransfer_set_effectAllowed :: proc(c: ^Call, dt: Api_DataTransfer, value: string)
DataTransfer_getData
string DataTransfer_getData(DataTransfer dt, string format)getData(format): "" in protected mode or when absent ("text" is text/plain, "url" the first URL of text/uri-list).
Host: DataTransfer_getData :: proc(c: ^Call, dt: Api_DataTransfer, format: string) -> string
DataTransfer_setData
void DataTransfer_setData(DataTransfer dt, string format, string data)setData(format, data): ignored outside read/write mode.
Host: DataTransfer_setData :: proc(c: ^Call, dt: Api_DataTransfer, format: string, data: string)
DataTransfer_clearData
void DataTransfer_clearData(DataTransfer dt, optional string format)clearData(format): every string item, or those of the format; ignored outside read/write mode.
Host: DataTransfer_clearData :: proc(c: ^Call, dt: Api_DataTransfer, format: Maybe(string))
DataTransfer_setDragImage
void DataTransfer_setDragImage(DataTransfer dt, Element image, i32 x, i32 y)setDragImage(image, x, y): ignored outside read/write mode.
Host: DataTransfer_setDragImage :: proc(c: ^Call, dt: Api_DataTransfer, image: Api_Element, x: i32, y: i32)
DataTransfer_typeList
string DataTransfer_typeList(DataTransfer dt)The types, in order, separated by "\n" ("Files" last when there are files).
Host: DataTransfer_typeList :: proc(c: ^Call, dt: Api_DataTransfer) -> string
DataTransfer_itemCount
i32 DataTransfer_itemCount(DataTransfer dt)The number of items (DataTransferItemList.length; 0 in disabled mode).
Host: DataTransfer_itemCount :: proc(c: ^Call, dt: Api_DataTransfer) -> i32
DataTransfer_itemKind
DragItemKind DataTransfer_itemKind(DataTransfer dt, i32 index) raisesAn item's kind (Invalid_Argument past the end).
Raises: returns an Error (see web).
Host: DataTransfer_itemKind :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> (Api_DragItemKind, Api_Error)
DataTransfer_itemType
string DataTransfer_itemType(DataTransfer dt, i32 index) raisesAn item's type.
Raises: returns an Error (see web).
Host: DataTransfer_itemType :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> (string, Api_Error)
DataTransfer_itemString
string DataTransfer_itemString(DataTransfer dt, i32 index) raisesA string item's data (Invalid_State in protected mode).
Raises: returns an Error (see web).
Host: DataTransfer_itemString :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> (string, Api_Error)
DataTransfer_itemFile
LocalFile DataTransfer_itemFile(DataTransfer dt, i32 index) raisesA file item's file (0: not a file, or protected mode).
Raises: returns an Error (see web).
Host: DataTransfer_itemFile :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> (u64, Api_Error)
DataTransfer_addString
void DataTransfer_addString(DataTransfer dt, string data, string type) raisesitems.add(data, type): Invalid_State outside read/write mode, Not_Supported when a string item of the type exists.
Raises: returns an Error (see web).
Host: DataTransfer_addString :: proc(c: ^Call, dt: Api_DataTransfer, data: string, type: string) -> Api_Error
DataTransfer_addFile
void DataTransfer_addFile(DataTransfer dt, LocalFile file) raisesitems.add(file) for a file of the browser (a dropped or chosen one).
Raises: returns an Error (see web).
Host: DataTransfer_addFile :: proc(c: ^Call, dt: Api_DataTransfer, file: Api_LocalFile) -> Api_Error
DataTransfer_addBytes
void DataTransfer_addBytes(DataTransfer dt, string name, string type, bytes data, f64 last_modified) raisesitems.add(file) for a File made by the page: its bytes are copied (Quota past the page's memory limit).
Raises: returns an Error (see web).
Host: DataTransfer_addBytes :: proc(c: ^Call, dt: Api_DataTransfer, name: string, type: string, data: []u8, last_modified: f64) -> Api_Error
DataTransfer_removeItem
void DataTransfer_removeItem(DataTransfer dt, i32 index) raisesitems.remove(index): Invalid_State outside read/write mode.
Raises: returns an Error (see web).
Host: DataTransfer_removeItem :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> Api_Error
DataTransfer_clearItems
void DataTransfer_clearItems(DataTransfer dt) raisesitems.clear(): Invalid_State outside read/write mode.
Raises: returns an Error (see web).
Host: DataTransfer_clearItems :: proc(c: ^Call, dt: Api_DataTransfer) -> Api_Error
DataTransfer_fileCount
i32 DataTransfer_fileCount(DataTransfer dt)The files (dataTransfer.files: none outside read/write and read-only mode).
Host: DataTransfer_fileCount :: proc(c: ^Call, dt: Api_DataTransfer) -> i32
DataTransfer_file
LocalFile DataTransfer_file(DataTransfer dt, i32 index) raisesOne of them.
Raises: returns an Error (see web).
Host: DataTransfer_file :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> (u64, Api_Error)
DataTransfer_mode
i32 DataTransfer_mode(DataTransfer dt)The mode: 0 protected, 1 read/write, 2 read-only.
Host: DataTransfer_mode :: proc(c: ^Call, dt: Api_DataTransfer) -> i32
LocalFile_name
string LocalFile_name(LocalFile file)A file's name (no directory).
Exposed to: Window, Worker.
Host: LocalFile_name :: proc(c: ^Call, file: Api_LocalFile) -> string
LocalFile_type
string LocalFile_type(LocalFile file)Its MIME type ("" when unknown).
Exposed to: Window, Worker.
Host: LocalFile_type :: proc(c: ^Call, file: Api_LocalFile) -> string
LocalFile_info
LocalFileInfo LocalFile_info(LocalFile file)Its size and time.
Exposed to: Window, Worker.
Host: LocalFile_info :: proc(c: ^Call, file: Api_LocalFile) -> Api_LocalFileInfo
LocalFile_read
i64 LocalFile_read(LocalFile file, i64 offset, out bytes into) raisesReads up to into's capacity from offset: the number of bytes read (Not_Found when the file is gone or
changed since it was given: File API "NotReadableError").
Exposed to: Window, Worker.
Raises: returns an Error (see web).
Host: LocalFile_read :: proc(c: ^Call, file: Api_LocalFile, offset: i64, into: []u8) -> (i64, Api_Error)
DataTransfer_itemFsHandle
string DataTransfer_itemFsHandle(DataTransfer dt, i32 index) raisesDataTransferItem.getAsFileSystemHandle(): the dropped file's or folder's handle (as Fs_showPicker describes one: root TAB path TAB kind TAB name), "" for a string item or outside read-only and read/write mode.
Raises: returns an Error (see web).
Host: DataTransfer_itemFsHandle :: proc(c: ^Call, dt: Api_DataTransfer, index: i32) -> (string, Api_Error)
DragEvent_dataTransfer
DataTransfer DragEvent_dataTransfer(Event event)DragEvent.dataTransfer of an event the browser dispatches (0 for another event).
Host: DragEvent_dataTransfer :: proc(c: ^Call, event: Api_Event) -> u64
InputFiles_count
i32 InputFiles_count(Element input)input.files.length (0 for an element that is not a file input).
Host: InputFiles_count :: proc(c: ^Call, input: Api_Element) -> i32
InputFiles_item
LocalFile InputFiles_item(Element input, i32 index) raisesinput.files[index]
Raises: returns an Error (see web).
Host: InputFiles_item :: proc(c: ^Call, input: Api_Element, index: i32) -> (u64, Api_Error)
InputFiles_assign
void InputFiles_assign(Element input, DataTransfer from) raisesinput.files = dataTransfer.files: the store's files become the input's selection (Invalid_State for an element that is not a file input).
Raises: returns an Error (see web).
Host: InputFiles_assign :: proc(c: ^Call, input: Api_Element, from: Api_DataTransfer) -> Api_Error