-
Notifications
You must be signed in to change notification settings - Fork 6.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs(tree): add tree examples (#9585)
- Loading branch information
1 parent
b519039
commit 631397c
Showing
15 changed files
with
503 additions
and
253 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
/** | ||
* @license | ||
* Copyright Google LLC All Rights Reserved. | ||
* | ||
* Use of this source code is governed by an MIT-style license that can be | ||
* found in the LICENSE file at https://angular.io/license | ||
*/ | ||
import {Injectable} from '@angular/core'; | ||
import {BehaviorSubject} from 'rxjs/BehaviorSubject'; | ||
|
||
/** | ||
* File node data with nested structure. | ||
* Each node has a filename, and a type or a list of children. | ||
*/ | ||
export class FileNode { | ||
children: FileNode[]; | ||
filename: string; | ||
type: any; | ||
} | ||
|
||
/** Flat node with expandable and level information */ | ||
export class FileFlatNode { | ||
filename: string; | ||
type: any; | ||
level: number; | ||
expandable: boolean; | ||
} | ||
|
||
/** | ||
* The file structure tree data in string. The data could be parsed into a Json object | ||
*/ | ||
const TREE_DATA = `{"Tina": | ||
{ | ||
"Documents": { | ||
"angular": { | ||
"src": { | ||
"core": "ts", | ||
"compiler": "ts" | ||
} | ||
}, | ||
"material2": { | ||
"src": { | ||
"button": "ts", | ||
"checkbox": "ts", | ||
"input": "ts" | ||
} | ||
} | ||
}, | ||
"Downloads": { | ||
"Tutorial": "html", | ||
"November": "pdf", | ||
"October": "pdf" | ||
}, | ||
"Pictures": { | ||
"Sun": "png", | ||
"Woods": "jpg", | ||
"Photo Booth Library": { | ||
"Contents": "dir", | ||
"Pictures": "dir" | ||
} | ||
}, | ||
"Applications": { | ||
"Chrome": "app", | ||
"Calendar": "app", | ||
"Webstorm": "app" | ||
} | ||
}}`; | ||
|
||
/** | ||
* File database, it can build a tree structured Json object from string. | ||
* Each node in Json object represents a file or a directory. For a file, it has filename and type. | ||
* For a directory, it has filename and children (a list of files or directories). | ||
* The input will be a json object string, and the output is a list of `FileNode` with nested | ||
* structure. | ||
*/ | ||
@Injectable() | ||
export class FileDatabase { | ||
dataChange: BehaviorSubject<FileNode[]> = new BehaviorSubject<FileNode[]>([]); | ||
|
||
get data(): FileNode[] { return this.dataChange.value; } | ||
|
||
constructor() { | ||
this.initialize(); | ||
} | ||
|
||
initialize() { | ||
// Parse the string to json object. | ||
const dataObject = JSON.parse(TREE_DATA); | ||
|
||
// Build the tree nodes from Json object. The result is a list of `FileNode` with nested | ||
// file node as children. | ||
const data = this.buildFileTree(dataObject, 0); | ||
|
||
// Notify the change. | ||
this.dataChange.next(data); | ||
} | ||
|
||
/** | ||
* Build the file structure tree. The `value` is the Json object, or a sub-tree of a Json object. | ||
* The return value is the list of `FileNode`. | ||
*/ | ||
buildFileTree(value: any, level: number) { | ||
let data: any[] = []; | ||
for (let k in value) { | ||
let v = value[k]; | ||
let node = new FileNode(); | ||
node.filename = `${k}`; | ||
if (v === null || v === undefined) { | ||
// no action | ||
} else if (typeof v === 'object') { | ||
node.children = this.buildFileTree(v, level + 1); | ||
} else { | ||
node.type = v; | ||
} | ||
data.push(node); | ||
} | ||
return data; | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.