#lang planet dyoo/whalesong/cs019
(define-resource index.html)
(define-struct: coord ([lat : Number$]
[lng : Number$]))
(define (coord/unknown? x)
(or (coord? x)
(and (symbol? x)
(symbol=? x 'unknown))))
(define Coord/Unknown$ (Sig: coord/unknown?))
(define-struct: world ([real : Coord/Unknown$]
[mock : Coord/Unknown$]))
(define: (location-change [world : world$] [dom : View$] [evt : Event$]) -> world$
(make-world (make-coord (event-ref evt "latitude")
(event-ref evt "longitude"))
(world-mock world)))
(define: (mock-location-change [world : world$] [dom : View$] [evt : Event$]) -> world$
(make-world (world-real world)
(make-coord (event-ref evt "latitude")
(event-ref evt "longitude"))))
(define: (draw [world : world$] [dom : View$]) -> View$
(local [(define v1 (if (coord? (world-real world))
(update-view-text (view-focus dom "real-location")
(format "lat=~a, lng=~a"
(coord-lat (world-real world))
(coord-lng (world-real world))))
dom))
(define v2 (if (coord? (world-mock world))
(update-view-text (view-focus v1 "mock-location")
(format "lat=~a, lng=~a"
(coord-lat (world-mock world))
(coord-lng (world-mock world))))
v1))]
v2))
(big-bang (make-world 'unknown 'unknown)
(initial-view index.html)
(to-draw draw)
(on-location-change location-change)
(on-mock-location-change mock-location-change))