diff --git a/wiki b/wiki deleted file mode 160000 index 45b509c969758ee20fc3a75eb96f3f62498e7377..0000000000000000000000000000000000000000 --- a/wiki +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 45b509c969758ee20fc3a75eb96f3f62498e7377 diff --git a/wiki/Array1DTracer.md b/wiki/Array1DTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..587b668ebef8e3e084cd3ce004e013fb83501708 --- /dev/null +++ b/wiki/Array1DTracer.md @@ -0,0 +1,23 @@ +**Array1DTracer** inherits **[Array2DTracer](Array2DTracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **Array1DTracer**((String) name) | create Array1DTracer and set its name | +| **attach**((ChartTracer) chartTracer)| automatically visualize array data to the bar chart | +| **palette**((Object) {selected, notified, default})| set colors (e.g., `{selected: 'green', notified: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setData**((Number[]) data)| set one-dimensional array data to visualize | +| **_notify**((Number) idx, (Number) v) | notify that the value of element _idx_ has been changed to _v_ | +| **_denotify**((Number) idx) | stop notifying that the value of element _idx_ has been changed | +| **_select**((Number) s, (Number) e) | select a range between elements _s_ and _e_ | +| **_select**((Number) idx) | select element _idx_ | +| **_deselect**((Number) s, (Number) e) | deselect a range between elements _s_ and _e_ | +| **_deselect**((Number) idx) | deselect element _idx_ | +| **_separate**((Number) idx) | put a divider between elements _idx_ and (_idx+1_) | +| **_deseparate**((Number) idx) | remove a divider between elements _idx_ and (_idx+1_) | +| **_clear**() | erase traces on the array | +| **_wait**() | wait for a certain amount of time | + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=Array1DTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/Array2DTracer.md b/wiki/Array2DTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..a944270c3c6dcf5bf3f0ac477f5a64dbd2840937 --- /dev/null +++ b/wiki/Array2DTracer.md @@ -0,0 +1,34 @@ +**Array2DTracer** inherits **[Tracer](Tracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **Array2DTracer**((String) name)| create Array2DTracer and set its name | +| **palette**((Object) {selected, notified, default})| set colors (e.g., `{selected: 'green', notified: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setData**((Number[][]) data)| set two-dimensional array data to visualize | +| **_notify**((Number) x, (Number) y, (Number) v) | notify that the value of (x, y) has been changed to _v_ | +| **_denotify**((Number) x, (Number) y) | stop notifying that the value of (x, y) has been changed | +| **_select**((Number) sx, (Number) sy, (Number) ex, (Number) ey) | select a rectangle formed by (sx, sy) and (ex, ey) | +| **_select**((Number) x, (Number) y) | select (x, y) | +| **_selectRow**((Number) x, (Number) sy, (Number) ey) | equivalent to **_select**(x, sy, x, ey) | +| **_selectCol**((Number) y, (Number) sx, (Number) ex) | equivalent to **_select**(sx, y, ex, y) | +| **_deselect**((Number) sx, (Number) sy, (Number) ex, (Number) ey) | deselect a rectangle formed by (sx, sy) and (ex, ey) | +| **_deselect**((Number) x, (Number) y) | deselect (x, y) | +| **_deselectRow**((Number) x, (Number) sy, (Number) ey) | equivalent to **_deselect**(x, sy, x, ey) | +| **_deselectCol**((Number) y, (Number) sx, (Number) ex) | equivalent to **_deselect**(sx, y, ex, y) | +| **_separate**((Number) x, (Number) y) | put dividers between _x_-th and (_x+1_)-th rows and between _y_-th and (_y+1_)-th columns | +| **_separateRow**((Number) x) | put a divider between _x_-th and (_x+1_)-th rows | +| **_separateCol**((Number) y) | put a divider between _y_-th and (_y+1_)-th columns | +| **_deseparate**((Number) x, (Number) y) | remove dividers between _x_-th and (_x+1_)-th rows and between _y_-th and (_y+1_)-th columns | +| **_deseparateRow**((Number) x) | remove a divider between _x_-th and (_x+1_)-th rows | +| **_deseparateCol**((Number) y) | remove a divider between _y_-th and (_y+1_)-th columns | +| **_clear**() | erase traces on the array | +| **_wait**() | wait for a certain amount of time | + +## Child Modules + +* [Array1DTracer](Array1DTracer) + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=Array2DTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/ChartTracer.md b/wiki/ChartTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..378123213834310984f6ac14ea91346163a919a0 --- /dev/null +++ b/wiki/ChartTracer.md @@ -0,0 +1,20 @@ +**ChartTracer** inherits **[Tracer](Tracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **ChartTracer**((String) name)| create ChartTracer and set its name | +| **palette**((Object) {selected, notified, default})| set colors (e.g., `{selected: 'green', notified: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setData**((Number[]) data)| set one-dimensional array data to visualize | +| **_notify**((Number) idx, (Number) v) | notify that the value of element _idx_ has been changed to _v_ | +| **_denotify**((Number) idx) | stop notifying that the value of element _idx_ has been changed | +| **_select**((Number) s, (Number) e) | select a range between elements _s_ and _e_ | +| **_select**((Number) idx) | select element _idx_ | +| **_deselect**((Number) s, (Number) e) | deselect a range between elements _s_ and _e_ | +| **_deselect**((Number) idx) | deselect element _idx_ | +| **_clear**() | erase traces on the chart | +| **_wait**() | wait for a certain amount of time | + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=ChartTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/Contributing.md b/wiki/Contributing.md new file mode 100644 index 0000000000000000000000000000000000000000..5510e41c4c232ae1b2f044e327b1e50355ac832b --- /dev/null +++ b/wiki/Contributing.md @@ -0,0 +1,50 @@ +**NOTE**: Check out [**Project Details**](Project-Details) before running it locally! + +To add changes and improvements or resolve issues, these are the usual steps: + +1. Fork the project on Github then clone it to your machine: + + ```bash + git clone https://github.com/<your-username>/AlgorithmVisualizer # clone your forked repo + cd AlgorithmVisualizer # navigate inside the created directory + git submodule init # initialize wiki submodule + git submodule update # setup wiki submodule updates + ``` +2. Your fork's remote repository should be named `origin` by default, so add the main repository as a remote as well and give it a name to distinguish it from your fork (something like `main` would work): + + ```bash + git remote add main https://github.com/parkjs814/AlgorithmVisualizer + ``` + +3. Create a branch addressing the issue/improvement you'd like to tackle. + + ```bash + git checkout -b my-problem-fixer-branch + ``` + +4. Make your changes and push to `my-problem-fixer-branch` on your repo + + ```bash + # write some awesome code and then ... + git add . + git commit -m "Explain my awesome changes" + git push origin my-problem-fixer-branch + ``` + +5. Next create a pull request from `my-problem-fixer-branch` branch on `origin` to `master` branch on `main`. + +6. Once approved, just delete `my-problem-fixer-branch` both locally and remotely because it's not needed anymore. + +7. Finally, checkout `master` locally, pull the approved changes from the `main` repo, and push them to your `origin` repo: + + ```bash + git checkout master # checkout master locally + git pull main master # pull new changes from main repository + git push main master # push the changes to your fork + ``` + +That's it, everything should be in sync now. + +If you run into problems, feel free to [ask us for help on gitter](https://gitter.im/parkjs814/AlgorithmVisualizer?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +As mentioned, check out [**Project Details**](Project-Details) for more information on how to run the project. \ No newline at end of file diff --git a/wiki/DirectedGraphTracer.md b/wiki/DirectedGraphTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..88479a5815e81e6ec2a124bd829c0dfd17583ffa --- /dev/null +++ b/wiki/DirectedGraphTracer.md @@ -0,0 +1,23 @@ +**DirectedGraphTracer** inherits **[Tracer](Tracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **DirectedGraphTracer**((String) name)| create DirectedGraphTracer and set its name | +| **attach**((LogTracer) logTracer)| automatically print log when visiting or leaving nodes | +| **palette**((Object) {visited, left, default})| set colors (e.g., `{visited: 'green', left: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setTreeData**((Number[][]) tree, (Number) root) | set tree data to visualize | +| **_setData**((Number[][]) graph) | set graph data to visualize | +| **_visit**((Number) target, (Number) source) | visit _target_ node from _source_ node | +| **_leave**((Number) target, (Number) source) | leave _target_ node to _source_ node | +| **_clear**() | erase traces on the graph | +| **_wait**() | wait for a certain amount of time | + +## Child Modules + +* [UndirectedGraphTracer](UndirectedGraphTracer) +* [WeightedDirectedGraphTracer](WeightedDirectedGraphTracer) + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=DirectedGraphTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/Home.md b/wiki/Home.md new file mode 100644 index 0000000000000000000000000000000000000000..46ffa70821f1b05cd8a691919a1f8fff9abf2481 --- /dev/null +++ b/wiki/Home.md @@ -0,0 +1,35 @@ +Check out: +- [**Contributing**](Contributing) for details on how to contribute to our project and +- [**Project Details**](Project-Details) for details on how to build/run the project + +## Hierarchy of `algorithm` Directory +| Path | Description | +|------|-------------| +| [/algorithm/category.json](https://github.com/parkjs814/AlgorithmVisualizer/tree/gh-pages/algorithm/category.json) | This file contains the list of categories and their algorithms. | +| [/algorithm/[category]/[algorithm]/desc.json](https://github.com/parkjs814/AlgorithmVisualizer/blob/gh-pages/algorithm/graph_search/dfs/desc.json) | This file contains the description of the algorithm and the list of its examples. | +| [/algorithm/[category]/[algorithm]/[example]/data.js](https://github.com/parkjs814/AlgorithmVisualizer/blob/gh-pages/algorithm/graph_search/dfs/tree/data.js) | This file predefines data variables that will be shown in a visualizing module. | +| [/algorithm/[category]/[algorithm]/[example]/code.js](https://github.com/parkjs814/AlgorithmVisualizer/blob/gh-pages/algorithm/graph_search/dfs/tree/code.js) | This file actually implements and visualizes the algorithm. | + +## Visualizing Modules +* [Tracer](Tracer) +* [LogTracer](LogTracer) +* [Array2DTracer](Array2DTracer) +* [Array1DTracer](Array1DTracer) +* [DirectedGraphTracer](DirectedGraphTracer) +* [UndirectedGraphTracer](UndirectedGraphTracer) +* [WeightedDirectedGraphTracer](WeightedDirectedGraphTracer) +* [WeightedUndirectedGraphTracer](WeightedUndirectedGraphTracer) +* [ChartTracer](ChartTracer) + +## Creating Random Data +| Function | Description | +|----------|-------------| +| **Integer.random**((Number) min, (Number) max) | Create a random integer inclusively between _min_ and _max_. | +| **Array2D.random**((Number) N, (Number) M, (Number) min, (Number) max) | Create random _N_ * _M_ array data that elements have a random value between _min_ and _max_. | +| **Array2D.randomSorted**((Number) N, (Number) M, (Number) min, (Number) max) | Basically same as `Array2D.random` but elements in each row are sorted in increasing order. | +| **Array1D.random**((Number) N, (Number) min, (Number) max) | Create random one-dimensional array data of size _N_ that elements have a random value between _min_ and _max_. | +| **Array1D.randomSorted**((Number) N, (Number) min, (Number) max) | Basically same as `Array1D.random` but elements are sorted in increasing order. | +| **DirectedGraph.random**((Number) N, (Number) ratio) | Create random graph data containing _N_ nodes and having directed edges between nodes at the probability of _ratio_ (between 0 and 1). | +| **UndirectedGraph.random**((Number) N, (Number) ratio) | Basically same as `DirectedGraph.random` but edges do not have direction. | +| **WeightedDirectedGraph.random**((Number) N, (Number) ratio, (Number) min, (Number) max) | Basically same as `DirectedGraph.random` but edges have a random weight between _min_ and _max_. | +| **WeightedUndirectedGraph.random**((Number) N, (Number) ratio) | Basically same as `WeightedDirectedGraph.random` but edges do not have direction. | \ No newline at end of file diff --git a/wiki/LogTracer.md b/wiki/LogTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..04ecf7ced9a4c62a38bbe4358e06aa9834689d09 --- /dev/null +++ b/wiki/LogTracer.md @@ -0,0 +1,14 @@ +**LogTracer** inherits **[Tracer](Tracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **LogTracer**((String) name)| create LogTracer and set its name | +| **_print**(msg) | print `msg` | +| **_setData**(args) | _inherited, but not used_ | +| **_clear**() | erase all logs | +| **_wait**() | wait for a certain amount of time | + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=LogTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/Project-Details.md b/wiki/Project-Details.md new file mode 100644 index 0000000000000000000000000000000000000000..7880e789afbbc4d7663c8fa81086fb045a7e006b --- /dev/null +++ b/wiki/Project-Details.md @@ -0,0 +1,88 @@ +## Build System + +Our project uses [gulp](http://gulpjs.com/) to: + +- combine all individual modules into a single file +- transpile ES6 code to ES5 with [babel.js](http://babeljs.io/) +- minimize JS and CSS code +- generate source maps +- add vendor prefixer to the css +- provide a server with live-reload + +## Installation + +```bash +# install gulp globally so you can run it from the command line +npm install -g gulp-cli + +# install all dependencies +npm install + +# run gulp to start the livereload server on http://localhost:8080 +gulp +``` + +**NOTE**: For Node.js versions below 0.12, you need to install an ES6-style Promise Polyfill (in case you receive a "Promise is undefined" error). To run with Promise, use: + +```bash +npm install es6-promise +``` + +Then add the following line at the top of your *gulpfile.babel.js*: + +```javascript +var Promise = require ('es6-promise').Promise; +``` +Check out [stackoverflow](http://stackoverflow.com/questions/32490328/gulp-autoprefixer-throwing-referenceerror-promise-is-not-defined) for more details on this issue. + +To check your Node.js version, use: + +```bash +node --version +``` + +## Code Structure + +*Note:* Although no linter is added as of yet, the code closely follows the conventions from [Airbnb's ECMAScript 6 Javascript style guide](https://github.com/airbnb/javascript) + +### [js/index.js](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/index.js) + +The app entry point is [`js/index.js`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/index.js). +It performs the initial application setup (loads the app when jQuery loads, loads the initial data from the server etc.) + +### [js/app/*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/app) + +The main application object is [`js/app/index.js`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/app/index.js), which holds the necessary global application state flags and application level methods. +It is [extended once the app loads in `index.js`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/index.js#L39) with the contents of [`app/constructor`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/app/constructor.js) and [`app/cache`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/app/cache.js). +This means that from here on now, any file that does `require(/* path to js/app */)` is getting that populated object since calls to `require` are cached. + +### [js/dom/*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/dom) + +The `js/dom` directory holds all the code interacting with the DOM (go figure 😜). +The code is split into: + +- "static" methods that are used everywhere (such as adding algorithm info to the DOM) and, +- setup code which is called within the `app/constructor`, after the DOM is ready, to initialize all the elements with their contents and listeners. + +### [js/editor/*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/editor) + +The `js/editor` directory holds the code to create and execute code in the ace editor. + +### [js/module/\*/\*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/module) + +The `js/module` directory holds all the tracers and the random-data-creators. +All the modules are exported together and then "required" inside the entry point [`js/index.js`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/index.js) where they are [attached to the global `window` object](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/index.js#L42) so [`eval` can use them](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/editor/executor.js#L12) when executing code in the code editor. + +### [js/server/*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/server) + +The `js/server` directory holds all the code to load data from the server and utilizes promises from [RSVP.js](https://github.com/tildeio/rsvp.js/). +In [`js/server/ajax`](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/server/ajax) are some helper methods to make requesting from the server a little easier. +The main method is [`js/server/ajax/request.js`](https://github.com/parkjs814/AlgorithmVisualizer/blob/master/js/server/ajax/request.js) that is used by all other methods to call `$.ajax` with certain options and set/reset the global `isLoading` flag for every request. + +### [js/trace_manager/*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/server/ajax) + +The `js/tracer_manager` directory holds the manager of tracers, which controls all the present tracers simultaneously. + +### [js/utils/*.js](https://github.com/parkjs814/AlgorithmVisualizer/tree/master/js/utils) + +The `utils` directory holds a few helper methods that are used everywhere such as building the strings for algorithm and file directories. diff --git a/wiki/Tracer.md b/wiki/Tracer.md new file mode 100644 index 0000000000000000000000000000000000000000..7d4a308197dc409f345730fef12fc0b6208fc358 --- /dev/null +++ b/wiki/Tracer.md @@ -0,0 +1,17 @@ +**Tracer** is inherited by any other tracer modules. + +## Methods + +| Method | Description | +|--------|-------------| +| **Tracer**((String) name)| create Tracer and set its name | +| **_setData**(args) | set data to visualize | +| **_clear**() | clear the tracer | +| **_wait**() | wait for a certain amount of time | + +## Child Modules + +* [LogTracer](LogTracer) +* [DirectedGraphTracer](DirectedGraphTracer) +* [Array2DTracer](Array2DTracer) +* [ChartTracer](ChartTracer) \ No newline at end of file diff --git a/wiki/UndirectedGraphTracer.md b/wiki/UndirectedGraphTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..be36c26e9d40b3f7b71b12f1ee28baf7f9228221 --- /dev/null +++ b/wiki/UndirectedGraphTracer.md @@ -0,0 +1,18 @@ +**UndirectedGraphTracer** inherits **[DirectedGraphTracer](DirectedGraphTracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **UndirectedGraphTracer**((String) name)| create UndirectedGraphTracer and set its name | +| **attach**((LogTracer) logTracer)| automatically print log when visiting or leaving nodes | +| **palette**((Object) {visited, left, default})| set colors (e.g., `{visited: 'green', left: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setTreeData**((Number[][]) tree, (Number) root) | set tree data to visualize | +| **_setData**((Number[][]) graph) | set graph data to visualize | +| **_visit**((Number) target, (Number) source) | visit _target_ node from _source_ node | +| **_leave**((Number) target, (Number) source) | leave _target_ node to _source_ node | +| **_clear**() | erase traces on the graph | +| **_wait**() | wait for a certain amount of time | + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=UndirectedGraphTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/WeightedDirectedGraphTracer.md b/wiki/WeightedDirectedGraphTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..8d1c7c01e65346a5d457c4389de4e580866aa4cd --- /dev/null +++ b/wiki/WeightedDirectedGraphTracer.md @@ -0,0 +1,23 @@ +**WeightedDirectedGraphTracer** inherits **[DirectedGraphTracer](DirectedGraphTracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **WeightedDirectedGraphTracer**((String) name)| create WeightedDirectedGraphTracer and set its name | +| **attach**((LogTracer) logTracer)| automatically print log when visiting or leaving nodes | +| **palette**((Object) {visited, left, selected, default})| set colors (e.g., `{visited: 'green', left: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setTreeData**((Number[][]) tree, (Number) root) | set tree data to visualize | +| **_setData**((Number[][]) graph) | set graph data to visualize | +| **_weight**((Number) target, (Number) weight) | set weight of _target_ node | +| **_visit**((Number) target, (Number) source, (Number) weight) | visit _target_ node from _source_ node and set weight of _target_ node | +| **_leave**((Number) target, (Number) source, (Number) weight) | leave _target_ node to _source_ node and set weight of _target_ node | +| **_clear**() | erase traces on the graph | +| **_wait**() | wait for a certain amount of time | + +## Child Modules + +* [WeightedUndirectedGraphTracer](WeightedUndirectedGraphTracer) + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=WeightedDirectedGraphTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file diff --git a/wiki/WeightedUndirectedGraphTracer.md b/wiki/WeightedUndirectedGraphTracer.md new file mode 100644 index 0000000000000000000000000000000000000000..0f889e25e1888fe51bad536adef34caf4c5eda22 --- /dev/null +++ b/wiki/WeightedUndirectedGraphTracer.md @@ -0,0 +1,19 @@ +**WeightedUndirectedGraphTracer** inherits **[WeightedDirectedGraphTracer](WeightedDirectedGraphTracer)**. + +## Methods + +| Method | Description | +|--------|-------------| +| **WeightedUnirectedGraphTracer**((String) name)| create WeightedUnirectedGraphTracer and set its name | +| **attach**((LogTracer) logTracer)| automatically print log when visiting or leaving nodes | +| **palette**((Object) {visited, left, default})| set colors (e.g., `{visited: 'green', left: '#FFA500', default: 'rgb(255,255,255)'}`) | +| **_setTreeData**((Number[][]) tree, (Number) root) | set tree data to visualize | +| **_setData**((Number[][]) graph) | set graph data to visualize | +| **_weight**((Number) target, (Number) weight) | set weight of _target_ node | +| **_visit**((Number) target, (Number) source, (Number) weight) | visit _target_ node from _source_ node and set weight of _target_ node | +| **_leave**((Number) target, (Number) source, (Number) weight) | leave _target_ node to _source_ node and set weight of _target_ node | +| **_clear**() | erase traces on the graph | +| **_wait**() | wait for a certain amount of time | + +## Usage +[Show examples](https://github.com/search?utf8=✓&q=WeightedUndirectedGraphTracer+repo%3Aparkjs814%2FAlgorithmVisualizer+path%3A%2Falgorithm&type=Code&ref=advsearch&l=&l=) \ No newline at end of file