Pimki 1.5.092 → 1.6.092

Sign up to get free protection for your applications and to get access to all the features.
data/README-PIMKI CHANGED
@@ -68,6 +68,16 @@ version 2.0.11 by default. Version 3.0.1 is a bit experimental. You can select
68
68
  which version of redcloth via --redcloth command line argument.
69
69
 
70
70
  History:
71
+ 1.6.092 Mainly bug fixes with some minor enhancements
72
+ - Squashed horrible restart bug
73
+ - Several bug fixes
74
+ - Upgraded to RedCloth 3.0.3, which seems stable enough
75
+ - RSS includes Bliki
76
+ - Added capacity to stop server through the edit_web template
77
+ - Added an error reporting template
78
+ - Can now display just the Mind Map image for printing
79
+ - Minor improvements to the publish interface, e.g. displaying menu
80
+
71
81
  1.5.092 Bug fixes & new features release
72
82
  - Several bug fixes
73
83
  - RedCloth is now defaulting to 2.0.11. Controllable thru commandline.
@@ -75,7 +85,6 @@ History:
75
85
  - c2 wiki links via [c2[PageName]]
76
86
  - FavIcon (working in Firefox)
77
87
  - Madeleine Snapshot Controls (thru edit_web)
78
-
79
88
 
80
89
  1.4.092 New features release
81
90
  - Added a major/minor edit override for the default 'continous edit' when
@@ -57,6 +57,21 @@ class WikiController < ActionControllerServlet
57
57
 
58
58
  def static_style_sheet() render "static_style_sheet" end
59
59
 
60
+ def stop
61
+ redirect_show("HomePage") unless wiki.authenticate(@params["system_password"])
62
+
63
+ begin
64
+ secs = @params['seconds'].to_i
65
+ raise if secs.zero?
66
+ @logger.warn "Pimki server will stop in #{secs} seconds!"
67
+ WikiService.request_stop
68
+ render_text "Pimki server will stop in #{secs} seconds!"
69
+ Thread.new { sleep secs; Kernel.exit! }
70
+ rescue
71
+ redirect_show("HomePage")
72
+ end
73
+ end
74
+
60
75
  # Within a single web ---------------------------------------------------------
61
76
 
62
77
  def parse_category
@@ -164,6 +179,7 @@ class WikiController < ActionControllerServlet
164
179
 
165
180
  def rss_with_content
166
181
  @pages_by_revision = web.select.by_revision.first(15)
182
+ @bliki_entries = web.bliki_entries_by_date
167
183
  @uri = @req.request_uri
168
184
  host = @req.meta_vars["HTTP_X_FORWARDED_HOST"] || "#{@uri.host}:#{@uri.port.to_s}"
169
185
  @web_url = "#{@uri.scheme}://#{host}/#{@web.address}"
@@ -188,14 +204,14 @@ class WikiController < ActionControllerServlet
188
204
 
189
205
  case @req.query['Action']
190
206
  when 'Delete' # Handle page deletion
191
- wiki.delete_page(web_address, @req.query['sel_page_name'])
207
+ wiki.delete_page(web_address, @req.query['del_sel_page_name'])
192
208
  redirect_action "list/"
193
209
 
194
210
  when 'Create' # Handle page creation
195
211
  redirect_show @req.query['newpage']
196
212
 
197
213
  when 'Rename' # Handle page rename
198
- wiki.rename_page(web_address, @req.query['sel_page_name'], @req.query['newpage'])
214
+ wiki.rename_page(web_address, @req.query['ren_sel_page_name'], @req.query['newpage'])
199
215
  redirect_action "list/"
200
216
  end
201
217
  end
@@ -238,7 +254,7 @@ class WikiController < ActionControllerServlet
238
254
  def edit_web #{{{
239
255
  parse_category
240
256
  set_mm_options
241
- @snapshot_interval = MadeleineService.snapshot_interval_hours
257
+ @snapshot_interval = WikiService.snapshot_interval_hours
242
258
  end #}}}
243
259
 
244
260
  def update_web
@@ -278,10 +294,10 @@ class WikiController < ActionControllerServlet
278
294
  clear_render_cache true
279
295
 
280
296
  when 'Force Data Snapshot'
281
- MadeleineService.take_snapshot
297
+ WikiService.take_snapshot
282
298
 
283
299
  when 'Clean Storage'
284
- MadeleineService.clean_old_snapshots
300
+ WikiService.clean_old_snapshots
285
301
 
286
302
  end
287
303
  @message = 'Operation succeeded'
@@ -372,7 +388,7 @@ class WikiController < ActionControllerServlet
372
388
  redirect_path "/#{web_address}/edit_web/" unless dont_redirect
373
389
  end
374
390
 
375
- def set_menu_pages #{{{
391
+ def set_menu_pages published = false #{{{
376
392
  parse_category
377
393
  @all_pages = web.select { true }
378
394
  @menu_pages = case web.menu_type
@@ -387,6 +403,7 @@ class WikiController < ActionControllerServlet
387
403
  else
388
404
  web.menu_content
389
405
  end
406
+ @menu_content = @menu_content.gsub('/show/', '/published/').gsub( %r{<a href="../published/.*?">\?</a>}, '') if published
390
407
  nil
391
408
  when 'linkers'
392
409
  web.select { |page|
@@ -465,7 +482,6 @@ class WikiController < ActionControllerServlet
465
482
  end
466
483
  end #}}}
467
484
 
468
-
469
485
  def edit_menu #{{{
470
486
  @menu_type = web.menu_type
471
487
  @menu_content = web.menu_content
@@ -538,6 +554,7 @@ class WikiController < ActionControllerServlet
538
554
  end
539
555
 
540
556
  def published
557
+ set_menu_pages true
541
558
  if web.published then @page = wiki.read_page(web_address, page_name || "HomePage") else redirect_show("HomePage") end
542
559
  end
543
560
 
@@ -80,8 +80,7 @@ class Revision
80
80
  end
81
81
 
82
82
  def display_published
83
- @published_cache = WikiContent.new(self, {:mode => :publish}) if @published_cache.nil?
84
- @published_cache
83
+ @published_cache ||= WikiContent.new(self, {:mode => :publish})
85
84
  end
86
85
 
87
86
  def display_content_for_export
@@ -46,7 +46,7 @@ class WikiService < MadeleineService
46
46
  @webs[new_address].address = new_address
47
47
  end
48
48
 
49
- MadeleineService.snapshot_interval_hours = snapshots_interval
49
+ self.class.snapshot_interval_hours = snapshots_interval
50
50
 
51
51
  web = @webs[new_address]
52
52
  web.refresh_revisions if settings_changed?(web, markup, safe_mode, brackets_only)
@@ -104,7 +104,7 @@ class WikiService < MadeleineService
104
104
  def rename_page(web_address, old_page_name, new_page_name) #{{{
105
105
  web = @webs[web_address]
106
106
  page = web.pages.delete(old_page_name)
107
- page or raise "unknown page: #{old_page_name.to_s};; #{pages.keys.join(',')}"
107
+ page or raise "unknown page: #{old_page_name.to_s}; #{web.pages.keys.join(',')}"
108
108
  page.name = new_page_name
109
109
  web.pages[new_page_name] = page
110
110
  end #}}}
@@ -0,0 +1,35 @@
1
+ <% def html_escape str
2
+ str.gsub( '<', '&lt;').gsub( '>', '&gt;').gsub('&', '&amp;')
3
+ end %>
4
+
5
+ <?xml version="1.0" encoding="UTF-8"?>
6
+ <html xmlns="http://www.w3.org/1999/xhtml">
7
+ <head>
8
+ <title>Internal Error</title>
9
+
10
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
11
+ <link rel="Stylesheet" href="../../static_style_sheet/" type="text/css" media="screen" />
12
+ </head>
13
+ <body>
14
+
15
+ <h3>An error has occured!</h3>
16
+
17
+ <p>We're sorry, we're not perfect... but we want to be! If you have the time, please go to the pimki <a href="http://rubyforge.org/tracker/?atid=1750&group_id=447&func=browse">BUG tracker</a> at RubyForge and open a bug report. Please supply a short description of what you did when this happended, the system you're on, etc. and paste everything below this line in the bug report. It will greatly help in development. Thank you for your efforts!</p>
18
+
19
+ <hr />
20
+
21
+ <p><b>Error message:</b>
22
+ <code style="color:red"><%= html_escape @error_details.message %></code>
23
+ </p>
24
+
25
+ <p><b>Action:</b> <%= @action_name %></p>
26
+
27
+ <p><b>Backtrace:</b><br />
28
+ <table border="0">
29
+ <% for line in @error_details.backtrace %>
30
+ <tr><td><code><%= line.sub(/(.*)\/(\w+\.rb):(\d+):in (.*)/, '\1/<b>\2</b>:\3:in <b>\4</b>') %></code></td></tr>
31
+ <% end %>
32
+ </p>
33
+
34
+ </body>
35
+ </html>
data/app/views/menu.rhtml CHANGED
@@ -1,15 +1,19 @@
1
1
  <div id="Menu" width="150">
2
2
  <p>
3
3
  <table>
4
- <% begin %>
4
+ <% published = @action_name =~ /published/
5
+ show_by = published ? '../published/' : '../show/'
6
+ begin %>
5
7
  <tr><th><%= @web.name %> Quick Links</th></tr>
6
- <tr><td><a href='../edit_menu/' style="font-size: 9px;">Edit Menu Contents</a></td></tr>
8
+ <% unless published %>
9
+ <tr><td><a href='<%= "/#{web.address}/edit_menu/" %>' style="font-size: 9px;">Edit Menu Contents</a></td></tr>
10
+ <% end %>
7
11
  <tr><td>&nbsp;</td></tr>
8
12
  <% if @menu_pages.nil? %>
9
13
  <tr><td><%= @menu_content %></td></tr>
10
14
  <% else %>
11
15
  <% for page in @menu_pages %>
12
- <tr><td><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></td></tr>
16
+ <tr><td><a href="<%= show_by + page.name %>"><%= truncate(page.plain_name, 35) %></a></td></tr>
13
17
  <% end %>
14
18
  <% end %>
15
19
  <% rescue Exception
@@ -17,9 +17,10 @@
17
17
  }
18
18
 
19
19
  #Container {
20
- float: left;
21
- margin: 0 auto;
22
- text-align: center;
20
+ float: left;
21
+ margin: 0 auto;
22
+ text-align: center;
23
+ margin-left: 10px;
23
24
  }
24
25
 
25
26
  #Content {
data/app/views/top.rhtml CHANGED
@@ -32,13 +32,13 @@
32
32
  </style>
33
33
  </head>
34
34
 
35
- <% if @web && @page && @web.enable_dclick_edit %>
35
+ <% if @web && @page && @web.enable_dclick_edit && @action_name!='edit' %>
36
36
  <body ondblclick="location.href='../edit/<%= @page.name %>'">
37
37
  <% else %>
38
38
  <body>
39
39
  <% end %>
40
40
 
41
- <%= sub_template "menu" unless @hide_navigation %>
41
+ <%= sub_template "menu" unless @hide_menu %>
42
42
 
43
43
  <div id="Container">
44
44
  <div id="Content">
@@ -2,6 +2,7 @@
2
2
  @title = "Editing #{@page.plain_name}"
3
3
  @content_width = 720
4
4
  @hide_navigation = true
5
+ @hide_menu = true
5
6
  %>
6
7
  <%= sub_template "top" %>
7
8
 
@@ -2,6 +2,7 @@
2
2
  @title = "Creating new bliki entry"
3
3
  @content_width = 720
4
4
  @hide_navigation = true
5
+ @hide_menu = true
5
6
  %>
6
7
  <%= sub_template "top" %>
7
8
 
@@ -2,6 +2,7 @@
2
2
  @title = "Editing #{@page.plain_name}"
3
3
  @content_width = 810
4
4
  @hide_navigation = true
5
+ @hide_menu = true
5
6
  @style_additions = "#Content, #Container {padding-left:100px;}"
6
7
  %>
7
8
  <%= sub_template "top" %>
@@ -2,6 +2,7 @@
2
2
  @title = "Editing Left-Side Menu Options"
3
3
  @content_width = 700
4
4
  @hide_navigation = true
5
+ @hide_menu = true
5
6
  %>
6
7
  <%= sub_template "top" %>
7
8
 
@@ -1,4 +1,7 @@
1
- <% @title = "Edit Web" %>
1
+ <% @title = "Edit Web"
2
+ @hide_menu = true
3
+ @style_additions = "#Container { width: 600px; margin-left: 180px;}"
4
+ %>
2
5
  <%= sub_template "top" %>
3
6
 
4
7
  <%= "<p style='font-size: 15px; font-variant: italic; color: red;'>#{@message}</span>" if @message %>
@@ -181,7 +184,20 @@
181
184
 
182
185
  <p style='font-size: 10px;'>...or forget all your changes and <a href="/new_web/">create a new web</a>.</p>
183
186
 
184
-
187
+ <h2>Stop Pimki</h2>
188
+ <p style="color:red">Please note that stopping the server will stop all pimki webs running on this server! It is a also a forced exit, so any changes currently being made by other users will be lost!</p>
189
+ <form action="../stop" id="stop" method="post">
190
+ <p style="font-size: 10px;">
191
+ Enter system password
192
+ <input type="password" id="system_password" name="system_password">
193
+ and
194
+ <input type="submit" name='stop' value="Stop Pimki">
195
+ in
196
+ <input type="text" name='seconds' value='3' size='5' align='right'>
197
+ seconds.
198
+ </p>
199
+ </form>
200
+
185
201
  <script>
186
202
  function proposeAddress() {
187
203
  document.getElementById('address').value =
@@ -78,7 +78,7 @@
78
78
  return true;
79
79
  }
80
80
  function validatePageName(fieldID) {
81
- if (/^([A-Z][a-z]+[A-Z]\w+)$/.test(document.getElementById(fieldID).value)) {
81
+ if (/^([A-Z]+[a-z]+[A-Z]\w+)$/.test(document.getElementById(fieldID).value)) {
82
82
  return true;
83
83
  } else {
84
84
  alert('You wrote "' + document.getElementById(fieldID).value + '" as a page name, but it needs to be a wiki word.');
@@ -113,7 +113,7 @@
113
113
  <!-- Delete Page -->
114
114
  <tr>
115
115
  <td>Delete page:</td>
116
- <td><select id="sel_delete" name="sel_page_name" size="1" style="width:195">
116
+ <td><select id="del_sel_page_name" name="del_sel_page_name" size="1" style="width:195">
117
117
  <option value="noselect">------------</option>
118
118
  <% for page in @pages_by_name %>
119
119
  <option value="<%= page.name %>"><%= page.name %></option>
@@ -130,7 +130,7 @@
130
130
  <!-- Rename Page -->
131
131
  <tr>
132
132
  <td>Rename:</td>
133
- <td><select id="sel_rename" name="sel_page_name" size="1" style="width:195">
133
+ <td><select id="ren_sel_page_name" name="ren_sel_page_name" size="1" style="width:195">
134
134
  <option value="noselect">------------</option>
135
135
  <% for page in @pages_by_name %>
136
136
  <option value="<%= page.name %>"><%= page.name %></option>
@@ -1,4 +1,8 @@
1
- <% @title = "#{@web_name} Login" %><% @hide_navigation = true %><%= sub_template "top" %>
1
+ <% @title = "#{@web_name} Login"
2
+ @hide_navigation = true
3
+ @hide_menu = true
4
+ %>
5
+ <%= sub_template "top" %>
2
6
 
3
7
  <form action="authenticate" method="post">
4
8
  <p>
@@ -4,6 +4,7 @@
4
4
  <%= sub_template "top" %>
5
5
 
6
6
  <h4>A "Mind Map" created from the Wiki links.</h4>
7
+ <p style="font-size: 9px; margin-top: -20px; margin-bottom: 10px;">A printable version (just the image) can be found <a href="../get_map_img">here</a>.</p>
7
8
 
8
9
  <img src="../get_map_img" usemap="#graph.map" />
9
10
  <map name="graph.map" id="graph.map">
@@ -2,6 +2,7 @@
2
2
  @title = "Creating #{WikiWords.separate(CGI.unescape(@page_name))}"
3
3
  @content_width = 800
4
4
  @hide_navigation = true
5
+ @hide_menu = true
5
6
  @style_additions = "#Container, #Content {padding-left:100px;}"
6
7
  %>
7
8
  <%= sub_template "top" %>
@@ -1,6 +1,7 @@
1
1
  <%
2
2
  @title = @page.plain_name
3
3
  @hide_navigation = true
4
+ @hide_menu = true
4
5
  @style_additions = ".newWikiWord { background-color: white; font-style: italic; }"
5
6
  @inline_style = true
6
7
  %><%= sub_template "top" %>
@@ -1,10 +1,11 @@
1
1
  <%
2
2
  @title = @page.plain_name
3
3
  @hide_navigation = true
4
- @style_additions = ".newWikiWord { background-color: white; font-style: italic; }
4
+ @style_additions = ".newWikiWord { background-color: white; font-style: italic; }"
5
5
  #Container, #Content { width: 600px; padding-left: 180px;}"
6
6
  @inline_style = true
7
- %><%= sub_template "top" %>
7
+ %>
8
+ <%= sub_template "top" %>
8
9
 
9
10
  <%= @page.display_published %>
10
11
 
@@ -2,6 +2,7 @@
2
2
  @title = "Rollback to #{@page.plain_name} Rev ##{@revision.number}"
3
3
  @content_width = 720
4
4
  @hide_navigation = true
5
+ @hide_menu = true
5
6
  %><%= sub_template "top" %>
6
7
 
7
8
  <%= "<p style='color:red'>Please correct the error that caused this error in rendering:<br/><small>#{@params["msg"]}</small></p>" if @params["msg"] %>
@@ -3,16 +3,28 @@
3
3
  <channel>
4
4
  <title><%= @web.name %></title>
5
5
  <link><%= "#{@web_url}/show/HomePage" %></link>
6
- <description>An Instiki wiki</description>
6
+ <description>Pimki - a PIM based on Instiki's wiki technology</description>
7
7
  <language>en-us</language>
8
8
  <ttl>40</ttl>
9
+ <% for entry in @bliki_entries %>
10
+ <item>
11
+ <title>Bliki: <%= entry.plain_name %></title>
12
+ <% unless @hide_description %>
13
+ <description><%= CGI.escapeHTML(entry.display_content) %></description>
14
+ <% end %>
15
+ <pubDate><%= ctime = entry.created_at; ctime.strftime "%a, %e %b %Y %H:%M:%S #{ctime.gmt_offset/3600}" %></pubDate>
16
+ <guid><%= "#{@web_url}/bliki_revision/#{entry.name}?rev=#{entry.revisions.length-1}" %></guid>
17
+ <link><%= "#{@web_url}/bliki_revision/#{entry.name}?rev=#{entry.revisions.length-1}" %></link>
18
+ <dc:creator><%= WikiWords.separate(entry.author) %></dc:creator>
19
+ </item>
20
+ <% end %>
9
21
  <% for page in @pages_by_revision %>
10
- <item>
22
+ <item>
11
23
  <title><%= page.plain_name %></title>
12
24
  <% unless @hide_description %>
13
25
  <description><%= CGI.escapeHTML(page.display_content) %></description>
14
26
  <% end %>
15
- <pubDate><%= page.created_at.strftime "%a, %e %b %Y %H:%M:%S %Z" %></pubDate>
27
+ <pubDate><%= ctime = page.created_at; ctime.strftime "%a, %e %b %Y %H:%M:%S #{ctime.gmt_offset/3600}" %></pubDate>
16
28
  <guid><%= "#{@web_url}/show/#{page.name}" %></guid>
17
29
  <link><%= "#{@web_url}/show/#{page.name}" %></link>
18
30
  <dc:creator><%= WikiWords.separate(page.author) %></dc:creator>
@@ -137,8 +137,14 @@ class ActionControllerServlet < HTTPServlet::AbstractServlet
137
137
  elsif template_exists_for_action
138
138
  render
139
139
  else
140
- raise "No action responded to #{action_name}", caller
140
+ raise RuntimeError, "No action responded to #{action_name}", caller
141
141
  end
142
+
143
+ rescue Exception => details
144
+ raise if ['WEBrick', 'Net'].include? details.class.name.split('::')[0]
145
+ @error_details = details
146
+ render 'error'
147
+
142
148
  end
143
149
 
144
150
  def add_instance_variables_to_assigns
@@ -179,7 +179,7 @@ module Madeleine
179
179
  # outside the system.
180
180
  #
181
181
  def method_missing(symbol, *args, &block)
182
- # print "Sending #{symbol} to #{@thing.to_s}, myid=#{@myid}, sysid=#{@sysid}\n"
182
+ #print "Sending #{symbol} to #{@thing.to_s}, myid=#{@myid}, sysid=#{@sysid}\n"
183
183
  raise NoMethodError, "Undefined method" unless @thing.respond_to?(symbol)
184
184
  if (Thread.current[:system])
185
185
  @thing.send(symbol, *args, &block)
@@ -103,7 +103,7 @@ class MadeleineServer
103
103
  end
104
104
 
105
105
  def command_log_present?
106
- not Dir[storage_path + '/*.command_log'].empty?
106
+ not Dir[File.join(File.expand_path(storage_path), '*.command_log')].empty?
107
107
  end
108
108
 
109
109
  def force_snapshot
data/pimki.rb CHANGED
@@ -16,7 +16,8 @@ begin
16
16
 
17
17
  rescue LoadError => detail
18
18
  # no rubygems, so load from the libraries directory
19
- p detail
19
+ p detail if $DEBUG
20
+ puts 'Unable to load libraries through RubyGems. Loading from ./libraries directory'
20
21
  require 'bluecloth'
21
22
  require 'zip/zip'
22
23
  end
@@ -47,7 +48,7 @@ OPTIONS = {
47
48
  :port => 2500,
48
49
  :storage => "#{Dir.pwd}/storage",
49
50
  :pdflatex => pdflatex_available,
50
- :redcloth => '2.0.11'
51
+ :redcloth => '3'
51
52
  }
52
53
 
53
54
  ARGV.options do |opts|
@@ -65,7 +66,7 @@ ARGV.options do |opts|
65
66
  opts.on("-t", "--storage=storage", String,
66
67
  "Makes Instiki use the specified directory for storage.",
67
68
  "Default: [cwd]/storage/[port]\n") { |OPTIONS[:storage]| }
68
- opts.on("-r", "--redcloth VERSION", Integer,
69
+ opts.on("-r", "--redcloth VERSION", String,
69
70
  "Makes Instiki use the specified RedCloth version.",
70
71
  "You can specify major version only (2 or 3)",
71
72
  "Default: 2.0.11\n") { |OPTIONS[:redcloth]| }
@@ -84,7 +85,11 @@ Socket.do_not_reverse_lookup = true
84
85
 
85
86
  # RedCloth + Modifications: {{{
86
87
  begin
87
- require_gem 'RedCloth', "~> #{OPTIONS[:redcloth]}"
88
+ if Gem.source_index.search('redcloth').map { |s| s.version.version }.include? OPTIONS[:redcloth]
89
+ require_gem 'RedCloth', "#{OPTIONS[:redcloth]}"
90
+ else
91
+ require_gem 'RedCloth', "~> #{OPTIONS[:redcloth]}"
92
+ end
88
93
 
89
94
  rescue LoadError => detail
90
95
  if OPTIONS[:redcloth] < '3'
@@ -148,6 +153,7 @@ if ['3.0.0', '3.0.1'].include? RedCloth::VERSION
148
153
  end #}}}
149
154
  end #}}}
150
155
  end #}}}
156
+ puts RedCloth::VERSION
151
157
 
152
158
  # Start the application: {{{
153
159
  storage_dir = OPTIONS[:storage] + "/" + OPTIONS[:port].to_s
@@ -159,7 +165,7 @@ WikiController.template_root = "#{cdir}/app/views/"
159
165
 
160
166
  on_exit = lambda {
161
167
  WebControllerServer::the_active_server.shutdown
162
- MadeleineService.request_stop
168
+ WikiService.request_stop
163
169
  }
164
170
 
165
171
  trap "INT", on_exit
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.4
2
+ rubygems_version: 0.8.8
3
3
  specification_version: 1
4
4
  name: Pimki
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.5.092
7
- date: 2005-02-02
6
+ version: 1.6.092
7
+ date: 2005-03-17
8
8
  summary: "A Personal Information Manager (PIM) based on Instiki's Wiki technology."
9
9
  require_paths:
10
10
  - libraries
@@ -68,6 +68,7 @@ files:
68
68
  - app/models/chunks/wiki_symbols.rb
69
69
  - app/models/chunks/wiki_test.rb
70
70
  - app/views/bottom.rhtml
71
+ - app/views/error.rhtml
71
72
  - app/views/markdown_help.rhtml
72
73
  - app/views/menu.rhtml
73
74
  - app/views/navigation.rhtml