all: add webapp
This commit is contained in:
0
src/TinyBlog.package/TBWebApp.class/README.md
Normal file
0
src/TinyBlog.package/TBWebApp.class/README.md
Normal file
3
src/TinyBlog.package/TBWebApp.class/class/start.st
Normal file
3
src/TinyBlog.package/TBWebApp.class/class/start.st
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
starting/stopping
|
||||||
|
start
|
||||||
|
Server ifNil: [ Server := self new start ]
|
3
src/TinyBlog.package/TBWebApp.class/class/stop.st
Normal file
3
src/TinyBlog.package/TBWebApp.class/class/stop.st
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
starting/stopping
|
||||||
|
stop
|
||||||
|
Server ifNotNil: [ Server stop. Server := nil ]
|
3
src/TinyBlog.package/TBWebApp.class/instance/allPosts.st
Normal file
3
src/TinyBlog.package/TBWebApp.class/instance/allPosts.st
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
actions
|
||||||
|
allPosts
|
||||||
|
^ TBBlog current allVisibleBlogPosts
|
@@ -0,0 +1,6 @@
|
|||||||
|
actions
|
||||||
|
errorPage
|
||||||
|
^ String streamContents: [ :s |
|
||||||
|
self renderPageHeaderOn: s.
|
||||||
|
s << '<p>Oops, an error occurred</p>'.
|
||||||
|
self renderPageFooterOn: s ]
|
14
src/TinyBlog.package/TBWebApp.class/instance/homePage.st
Normal file
14
src/TinyBlog.package/TBWebApp.class/instance/homePage.st
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
actions
|
||||||
|
homePage
|
||||||
|
^ String streamContents: [ :s |
|
||||||
|
self renderPageHeaderOn: s.
|
||||||
|
s << '<h1>TinyBlog Web App</h1>'.
|
||||||
|
s << '<ul>'.
|
||||||
|
self allPosts withIndexDo: [ :aPost :index |
|
||||||
|
s << '<li>';
|
||||||
|
<< ('<a href="/posts/', index asString, '">');
|
||||||
|
<< aPost title ;
|
||||||
|
<< '</a></li>' ].
|
||||||
|
s << '</ul>'.
|
||||||
|
self renderPageFooterOn: s.
|
||||||
|
]
|
@@ -0,0 +1,7 @@
|
|||||||
|
initialization
|
||||||
|
initialize
|
||||||
|
super initialize.
|
||||||
|
teapot := Teapot configure: {
|
||||||
|
#port -> 8081.
|
||||||
|
#debugMode -> true
|
||||||
|
}.
|
@@ -0,0 +1,10 @@
|
|||||||
|
starting/stopping
|
||||||
|
pageForPostNumber: aPostNumber
|
||||||
|
| currentPost |
|
||||||
|
currentPost := self allPosts at: aPostNumber ifAbsent: [ ^ self errorPage ].
|
||||||
|
^ String streamContents: [ :s | self renderPageHeaderOn: s.
|
||||||
|
s << ('<h1>', currentPost title, '</h1>').
|
||||||
|
s << ('<h3>', currentPost date mmddyyyy, '</h3>').
|
||||||
|
s << ('<p> Category: ', currentPost category, '</p>').
|
||||||
|
s << ('<p>', currentPost text, '</p>').
|
||||||
|
self renderPageFooterOn: s ]
|
@@ -0,0 +1,3 @@
|
|||||||
|
actions
|
||||||
|
renderPageFooterOn: aStream
|
||||||
|
aStream << '</body></html>'
|
@@ -0,0 +1,3 @@
|
|||||||
|
actions
|
||||||
|
renderPageHeaderOn: aStream
|
||||||
|
aStream << '<html><body>'
|
6
src/TinyBlog.package/TBWebApp.class/instance/start.st
Normal file
6
src/TinyBlog.package/TBWebApp.class/instance/start.st
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
starting/stopping
|
||||||
|
start
|
||||||
|
teapot
|
||||||
|
GET: '/' -> [ self homePage ];
|
||||||
|
GET: '/posts/<id>' -> [ :request | self pageForPostNumber: (request at: #id) asNumber ];
|
||||||
|
start
|
3
src/TinyBlog.package/TBWebApp.class/instance/stop.st
Normal file
3
src/TinyBlog.package/TBWebApp.class/instance/stop.st
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
starting/stopping
|
||||||
|
stop
|
||||||
|
teapot stop
|
14
src/TinyBlog.package/TBWebApp.class/properties.json
Normal file
14
src/TinyBlog.package/TBWebApp.class/properties.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"category" : "TinyBlog",
|
||||||
|
"classinstvars" : [
|
||||||
|
],
|
||||||
|
"classvars" : [
|
||||||
|
"Server" ],
|
||||||
|
"commentStamp" : "",
|
||||||
|
"instvars" : [
|
||||||
|
"teapot" ],
|
||||||
|
"name" : "TBWebApp",
|
||||||
|
"pools" : [
|
||||||
|
],
|
||||||
|
"super" : "Object",
|
||||||
|
"type" : "normal" }
|
Reference in New Issue
Block a user