! Copyright (C) 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: accessors assocs db.tuples furnace.actions
furnace.utilities http.server.responses kernel locals sequences
splitting urls xml.syntax xml.writer webapps.mason.backend
webapps.mason.version.data webapps.mason.utils ;
IN: webapps.mason.grids
: render-grid-cell ( cpu os quot -- xml )
call( cpu os -- url label )
2dup and
[ link [XML
<-> | XML] ]
[ 2drop [XML | XML] ]
if ;
CONSTANT: oses
{
{ "winnt" "Windows" }
{ "macosx" "Mac OS X" }
{ "linux" "Linux" }
{ "freebsd" "FreeBSD" }
{ "openbsd" "OpenBSD" }
}
CONSTANT: cpus
{
{ "x86.32" "x86" }
{ "x86.64" "x86-64" }
}
: render-grid-header ( -- xml )
oses values [ [XML <-> | XML] ] map ;
:: render-grid-row ( cpu quot -- xml )
cpu second oses keys [| os | cpu os quot render-grid-cell ] map
[XML <-> | <->
XML] ;
:: render-grid ( quot -- xml )
render-grid-header
cpus [ quot render-grid-row ] map
[XML
XML] ;
: package-date ( filename -- date )
"." split1 drop 16 tail* 6 head* ;
: package-grid-cell ( cpu os -- url label )
builder new swap >>os swap >>cpu select-tuple [
[ package-url ]
[ last-release>> [ package-date ] [ "N/A" ] if* ] bi
] [ f f ] if* ;
: package-grid ( -- xml )
[ package-grid-cell ] render-grid ;
: ( -- action )
[
[
package-grid xml>string
"text/html"
] with-mason-db
] >>display ;
: release-version ( filename -- release )
".tar.gz" ?tail drop ".zip" ?tail drop ".dmg" ?tail drop
"-" split1-last nip ;
: release-grid-cell ( cpu os -- url label )
release new swap >>os swap >>cpu select-tuple [
[ release-url ]
[ last-release>> [ release-version ] [ "N/A" ] if* ] bi
] [ f f ] if* ;
: release-grid ( -- xml )
[ release-grid-cell ] render-grid ;
: ( -- action )
[
[
release-grid xml>string
"text/html"
] with-mason-db
] >>display ;