more revisions to documentation
This commit is contained in:
parent
c4ec1ae744
commit
f087ec8619
|
@ -2,12 +2,11 @@
|
||||||
|
|
||||||
(define-resource index.html)
|
(define-resource index.html)
|
||||||
|
|
||||||
|
|
||||||
(define-struct: coord ([lat : Number$]
|
(define-struct: coord ([lat : Number$]
|
||||||
[lng : Number$]))
|
[lng : Number$]))
|
||||||
|
|
||||||
|
;; coord/unknown?: any -> boolean
|
||||||
|
;; Returns true if x is a coord or the symbol 'unknown.
|
||||||
(define (coord/unknown? x)
|
(define (coord/unknown? x)
|
||||||
(or (coord? x)
|
(or (coord? x)
|
||||||
(and (symbol? x)
|
(and (symbol? x)
|
||||||
|
@ -16,8 +15,8 @@
|
||||||
(define Coord/Unknown$ (Sig: coord/unknown?))
|
(define Coord/Unknown$ (Sig: coord/unknown?))
|
||||||
|
|
||||||
|
|
||||||
|
;; The world stores both the real location, as well as a mocked-up
|
||||||
|
;; one.
|
||||||
(define-struct: world ([real : Coord/Unknown$]
|
(define-struct: world ([real : Coord/Unknown$]
|
||||||
[mock : Coord/Unknown$]))
|
[mock : Coord/Unknown$]))
|
||||||
(define World$ (Sig: world?))
|
(define World$ (Sig: world?))
|
||||||
|
|
|
@ -11,13 +11,17 @@
|
||||||
"scribble-helpers.rkt")
|
"scribble-helpers.rkt")
|
||||||
|
|
||||||
@(require (for-label (except-in (this-package-in cs019/cs019)
|
@(require (for-label (except-in (this-package-in cs019/cs019)
|
||||||
|
;; I am not documenting these: SK already documents them.
|
||||||
define:
|
define:
|
||||||
|
Sig:
|
||||||
Number$ Boolean$
|
Number$ Boolean$
|
||||||
local
|
local
|
||||||
shared
|
shared
|
||||||
printf display
|
printf display
|
||||||
define-struct
|
define-struct define-struct:
|
||||||
define
|
define
|
||||||
|
if
|
||||||
|
format
|
||||||
string=? string?
|
string=? string?
|
||||||
image?
|
image?
|
||||||
e
|
e
|
||||||
|
@ -25,6 +29,7 @@
|
||||||
number->string
|
number->string
|
||||||
quasiquote
|
quasiquote
|
||||||
bitmap/url
|
bitmap/url
|
||||||
|
symbol? symbol=?
|
||||||
current-output-port
|
current-output-port
|
||||||
lambda
|
lambda
|
||||||
true false)))
|
true false)))
|
||||||
|
@ -32,7 +37,7 @@
|
||||||
@(define-runtime-path whalesong-path "..")
|
@(define-runtime-path whalesong-path "..")
|
||||||
|
|
||||||
|
|
||||||
@title{CS19 instructions for Whalesong}
|
@title{CS019 instructions for Whalesong}
|
||||||
@author+email["Danny Yoo" "dyoo@hashcollision.org"]
|
@author+email["Danny Yoo" "dyoo@hashcollision.org"]
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,7 +55,7 @@ If it isn't, you can add the following to your @filepath{.environment}:
|
||||||
@verbatim|{
|
@verbatim|{
|
||||||
pathprependifdir PATH "/local/projects/racket/releases/5.1.3/bin"
|
pathprependifdir PATH "/local/projects/racket/releases/5.1.3/bin"
|
||||||
}|}
|
}|}
|
||||||
But hopefully, this should already be configured to be the default for the @tt{cs19} group
|
But hopefully, this should already be configured to be the default for the @tt{cs019} group
|
||||||
by the time you read this.
|
by the time you read this.
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,9 +209,93 @@ browser}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@subsection{Where am I?}
|
||||||
|
|
||||||
|
@margin-note{The resource used is: @link["http://hashcollision.org/whalesong/examples/cs019/where-am-i/index.html"]{@filepath{index.html}}.}
|
||||||
|
Finally, let's look at a program that displays our current geolocation.
|
||||||
|
|
||||||
|
@filebox["where-am-i.rkt"]{
|
||||||
|
@codeblock|{
|
||||||
|
#lang planet dyoo/whalesong/cs019
|
||||||
|
|
||||||
|
(define-resource index.html)
|
||||||
|
|
||||||
|
(define-struct: coord ([lat : Number$]
|
||||||
|
[lng : Number$]))
|
||||||
|
|
||||||
|
;; coord/unknown?: any -> boolean
|
||||||
|
;; Returns true if x is a coord or the symbol 'unknown.
|
||||||
|
(define (coord/unknown? x)
|
||||||
|
(or (coord? x)
|
||||||
|
(and (symbol? x)
|
||||||
|
(symbol=? x 'unknown))))
|
||||||
|
|
||||||
|
(define Coord/Unknown$ (Sig: coord/unknown?))
|
||||||
|
|
||||||
|
|
||||||
|
;; The world stores both the real location, as well as a mocked-up
|
||||||
|
;; one.
|
||||||
|
(define-struct: world ([real : Coord/Unknown$]
|
||||||
|
[mock : Coord/Unknown$]))
|
||||||
|
(define World$ (Sig: world?))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(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))
|
||||||
|
}|
|
||||||
|
}
|
||||||
|
|
||||||
|
@link["http://hashcollision.org/whalesong/examples/cs019/where-am-i/where-am-i.html"]{This program} uses @racket[on-location-change], which uses HTML5's
|
||||||
|
Geolocation support to provide latitude and longitude information. We
|
||||||
|
receive a change to our location in the form of an @tech{event}. To
|
||||||
|
make it easier to test programs that depend on Geolocation, a
|
||||||
|
@racket[on-mock-location-change] provides the same interface, but
|
||||||
|
the location can be entered from a form in the browser window.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@subsection{More web-world examples}
|
@subsection{More web-world examples}
|
||||||
Here are a collection of web-world demos:
|
Here are more examples of web-world demos, to get a feel for the library:
|
||||||
@itemize[
|
@itemize[
|
||||||
@item{@link["http://hashcollision.org/whalesong/examples/attr-animation/attr-animation.html"]{attr-animation.html} [@link["http://hashcollision.org/whalesong/examples/attr-animation/attr-animation.rkt"]{src}] Uses @racket[update-view-attr] and @racket[on-tick] to perform a simple color animation.}
|
@item{@link["http://hashcollision.org/whalesong/examples/attr-animation/attr-animation.html"]{attr-animation.html} [@link["http://hashcollision.org/whalesong/examples/attr-animation/attr-animation.rkt"]{src}] Uses @racket[update-view-attr] and @racket[on-tick] to perform a simple color animation.}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user