nitro 0.3.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. data/ChangeLog +284 -0
  2. data/{LICENCE → LICENSE} +1 -1
  3. data/README +13 -17
  4. data/RELEASES +13 -1
  5. data/Rakefile +1 -9
  6. data/bin/cluster.rb +5 -5
  7. data/examples/blog/README +45 -0
  8. data/examples/blog/apache.conf +0 -0
  9. data/examples/blog/app.rb +21 -0
  10. data/examples/blog/config.rb +88 -0
  11. data/examples/blog/lib/blog.rb +104 -0
  12. data/examples/blog/log/app.log +117 -0
  13. data/examples/blog/root/comments.xhtml +38 -0
  14. data/examples/blog/root/entry_form.xhtml +18 -0
  15. data/examples/blog/root/index.xhtml +43 -0
  16. data/examples/blog/root/login.xhtml +24 -0
  17. data/examples/blog/root/m/bubbles.gif +0 -0
  18. data/examples/blog/root/m/comments_curve.gif +0 -0
  19. data/examples/blog/root/m/down.gif +0 -0
  20. data/examples/blog/root/m/footer_bg.gif +0 -0
  21. data/examples/blog/root/m/garrow.gif +0 -0
  22. data/examples/blog/root/m/gbull.gif +0 -0
  23. data/examples/blog/root/m/grbull.gif +0 -0
  24. data/examples/blog/root/m/h1_bg.gif +0 -0
  25. data/examples/blog/root/m/header_bg.gif +0 -0
  26. data/examples/blog/root/m/obull.gif +0 -0
  27. data/examples/blog/root/m/page_bg.gif +0 -0
  28. data/examples/blog/root/m/side_title_bg.gif +0 -0
  29. data/examples/blog/root/m/sidebar_bg.gif +0 -0
  30. data/examples/blog/root/recent_posts.xhtml +14 -0
  31. data/examples/blog/root/style.css +201 -0
  32. data/examples/blog/root/style.xsl +118 -0
  33. data/examples/blog/root/view_entry.xhtml +29 -0
  34. data/examples/og/run.rb +27 -29
  35. data/examples/tiny/README +3 -4
  36. data/examples/tiny/app.rb +6 -16
  37. data/examples/tiny/config.rb +30 -0
  38. data/examples/tiny/log/app.log +23 -0
  39. data/examples/tiny/root/{index.sx → index.xhtml} +3 -6
  40. data/lib/{n/std.rb → nitro.rb} +9 -4
  41. data/lib/{n → nitro}/application.rb +13 -7
  42. data/lib/{n → nitro}/config.rb +38 -8
  43. data/lib/{n → nitro}/events.rb +1 -1
  44. data/lib/{n → nitro}/l10n.rb +1 -1
  45. data/lib/{n → nitro}/logger.rb +8 -8
  46. data/lib/{n → nitro}/macros.rb +3 -3
  47. data/lib/{n → nitro}/mixins.rb +1 -1
  48. data/lib/nitro/properties.rb +301 -0
  49. data/lib/{n → nitro}/server.rb +2 -2
  50. data/lib/{n → nitro}/server/appserver.rb +14 -5
  51. data/lib/{n → nitro}/server/cluster.rb +5 -5
  52. data/lib/{n → nitro}/server/cookie.rb +1 -1
  53. data/lib/nitro/server/dispatcher.rb +66 -0
  54. data/lib/{n → nitro}/server/filters.rb +7 -7
  55. data/lib/{n → nitro}/server/filters/autologin.rb +3 -3
  56. data/lib/{n → nitro}/server/fragment.rb +3 -3
  57. data/lib/{n → nitro}/server/handlers.rb +3 -3
  58. data/lib/nitro/server/render.rb +200 -0
  59. data/lib/{n → nitro}/server/request.rb +6 -6
  60. data/lib/{n → nitro}/server/requestpart.rb +5 -5
  61. data/lib/{n → nitro}/server/script.rb +3 -3
  62. data/lib/{n → nitro}/server/server.rb +4 -4
  63. data/lib/{n → nitro}/server/session.rb +3 -3
  64. data/lib/nitro/server/shaders.rb +165 -0
  65. data/lib/{n → nitro}/server/user.rb +1 -1
  66. data/lib/nitro/server/webrick.rb +175 -0
  67. data/lib/nitro/service.rb +25 -0
  68. data/lib/{n → nitro}/sitemap.rb +2 -2
  69. data/lib/{n → nitro}/ui/date-select.rb +0 -0
  70. data/lib/{n → nitro}/ui/pager.rb +1 -1
  71. data/lib/{n → nitro}/ui/popup.rb +1 -1
  72. data/lib/{n → nitro}/ui/select.rb +1 -1
  73. data/lib/{n → nitro}/ui/tabs.rb +1 -1
  74. data/lib/{n → nitro}/utils/array.rb +1 -1
  75. data/lib/{n → nitro}/utils/cache.rb +1 -1
  76. data/lib/{n → nitro}/utils/gfx.rb +1 -1
  77. data/lib/{n → nitro}/utils/hash.rb +1 -1
  78. data/lib/{n → nitro}/utils/html.rb +1 -1
  79. data/lib/{n → nitro}/utils/http.rb +1 -1
  80. data/lib/{n → nitro}/utils/mail.rb +1 -1
  81. data/lib/{n → nitro}/utils/number.rb +1 -1
  82. data/lib/{n → nitro}/utils/pool.rb +1 -1
  83. data/lib/{n → nitro}/utils/string.rb +19 -95
  84. data/lib/{n → nitro}/utils/template.rb +0 -0
  85. data/lib/{n → nitro}/utils/time.rb +1 -1
  86. data/lib/{n → nitro}/utils/uri.rb +3 -3
  87. data/lib/nitro/version.rb +11 -0
  88. data/lib/{n/og.rb → og.rb} +61 -31
  89. data/lib/{n/og → og}/backend.rb +13 -7
  90. data/lib/{n/og → og}/backends/mysql.rb +43 -39
  91. data/lib/{n/og → og}/backends/psql.rb +42 -38
  92. data/lib/{n/og → og}/connection.rb +21 -9
  93. data/lib/{n/og → og}/meta.rb +18 -12
  94. data/lib/xsl/base.xsl +11 -88
  95. data/test/n/server/tc_cookie.rb +1 -1
  96. data/test/n/server/tc_filters.rb +1 -1
  97. data/test/n/server/tc_request.rb +3 -3
  98. data/test/n/server/tc_requestpart.rb +2 -2
  99. data/test/n/server/tc_session.rb +1 -1
  100. data/test/n/tc_events.rb +1 -1
  101. data/test/n/tc_og.rb +16 -18
  102. data/test/n/tc_properties.rb +22 -18
  103. data/test/n/tc_sitemap.rb +2 -2
  104. data/test/n/ui/tc_pager.rb +4 -4
  105. data/test/n/utils/tc_cache.rb +1 -1
  106. data/test/n/utils/tc_hash.rb +1 -1
  107. data/test/n/utils/tc_html.rb +1 -1
  108. data/test/n/utils/tc_http.rb +1 -1
  109. data/test/n/utils/tc_number.rb +1 -1
  110. data/test/n/utils/tc_strings.rb +1 -46
  111. data/test/n/utils/tc_uri.rb +1 -1
  112. metadata +101 -108
  113. data/examples/simple/README +0 -42
  114. data/examples/simple/app.rb +0 -31
  115. data/examples/simple/conf/apache.conf +0 -100
  116. data/examples/simple/conf/config.rb +0 -72
  117. data/examples/simple/conf/debug-config.rb +0 -26
  118. data/examples/simple/conf/live-config.rb +0 -26
  119. data/examples/simple/conf/requires.rb +0 -43
  120. data/examples/simple/ctl +0 -32
  121. data/examples/simple/env.rb +0 -32
  122. data/examples/simple/install.rb +0 -12
  123. data/examples/simple/lib/articles/entities.rb +0 -37
  124. data/examples/simple/lib/articles/lc-en.rb +0 -36
  125. data/examples/simple/lib/articles/methods.rb +0 -55
  126. data/examples/simple/lib/articles/part.rb +0 -57
  127. data/examples/simple/root/add-article.sx +0 -15
  128. data/examples/simple/root/article-form.ss +0 -20
  129. data/examples/simple/root/comments-form.ss +0 -16
  130. data/examples/simple/root/comments.si +0 -30
  131. data/examples/simple/root/index.sx +0 -44
  132. data/examples/simple/root/shader/shader.xsl +0 -100
  133. data/examples/simple/root/shader/style.css +0 -9
  134. data/examples/simple/root/view-article.sx +0 -29
  135. data/examples/tiny/conf/config.rb +0 -62
  136. data/examples/tiny/conf/requires.rb +0 -33
  137. data/examples/tiny/ctl +0 -16
  138. data/lib/n/parts.rb +0 -157
  139. data/lib/n/properties.rb +0 -199
  140. data/lib/n/server/dispatcher.rb +0 -55
  141. data/lib/n/server/handlers/code-handler.rb +0 -182
  142. data/lib/n/server/handlers/page-handler.rb +0 -612
  143. data/lib/n/server/webrick.rb +0 -283
  144. data/lib/n/shaders.rb +0 -166
  145. data/lib/n/sync/clc.rb +0 -110
  146. data/lib/n/sync/handler.rb +0 -229
  147. data/lib/n/sync/server.rb +0 -176
  148. data/lib/p/README +0 -1
File without changes
@@ -0,0 +1,21 @@
1
+ #!/usr/local/bin/ruby
2
+
3
+ # = Blog
4
+ #
5
+ # A simple Blog powered by Nitro.
6
+ #
7
+ # code:
8
+ # * George Moschovitis <gm@navel.gr>
9
+ #
10
+ # (c) 2004 Navel, all rights reserved.
11
+ # $Id: app.rb 149 2004-11-13 19:52:32Z gmosx $
12
+
13
+ # set to true for DEBUG mode.
14
+ $DBG = false
15
+
16
+ $LOAD_PATH.unshift "lib"
17
+ $LOAD_PATH.unshift "../../lib"
18
+
19
+ require "config"
20
+
21
+ $app = N::WebrickServer.new.exec()
@@ -0,0 +1,88 @@
1
+ # = Blog Configuration
2
+ #
3
+ # You can find additional configuration variables in
4
+ # lib/n/config.rb. Just copy the variables you want to
5
+ # change in this file
6
+ #
7
+ # WARNING: if you want to change the backend dont forget
8
+ # to change it in the DEBUG and LIVE configurations.
9
+ #
10
+ # code:
11
+ # * George Moschovitis <gm@navel.gr>
12
+ #
13
+ # (c) 2004 Navel, all rights reserved.
14
+ # $Id: config.rb 155 2004-11-13 20:32:12Z gmosx $
15
+
16
+ require "nitro"
17
+ require "nitro/logger"
18
+ require "nitro/config"
19
+
20
+ require "og"
21
+ require "nitro/l10n"
22
+ require "nitro/events"
23
+ require "nitro/mixins"
24
+ require "nitro/sitemap"
25
+
26
+ require "nitro/utils/number"
27
+ require "nitro/utils/string"
28
+ require "nitro/utils/array"
29
+ require "nitro/utils/hash"
30
+ require "nitro/utils/html"
31
+ require "nitro/utils/gfx"
32
+
33
+ require "nitro/server/webrick"
34
+ require "nitro/server/shaders"
35
+
36
+ require "blog.rb"
37
+
38
+ $name = "Nitro Blog"
39
+
40
+ $blog_username = 'George Moschovitis'
41
+ $blog_password = 'navelrulez'
42
+
43
+ $services = {
44
+ :index => N::BlogService
45
+ # 'users' => N::UsersService
46
+ }
47
+
48
+ $srv_address = $appsrv_address = "127.0.0.1"
49
+ $srv_url = "http://#$srv_address:#$srv_port"
50
+
51
+ if $DBG # DEBUG mode
52
+
53
+ $og = Og::Database.new(
54
+ :address => "localhost",
55
+ :backend => "mysql",
56
+ # :backend => "psql",
57
+ :database => "blog",
58
+ :user => "root",
59
+ :password => "navelrulez",
60
+ :connection_count => 3
61
+ )
62
+
63
+ # dont compress when debuging, more readable code.
64
+ $shader = N::XSLTShader.new("#$root_dir/style.xsl",
65
+ N::RubyShader.new
66
+ )
67
+
68
+ else # LIVE mode
69
+
70
+ $appsrv_port = 8080
71
+
72
+ $og = Og::Database.new(
73
+ :address => "localhost",
74
+ :backend => "mysql",
75
+ # :backend => "psql",
76
+ :database => "blog",
77
+ :user => "root",
78
+ :password => "navelrulez",
79
+ :connection_count => 20
80
+ )
81
+
82
+ $shader = N::XSLTShader.new("#$root_dir/style.xsl",
83
+ N::RubyShader.new(
84
+ N::CompressShader.new
85
+ )
86
+ )
87
+
88
+ end
@@ -0,0 +1,104 @@
1
+ # code:
2
+ # * George Moschovitis <gm@navel.gr>
3
+ #
4
+ # (c) 2004 Navel, all rights reserved.
5
+ # $Id: blog.rb 155 2004-11-13 20:32:12Z gmosx $
6
+
7
+ require 'nitro/service'
8
+
9
+ $blog_username = 'your user name'
10
+ $blog_password = 'your password'
11
+
12
+ module N
13
+
14
+ # = Common
15
+ #
16
+ # Common properties/methods for the other classes.
17
+ #
18
+ class Common
19
+ prop :create_time, Time
20
+ prop_accessor :author, String
21
+ prop_accessor :body, String
22
+
23
+ def initialize
24
+ @create_time = Time.now
25
+ end
26
+ end
27
+
28
+ class Comment < Common; end
29
+
30
+ # = BlogEntry
31
+ #
32
+ class BlogEntry < Common
33
+ prop_accessor :title, String
34
+ has_many :comments, N::Comment, :linkback => 'entry_oid'
35
+ end
36
+
37
+ # = Comment
38
+ #
39
+ class Comment < Common
40
+ belongs_to :entry, N::BlogEntry
41
+ end
42
+
43
+ # = BlogMethods
44
+ #
45
+ module BlogMethods
46
+
47
+ # scaffold N::BlogEntry, :name => 'entry'
48
+
49
+ def index
50
+ @entries = N::BlogEntry.all('ORDER BY oid DESC LIMIT 5')
51
+ end
52
+
53
+ def new_entry
54
+ entry = request.fill(N::BlogEntry.new)
55
+ entry.author = session['username']
56
+ entry.save!
57
+ end
58
+
59
+ def view_entry
60
+ @entry = N::BlogEntry[params['oid']]
61
+ end
62
+
63
+ def list_entry
64
+ @entries = N::BlogEntry.all('ORDER BY oid DESC LIMIT 5')
65
+ end
66
+
67
+ def del_entry
68
+ N::BlogEntry.delete(params['oid'])
69
+ end
70
+
71
+ def new_comment
72
+ comment = request.fill(N::Comment.new)
73
+ comment.save!
74
+ end
75
+
76
+ def del_comment
77
+ N::Comment.delete(params['oid'])
78
+ end
79
+
80
+ def login
81
+ if password = params['password']
82
+ if password == $blog_password
83
+ session['owner'] = true
84
+ session['username'] = $blog_username
85
+ redirect '/'
86
+ else
87
+ @error = 'Invalid password'
88
+ end
89
+ end
90
+ end
91
+
92
+ def logout
93
+ session['owner'] = session['username'] = nil
94
+ end
95
+
96
+ end
97
+
98
+ # = BlogService
99
+ #
100
+ class BlogService < N::Service
101
+ include BlogMethods
102
+ end
103
+
104
+ end # module
@@ -0,0 +1,117 @@
1
+ # Logfile created on Mon Nov 08 17:37:14 EET 2004 by logger.rb/1.5.2.4
2
+ I: Connecting to database 'blog' using backend 'psql'.
3
+ I: Og auto manages the following classes:
4
+ I: [N::BlogEntry, N::Blog]
5
+ I: Web Server listening at http://127.0.0.1:8080
6
+ I: App Server listening at http://127.0.0.1:9090
7
+ I: Connecting to database 'blog' using backend 'psql'.
8
+ I: Og auto manages the following classes:
9
+ I: [N::BlogEntry, N::Blog]
10
+ I: Web Server listening at http://127.0.0.1:8080
11
+ I: App Server listening at http://127.0.0.1:9090
12
+ I: Connecting to database 'blog' using backend 'psql'.
13
+ I: Og auto manages the following classes:
14
+ I: [N::BlogEntry, N::Blog]
15
+ I: Web Server listening at http://127.0.0.1:8080
16
+ I: App Server listening at http://127.0.0.1:9090
17
+ I: Connecting to database 'blog' using backend 'psql'.
18
+ I: Og auto manages the following classes:
19
+ I: [N::BlogEntry, N::Blog]
20
+ I: Web Server listening at http://127.0.0.1:8080
21
+ I: App Server listening at http://127.0.0.1:9090
22
+ I: Connecting to database 'blog' using backend 'psql'.
23
+ I: Og auto manages the following classes:
24
+ I: [N::BlogEntry, N::Blog]
25
+ I: Web Server listening at http://127.0.0.1:8080
26
+ I: App Server listening at http://127.0.0.1:9090
27
+ I: Connecting to database 'blog' using backend 'psql'.
28
+ I: Og auto manages the following classes:
29
+ I: [N::BlogEntry, N::Blog]
30
+ I: Web Server listening at http://127.0.0.1:8080
31
+ I: App Server listening at http://127.0.0.1:9090
32
+ I: Connecting to database 'blog' using backend 'psql'.
33
+ I: Og auto manages the following classes:
34
+ I: [N::BlogEntry, N::Blog]
35
+ I: Web Server listening at http://127.0.0.1:8080
36
+ I: App Server listening at http://127.0.0.1:9090
37
+ I: Connecting to database 'blog' using backend 'psql'.
38
+ I: Og auto manages the following classes:
39
+ I: [N::BlogEntry, N::Blog]
40
+ I: Web Server listening at http://127.0.0.1:8080
41
+ I: App Server listening at http://127.0.0.1:9090
42
+ I: Connecting to database 'blog' using backend 'psql'.
43
+ I: Og auto manages the following classes:
44
+ I: [N::BlogEntry, N::Blog]
45
+ I: Web Server listening at http://127.0.0.1:8080
46
+ I: App Server listening at http://127.0.0.1:9090
47
+ I: Connecting to database 'blog' using backend 'psql'.
48
+ I: Og auto manages the following classes:
49
+ I: [N::BlogEntry, N::Blog]
50
+ I: Web Server listening at http://127.0.0.1:8080
51
+ I: App Server listening at http://127.0.0.1:9090
52
+ I: Connecting to database 'blog' using backend 'psql'.
53
+ I: Og auto manages the following classes:
54
+ I: [N::BlogEntry, N::Blog, N::Common]
55
+ I: Web Server listening at http://127.0.0.1:8080
56
+ I: App Server listening at http://127.0.0.1:9090
57
+ I: Connecting to database 'blog' using backend 'psql'.
58
+ I: Og auto manages the following classes:
59
+ I: [N::BlogEntry, N::Blog, N::Common]
60
+ I: Web Server listening at http://127.0.0.1:8080
61
+ I: App Server listening at http://127.0.0.1:8080
62
+ I: Connecting to database 'blog' using backend 'psql'.
63
+ I: Og auto manages the following classes:
64
+ I: [N::BlogEntry, N::Blog, N::Common]
65
+ I: Web Server listening at http://127.0.0.1:8080
66
+ I: App Server listening at http://127.0.0.1:8080
67
+ I: Connecting to database 'blog' using backend 'psql'.
68
+ I: Og auto manages the following classes:
69
+ I: [N::BlogEntry, N::Blog, N::Common]
70
+ I: Web Server listening at http://127.0.0.1:8080
71
+ I: App Server listening at http://127.0.0.1:8080
72
+ I: Connecting to database 'blog' using backend 'psql'.
73
+ I: Og auto manages the following classes:
74
+ I: [N::Comment, N::Blog, N::BlogEntry, N::Common]
75
+ I: Web Server listening at http://127.0.0.1:8080
76
+ I: App Server listening at http://127.0.0.1:8080
77
+ I: Connecting to database 'blog' using backend 'psql'.
78
+ I: Og auto manages the following classes:
79
+ I: [N::BlogEntry, N::Comment, N::Common]
80
+ I: Web Server listening at http://127.0.0.1:8080
81
+ I: App Server listening at http://127.0.0.1:8080
82
+ I: Connecting to database 'blog' using backend 'psql'.
83
+ I: Og auto manages the following classes:
84
+ I: [N::BlogEntry, N::Comment, N::Common]
85
+ I: Web Server listening at http://127.0.0.1:8080
86
+ I: App Server listening at http://127.0.0.1:8080
87
+ I: Connecting to database 'blog' using backend 'psql'.
88
+ I: Og auto manages the following classes:
89
+ I: [N::BlogEntry, N::Comment, N::Common]
90
+ I: Web Server listening at http://127.0.0.1:8080
91
+ I: App Server listening at http://127.0.0.1:8080
92
+ I: Connecting to database 'blog' using backend 'psql'.
93
+ I: Og auto manages the following classes:
94
+ I: [N::BlogEntry, N::Comment, N::Common]
95
+ I: Web Server listening at http://127.0.0.1:8080
96
+ I: App Server listening at http://127.0.0.1:8080
97
+ I: Connecting to database 'blog' using backend 'psql'.
98
+ I: Og auto manages the following classes:
99
+ I: [N::BlogEntry, N::Comment, N::Common]
100
+ I: Web Server listening at http://127.0.0.1:8080
101
+ I: App Server listening at http://127.0.0.1:8080
102
+ I: Connecting to database 'blog' using backend 'psql'.
103
+ I: Og auto manages the following classes:
104
+ I: [N::BlogEntry, N::Comment, N::Common]
105
+ I: Connecting to database 'blog' using backend 'psql'.
106
+ I: Og auto manages the following classes:
107
+ I: [N::BlogEntry, N::Comment, N::Common]
108
+ I: Connecting to database 'blog' using backend 'psql'.
109
+ I: Og auto manages the following classes:
110
+ I: [N::BlogEntry, N::Comment, N::Common]
111
+ I: Web Server listening at http://127.0.0.1:8080
112
+ I: App Server listening at http://127.0.0.1:8080
113
+ I: Connecting to database 'blog' using backend 'psql'.
114
+ I: Og auto manages the following classes:
115
+ I: [N::BlogEntry, N::Comment, N::Common]
116
+ I: Web Server listening at http://127.0.0.1:8080
117
+ I: App Server listening at http://127.0.0.1:8080
@@ -0,0 +1,38 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <root>
4
+
5
+ <h2>#{@entry.comments_count} Comments:</h2>
6
+ <?r
7
+ if comments = @entry.comments
8
+ for comment in comments
9
+ ?>
10
+ <div class="comment">
11
+ #{comment.body}
12
+ <div class="footer">
13
+ by #{comment.author} at #{comment.create_time.strftime('%R %p')}
14
+ <?r if session['owner'] ?>
15
+ [<a href="del_comment?oid=#{comment.oid}">del</a>]
16
+ <?r end ?>
17
+ </div>
18
+ </div>
19
+ <?r
20
+ end
21
+ else
22
+ ?>
23
+ no comments.
24
+ <?r end ?>
25
+ <form action="new_comment" method="post">
26
+ <input type="hidden" name="entry_oid" value="#{@entry.oid}" />
27
+ <p>
28
+ <b>Your name:</b><br />
29
+ <input type="text" name="author" value="#{session['username']}" />
30
+ </p>
31
+ <p>
32
+ <b>Write your thoughts:</b><br />
33
+ <textarea name="body" style="width: 90%; height: 100px">#{}</textarea>
34
+ </p>
35
+ <input type="submit" value="Add comment" />
36
+ </form>
37
+
38
+ </root>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <div id="comments">
4
+
5
+ <h2>Post new entry:</h2>
6
+
7
+ <form action="new_entry" method="post">
8
+ <p>
9
+ <b>Title:</b><br />
10
+ <input type="text" name="title" />
11
+ </p>
12
+ <p>
13
+ <b>Body:</b><br />
14
+ <textarea name="body" style="width: 90%; height: 100px">#{}</textarea>
15
+ </p>
16
+ <input type="submit" value="Post" />
17
+ </form>
18
+ </div>
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <x:page xmlns:x="http://www.navel.gr/xml/shader.xsd">
4
+
5
+ <x:cell id="main">
6
+
7
+ <?r
8
+ if @entries
9
+ for entry in @entries
10
+ ?>
11
+ <div class="entry">
12
+ <h2 class="date">#{entry.create_time.strftime('%B %e, %G')}</h2>
13
+ <div class="post">
14
+ <h3 class="title">#{entry.title}</h3>
15
+ #{entry.body}
16
+ <div class="footer">
17
+ posted by #{entry.author} at <a href="view_entry?oid=#{entry.oid}">#{entry.create_time.strftime('%R %p')}</a> |
18
+ <a href="view_entry?oid=#{entry.oid}#comments">#{entry.comments_count} comments</a>.
19
+ <?r if session['owner'] ?>
20
+ [<a href="del_entry?oid=#{entry.oid}">del</a>]
21
+ <?r end ?>
22
+ </div>
23
+ </div>
24
+ </div>
25
+ <?r
26
+ end
27
+ else
28
+ ?>
29
+ no entries
30
+ <?r end ?>
31
+
32
+ <?r if session['owner'] ?>
33
+ <include href="entry_form" />
34
+ <?r end ?>
35
+
36
+ </x:cell>
37
+
38
+ <x:cell id="side">
39
+ <include href="recent_posts" />
40
+ </x:cell>
41
+
42
+ </x:page>
43
+
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0"?>
2
+
3
+ <x:page xmlns:x="http://www.navel.gr/xml/shader.xsd">
4
+
5
+ <x:cell id="main">
6
+
7
+ <p>
8
+ Please login as an author by entering the blog password.
9
+ </p>
10
+
11
+ <div class="error">#@error</div>
12
+
13
+ <form action="login" method="post">
14
+ <p>
15
+ <b>Password:</b><br />
16
+ <input type="password" name="password" />
17
+ </p>
18
+ <input type="submit" value="Login" />
19
+ </form>
20
+
21
+ </x:cell>
22
+
23
+ </x:page>
24
+