The lightest layer of integration would be to manage the flex files as static resources, and just make sure they work well within SHP. But we can also opt for a closer integration by having SHP compile the flash video files, and make the compilation seamless. Let's develop the light integration first.
What we want are the following:
- keep the flex video files in a static directory similar to other resources, i.e. in the
$htdocs/flex/
directory - simplify the generation of the
<object>
tag to load the appropriate video file
;; foo.shp ;; loads the foo.swf flash video
(flash "foo" #:width 550 #:height 400)
Which should then be translated into the following xexpr:
<object width="550" height="400" id="foo" >
<param name="allowscriptaccess" value="always" />
<param name="movie" value="/flex/foo.swf" /> <embed src="/flex/foo.swf" width="550" height="400" name="foo"
type="application/x-shockwave-flash" allowscriptaccess="always" > </embed></object>
This is quite straight forward:
(define flash-base-path (make-parameter "/flash"))
(define (path->id path)
(string-join (path-helper path) "_"))
(define (path-helper path)
(cond ((pair? path) path)
((string? path) (regexp-split #px"\\/" path ))
((path? path) (path-helper (path->string path)))))
(define (flash-url path)
(string-join (cons (flash-base-path) (path-helper path)) "/"))
(define (flash (path ($pathinfo)) #:id (id #f) #:base (base (flash-base-path)) #:height (height 400) #:width (width 400))
(define (helper path id width height)
`(object ((width ,width)
(height ,height)
(id ,id))
(param ((name "movie") (value ,path)) "")
(param ((name "allowscriptaccess") (value "always")) "")
(embed ((src ,path)
(width ,width)
(height ,height)
(name ,id)
(type "application/x-shockwave-flash")
(allowscriptaccess "always")
) "")))
(helper (flash-url path)
(if (not id) (path->id path) id)
(number->string width)
(number->string height)))
With the ability to generate the flash embedding xexpr, we now just need to create the static flash directory, require the module (we'll call it bzlib/flexer
), and then use the above shp script in our code.We'll talk about the tighter integration next time. Cheers.
No comments:
Post a Comment