** March 28, 2013 **
- add and delete flow implemented
- to add flow
	- mouse down in src edge switch
	- drag to dst edge switch
	- release/confirm to create flow
- to delete flow
	- select flow in flow chooser
	- click "close" button in flow table
	- confirm
- same "pending" style as other actions

** March 28, 2013 **
- basic flow chooser
	- click in "eye" to show full list
	- click on "eye" in full list to monitor that flow in the top slot (and show the flow in topology)
		- other flows get pushed down one slot
		- when a flow is pushed off the list, it is no longer displayed in topology
- bug fix for link disappearing after being added
- color improvements
- draw vector while linking to make it clearer what's going to happen

** March 27, 2013 **
- click onos node "eye" icon to highlight switches associated with that controller
- double click onos node else where to activate/deactivate
- double click core switch to activate/deactivate
- mouse down on switch, drag to other switch, mouse up to make link up/down
	allowed links are
		aggregation->core (link up/down)
		core->core (link up/down)
- pending states for links, switches and controllers after executing command
	object pulses until state change or timeout (12s)
- merge from upstream/master

** March 25, 2013 **
- First pass at flow chooser
	- Uses mock data
	- Select flow to show the flow in topology view
	- Selected flow currently always shows "marching ants" Once iperf is setup the movement will only be when there is iperf traffic
	- Still need to do popup flow chooser to "monitor" flows in the flow panel

** March 23, 2013 **
- Link and switch state updates dynamically
- Link direction is indicated with arrow heads

** March 22, 2013 **
- Workarounds for Chrome v25 rendering bugs
- Fixed broken proxy functionality in restapi2.py
- webui should now work when hosted from a different server than the controller (where it uses gui3.onlab.us:8080) and also when run from the same server (where it uses localhost:8080)

** March 20, 2013 **
- URL parameters control functions as follows:
	http://localhost:9000/ons-demo/index.html
		uses the ONOS_HOST defined in restapi2.py. currently http://gui3.onlab.us:8080
	http://localhost:9000/ons-demo/index.html?proxy
		uses the index.html host to proxy to ONOS_HOST (works around cross site scripting restrictions to allow the WebUI to be served from a different server than the one that hosts the controller)
	http://localhost:9000/ons-demo/index.html?mock
		uses the mock JSON responses under ons-dmo/data
- clicking a controller behavior change
	1) if all controllers are selected, deselects all controllers except the one clicked
	2) if only the clicked controller is selected, selects all controllers again
- Update configuration files to match test bed
- Update sample JSON files from test bed

** March 19, 2013 **
- aggregation switch sample data DPIDs do not match official switch config.
	- switch config hacked 00:00:00:00:00:00:01:01 ==> 00:00:00:00:00:00:01:00 etc.
- layout does not dynamically adjust when window is resized
	- refresh browser window after resizing to fix layout
