diff options
| -rw-r--r-- | vfs/vfs.d.ts | 30 | ||||
| -rw-r--r-- | vfs/vfs.ts | 71 |
2 files changed, 36 insertions, 65 deletions
diff --git a/vfs/vfs.d.ts b/vfs/vfs.d.ts index 2d3a538..177fcfd 100644 --- a/vfs/vfs.d.ts +++ b/vfs/vfs.d.ts @@ -2,18 +2,18 @@ import { WuiResponseInterface } from "../response"; export interface WuiVfsNodeInterface { name: string; path: string; - is_dir?: boolean; - content_type?: string; - mod_time?: number; - size?: number; - mode?: string; - childs?: WuiVfsNodeInterface[]; - content?: string; + is_dir: boolean; + content_type: string; + mod_time: number; + size: number; + mode: string; + childs: WuiVfsNodeInterface[]; + content: string; } export interface WuiVfsOptions { id: string; Open(path: string, is_dir: boolean): Promise<WuiResponseInterface>; - OpenNode(node: WuiVfsNode): Promise<WuiResponseInterface>; + OpenNode(node: WuiVfsNodeInterface): Promise<WuiResponseInterface>; } export declare class WuiVfs { opts: WuiVfsOptions; @@ -21,17 +21,7 @@ export declare class WuiVfs { private com_path; private com_list; constructor(opts: WuiVfsOptions); - OpenNode(node: WuiVfsNode): void; + OpenNode(node: WuiVfsNodeInterface): void; OpenDir(path: string): Promise<void>; -} -export declare class WuiVfsNode implements WuiVfsNodeInterface { - path: string; - name: string; - content_type: string; - mod_time: number; - size: number; - mode: string; - is_dir: boolean; - childs: WuiVfsNode[]; - constructor(opts: WuiVfsNodeInterface); + Set(node: WuiVfsNodeInterface): void; } @@ -7,15 +7,18 @@ import { WuiResponseInterface } from "../response" export interface WuiVfsNodeInterface { name: string path: string - is_dir?: boolean - content_type?: string - mod_time?: number - size?: number - mode?: string - childs?: WuiVfsNodeInterface[] - content?: string // If its not empty, it MUST be encoded in base64. + is_dir: boolean + content_type: string + mod_time: number + size: number + mode: string + childs: WuiVfsNodeInterface[] + content: string // If its not empty, it MUST be encoded in base64. } +type PathClickHandler = (path: string) => void +type NodeClickHandler = (node: WuiVfsNodeInterface) => void + export interface WuiVfsOptions { id: string @@ -25,7 +28,7 @@ export interface WuiVfsOptions { // OpenNode define an handler that will be called when a file is clicked // from the WuiVfsList. - OpenNode(node: WuiVfsNode): Promise<WuiResponseInterface> + OpenNode(node: WuiVfsNodeInterface): Promise<WuiResponseInterface> } export class WuiVfs { @@ -48,7 +51,7 @@ export class WuiVfs { }) this.el.appendChild(this.com_path.el) - this.com_list = new WuiVfsList((node: WuiVfsNode) => { + this.com_list = new WuiVfsList((node: WuiVfsNodeInterface) => { this.OpenNode(node) }) this.el.appendChild(this.com_list.el) @@ -56,7 +59,7 @@ export class WuiVfs { // OpenNode is a handler that will be called when a node is clicked // inside the WuiVfsList. - OpenNode(node: WuiVfsNode): void { + OpenNode(node: WuiVfsNodeInterface): void { if (node.is_dir) { this.OpenDir(node.path) } else { @@ -71,42 +74,20 @@ export class WuiVfs { if (res.code != 200) { return } - let node = new WuiVfsNode(res.data as WuiVfsNodeInterface) - this.com_path.Open(node) - this.com_list.Open(node) + this.Set(res.data as WuiVfsNodeInterface) } -} - -export class WuiVfsNode implements WuiVfsNodeInterface { - path: string - name: string - content_type: string - mod_time: number - size: number - mode: string - is_dir: boolean - childs: WuiVfsNode[] - - constructor(opts: WuiVfsNodeInterface) { - this.path = opts.path || "" - this.name = opts.name || "" - this.content_type = opts.content_type || "" - this.mod_time = opts.mod_time || 0 - this.size = opts.size || 0 - this.mode = opts.mode || "" - this.is_dir = opts.is_dir || false - this.childs = [] - if (opts.childs) { - for (let c of opts.childs) { - this.childs.push(new WuiVfsNode(c)) - } + Set(node: WuiVfsNodeInterface) { + if (node.is_dir) { + this.com_path.Open(node) + this.com_list.Open(node) } } } class WuiVfsList { el: HTMLElement + node: WuiVfsNodeInterface | null = null constructor(public onClick: NodeClickHandler) { this.el = document.createElement("div") @@ -115,10 +96,13 @@ class WuiVfsList { this.el.style.borderColor = "silver" } - Open(node: WuiVfsNode) { + Open(node: WuiVfsNodeInterface) { + this.node = node this.el.innerHTML = "" - - for (let c of node.childs) { + if (!this.node.childs) { + return + } + for (let c of this.node.childs) { let el = document.createElement("div") el.style.padding = "1em" el.style.cursor = "pointer" @@ -161,7 +145,7 @@ class WuiVfsPath { this.onClick = onClick } - Open(node: WuiVfsNode) { + Open(node: WuiVfsNodeInterface) { this.el.innerHTML = "" this.crumbs = [] let paths = [] @@ -204,6 +188,3 @@ class WuiVfsPath { } } } - -type PathClickHandler = (path: string) => void -type NodeClickHandler = (node: WuiVfsNode) => void |
