2008-04-20 05:19:06 -04:00
|
|
|
! Copyright (C) 2008 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2008-04-26 12:03:41 -04:00
|
|
|
USING: kernel accessors sequences sorting locals math math.order
|
2008-04-22 22:08:27 -04:00
|
|
|
calendar alarms logging concurrency.combinators namespaces
|
2008-04-26 06:49:41 -04:00
|
|
|
sequences.lib db.types db.tuples db fry
|
2008-04-20 05:19:06 -04:00
|
|
|
rss xml.writer
|
|
|
|
http.server
|
|
|
|
http.server.crud
|
|
|
|
http.server.forms
|
|
|
|
http.server.actions
|
|
|
|
http.server.boilerplate
|
|
|
|
http.server.templating.chloe
|
2008-04-22 22:08:27 -04:00
|
|
|
http.server.components
|
2008-05-01 17:24:50 -04:00
|
|
|
http.server.auth.login
|
|
|
|
http.server.auth ;
|
2008-04-20 05:19:06 -04:00
|
|
|
IN: webapps.planet
|
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
TUPLE: planet-factor < dispatcher postings ;
|
|
|
|
|
|
|
|
: planet-template ( name -- template )
|
|
|
|
"resource:extra/webapps/planet/" swap ".xml" 3append <chloe> ;
|
|
|
|
|
2008-04-25 04:23:47 -04:00
|
|
|
TUPLE: blog id name www-url feed-url ;
|
2008-04-20 05:19:06 -04:00
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
M: blog link-title name>> ;
|
|
|
|
|
|
|
|
M: blog link-href www-url>> ;
|
|
|
|
|
2008-04-20 05:19:06 -04:00
|
|
|
blog "BLOGS"
|
|
|
|
{
|
2008-04-28 18:38:12 -04:00
|
|
|
{ "id" "ID" INTEGER +db-assigned-id+ }
|
2008-04-20 05:19:06 -04:00
|
|
|
{ "name" "NAME" { VARCHAR 256 } +not-null+ }
|
|
|
|
{ "www-url" "WWWURL" { VARCHAR 256 } +not-null+ }
|
2008-04-25 04:23:47 -04:00
|
|
|
{ "feed-url" "FEEDURL" { VARCHAR 256 } +not-null+ }
|
2008-04-20 05:19:06 -04:00
|
|
|
} define-persistent
|
|
|
|
|
|
|
|
: init-blog-table blog ensure-table ;
|
|
|
|
|
|
|
|
: <blog> ( id -- todo )
|
|
|
|
blog new
|
|
|
|
swap >>id ;
|
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
: blogroll ( -- seq )
|
|
|
|
f <blog> select-tuples [ [ name>> ] compare ] sort ;
|
2008-04-20 05:19:06 -04:00
|
|
|
|
|
|
|
: <entry-form> ( -- form )
|
|
|
|
"entry" <form>
|
|
|
|
"entry" planet-template >>view-template
|
|
|
|
"entry-summary" planet-template >>summary-template
|
|
|
|
"title" <string> add-field
|
|
|
|
"description" <html-text> add-field
|
|
|
|
"pub-date" <date> add-field ;
|
|
|
|
|
|
|
|
: <blog-form> ( -- form )
|
|
|
|
"blog" <form>
|
|
|
|
"edit-blog" planet-template >>edit-template
|
2008-04-22 22:08:27 -04:00
|
|
|
"blog-admin-link" planet-template >>summary-template
|
2008-04-20 05:19:06 -04:00
|
|
|
"id" <integer>
|
|
|
|
hidden >>renderer
|
|
|
|
add-field
|
|
|
|
"name" <string>
|
|
|
|
t >>required
|
|
|
|
add-field
|
|
|
|
"www-url" <url>
|
|
|
|
t >>required
|
|
|
|
add-field
|
2008-04-25 04:23:47 -04:00
|
|
|
"feed-url" <url>
|
2008-04-20 05:19:06 -04:00
|
|
|
t >>required
|
|
|
|
add-field ;
|
|
|
|
|
|
|
|
: <planet-factor-form> ( -- form )
|
|
|
|
"planet-factor" <form>
|
2008-04-22 22:08:27 -04:00
|
|
|
"postings" planet-template >>view-template
|
|
|
|
"postings-summary" planet-template >>summary-template
|
2008-04-20 05:19:06 -04:00
|
|
|
"postings" <entry-form> +plain+ <list> add-field
|
2008-04-22 22:08:27 -04:00
|
|
|
"blogroll" "blog" <link> +unordered+ <list> add-field ;
|
|
|
|
|
|
|
|
: <admin-form> ( -- form )
|
|
|
|
"admin" <form>
|
|
|
|
"admin" planet-template >>view-template
|
2008-04-20 05:19:06 -04:00
|
|
|
"blogroll" <blog-form> +unordered+ <list> add-field ;
|
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
:: <edit-blogroll-action> ( planet -- action )
|
|
|
|
[let | form [ <admin-form> ] |
|
|
|
|
<action>
|
|
|
|
[
|
|
|
|
blank-values
|
2008-04-20 05:19:06 -04:00
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
blogroll "blogroll" set-value
|
|
|
|
|
|
|
|
form view-form
|
|
|
|
] >>display
|
|
|
|
] ;
|
2008-04-20 05:19:06 -04:00
|
|
|
|
|
|
|
:: <planet-action> ( planet -- action )
|
|
|
|
[let | form [ <planet-factor-form> ] |
|
|
|
|
<action>
|
|
|
|
[
|
|
|
|
blank-values
|
|
|
|
|
|
|
|
planet postings>> "postings" set-value
|
|
|
|
blogroll "blogroll" set-value
|
|
|
|
|
|
|
|
form view-form
|
|
|
|
] >>display
|
|
|
|
] ;
|
|
|
|
|
|
|
|
:: planet-feed ( planet -- feed )
|
|
|
|
feed new
|
2008-04-25 04:23:47 -04:00
|
|
|
"Planet Factor" >>title
|
2008-04-20 05:19:06 -04:00
|
|
|
"http://planet.factorcode.org" >>link
|
2008-04-25 04:23:47 -04:00
|
|
|
planet postings>> 16 short head >>entries ;
|
2008-04-20 05:19:06 -04:00
|
|
|
|
|
|
|
:: <feed-action> ( planet -- action )
|
|
|
|
<action>
|
|
|
|
[
|
|
|
|
"text/xml" <content>
|
|
|
|
[ planet planet-feed feed>xml write-xml ] >>body
|
|
|
|
] >>display ;
|
|
|
|
|
|
|
|
: <posting> ( name entry -- entry' )
|
|
|
|
clone [ ": " swap 3append ] change-title ;
|
|
|
|
|
|
|
|
: fetch-feed ( url -- feed )
|
|
|
|
download-feed entries>> ;
|
|
|
|
|
|
|
|
\ fetch-feed DEBUG add-error-logging
|
|
|
|
|
|
|
|
: fetch-blogroll ( blogroll -- entries )
|
|
|
|
dup
|
2008-04-25 04:23:47 -04:00
|
|
|
[ feed-url>> fetch-feed ] parallel-map
|
2008-04-20 05:19:06 -04:00
|
|
|
[ >r name>> r> [ <posting> ] with map ] 2map concat ;
|
|
|
|
|
|
|
|
: sort-entries ( entries -- entries' )
|
|
|
|
[ [ pub-date>> ] compare ] sort <reversed> ;
|
|
|
|
|
|
|
|
: update-cached-postings ( planet -- )
|
|
|
|
"webapps.planet" [
|
2008-04-25 04:23:47 -04:00
|
|
|
blogroll fetch-blogroll sort-entries 8 short head
|
2008-04-22 22:08:27 -04:00
|
|
|
>>postings drop
|
2008-04-20 05:19:06 -04:00
|
|
|
] with-logging ;
|
|
|
|
|
|
|
|
:: <update-action> ( planet -- action )
|
|
|
|
<action>
|
|
|
|
[
|
|
|
|
planet update-cached-postings
|
|
|
|
"" f <temporary-redirect>
|
|
|
|
] >>display ;
|
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
:: <planet-factor-admin> ( planet-factor -- responder )
|
2008-04-20 05:19:06 -04:00
|
|
|
[let | blog-form [ <blog-form> ]
|
|
|
|
blog-ctor [ [ <blog> ] ] |
|
2008-04-22 22:08:27 -04:00
|
|
|
<dispatcher>
|
|
|
|
planet-factor <edit-blogroll-action> >>default
|
2008-04-20 05:19:06 -04:00
|
|
|
|
2008-04-25 04:23:47 -04:00
|
|
|
planet-factor <update-action> "update" add-responder
|
|
|
|
|
2008-04-20 05:19:06 -04:00
|
|
|
! Administrative CRUD
|
2008-04-25 04:23:47 -04:00
|
|
|
blog-ctor "$planet-factor/admin" <delete-action> "delete-blog" add-responder
|
|
|
|
blog-form blog-ctor "$planet-factor/admin" <edit-action> "edit-blog" add-responder
|
2008-04-20 05:19:06 -04:00
|
|
|
] ;
|
|
|
|
|
2008-05-01 17:24:50 -04:00
|
|
|
SYMBOL: can-administer-planet-factor?
|
|
|
|
|
|
|
|
can-administer-planet-factor? define-capability
|
|
|
|
|
2008-04-22 22:08:27 -04:00
|
|
|
: <planet-factor> ( -- responder )
|
|
|
|
planet-factor new-dispatcher
|
2008-04-25 04:23:47 -04:00
|
|
|
dup <planet-action> "list" add-main-responder
|
2008-04-22 22:08:27 -04:00
|
|
|
dup <feed-action> "feed.xml" add-responder
|
2008-05-01 17:24:50 -04:00
|
|
|
dup <planet-factor-admin> { can-administer-planet-factor? } <protected> "admin" add-responder
|
2008-04-20 05:19:06 -04:00
|
|
|
<boilerplate>
|
2008-04-22 22:08:27 -04:00
|
|
|
"planet" planet-template >>template ;
|
|
|
|
|
2008-04-26 06:49:41 -04:00
|
|
|
: start-update-task ( planet db seq -- )
|
|
|
|
'[
|
2008-04-27 04:09:00 -04:00
|
|
|
, , , [
|
|
|
|
dup filter-responder? [ responder>> ] when
|
|
|
|
update-cached-postings
|
|
|
|
] with-db
|
2008-04-26 06:49:41 -04:00
|
|
|
] 10 minutes every drop ;
|