digraph G { init [shape=box] denied init -> denied [label="geolocation permanently denied"] init -> getting_location [label="previously granted flag set"] init -> idle [label="previously granted flag unset"] idle idle -> request_permission [label="on click"] request_permission request_permission -> getting_location [label="granted (sets flag)"] request_permission -> idle [label="not granted"] request_permission -> denied [label="permanently denied"] getting_location location_found getting_location -> location_found [label="location found"] location_found -> open_lock [label="on click (zooms to location)"] open_lock open_lock -> location_found [label="after 3 sec"] closed_lock open_lock -> closed_lock [label="on click (locks zoom to location)"] closed_lock -> location_found [label="on click"] }