Pimki 1.6.092 → 1.7.092

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. data/README-PIMKI +13 -4
  2. data/app/controllers/wiki.rb +157 -62
  3. data/app/models/chunks/acronym.rb +19 -0
  4. data/app/models/chunks/category.rb +4 -2
  5. data/app/models/chunks/todo.rb +0 -1
  6. data/app/models/chunks/wiki.rb +19 -5
  7. data/app/models/revision.rb +2 -0
  8. data/app/models/web.rb +38 -38
  9. data/app/models/web_test.rb +1 -1
  10. data/app/models/wiki_service.rb +8 -7
  11. data/app/models/wiki_words.rb +3 -2
  12. data/app/models/wiki_words_test.rb +10 -0
  13. data/app/views/error.rhtml +4 -2
  14. data/app/views/menu.rhtml +1 -5
  15. data/app/views/navigation.rhtml +6 -6
  16. data/app/views/static_style_sheet.rhtml +25 -5
  17. data/app/views/textile_help.rhtml +1 -1
  18. data/app/views/top.rhtml +59 -57
  19. data/app/views/wiki/adv_search.rhtml +2 -2
  20. data/app/views/wiki/authors.rhtml +1 -1
  21. data/app/views/wiki/bliki.rhtml +7 -5
  22. data/app/views/wiki/bliki_edit.rhtml +2 -1
  23. data/app/views/wiki/bliki_new.rhtml +2 -1
  24. data/app/views/wiki/bliki_revision.rhtml +12 -19
  25. data/app/views/wiki/edit.rhtml +4 -4
  26. data/app/views/wiki/edit_menu.rhtml +2 -1
  27. data/app/views/wiki/edit_web.rhtml +83 -21
  28. data/app/views/wiki/export.rhtml +7 -0
  29. data/app/views/wiki/feeds.rhtml +7 -3
  30. data/app/views/wiki/glossary.rhtml +27 -0
  31. data/app/views/wiki/list.rhtml +5 -1
  32. data/app/views/wiki/login.rhtml +1 -0
  33. data/app/views/wiki/mind.rhtml +14 -2
  34. data/app/views/wiki/new_system.rhtml +3 -3
  35. data/app/views/wiki/new_web.rhtml +5 -1
  36. data/app/views/wiki/page.rhtml +1 -8
  37. data/app/views/wiki/published.rhtml +38 -0
  38. data/app/views/wiki/recently_revised.rhtml +6 -0
  39. data/app/views/wiki/rss_feed.rhtml +46 -0
  40. data/app/views/wiki/test.rhtml +25 -0
  41. data/app/views/wiki/todo.rhtml +5 -2
  42. data/app/views/wiki/web_list.rhtml +5 -1
  43. data/libraries/secure_web_controller_server.rb +106 -0
  44. data/pimki.rb +11 -7
  45. metadata +11 -4
@@ -0,0 +1,19 @@
1
+
2
+ # This chunk is supposed to pick up acronyms that have been defined on another
3
+ # page and define them on this page. See glossary for more details.
4
+ class Acronym < Chunk::Abstract
5
+ def self.pattern() %r{([A-Z]+)(<\/acronym>)?} end
6
+
7
+ def initialize(match_data, revision)
8
+ super(match_data, revision)
9
+ @acronym, @defined = match_data[1], match_data[2]
10
+ end
11
+
12
+ def unmask(content)
13
+ return self if @defined
14
+
15
+ definitions = revision.page.web.glossary_items.inject({}) { |hsh, (ac,df), pg| hsh[ac] = df }
16
+ return self if content.gsub!( Regexp.new(mask(content)), "<acronym title='#{definitions[@acronym]}'>#{@acronym}</acronym>" )
17
+ end
18
+ end
19
+
@@ -25,7 +25,9 @@ class Category < Chunk::Abstract
25
25
  # If the chunk is hidden, erase the mask and return this chunk
26
26
  # otherwise, surround it with a 'div' block.
27
27
  def unmask(content)
28
- replacement = ( hidden ? '' : '<div class="property">category:\1</div>' )
29
- self if content.sub!( Regexp.new( pre_mask+'(.*)?'+post_mask ), replacement )
28
+ #replacement = ( hidden ? '' : '<div class="property">category:\1</div>' )
29
+ self if content.sub!( Regexp.new( pre_mask+'(.*)?'+post_mask ) ) {
30
+ "<div class='property'>category:#{$1.split(',').map { |c| c.strip!; "<a href='../list/?category=#{c}'>#{c}</a> " }}</div>"
31
+ }
30
32
  end
31
33
  end
@@ -27,7 +27,6 @@ class Todo < Chunk::Abstract
27
27
  @due_date = Date.new(*d)
28
28
  end
29
29
  rescue => detail
30
- p ['==>', detail, @text]
31
30
  @due_date = nil
32
31
  end
33
32
  end
@@ -80,21 +80,27 @@ module WikiChunk
80
80
  else
81
81
  @page_name, @link_text = match_data[1], match_data[1]
82
82
  end
83
+
84
+ @link_text = WikiWords.separate(@link_text) if @link_text.match /^#{WikiWords::WIKI_WORD_PATTERN}$/
83
85
  end
84
86
  end
85
87
 
86
88
  # This chunk handles [bliki[entry name]].
87
- # This format can be easily duplicated for any other pre-configured redirection.
89
+ # This format has been extended for some other pre-configured redirection.
90
+ # Probably a bad name now, as we're using this for any link outside the current
91
+ # web, but if I change the class name it'll break existing storages.
88
92
  class BlikiLink < WikiLink
89
93
  def self.pattern() /\[(\w+)\[([\w\d\s]+)\]\]/ end
90
94
 
91
95
  attr_reader :page_name, :link_text, :entry
92
-
96
+
93
97
  def initialize(match_data, revision)
94
98
  super(match_data, revision)
95
99
  @target, @page_name, @link_text = match_data[1], match_data[2], match_data[2]
96
100
  end
97
101
 
102
+ def mask(content) pre_mask + post_mask end
103
+
98
104
  def unmask(content)
99
105
  return self if content.sub!(regexp) { |match|
100
106
  case @target
@@ -102,14 +108,22 @@ module WikiChunk
102
108
  web = revision.page.web
103
109
  entry = web.bliki[page_name]
104
110
  if entry.nil?
105
- "<span style='background:lightgrey;font-style:italic'>Unknown Bliki entry: '#{page_name}'</span>"
111
+ #"<span style='background:lightgrey;font-style:italic'>Unknown Bliki entry: '#{page_name}'</span>"
112
+ "<a class='newWikiWord' href='/#{web.address}/bliki_new/?entry_name=#{CGI::escape page_name}'>Bliki::#{page_name}</a>"
106
113
  else
107
- "<a class='existingWikiWord' href='/#{web.address}/bliki_revision/#{entry.name}?rev=#{entry.revisions.size-1}'>#{entry.name}</a>"
114
+ "<a class='existingWikiWord' href='/#{web.address}/bliki_revision/#{entry.name}?rev=#{entry.revisions.size-1}'>Bliki::#{entry.name}</a>"
108
115
  end
109
116
 
110
117
  when 'c2'
111
118
  "<a href='http://c2.com/cgi/wiki?#{@page_name}'>C2::#{@page_name}</a>"
112
- end
119
+
120
+ else
121
+ if web = WikiService.instance.webs[@target]
122
+ "<a href='/#{web.address}@/show/#@page_name'>#{web.name}::#@page_name</a>"
123
+ else
124
+ "<i>#@text</i>"
125
+ end
126
+ end
113
127
  }
114
128
  end
115
129
  end
@@ -45,6 +45,8 @@ class Revision
45
45
  def wiki_words
46
46
  unless @wiki_words_cache
47
47
  wiki_chunks = display_content.find_chunks(WikiChunk::WikiLink)
48
+ # BlikiLinks are used to link outside the wiki, so are not WikiLinks.
49
+ wiki_chunks.reject! { |chunk| chunk.kind_of? WikiChunk::BlikiLink }
48
50
  @wiki_words_cache = wiki_chunks.map { |c| ( c.escaped_text ? nil : c.page_name ) }.compact.uniq
49
51
  end
50
52
  @wiki_words_cache
@@ -6,8 +6,8 @@ require "zip/zip"
6
6
 
7
7
  class Web
8
8
  attr_accessor :pages, :name, :address, :password, :menu_type, :menu_content, :rendered_menu, :menu_limit, :menu_category
9
- attr_accessor :markup, :color, :safe_mode, :additional_style, :published, :brackets_only, :count_pages
10
- attr_accessor :mind_map_size, :symbols_map, :links_map, :enable_dclick_edit, :check_pass_on_edit
9
+ attr_accessor :markup, :color, :safe_mode, :additional_style, :published, :default_to_published, :brackets_only, :count_pages
10
+ attr_accessor :mind_map_size, :symbols_map, :links_map, :enable_dclick_edit, :check_pass_on_edit, :enable_menu
11
11
 
12
12
  # Mind Map defaults
13
13
  attr_accessor :mm_prog, :mm_graph_type, :mm_show_missing, :mm_show_authors, :mm_show_leaves, :mm_selected_categories
@@ -96,8 +96,10 @@ class Web
96
96
  def color() @color || "008B26" end
97
97
  def brackets_only() @brackets_only || false end
98
98
  def count_pages() @count_pages || false end
99
+ def enable_menu() @enable_menu || true end
99
100
  def menu_content() @menu_content || nil end
100
101
  def menu_limit() @menu_limit || 20 end
102
+ def default_to_published() @default_to_published || false end
101
103
  def menu_type()
102
104
  (@menu_type.nil? || @menu_type.empty?) ? 'linkers' : @menu_type
103
105
  end
@@ -108,9 +110,9 @@ class Web
108
110
  def mm_show_authors() @mm_show_authors || false end
109
111
  def mm_show_leaves() @mm_show_leaves || true end
110
112
  def mm_selected_categories() @mm_selected_categories || [] end
111
-
113
+
112
114
  # create a Mind Map graph and return the PNG and HTML map files generated
113
- def create_mind_map(prog, missing, show_authors, show_leaves, selected_categories)
115
+ def create_mind_map(prog, missing, show_authors, show_leaves, selected_categories, mm_size)
114
116
  dotFile = File.expand_path("#{WikiService.storage_path}/graph.dot")
115
117
  mapFile = File.expand_path("#{WikiService.storage_path}/graph.map")
116
118
  pngFile = File.expand_path("#{WikiService.storage_path}/map.png")
@@ -118,12 +120,7 @@ class Web
118
120
  File.open(dotFile, "w") do |file|
119
121
 
120
122
  # Graph properties:
121
- file.puts "digraph G {"
122
- file.puts "size=\"#{mind_map_size}\";"
123
- file.puts 'ratio=fill;'
124
- file.puts 'concentrate=true;'
125
- file.puts 'node [fontsize=10,fontname="Tahoma"];'
126
- file.puts 'edge [len=1.5];'
123
+ output_graph_header_to file, mm_size
127
124
 
128
125
  # Links and node properties:
129
126
  nodes = filter_categories(pages.values, selected_categories)
@@ -140,14 +137,14 @@ class Web
140
137
  end
141
138
 
142
139
  # Page Special nodes properties:
143
- file.puts "HomePage [color=\"##{color}\",style=bold];" if nodes.map{ |p| p.name }.include? "HomePage"
140
+ file.puts %{"Home Page" [color=\"##{color}\",style=bold];} if nodes.map{ |p| p.name }.include? "HomePage"
144
141
 
145
142
  nodes.each do |page|
146
- file.puts "#{page.name} [URL=\"../show/#{page.name}\"];"
143
+ file.puts %{"#{page.plain_name}" [URL=\"../show/#{page.name}\"];}
147
144
  page.references.each do |referer|
148
145
  unless page.name == referer.name or not nodes.include? referer
149
146
  unless !show_authors and auths.include? referer.name
150
- file.puts "#{referer.name} -> #{page.name};"
147
+ file.puts %{"#{referer.plain_name}" -> "#{page.plain_name}";}
151
148
  end
152
149
  end
153
150
  end
@@ -159,17 +156,17 @@ class Web
159
156
  nodes.each do |page|
160
157
  missing.each do |wanted|
161
158
  if page.content =~ /#{wanted}/
162
- file.puts "#{page.name} -> #{wanted};"
159
+ file.puts %{"#{page.plain_name}" -> "#{WikiWords.separate wanted}";}
163
160
  shown_missing << wanted
164
161
  end
165
162
  end
166
163
  end
167
164
  shown_missing.each do |wanted|
168
- file.puts "#{wanted} [URL=\"/#{@address}/show/#{wanted}\", fontsize=10,style=filled,color=grey];"
165
+ file.puts %{"#{WikiWords.separate wanted}" [URL="/#{@address}/show/#{wanted}", fontsize=10,style=filled,color=grey];}
169
166
  end
170
167
  end
171
168
 
172
- file.puts "}"
169
+ output_graph_footer_to file
173
170
  end
174
171
 
175
172
  call_graphviz(prog, dotFile, mapFile, pngFile)
@@ -177,7 +174,7 @@ class Web
177
174
  [pngFile, mapFile]
178
175
  end
179
176
 
180
- def create_author_graph(prog, selected_categories)
177
+ def create_author_graph(prog, selected_categories, mm_size)
181
178
  dotFile = File.expand_path("#{WikiService.storage_path}/graph.dot")
182
179
  mapFile = File.expand_path("#{WikiService.storage_path}/graph.map")
183
180
  pngFile = File.expand_path("#{WikiService.storage_path}/map.png")
@@ -185,29 +182,24 @@ class Web
185
182
  File.open(dotFile, "w") do |file|
186
183
 
187
184
  # Graph properties:
188
- file.puts "digraph G {"
189
- file.puts "size=\"#{mind_map_size}\";" if mind_map_size
190
- #file.puts 'ratio=fill;'
191
- file.puts 'concentrate=true;'
192
- file.puts 'node [fontsize=10,fontname="Tahoma"];'
193
- file.puts 'edge [len=1.5];'
185
+ output_graph_header_to file, mm_size
194
186
 
195
187
  # Links and node properties:
196
188
  auths = authors # avoid repeated selects
197
189
  auths.each do |auth|
198
- file.puts "#{auth} [style=filled,color=grey,URL=\"../show/#{auth}\"];"
190
+ file.puts %{"#{auth}" [style=filled,color=grey,URL="../show/#{auth}"];}
199
191
  end
200
192
 
201
193
  nodes = pages.values.reject { |entry| auths.include? entry.name }
202
194
  nodes = filter_categories(nodes, selected_categories)
203
195
  nodes.each do |page|
204
- file.puts "#{page.name} [URL=\"../show/#{page.name}\"];"
196
+ file.puts %{"#{page.plain_name}" [URL="../show/#{page.name}"];}
205
197
  page.authors.each do |auth|
206
- file.puts "#{auth} -> #{page.name};"
198
+ file.puts %{"#{auth}" -> "#{page.plain_name}";}
207
199
  end
208
200
  end
209
201
 
210
- file.puts "}"
202
+ output_graph_footer_to file
211
203
  end
212
204
 
213
205
  call_graphviz(prog, dotFile, mapFile, pngFile)
@@ -215,24 +207,19 @@ class Web
215
207
  [pngFile, mapFile]
216
208
  end
217
209
 
218
- def create_category_graph(prog, show_authors, selected_categories) #{{{
210
+ def create_category_graph(prog, show_authors, selected_categories, mm_size) #{{{
219
211
  dotFile = File.expand_path("#{WikiService.storage_path}/graph.dot")
220
212
  mapFile = File.expand_path("#{WikiService.storage_path}/graph.map")
221
213
  pngFile = File.expand_path("#{WikiService.storage_path}/map.png")
222
214
 
223
215
  File.open(dotFile, "w") do |file|
224
216
  # Graph properties:
225
- file.puts "digraph G {"
226
- file.puts "size=\"#{mind_map_size}\";" if mind_map_size
227
- #file.puts 'ratio=fill;'
228
- file.puts 'concentrate=true;'
229
- file.puts 'node [fontsize=10,fontname="Tahoma"];'
230
- file.puts 'edge [len=1.5];'
217
+ output_graph_header_to file, mm_size
231
218
 
232
219
  # Page Special nodes properties:
233
220
  categs = selected_categories.empty? ? categories : selected_categories
234
221
  categs.each do |category|
235
- file.puts "#{category} [fontsize=20,style=filled,color=grey,comment=\"#{category}\",URL=\"../list/?category=#{category}\"];"
222
+ file.puts %{"#{category}" [fontsize=20,style=filled,color=grey,comment="#{category}",URL="../list/?category=#{category}"];}
236
223
  end
237
224
 
238
225
  # Links and node properties:
@@ -244,13 +231,13 @@ class Web
244
231
  }
245
232
  end
246
233
  nodes.each do |page|
247
- file.puts "#{page.name} [URL=\"../show/#{page.name}\"];"
234
+ file.puts %{"#{page.plain_name}" [URL=\"../show/#{page.name}\"];}
248
235
  page.categories.each do |category|
249
- file.puts "#{category} -> #{page.name};"
236
+ file.puts %{"#{category}" -> "#{page.plain_name}";}
250
237
  end
251
238
  end
252
239
 
253
- file.puts "}"
240
+ output_graph_footer_to file
254
241
  end
255
242
 
256
243
  call_graphviz(prog, dotFile, mapFile, pngFile)
@@ -258,6 +245,19 @@ class Web
258
245
  [pngFile, mapFile]
259
246
  end #}}}
260
247
 
248
+ def output_graph_header_to file, mm_size
249
+ file.puts "digraph G {"
250
+ file.puts "size=\"#{mm_size}\";" if mm_size
251
+ file.puts 'ratio=fill;'
252
+ file.puts 'concentrate=true;'
253
+ file.puts 'node [fontsize=10,fontname="Tahoma"];'
254
+ file.puts 'edge [len=1.5];'
255
+ end
256
+
257
+ def output_graph_footer_to file
258
+ file.puts "}"
259
+ end
260
+
261
261
  def filter_categories(pages, selected_categories) #{{{
262
262
  nodes = pages
263
263
  unless selected_categories.empty?
@@ -3,7 +3,7 @@ require "wiki_service"
3
3
 
4
4
  class WebTest < Test::Unit::TestCase
5
5
  def setup
6
- @web = Web.new "Instiki", "instiki"
6
+ @web = Web.new "Pimki", "pimki"
7
7
  end
8
8
 
9
9
  def test_wiki_word_linking
@@ -7,6 +7,7 @@ require "author"
7
7
 
8
8
  class WikiService < MadeleineService
9
9
  attr_reader :webs, :system
10
+ attr_accessor :default_web
10
11
 
11
12
  # These methods do not change the state of persistent objects, and
12
13
  # should not be logged by Madeleine
@@ -21,7 +22,7 @@ class WikiService < MadeleineService
21
22
  end
22
23
 
23
24
  def authenticate(password)
24
- password == (@system["password"] || "instiki")
25
+ password == (@system["password"] || "pimki")
25
26
  end
26
27
 
27
28
  def setup(password, web_name, web_address)
@@ -34,10 +35,10 @@ class WikiService < MadeleineService
34
35
  end
35
36
 
36
37
  def update_web(old_address, new_address, name, markup, color, additional_style, safe_mode = false,
37
- password = nil, published = false, brackets_only = false, count_pages = false,
38
- mind_map_size="7,7", symbols_map=nil, links_map=nil,
38
+ password = nil, published = false, default_to_published = false, brackets_only = false,
39
+ count_pages = false, mind_map_size="7,7", symbols_map=nil, links_map=nil,
39
40
  snapshots_interval = 1,
40
- enable_dclick_edit=nil, check_pass_on_edit=false,
41
+ enable_dclick_edit=nil, enable_menu=true, check_pass_on_edit=false,
41
42
  prog=nil, graph_type=nil, missing=nil, show_authors=nil, show_leaves=nil, selected_categories=nil)
42
43
 
43
44
  if old_address != new_address
@@ -54,10 +55,10 @@ class WikiService < MadeleineService
54
55
  web.name, web.markup, web.color, web.additional_style, web.safe_mode =
55
56
  name, markup, color, additional_style, safe_mode
56
57
 
57
- web.password, web.published, web.brackets_only, web.count_pages =
58
- password, published, brackets_only, count_pages
58
+ web.password, web.published, web.default_to_published, web.brackets_only, web.count_pages =
59
+ password, published, default_to_published, brackets_only, count_pages
59
60
 
60
- web.enable_dclick_edit, web.check_pass_on_edit = enable_dclick_edit, check_pass_on_edit
61
+ web.enable_dclick_edit, web.enable_menu, web.check_pass_on_edit = enable_dclick_edit, enable_menu, check_pass_on_edit
61
62
 
62
63
  web.mind_map_size, web.mm_prog, web.mm_graph_type, web.mm_show_missing =
63
64
  mind_map_size, prog, graph_type, missing
@@ -17,12 +17,13 @@ module WikiWords
17
17
  DIGITS = "0123456789"
18
18
 
19
19
  WIKI_WORD_PATTERN = '[A-Z' + I18N_HIGHER_CASE_LETTERS + ']+[a-z' + I18N_LOWER_CASE_LETTERS + ']+[a-z' + I18N_LOWER_CASE_LETTERS + DIGITS + ']*[A-Z' + I18N_HIGHER_CASE_LETTERS + DIGITS + ']\w+'
20
+ CAMEL_CASED_WORD_BORDER = /([a-z#{I18N_LOWER_CASE_LETTERS}#{DIGITS}]|[A-Z#{I18N_HIGHER_CASE_LETTERS}]{2,})(?=[A-Z#{I18N_HIGHER_CASE_LETTERS}]\B)/u
20
21
 
21
22
  def self.separate(wiki_word, ignore_separation = false)
22
- if ignore_separation
23
+ if ignore_separation or wiki_word.match(/^[A-Z#{I18N_HIGHER_CASE_LETTERS}]+$/) or wiki_word.match(/\s/)
23
24
  wiki_word
24
25
  else
25
- wiki_word.gsub(/([a-z#{I18N_LOWER_CASE_LETTERS}#{DIGITS}]|[A-Z#{I18N_HIGHER_CASE_LETTERS}]{2,})(?=[A-Z#{I18N_HIGHER_CASE_LETTERS}])/u, '\1 \2').gsub(/(\d+)/u, ' \1')
26
+ wiki_word.gsub(CAMEL_CASED_WORD_BORDER, '\1 \2').gsub(/(.)(\d+)/u) { $1 == '_' ? "#$1#$2" : "#$1 #$2" }
26
27
  end
27
28
  end
28
29
  end
@@ -9,4 +9,14 @@ class WikiWordsTest < Test::Unit::TestCase
9
9
  assert_equal "Æe ÅØle Øen", WikiWords.separate("ÆeÅØleØen")
10
10
  assert_equal "Legetøj", WikiWords.separate("Legetøj")
11
11
  end
12
+
13
+ def test_pimki_wiki_words
14
+ assert_equal "XYZ", WikiWords.separate("XYZ")
15
+ assert_equal "WXYZ", WikiWords.separate("WXYZ")
16
+ assert_equal "XYZ to XML", WikiWords.separate("XYZ to XML")
17
+ assert_equal "WXYZ to XML", WikiWords.separate("WXYZ to XML")
18
+ assert_equal "XML Schema Stuff", WikiWords.separate("XMLSchemaStuff")
19
+ assert_equal "Schema XML Stuff", WikiWords.separate("SchemaXMLStuff")
20
+ assert_equal "Schema Stuff XML", WikiWords.separate("SchemaStuffXML")
21
+ end
12
22
  end
@@ -24,8 +24,10 @@
24
24
 
25
25
  <p><b>Action:</b> <%= @action_name %></p>
26
26
 
27
- <p><b>Backtrace:</b><br />
28
- <table border="0">
27
+ <p><b>Request:</b> <%= @req %></p>
28
+
29
+ <p><b>Backtrace:</b></p>
30
+ <p><table border="0">
29
31
  <% for line in @error_details.backtrace %>
30
32
  <tr><td><code><%= line.sub(/(.*)\/(\w+\.rb):(\d+):in (.*)/, '\1/<b>\2</b>:\3:in <b>\4</b>') %></code></td></tr>
31
33
  <% end %>
@@ -1,14 +1,10 @@
1
1
  <div id="Menu" width="150">
2
- <p>
3
2
  <table>
4
3
  <% published = @action_name =~ /published/
5
4
  show_by = published ? '../published/' : '../show/'
6
5
  begin %>
7
6
  <tr><th><%= @web.name %> Quick Links</th></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 %>
11
- <tr><td>&nbsp;</td></tr>
7
+ <tr><th>&nbsp;</th></tr>
12
8
  <% if @menu_pages.nil? %>
13
9
  <tr><td><%= @menu_content %></td></tr>
14
10
  <% else %>
@@ -11,17 +11,17 @@ end
11
11
  <form id="navigationForm" class="navigation" action="../search/" method="get" style="font-size: 10px">
12
12
  <%= list_item "Home Page", "../show/HomePage", "Home, Sweet Home", "H" %> |
13
13
  <%= list_item "All Pages", "../list/", "Alphabetically sorted list of pages", "A" %> |
14
- <% if `dot -V 2>&1` =~ /dot version/ %>
14
+ <% if OPTIONS[:graphviz_available] %>
15
15
  <%= list_item "Mind Map", "../mind/", "A 'Mind Map' graph of wiki pages", "M" %> |
16
16
  <% end %>
17
17
  <%= list_item "Bliki", "../bliki/", "Bliki", "B" %> |
18
18
  <%= list_item "ToDo", "../todo/", "Todo items from all pages", "T" %> |
19
19
  <%= list_item "Recently Revised", "../recently_revised/", "Pages sorted by when they were last changed", "U" %> |
20
- <!-- Moved to bottom of HomePage:
21
- <%= list_item "Authors", "../authors/", "Who wrote what" %> |
22
- <%= list_item "Feeds", "../feeds/", "Subscribe to changes by RSS" %> |
20
+ <%= list_item "Authors", "../authors/", "Who wrote what" %> |
21
+ <%= list_item "Feeds", "../feeds/", "Subscribe to changes by RSS" %> |
22
+ <%= list_item "Glossary", "../glossary/", "Acronyms used in this web" %> |
23
+ <%= list_item "Web Setup", "../edit_web/", "Edit this web's options" %> |
23
24
  <%= list_item "Export", "../export/", "Download a zip with all the pages in this wiki", "X" %> |
24
- -->
25
25
  <input type="text" id="searchField" name="query" style="font-size: 10px" value="Search" onClick="this.value == 'Search' ? this.value = '' : true">
26
- <%= list_item "<small>(Adv)</small>", "../adv_search/", "Advanced Search" %>
26
+ <%= list_item "<small>(Adv)</small>", "../adv_search/", "Advanced Search" %>
27
27
  </form>
@@ -3,6 +3,7 @@
3
3
  margin: 0 auto;
4
4
  text-align: left;
5
5
  width: 180px;
6
+ margin-top: 15px;
6
7
  }
7
8
 
8
9
  #Menu a, existingWikiWord, newWikiWord {
@@ -16,11 +17,22 @@
16
17
  text-align: left
17
18
  }
18
19
 
20
+ #Menu a {
21
+ text-decoration:none;
22
+ color: #555;
23
+ }
24
+ #Menu a:hover {
25
+ color: #fff;
26
+ }
27
+ #Menu td {
28
+ line-height: 90%;
29
+ }
30
+
19
31
  #Container {
20
32
  float: left;
21
33
  margin: 0 auto;
22
- text-align: center;
23
- margin-left: 10px;
34
+ text-align: left;
35
+ padding-left: <%= web && web.enable_menu ? "10px" : "180px" %>;
24
36
  }
25
37
 
26
38
  #Content {
@@ -51,7 +63,7 @@ a:hover { color: #fff; background-color:#000; }
51
63
 
52
64
 
53
65
  h1, h2, h3 { color: #333; font-family: georgia, verdana; }
54
- h1 { font-size: 28px; color: blue }
66
+ h1 { font-size: 24px; color: blue }
55
67
  h2 { font-size: 19px; color: darkblue }
56
68
  h3 { font-size: 16px; color: darkblue }
57
69
 
@@ -107,7 +119,7 @@ li { margin-bottom: 7px }
107
119
  .inputBox {
108
120
  font-family: verdana, arial, helvetica, sans-serif;
109
121
  font-size: 11px;
110
- background-color: #eee;
122
+ background-color: #eef;
111
123
  padding: 5px;
112
124
  margin-bottom: 20px;
113
125
  }
@@ -141,7 +153,8 @@ ol.setup li {
141
153
  font-size: 10px;
142
154
  font-style: italic;
143
155
  margin-bottom: 10px;
144
- color: #999;
156
+ padding-left: 5px;
157
+ color: grey;
145
158
  }
146
159
 
147
160
  .references {
@@ -162,6 +175,13 @@ ins.diffmod {
162
175
  background: lightgreen;
163
176
  }
164
177
 
178
+ #TextileHelp {
179
+ float: right;
180
+ width: 250px;
181
+ margin-top: 5px
182
+ padding-left: 5px
183
+ }
184
+
165
185
  #TextileHelp table {
166
186
  margin-bottom: 0;
167
187
  }