Merge branch 'master' into new_ui
commit
42c3c3383a
|
@ -1,9 +1,13 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: classes help.markup help.syntax io.streams.string kernel
|
USING: classes help.markup help.syntax io.streams.string kernel
|
||||||
quotations sequences strings multiline math db.types db ;
|
quotations sequences strings multiline math db.types
|
||||||
|
db.tuples.private db ;
|
||||||
IN: db.tuples
|
IN: db.tuples
|
||||||
|
|
||||||
|
HELP: random-id-generator
|
||||||
|
{ $description "Used to tell " { $link eval-generator } " to generate a random number for use as a key." } ;
|
||||||
|
|
||||||
HELP: create-sql-statement
|
HELP: create-sql-statement
|
||||||
{ $values
|
{ $values
|
||||||
{ "class" class }
|
{ "class" class }
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: classes hashtables help.markup help.syntax io.streams.string
|
USING: classes hashtables help.markup help.syntax io.streams.string
|
||||||
kernel sequences strings math db.tuples db.tuples.private ;
|
kernel sequences strings math ;
|
||||||
IN: db.types
|
IN: db.types
|
||||||
|
|
||||||
HELP: +db-assigned-id+
|
HELP: +db-assigned-id+
|
||||||
|
@ -89,31 +89,31 @@ HELP: VARCHAR
|
||||||
|
|
||||||
HELP: user-assigned-id-spec?
|
HELP: user-assigned-id-spec?
|
||||||
{ $values
|
{ $values
|
||||||
{ "specs" "a sequence of sql specs" }
|
{ "specs" "a sequence of SQL specs" }
|
||||||
{ "?" "a boolean" } }
|
{ "?" "a boolean" } }
|
||||||
{ $description "Tests if any of the sql specs has the type " { $link +user-assigned-id+ } "." } ;
|
{ $description "Tests if any of the SQL specs has the type " { $link +user-assigned-id+ } "." } ;
|
||||||
|
|
||||||
HELP: bind#
|
HELP: bind#
|
||||||
{ $values
|
{ $values
|
||||||
{ "spec" "a sql spec" } { "obj" object } }
|
{ "spec" "a SQL spec" } { "obj" object } }
|
||||||
{ $description "A generic word that lets a database construct a literal binding." } ;
|
{ $description "A generic word that lets a database construct a literal binding." } ;
|
||||||
|
|
||||||
HELP: bind%
|
HELP: bind%
|
||||||
{ $values
|
{ $values
|
||||||
{ "spec" "a sql spec" } }
|
{ "spec" "a SQL spec" } }
|
||||||
{ $description "A generic word that lets a database output a binding." } ;
|
{ $description "A generic word that lets a database output a binding." } ;
|
||||||
|
|
||||||
HELP: db-assigned-id-spec?
|
HELP: db-assigned-id-spec?
|
||||||
{ $values
|
{ $values
|
||||||
{ "specs" "a sequence of sql specs" }
|
{ "specs" "a sequence of SQL specs" }
|
||||||
{ "?" "a boolean" } }
|
{ "?" "a boolean" } }
|
||||||
{ $description "Tests if any of the sql specs has the type " { $link +db-assigned-id+ } "." } ;
|
{ $description "Tests if any of the SQL specs has the type " { $link +db-assigned-id+ } "." } ;
|
||||||
|
|
||||||
HELP: find-primary-key
|
HELP: find-primary-key
|
||||||
{ $values
|
{ $values
|
||||||
{ "specs" "a sequence of sql-specs" }
|
{ "specs" "a sequence of SQL specs" }
|
||||||
{ "seq" "a sequence of sql-specs" } }
|
{ "seq" "a sequence of SQL specs" } }
|
||||||
{ $description "Returns the rows from the sql-specs array that are part of the primary key. Composite primary keys are supported, so this word must return a sequence." }
|
{ $description "Returns the rows from the SQL specs array that are part of the primary key. Composite primary keys are supported, so this word must return a sequence." }
|
||||||
{ $notes "This is a low-level word." } ;
|
{ $notes "This is a low-level word." } ;
|
||||||
|
|
||||||
HELP: get-slot-named
|
HELP: get-slot-named
|
||||||
|
@ -124,13 +124,13 @@ HELP: get-slot-named
|
||||||
|
|
||||||
HELP: no-sql-type
|
HELP: no-sql-type
|
||||||
{ $values
|
{ $values
|
||||||
{ "type" "a sql type" } }
|
{ "type" "a SQL type" } }
|
||||||
{ $description "Throws an error containing a sql type that is unsupported or the result of a typo." } ;
|
{ $description "Throws an error containing a SQL type that is unsupported or the result of a typo." } ;
|
||||||
|
|
||||||
HELP: normalize-spec
|
HELP: normalize-spec
|
||||||
{ $values
|
{ $values
|
||||||
{ "spec" "a sql spec" } }
|
{ "spec" "a SQL spec" } }
|
||||||
{ $description "Normalizes a sql spec." } ;
|
{ $description "Normalizes a SQL spec." } ;
|
||||||
|
|
||||||
HELP: offset-of-slot
|
HELP: offset-of-slot
|
||||||
{ $values
|
{ $values
|
||||||
|
@ -140,22 +140,19 @@ HELP: offset-of-slot
|
||||||
|
|
||||||
HELP: primary-key?
|
HELP: primary-key?
|
||||||
{ $values
|
{ $values
|
||||||
{ "spec" "a sql spec" }
|
{ "spec" "a SQL spec" }
|
||||||
{ "?" "a boolean" } }
|
{ "?" "a boolean" } }
|
||||||
{ $description "Returns true if a sql spec is a primary key." } ;
|
{ $description "Returns true if a SQL spec is a primary key." } ;
|
||||||
|
|
||||||
HELP: random-id-generator
|
|
||||||
{ $description "Used to tell " { $link eval-generator } " to generate a random number for use as a key." } ;
|
|
||||||
|
|
||||||
HELP: relation?
|
HELP: relation?
|
||||||
{ $values
|
{ $values
|
||||||
{ "spec" "a sql spec" }
|
{ "spec" "a SQL spec" }
|
||||||
{ "?" "a boolean" } }
|
{ "?" "a boolean" } }
|
||||||
{ $description "Returns true if a sql spec is a relation." } ;
|
{ $description "Returns true if a SQL spec is a relation." } ;
|
||||||
|
|
||||||
HELP: unknown-modifier
|
HELP: unknown-modifier
|
||||||
{ $values { "modifier" string } }
|
{ $values { "modifier" string } }
|
||||||
{ $description "Throws an error containing an unknown sql modifier." } ;
|
{ $description "Throws an error containing an unknown SQL modifier." } ;
|
||||||
|
|
||||||
ARTICLE: "db.types" "Database types"
|
ARTICLE: "db.types" "Database types"
|
||||||
"The " { $vocab-link "db.types" } " vocabulary maps Factor types to database types." $nl
|
"The " { $vocab-link "db.types" } " vocabulary maps Factor types to database types." $nl
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 Doug Coleman.
|
! Copyright (C) 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors arrays combinators html.elements io
|
USING: accessors arrays combinators io
|
||||||
io.streams.string kernel math namespaces peg peg.ebnf
|
io.streams.string kernel math namespaces peg peg.ebnf
|
||||||
sequences sequences.deep strings xml.entities xml.literals
|
sequences sequences.deep strings xml.entities xml.literals
|
||||||
vectors splitting xmode.code2html urls.encoding xml.data
|
vectors splitting xmode.code2html urls.encoding xml.data
|
||||||
|
|
|
@ -10,7 +10,6 @@ furnace.utilities
|
||||||
furnace.redirection
|
furnace.redirection
|
||||||
furnace.conversations
|
furnace.conversations
|
||||||
html.forms
|
html.forms
|
||||||
html.elements
|
|
||||||
html.components
|
html.components
|
||||||
html.components
|
html.components
|
||||||
html.templates.chloe
|
html.templates.chloe
|
||||||
|
|
|
@ -105,9 +105,8 @@ ARTICLE: "furnace.auth.realm-config" "Authentication realm configuration"
|
||||||
"Instances of subclasses of " { $link realm } " have the following slots which may be set:"
|
"Instances of subclasses of " { $link realm } " have the following slots which may be set:"
|
||||||
{ $table
|
{ $table
|
||||||
{ { $slot "name" } "A string identifying the realm for user interface purposes" }
|
{ { $slot "name" } "A string identifying the realm for user interface purposes" }
|
||||||
{ { $slot "users" } { "An authentication provider (see " { $link "furnace.auth.providers" } ". By default, the " { $link users-in-db } " provider is used." } }
|
{ { $slot "users" } { "An authentication provider (see " { $link "furnace.auth.providers" } "). By default, the " { $link users-in-db } " provider is used." } }
|
||||||
{ { $slot "checksum" } { "An implementation of the checksum protocol used for verifying passwords (see " { $link "checksums" } "). The " { $link sha-256 } " checksum is used by default." } }
|
{ { $slot "checksum" } { "An implementation of the checksum protocol used for verifying passwords (see " { $link "checksums" } "). The " { $link sha-256 } " checksum is used by default." } }
|
||||||
{ { $slot "users" } { "An authentication provider (see " { $link "furnace.auth.providers" } } }
|
|
||||||
{ { $slot "secure" } { "A boolean, that when set to a true value, forces the client to access the authentication realm via HTTPS. An attempt to access the realm via HTTP results in a redirect to the corresponding HTTPS URL. On by default." } }
|
{ { $slot "secure" } { "A boolean, that when set to a true value, forces the client to access the authentication realm via HTTPS. An attempt to access the realm via HTTP results in a redirect to the corresponding HTTPS URL. On by default." } }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ xml.data
|
||||||
xml.entities
|
xml.entities
|
||||||
xml.writer
|
xml.writer
|
||||||
xml.utilities
|
xml.utilities
|
||||||
|
xml.literals
|
||||||
html.components
|
html.components
|
||||||
html.elements
|
html.elements
|
||||||
html.forms
|
html.forms
|
||||||
|
@ -20,7 +21,6 @@ http.server
|
||||||
http.server.redirection
|
http.server.redirection
|
||||||
http.server.responses
|
http.server.responses
|
||||||
furnace.utilities ;
|
furnace.utilities ;
|
||||||
QUALIFIED-WITH: assocs a
|
|
||||||
IN: furnace.chloe-tags
|
IN: furnace.chloe-tags
|
||||||
|
|
||||||
! Chloe tags
|
! Chloe tags
|
||||||
|
@ -56,11 +56,11 @@ CHLOE: write-atom drop [ write-atom-feeds ] [code] ;
|
||||||
|
|
||||||
: compile-link-attrs ( tag -- )
|
: compile-link-attrs ( tag -- )
|
||||||
#! Side-effects current namespace.
|
#! Side-effects current namespace.
|
||||||
attrs>> '[ [ [ _ ] dip link-attr ] each-responder ] [code] ;
|
'[ [ [ _ ] dip link-attr ] each-responder ] [code] ;
|
||||||
|
|
||||||
: a-start-tag ( tag -- )
|
: a-start-tag ( tag -- )
|
||||||
[ <a ] [code]
|
[ <a ] [code]
|
||||||
[ non-chloe-attrs-only compile-attrs ]
|
[ attrs>> non-chloe-attrs-only compile-attrs ]
|
||||||
[ compile-link-attrs ]
|
[ compile-link-attrs ]
|
||||||
[ compile-a-url ]
|
[ compile-a-url ]
|
||||||
tri
|
tri
|
||||||
|
@ -116,17 +116,18 @@ CHLOE: form
|
||||||
} cleave
|
} cleave
|
||||||
] compile-with-scope ;
|
] compile-with-scope ;
|
||||||
|
|
||||||
STRING: button-tag-markup
|
: button-tag-markup ( -- xml )
|
||||||
|
<XML
|
||||||
<t:form class="inline" xmlns:t="http://factorcode.org/chloe/1.0">
|
<t:form class="inline" xmlns:t="http://factorcode.org/chloe/1.0">
|
||||||
<div style="display: inline;"><button type="submit"></button></div>
|
<div style="display: inline;"><button type="submit"></button></div>
|
||||||
</t:form>
|
</t:form>
|
||||||
;
|
XML> ;
|
||||||
|
|
||||||
: add-tag-attrs ( attrs tag -- )
|
: add-tag-attrs ( attrs tag -- )
|
||||||
attrs>> swap update ;
|
attrs>> swap update ;
|
||||||
|
|
||||||
CHLOE: button
|
CHLOE: button
|
||||||
button-tag-markup string>xml body>>
|
button-tag-markup body>>
|
||||||
{
|
{
|
||||||
[ [ attrs>> chloe-attrs-only ] dip add-tag-attrs ]
|
[ [ attrs>> chloe-attrs-only ] dip add-tag-attrs ]
|
||||||
[ [ attrs>> non-chloe-attrs-only ] dip "button" deep-tag-named add-tag-attrs ]
|
[ [ attrs>> non-chloe-attrs-only ] dip "button" deep-tag-named add-tag-attrs ]
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: io.encodings.utf8 io.encodings.ascii io.encodings.binary
|
USING: io.encodings.utf8 io.encodings.ascii io.encodings.binary
|
||||||
io.files io.files.temp io.directories html.streams html.elements help kernel
|
io.files io.files.temp io.directories html.streams help kernel
|
||||||
assocs sequences make words accessors arrays help.topics vocabs
|
assocs sequences make words accessors arrays help.topics vocabs
|
||||||
tools.vocabs tools.vocabs.browser namespaces prettyprint io
|
tools.vocabs tools.vocabs.browser namespaces prettyprint io
|
||||||
vocabs.loader serialize fry memoize unicode.case math.order
|
vocabs.loader serialize fry memoize unicode.case math.order
|
||||||
sorting debugger ;
|
sorting debugger html.elements html ;
|
||||||
IN: help.html
|
IN: help.html
|
||||||
|
|
||||||
: escape-char ( ch -- )
|
: escape-char ( ch -- )
|
||||||
|
|
|
@ -6,7 +6,7 @@ hashtables combinators continuations math strings inspector
|
||||||
fry locals calendar calendar.format xml.entities xml.data
|
fry locals calendar calendar.format xml.entities xml.data
|
||||||
validators urls present xml.writer xml.literals xml
|
validators urls present xml.writer xml.literals xml
|
||||||
xmode.code2html lcs.diff2html farkup io.streams.string
|
xmode.code2html lcs.diff2html farkup io.streams.string
|
||||||
html.elements html.streams html.forms ;
|
html html.streams html.forms ;
|
||||||
IN: html.components
|
IN: html.components
|
||||||
|
|
||||||
GENERIC: render* ( value name renderer -- xml )
|
GENERIC: render* ( value name renderer -- xml )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
USING: help.markup help.syntax io present html ;
|
||||||
IN: html.elements
|
IN: html.elements
|
||||||
USING: help.markup help.syntax io present ;
|
|
||||||
|
|
||||||
ARTICLE: "html.elements" "HTML elements"
|
ARTICLE: "html.elements" "HTML elements"
|
||||||
"The " { $vocab-link "html.elements" } " vocabulary provides words for writing HTML tags to the " { $link output-stream } " with a familiar look and feel in the code."
|
"The " { $vocab-link "html.elements" } " vocabulary provides words for writing HTML tags to the " { $link output-stream } " with a familiar look and feel in the code."
|
||||||
|
|
|
@ -3,18 +3,9 @@
|
||||||
USING: io io.styles kernel namespaces prettyprint quotations
|
USING: io io.styles kernel namespaces prettyprint quotations
|
||||||
sequences strings words xml.entities compiler.units effects
|
sequences strings words xml.entities compiler.units effects
|
||||||
xml.data xml.literals urls math math.parser combinators
|
xml.data xml.literals urls math math.parser combinators
|
||||||
present fry io.streams.string xml.writer ;
|
present fry io.streams.string xml.writer html ;
|
||||||
|
|
||||||
IN: html.elements
|
IN: html.elements
|
||||||
|
|
||||||
SYMBOL: html
|
|
||||||
|
|
||||||
: write-html ( str -- )
|
|
||||||
H{ { html t } } format ;
|
|
||||||
|
|
||||||
: print-html ( str -- )
|
|
||||||
write-html "\n" write-html ;
|
|
||||||
|
|
||||||
<<
|
<<
|
||||||
|
|
||||||
: elements-vocab ( -- vocab-name ) "html.elements" ;
|
: elements-vocab ( -- vocab-name ) "html.elements" ;
|
||||||
|
@ -127,24 +118,3 @@ SYMBOL: html
|
||||||
] [ define-attribute-word ] each
|
] [ define-attribute-word ] each
|
||||||
|
|
||||||
>>
|
>>
|
||||||
|
|
||||||
: xhtml-preamble ( -- )
|
|
||||||
"<?xml version=\"1.0\"?>" write-html
|
|
||||||
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">" write-html ;
|
|
||||||
|
|
||||||
: simple-page ( title head-quot body-quot -- )
|
|
||||||
[ with-string-writer <unescaped> ] bi@
|
|
||||||
<XML
|
|
||||||
<?xml version="1.0"?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<title><-></title>
|
|
||||||
<->
|
|
||||||
</head>
|
|
||||||
<body><-></body>
|
|
||||||
</html>
|
|
||||||
XML> write-xml ; inline
|
|
||||||
|
|
||||||
: render-error ( message -- )
|
|
||||||
[XML <span class="error"><-></span> XML] write-xml ;
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
! Copyright (C) 2008 Slava Pestov
|
! Copyright (C) 2008 Slava Pestov
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel accessors strings namespaces assocs hashtables io
|
USING: kernel accessors strings namespaces assocs hashtables io
|
||||||
mirrors math fry sequences words continuations html.elements
|
mirrors math fry sequences words continuations
|
||||||
xml.entities ;
|
xml.entities xml.writer xml.literals ;
|
||||||
IN: html.forms
|
IN: html.forms
|
||||||
|
|
||||||
TUPLE: form errors values validation-failed ;
|
TUPLE: form errors values validation-failed ;
|
||||||
|
@ -109,7 +109,6 @@ C: <validation-error> validation-error
|
||||||
: render-validation-errors ( -- )
|
: render-validation-errors ( -- )
|
||||||
form get errors>>
|
form get errors>>
|
||||||
[
|
[
|
||||||
<ul "errors" =class ul>
|
[ [XML <li><-></li> XML] ] map
|
||||||
[ <li> escape-string write </li> ] each
|
[XML <ul class="errors"><-></ul> XML] write-xml
|
||||||
</ul>
|
|
||||||
] unless-empty ;
|
] unless-empty ;
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
! Copyright (C) 2004, 2009 Chris Double, Daniel Ehrenberg.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
USING: io kernel xml.data xml.writer io.streams.string
|
||||||
|
xml.literals io.styles ;
|
||||||
|
IN: html
|
||||||
|
|
||||||
|
SYMBOL: html
|
||||||
|
|
||||||
|
: write-html ( str -- )
|
||||||
|
H{ { html t } } format ;
|
||||||
|
|
||||||
|
: print-html ( str -- )
|
||||||
|
write-html "\n" write-html ;
|
||||||
|
|
||||||
|
: xhtml-preamble ( -- )
|
||||||
|
"<?xml version=\"1.0\"?>" write-html
|
||||||
|
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">" write-html ;
|
||||||
|
|
||||||
|
: simple-page ( title head-quot body-quot -- )
|
||||||
|
[ with-string-writer <unescaped> ] bi@
|
||||||
|
<XML
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
<head>
|
||||||
|
<title><-></title>
|
||||||
|
<->
|
||||||
|
</head>
|
||||||
|
<body><-></body>
|
||||||
|
</html>
|
||||||
|
XML> write-xml ; inline
|
||||||
|
|
||||||
|
: render-error ( message -- )
|
||||||
|
[XML <span class="error"><-></span> XML] write-xml ;
|
|
@ -4,7 +4,7 @@ USING: combinators generic assocs io io.styles
|
||||||
io.files continuations io.streams.string kernel math math.order
|
io.files continuations io.streams.string kernel math math.order
|
||||||
math.parser namespaces make quotations assocs sequences strings
|
math.parser namespaces make quotations assocs sequences strings
|
||||||
words html.elements xml.entities sbufs continuations destructors
|
words html.elements xml.entities sbufs continuations destructors
|
||||||
accessors arrays urls.encoding ;
|
accessors arrays urls.encoding html ;
|
||||||
IN: html.streams
|
IN: html.streams
|
||||||
|
|
||||||
GENERIC: browser-link-href ( presented -- href )
|
GENERIC: browser-link-href ( presented -- href )
|
||||||
|
|
|
@ -5,8 +5,9 @@ namespaces make classes.tuple assocs splitting words arrays io
|
||||||
io.files io.files.info io.encodings.utf8 io.streams.string
|
io.files io.files.info io.encodings.utf8 io.streams.string
|
||||||
unicode.case mirrors math urls present multiline quotations xml
|
unicode.case mirrors math urls present multiline quotations xml
|
||||||
logging continuations
|
logging continuations
|
||||||
xml.data
|
xml.data xml.writer xml.literals strings
|
||||||
html.forms
|
html.forms
|
||||||
|
html
|
||||||
html.elements
|
html.elements
|
||||||
html.components
|
html.components
|
||||||
html.templates
|
html.templates
|
||||||
|
@ -15,7 +16,6 @@ html.templates.chloe.components
|
||||||
html.templates.chloe.syntax ;
|
html.templates.chloe.syntax ;
|
||||||
IN: html.templates.chloe
|
IN: html.templates.chloe
|
||||||
|
|
||||||
! Chloe is Ed's favorite web designer
|
|
||||||
TUPLE: chloe path ;
|
TUPLE: chloe path ;
|
||||||
|
|
||||||
C: <chloe> chloe
|
C: <chloe> chloe
|
||||||
|
|
|
@ -73,8 +73,8 @@ DEFER: compile-element
|
||||||
[ compile-start-tag ]
|
[ compile-start-tag ]
|
||||||
[ compile-children ]
|
[ compile-children ]
|
||||||
[ compile-end-tag ]
|
[ compile-end-tag ]
|
||||||
[ drop tag-stack get pop* ]
|
} cleave
|
||||||
} cleave ;
|
tag-stack get pop* ;
|
||||||
|
|
||||||
ERROR: unknown-chloe-tag tag ;
|
ERROR: unknown-chloe-tag tag ;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,8 @@ M: singleton-class component-tag ( tag class -- )
|
||||||
bi ;
|
bi ;
|
||||||
|
|
||||||
M: tuple-class component-tag ( tag class -- )
|
M: tuple-class component-tag ( tag class -- )
|
||||||
[ drop "name" required-attr compile-attr ] [ compile-component-attrs ] 2bi
|
[ drop "name" required-attr compile-attr ]
|
||||||
|
[ compile-component-attrs ] 2bi
|
||||||
[ render ] [code] ;
|
[ render ] [code] ;
|
||||||
|
|
||||||
: COMPONENT:
|
: COMPONENT:
|
||||||
|
|
|
@ -6,7 +6,6 @@ classes.tuple assocs splitting words arrays memoize parser lexer
|
||||||
io io.files io.encodings.utf8 io.streams.string
|
io io.files io.encodings.utf8 io.streams.string
|
||||||
unicode.case mirrors fry math urls
|
unicode.case mirrors fry math urls
|
||||||
multiline xml xml.data xml.writer xml.utilities
|
multiline xml xml.data xml.writer xml.utilities
|
||||||
html.elements
|
|
||||||
html.components
|
html.components
|
||||||
html.templates ;
|
html.templates ;
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ USING: continuations sequences kernel namespaces debugger
|
||||||
combinators math quotations generic strings splitting
|
combinators math quotations generic strings splitting
|
||||||
accessors assocs fry vocabs.parser
|
accessors assocs fry vocabs.parser
|
||||||
parser lexer io io.files io.streams.string io.encodings.utf8
|
parser lexer io io.files io.streams.string io.encodings.utf8
|
||||||
html.elements
|
html
|
||||||
html.templates ;
|
html.templates ;
|
||||||
IN: html.templates.fhtml
|
IN: html.templates.fhtml
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors kernel fry io io.encodings.utf8 io.files
|
USING: accessors kernel fry io io.encodings.utf8 io.files
|
||||||
debugger prettyprint continuations namespaces boxes sequences
|
debugger prettyprint continuations namespaces boxes sequences
|
||||||
arrays strings html.elements io.streams.string
|
arrays strings html io.streams.string
|
||||||
quotations xml.data xml.writer ;
|
quotations xml.data xml.writer xml.literals ;
|
||||||
IN: html.templates
|
IN: html.templates
|
||||||
|
|
||||||
MIXIN: template
|
MIXIN: template
|
||||||
|
@ -53,9 +53,13 @@ SYMBOL: atom-feeds
|
||||||
|
|
||||||
: write-atom-feeds ( -- )
|
: write-atom-feeds ( -- )
|
||||||
atom-feeds get [
|
atom-feeds get [
|
||||||
<link "alternate" =rel "application/atom+xml" =type
|
first2 [XML
|
||||||
first2 [ =title ] [ =href ] bi*
|
<link
|
||||||
link/>
|
rel="alternate"
|
||||||
|
type="application/atom+xml"
|
||||||
|
title=<->
|
||||||
|
href=<->/>
|
||||||
|
XML] write-xml
|
||||||
] each ;
|
] each ;
|
||||||
|
|
||||||
SYMBOL: nested-template?
|
SYMBOL: nested-template?
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
! Copyright (C) 2008 Slava Pestov.
|
! Copyright (C) 2008 Slava Pestov.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: html.elements math.parser http accessors kernel
|
USING: math.parser http accessors kernel xml.literals xml.writer
|
||||||
io io.streams.string io.encodings.utf8 ;
|
io io.streams.string io.encodings.utf8 ;
|
||||||
IN: http.server.responses
|
IN: http.server.responses
|
||||||
|
|
||||||
|
@ -13,11 +13,13 @@ IN: http.server.responses
|
||||||
swap >>body ;
|
swap >>body ;
|
||||||
|
|
||||||
: trivial-response-body ( code message -- )
|
: trivial-response-body ( code message -- )
|
||||||
|
<XML
|
||||||
<html>
|
<html>
|
||||||
<body>
|
<body>
|
||||||
<h1> [ number>string write bl ] [ write ] bi* </h1>
|
<h1><-> <-></h1>
|
||||||
</body>
|
</body>
|
||||||
</html> ;
|
</html>
|
||||||
|
XML> write-xml ;
|
||||||
|
|
||||||
: <trivial-response> ( code message -- response )
|
: <trivial-response> ( code message -- response )
|
||||||
2dup [ trivial-response-body ] with-string-writer
|
2dup [ trivial-response-body ] with-string-writer
|
||||||
|
|
|
@ -24,7 +24,7 @@ http.parsers
|
||||||
http.server.responses
|
http.server.responses
|
||||||
http.server.remapping
|
http.server.remapping
|
||||||
html.templates
|
html.templates
|
||||||
html.elements
|
html
|
||||||
html.streams ;
|
html.streams ;
|
||||||
IN: http.server
|
IN: http.server
|
||||||
|
|
||||||
|
@ -174,8 +174,9 @@ main-responder global [ <404> <trivial-responder> or ] change-at
|
||||||
[ add-responder-nesting ] [ call-responder* ] 2bi ;
|
[ add-responder-nesting ] [ call-responder* ] 2bi ;
|
||||||
|
|
||||||
: http-error. ( error -- )
|
: http-error. ( error -- )
|
||||||
"Internal server error" [ ] [
|
! TODO: get rid of rot
|
||||||
[ print-error nl :c ] with-html-writer
|
"Internal server error" [ ] rot '[
|
||||||
|
[ _ print-error nl :c ] with-html-writer
|
||||||
] simple-page ;
|
] simple-page ;
|
||||||
|
|
||||||
: <500> ( error -- response )
|
: <500> ( error -- response )
|
||||||
|
|
|
@ -4,9 +4,9 @@ USING: calendar kernel math math.order math.parser namespaces
|
||||||
parser sequences strings assocs hashtables debugger mime.types
|
parser sequences strings assocs hashtables debugger mime.types
|
||||||
sorting logging calendar.format accessors splitting io io.files
|
sorting logging calendar.format accessors splitting io io.files
|
||||||
io.files.info io.directories io.pathnames io.encodings.binary
|
io.files.info io.directories io.pathnames io.encodings.binary
|
||||||
fry xml.entities destructors urls html.elements
|
fry xml.entities destructors urls html xml.literals
|
||||||
html.templates.fhtml http http.server http.server.responses
|
html.templates.fhtml http http.server http.server.responses
|
||||||
http.server.redirection ;
|
http.server.redirection xml.writer ;
|
||||||
IN: http.server.static
|
IN: http.server.static
|
||||||
|
|
||||||
TUPLE: file-responder root hook special allow-listings ;
|
TUPLE: file-responder root hook special allow-listings ;
|
||||||
|
@ -56,18 +56,14 @@ TUPLE: file-responder root hook special allow-listings ;
|
||||||
|
|
||||||
\ serve-file NOTICE add-input-logging
|
\ serve-file NOTICE add-input-logging
|
||||||
|
|
||||||
: file. ( name -- )
|
: file. ( name -- xml )
|
||||||
dup link-info directory? [ "/" append ] when
|
dup link-info directory? [ "/" append ] when
|
||||||
dup <a =href a> escape-string write </a> ;
|
dup [XML <li><a href=<->><-></a></li> XML] ;
|
||||||
|
|
||||||
: directory. ( path -- )
|
: directory. ( path -- )
|
||||||
dup file-name [ ] [
|
dup file-name [ ] [
|
||||||
[ <h1> file-name escape-string write </h1> ]
|
[ file-name ] [ directory-files [ file. ] map ] bi
|
||||||
[
|
[XML <h1><-></h1> <ul><-></ul> XML] write-xml
|
||||||
<ul>
|
|
||||||
directory-files [ <li> file. </li> ] each
|
|
||||||
</ul>
|
|
||||||
] bi
|
|
||||||
] simple-page ;
|
] simple-page ;
|
||||||
|
|
||||||
: list-directory ( directory -- response )
|
: list-directory ( directory -- response )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
USING: xmode.tokens xmode.marker xmode.catalog kernel locals
|
USING: xmode.tokens xmode.marker xmode.catalog kernel locals
|
||||||
html.elements io io.files sequences words io.encodings.utf8
|
io io.files sequences words io.encodings.utf8
|
||||||
namespaces xml.entities accessors xml.literals locals xml.writer ;
|
namespaces xml.entities accessors xml.literals locals xml.writer ;
|
||||||
IN: xmode.code2html
|
IN: xmode.code2html
|
||||||
|
|
||||||
|
@ -15,7 +15,8 @@ IN: xmode.code2html
|
||||||
tokenize-line htmlize-tokens ;
|
tokenize-line htmlize-tokens ;
|
||||||
|
|
||||||
: htmlize-lines ( lines mode -- xml )
|
: htmlize-lines ( lines mode -- xml )
|
||||||
[ f ] 2dip load-mode [ htmlize-line "\n" suffix ] curry map nip ;
|
[ f ] 2dip load-mode [ htmlize-line ] curry map nip
|
||||||
|
{ "\n" } join ;
|
||||||
|
|
||||||
: default-stylesheet ( -- xml )
|
: default-stylesheet ( -- xml )
|
||||||
"resource:basis/xmode/code2html/stylesheet.css"
|
"resource:basis/xmode/code2html/stylesheet.css"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
! Copyright (C) 2007, 2008 Doug Coleman.
|
! Copyright (C) 2007, 2008 Doug Coleman.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: accessors alien alien.accessors arrays assocs
|
USING: accessors alien alien.accessors arrays assocs
|
||||||
combinators.short-circuit fry hashtables html.elements io
|
combinators.short-circuit fry hashtables html io
|
||||||
kernel math namespaces prettyprint quotations sequences
|
kernel math namespaces prettyprint quotations sequences
|
||||||
sequences.deep sets slots.private vectors vocabs words
|
sequences.deep sets slots.private vectors vocabs words
|
||||||
kernel.private ;
|
kernel.private ;
|
||||||
|
|
|
@ -55,8 +55,6 @@ TUPLE: factor-website < dispatcher ;
|
||||||
|
|
||||||
: <factor-website> ( -- responder )
|
: <factor-website> ( -- responder )
|
||||||
factor-website new-dispatcher
|
factor-website new-dispatcher
|
||||||
<wiki> "wiki" add-responder
|
|
||||||
<user-admin> "user-admin" add-responder
|
|
||||||
URL" /wiki/view/Front Page" <redirect-responder> "" add-responder ;
|
URL" /wiki/view/Front Page" <redirect-responder> "" add-responder ;
|
||||||
|
|
||||||
SYMBOL: key-password
|
SYMBOL: key-password
|
||||||
|
@ -76,8 +74,10 @@ SYMBOL: dh-file
|
||||||
"password" key-password set-global
|
"password" key-password set-global
|
||||||
common-configuration
|
common-configuration
|
||||||
<factor-website>
|
<factor-website>
|
||||||
<pastebin> <factor-boilerplate> <login-config> "pastebin" add-responder
|
<wiki> <login-config> <factor-boilerplate> "wiki" add-responder
|
||||||
<planet> <factor-boilerplate> <login-config> "planet" add-responder
|
<user-admin> <login-config> <factor-boilerplate> "user-admin" add-responder
|
||||||
|
<pastebin> <login-config> <factor-boilerplate> "pastebin" add-responder
|
||||||
|
<planet> <login-config> <factor-boilerplate> "planet" add-responder
|
||||||
"/tmp/docs/" <help-webapp> "docs" add-responder
|
"/tmp/docs/" <help-webapp> "docs" add-responder
|
||||||
test-db <alloy>
|
test-db <alloy>
|
||||||
main-responder set-global ;
|
main-responder set-global ;
|
||||||
|
@ -90,7 +90,7 @@ SYMBOL: dh-file
|
||||||
: init-production ( -- )
|
: init-production ( -- )
|
||||||
common-configuration
|
common-configuration
|
||||||
<vhost-dispatcher>
|
<vhost-dispatcher>
|
||||||
<factor-website> <login-config> <factor-boilerplate> test-db <alloy> "concatenative.org" add-responder
|
<factor-website> <wiki> <login-config> <factor-boilerplate> "wiki" add-responder test-db <alloy> "concatenative.org" add-responder
|
||||||
<pastebin> <login-config> <factor-boilerplate> test-db <alloy> "paste.factorcode.org" add-responder
|
<pastebin> <login-config> <factor-boilerplate> test-db <alloy> "paste.factorcode.org" add-responder
|
||||||
<planet> <login-config> <factor-boilerplate> test-db <alloy> "planet.factorcode.org" add-responder
|
<planet> <login-config> <factor-boilerplate> test-db <alloy> "planet.factorcode.org" add-responder
|
||||||
home "docs" append-path <help-webapp> test-db <alloy> "docs.factorcode.org" add-responder
|
home "docs" append-path <help-webapp> test-db <alloy> "docs.factorcode.org" add-responder
|
||||||
|
|
Loading…
Reference in New Issue