Pimki 1.7.092 → 1.8.092

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README-PIMKI +182 -178
  2. data/app/controllers/wiki.rb +950 -942
  3. data/app/models/chunks/category.rb +33 -33
  4. data/app/models/chunks/category_test.rb +21 -21
  5. data/app/models/chunks/chunk.rb +20 -20
  6. data/app/models/chunks/engines.rb +48 -48
  7. data/app/models/chunks/include.rb +1 -1
  8. data/app/models/chunks/match.rb +1 -1
  9. data/app/models/chunks/nowiki.rb +1 -1
  10. data/app/models/chunks/nowiki_test.rb +5 -0
  11. data/app/models/chunks/todo.rb +1 -0
  12. data/app/models/chunks/wiki.rb +130 -130
  13. data/app/models/page.rb +124 -124
  14. data/app/models/revision.rb +92 -92
  15. data/app/models/web.rb +314 -316
  16. data/app/models/wiki_content.rb +2 -2
  17. data/app/models/wiki_service.rb +170 -166
  18. data/app/models/wiki_words.rb +28 -28
  19. data/app/views/error.rhtml +37 -37
  20. data/app/views/navigation.rhtml +1 -1
  21. data/app/views/static_style_sheet.rhtml +10 -5
  22. data/app/views/top.rhtml +1 -1
  23. data/app/views/wiki/adv_search.rhtml +61 -61
  24. data/app/views/wiki/bliki.rhtml +7 -6
  25. data/app/views/wiki/bliki_edit.rhtml +26 -37
  26. data/app/views/wiki/bliki_new.rhtml +58 -64
  27. data/app/views/wiki/bliki_revision.rhtml +5 -3
  28. data/app/views/wiki/edit.rhtml +44 -44
  29. data/app/views/wiki/edit_menu.rhtml +26 -19
  30. data/app/views/wiki/edit_web.rhtml +303 -305
  31. data/app/views/wiki/glossary.rhtml +35 -27
  32. data/app/views/wiki/list.rhtml +175 -174
  33. data/app/views/wiki/list.rhtml.bak +175 -0
  34. data/app/views/wiki/mind.rhtml +70 -70
  35. data/app/views/wiki/new.rhtml +34 -32
  36. data/app/views/wiki/published.rhtml +34 -49
  37. data/app/views/wiki/revision.rhtml +88 -87
  38. data/app/views/wiki/rollback.rhtml +36 -35
  39. data/app/views/wiki/todo.rhtml +2 -2
  40. data/app/views/wiki_words_help.rhtml +8 -8
  41. data/libraries/action_controller_servlet.rb +202 -202
  42. data/libraries/madeleine_service.rb +162 -162
  43. data/pimki.rb +181 -181
  44. metadata +11 -12
  45. data/README +0 -172
  46. data/app/models/chunks/acronym.rb +0 -19
  47. data/app/views/wiki/test.rhtml +0 -25
  48. data/libraries/secure_web_controller_server.rb +0 -106
@@ -1,27 +1,35 @@
1
- <%
2
- @title = "#{web.name} Glossary"
3
- %>
4
- <%= sub_template "top" %>
5
-
6
- <h3><%= @results.length > 0 ? @results.length : 'no' %> acronym<%= 's' unless @results.length == 1 %> found.</h3>
7
-
8
- <p>
9
- <table vorder="0">
10
- <tr>
11
- <td style="border-bottom: thin solid grey; font-weight:bold; font-variant:italic; padding-right:10px;">Acronym</td>
12
- <td style="border-bottom: thin solid grey; font-weight:bold; font-variant:italic; padding-right:10px;">Definition</td>
13
- <td style="border-bottom: thin solid grey; font-weight:bold; font-variant:italic; padding-right:10px;">Appears on</td>
14
- </tr>
15
- <% @results.each do |(acronym, definition), *pages| %>
16
- <tr>
17
- <td width="10%" valign="top"><b><%= acronym %></b></td>
18
- <td width="40%" valign="top"><%= definition %></td>
19
- <td width="50%"><%= pages.join(', ') %><br/>
20
- <small><%= (@undefined_on[acronym] - pages[0]).join(', ') if @undefined_on[acronym] %></small>
21
- </td>
22
- </tr>
23
- <% end %>
24
- </table>
25
- </div>
26
- <%= sub_template "bottom" %>
27
-
1
+ <%
2
+ @title = "#{web.name} Glossary"
3
+ %>
4
+ <%= sub_template "top" %>
5
+
6
+ <h3><%= @results.length > 0 ? @results.length : 'no' %> acronym<%= 's' unless @results.length == 1 %> found.</h3>
7
+
8
+ <% if @results.length > 0 %>
9
+ <table vorder="0">
10
+ <tr>
11
+ <td style="border-bottom: thin solid grey; font-weight:bold; font-variant:italic; padding-right:10px;">Acronym</td>
12
+ <td style="border-bottom: thin solid grey; font-weight:bold; font-variant:italic; padding-right:10px;">Definition</td>
13
+ <td style="border-bottom: thin solid grey; font-weight:bold; font-variant:italic; padding-right:10px;">Appears on</td>
14
+ </tr>
15
+ <% @results.each do |(acronym, definition), *pages| %>
16
+ <tr>
17
+ <td><b><%= acronym %></b></td>
18
+ <td><%= definition %></td>
19
+ <td><%= pages.join(', ') %></td>
20
+ </tr>
21
+ <% end %>
22
+ </table>
23
+
24
+ <% else %>
25
+ <p>The Glossary page picks up on acronyms (abbreviations) defined in the Wiki.
26
+ If you're using textile formatting, acronyms can be defined like so:</p>
27
+ <pre>TLA(Three Letter Acroynm)</pre>
28
+ <p>This page will then display a list of the acronyms, their definition and links
29
+ to pages that define / reference them.</p>
30
+ <p>Note that Pimki picks up textile acronyms only. I have not found if there is a
31
+ way to define acronyms/abbr tags in Markdown, and no search for embedded HTML is made.</p>
32
+ <% end %>
33
+ </div>
34
+ <%= sub_template "bottom" %>
35
+
@@ -1,175 +1,176 @@
1
- <% @title = "All Pages" %>
2
- <%= sub_template "top" %>
1
+ <% @title = "All Pages" %>
2
+ <%= sub_template "top" %>
3
+
4
+ <!-- Categories Menu -->
5
+ <% unless @categories.empty? %>
6
+ <div id="categories">
7
+ <p><strong>Categories</strong>:
8
+
9
+ <% if @params["category"].nil? %>
10
+ [<span class='selected'>Any</span>]
11
+ <% else %>
12
+ <a href=".">Any</a>
13
+ <% end %>
14
+
15
+ <% if @params["category"] == 'none' %>
16
+ [<span class='selected'>None</span>]
17
+ <% else %>
18
+ <a href="?category=none">None</a>
19
+ <% end %>
20
+
21
+ <%= @category_links.join(', ') %>
22
+ </p>
23
+ </div>
24
+ <% end %>
25
+
26
+ <!-- Main Page List -->
27
+ <div id="listsContainer" style="float: left; width: 300px;">
28
+ <% unless @pages_that_are_orphaned.empty? && @page_names_that_are_wanted.empty? %>
29
+ <h2>
30
+ All Pages
31
+ <br/><small style="font-size: 12px"><i>All pages in <%= @set_name %> listed alphabetically</i></small>
32
+ </h2>
33
+ <% end %>
34
+
35
+ <ul><% for page in @pages_by_name.sort_by { |p| p.name } %><li><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></li><% end %></ul>
36
+
37
+ <% if @web.count_pages %>
38
+ <% total_chars = @pages_in_category.characters %>
39
+ <p><small>All content: <%= total_chars %> chars / <%= sprintf("%-.1f", (total_chars / 2275 )) %> pages</small></p>
40
+ <% end %>
41
+
42
+
43
+ <!-- Missing Pages -->
44
+ <% unless @page_names_that_are_wanted.empty? %>
45
+ <h2>
46
+ Wanted Pages
47
+ <br/><small style="font-size: 12px"><i>Unexisting pages that other pages in <%= @set_name %> reference</i></small>
48
+ </h2>
49
+
50
+ <ul style="margin-bottom: 10px">
51
+ <% for page_name in @page_names_that_are_wanted.sort_by { |pname| pname } %>
52
+ <li>
53
+ <a href="../show/<%= page_name %>"><%= truncate(WikiWords.separate(page_name), 35) %></a>
54
+ wanted by
55
+ <%= web.select.pages_that_reference(page_name).collect { |page| page.link }.join(", ") %>
56
+ </li>
57
+ <% end %>
58
+ </ul>
59
+ <% end %>
60
+
61
+ <!-- Orphaned Pages -->
62
+ <% unless @pages_that_are_orphaned.empty? %>
63
+ <h2>
64
+ Orphaned Pages
65
+ <br/><small style="font-size: 12px"><i>Pages in <%= @set_name %> that no other page reference</i></small>
66
+ </h2>
67
+
68
+ <ul style="margin-bottom: 35px">
69
+ <% for page in @pages_that_are_orphaned.sort_by { |p| p.name } %><li><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></li><% end %>
70
+ </ul>
71
+ <% end %>
72
+ </div>
73
+ <!-- Page Administration -->
74
+ <div id="pageAdmin" style="float: right; width: 280px; vertical-align: top;">
75
+ <script language="JavaScript1.2">
76
+ function validateSelection(fieldID) {
77
+ var selection = document.getElementById(fieldID).value;
78
+ if (selection == "noselect") {
79
+ alert("Please make a selection");
80
+ return false;
81
+ }
82
+ return true;
83
+ }
84
+ function validatePageName(fieldID) {
85
+ if (/^([A-Z]+[a-z]+[A-Z]\w+)$/.test(document.getElementById(fieldID).value)) {
86
+ return true;
87
+ } else {
88
+ alert('You wrote "' + document.getElementById(fieldID).value + '" as a page name, but it needs to be a wiki word.');
89
+ return false;
90
+ }
91
+ }
92
+ function verifyDelete() {
93
+ var del = confirm("Are you sure you want to delete " + document.getElementById('sel_delete').value + "?")
94
+ return del;
95
+ }
96
+ function verifyRename() {
97
+ if (!validatePageName('ren_newpage')) {
98
+ return false;
99
+ }
100
+ var ren = confirm("Are you sure you want to rename '" + document.getElementById('sel_rename').value +
101
+ "' to '" + document.getElementById('ren_newpage').value +
102
+ "'?\nNOTE: Links in other pages will have to be manually translated!")
103
+ return ren;
104
+ }
105
+ </script>
106
+
107
+ <!-- hr -->
108
+ <h2>Page Administration</h2>
109
+
110
+ <table border="0" style="font-size:10px">
111
+ <form class="navigation" action="." method="post">
112
+ <% if @web.check_pass_on_edit %>
113
+ <tr>
114
+ <td colspan="2">Enter edit Password <input type="password" name="password" id="password" size="11"> and...</td>
115
+ </tr>
116
+ <% end %>
117
+ <!-- Delete Page -->
118
+ <tr>
119
+ <td>Delete page:</td>
120
+ <td><select id="del_sel_page_name" name="del_sel_page_name" size="1" style="width:195">
121
+ <option value="noselect">------------</option>
122
+ <% for page in @pages_by_name %>
123
+ <option value="<%= page.name %>"><%= page.name %></option>
124
+ <% end %>
125
+ </select>
126
+ </td>
127
+ </tr>
128
+ <tr>
129
+ <td>&nbsp;</td>
130
+ <td align="right">
131
+ <input type="submit" name="Action" value="Delete" onClick="return validateSelection('sel_delete') && verifyDelete();">
132
+ </td>
133
+ </tr>
134
+ <!-- Rename Page -->
135
+ <tr>
136
+ <td>Rename:</td>
137
+ <td><select id="ren_sel_page_name" name="ren_sel_page_name" size="1" style="width:195">
138
+ <option value="noselect">------------</option>
139
+ <% for page in @pages_by_name %>
140
+ <option value="<%= page.name %>"><%= page.name %></option>
141
+ <% end %>
142
+ </select>
143
+ </td>
144
+ </tr>
145
+ <tr>
146
+ <td align="center">To:</td>
147
+ <td>
148
+ <input type="text" name="ren_newpage" id="ren_newpage" size="28">
149
+ </td>
150
+ </tr>
151
+ <tr>
152
+ <td>&nbsp;</td>
153
+ <td align="right">
154
+ <input type="submit" name="Action" value="Rename" onClick="return validateSelection('sel_rename') && verifyRename() && validatePageName('ren_newpage');">
155
+ </td>
156
+ </tr>
157
+ <!-- Create Page -->
158
+ <tr>
159
+ <td>Create New Page:</td>
160
+ <td>
161
+ <input type="text" name="newpage" id="newpage" size="28">
162
+ </td>
163
+ </tr>
164
+ <tr>
165
+ <td>&nbsp;</td>
166
+ <td align="right">
167
+ <input type="submit" name="Action" value="Create" onClick="return validatePageName('newpage');">
168
+ </td>
169
+ </td>
170
+ </tr>
171
+ </form>
172
+ </table>
173
+ </div>
174
+
175
+ <%= sub_template "bottom" %>
3
176
 
4
- <!-- Categories Menu -->
5
- <% unless @categories.empty? %>
6
- <div id="categories">
7
- <p><strong>Categories</strong>:
8
-
9
- <% if @params["category"].nil? %>
10
- [<span class='selected'>Any</span>]
11
- <% else %>
12
- <a href=".">Any</a>
13
- <% end %>
14
-
15
- <% if @params["category"] == 'none' %>
16
- [<span class='selected'>None</span>]
17
- <% else %>
18
- <a href="?category=none">None</a>
19
- <% end %>
20
-
21
- <%= @category_links.join(', ') %>
22
- </p>
23
- </div>
24
- <% end %>
25
-
26
- <!-- Main Page List -->
27
- <div id="listsContainer" style="float: left; width: 300px;">
28
- <% unless @pages_that_are_orphaned.empty? && @page_names_that_are_wanted.empty? %>
29
- <h2>
30
- All Pages
31
- <br/><small style="font-size: 12px"><i>All pages in <%= @set_name %> listed alphabetically</i></small>
32
- </h2>
33
- <% end %>
34
-
35
- <ul><% for page in @pages_by_name.sort_by { |p| p.name } %><li><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></li><% end %></ul>
36
-
37
- <% if @web.count_pages %>
38
- <% total_chars = @pages_in_category.characters %>
39
- <p><small>All content: <%= total_chars %> chars / <%= sprintf("%-.1f", (total_chars / 2275 )) %> pages</small></p>
40
- <% end %>
41
-
42
-
43
- <!-- Missing Pages -->
44
- <% unless @page_names_that_are_wanted.empty? %>
45
- <h2>
46
- Wanted Pages
47
- <br/><small style="font-size: 12px"><i>Unexisting pages that other pages in <%= @set_name %> reference</i></small>
48
- </h2>
49
-
50
- <ul style="margin-bottom: 10px">
51
- <% for page_name in @page_names_that_are_wanted.sort_by { |pname| pname } %>
52
- <li>
53
- <a href="../show/<%= page_name %>"><%= truncate(WikiWords.separate(page_name), 35) %></a>
54
- wanted by
55
- <%= web.select.pages_that_reference(page_name).collect { |page| page.link }.join(", ") %>
56
- </li>
57
- <% end %>
58
- </ul>
59
- <% end %>
60
-
61
- <!-- Orphaned Pages -->
62
- <% unless @pages_that_are_orphaned.empty? %>
63
- <h2>
64
- Orphaned Pages
65
- <br/><small style="font-size: 12px"><i>Pages in <%= @set_name %> that no other page reference</i></small>
66
- </h2>
67
-
68
- <ul style="margin-bottom: 35px">
69
- <% for page in @pages_that_are_orphaned.sort_by { |p| p.name } %><li><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></li><% end %>
70
- </ul>
71
- <% end %>
72
- </div>
73
- <!-- Page Administration -->
74
- <div id="pageAdmin"style="float: right; width: 280px; vertical-align: top;">
75
- <script language="JavaScript1.2">
76
- function validateSelection(fieldID) {
77
- var selection = document.getElementById(fieldID).value;
78
- if (selection == "noselect") {
79
- alert("Please make a selection");
80
- return false;
81
- }
82
- return true;
83
- }
84
- function validatePageName(fieldID) {
85
- if (/^([A-Z]+[a-z]+[A-Z]\w+)$/.test(document.getElementById(fieldID).value)) {
86
- return true;
87
- } else {
88
- alert('You wrote "' + document.getElementById(fieldID).value + '" as a page name, but it needs to be a wiki word.');
89
- return false;
90
- }
91
- }
92
- function verifyDelete() {
93
- var del = confirm("Are you sure you want to delete " + document.getElementById('sel_delete').value + "?")
94
- return del;
95
- }
96
- function verifyRename() {
97
- if (!validatePageName('ren_newpage')) {
98
- return false;
99
- }
100
- var ren = confirm("Are you sure you want to rename '" + document.getElementById('sel_rename').value +
101
- "' to '" + document.getElementById('ren_newpage').value +
102
- "'?\nNOTE: Links in other pages will have to be manually translated!")
103
- return ren;
104
- }
105
- </script>
106
-
107
- <!-- hr -->
108
- <h2>Page Administration</h2>
109
-
110
- <table border="0" style="font-size:10px">
111
- <form class="navigation" action="list/" action="get">
112
- <% if @web.check_pass_on_edit %>
113
- <tr>
114
- <td colspan="2">Enter edit Password <input type="password" name="password" id="password" size="11"> and...</td>
115
- </tr>
116
- <% end %>
117
- <!-- Delete Page -->
118
- <tr>
119
- <td>Delete page:</td>
120
- <td><select id="del_sel_page_name" name="del_sel_page_name" size="1" style="width:195">
121
- <option value="noselect">------------</option>
122
- <% for page in @pages_by_name %>
123
- <option value="<%= page.name %>"><%= page.name %></option>
124
- <% end %>
125
- </select>
126
- </td>
127
- </tr>
128
- <tr>
129
- <td>&nbsp;</td>
130
- <td align="right">
131
- <input type="submit" name="Action" value="Delete" onClick="return validateSelection('sel_delete') && verifyDelete();">
132
- </td>
133
- </tr>
134
- <!-- Rename Page -->
135
- <tr>
136
- <td>Rename:</td>
137
- <td><select id="ren_sel_page_name" name="ren_sel_page_name" size="1" style="width:195">
138
- <option value="noselect">------------</option>
139
- <% for page in @pages_by_name %>
140
- <option value="<%= page.name %>"><%= page.name %></option>
141
- <% end %>
142
- </select>
143
- </td>
144
- </tr>
145
- <tr>
146
- <td align="center">To:</td>
147
- <td>
148
- <input type="text" name="newpage" id="ren_newpage" size="28">
149
- </td>
150
- </tr>
151
- <tr>
152
- <td>&nbsp;</td>
153
- <td align="right">
154
- <input type="submit" name="Action" value="Rename" onClick="return validateSelection('sel_rename') && verifyRename() && validatePageName('ren_newpage');">
155
- </td>
156
- </tr>
157
- <!-- Create Page -->
158
- <tr>
159
- <td>Create New Page:</td>
160
- <td>
161
- <input type="text" name="newpage" id="newpage" size="28">
162
- </td>
163
- </tr>
164
- <tr>
165
- <td>&nbsp;</td>
166
- <td align="right">
167
- <input type="submit" name="Action" value="Create" onClick="return validatePageName('newpage');">
168
- </td>
169
- </td>
170
- </tr>
171
- </form>
172
- </table>
173
- </div>
174
-
175
- <%= sub_template "bottom" %>
@@ -0,0 +1,175 @@
1
+ <% @title = "All Pages" %>
2
+ <%= sub_template "top" %>
3
+
4
+ <!-- Categories Menu -->
5
+ <% unless @categories.empty? %>
6
+ <div id="categories">
7
+ <p><strong>Categories</strong>:
8
+
9
+ <% if @params["category"].nil? %>
10
+ [<span class='selected'>Any</span>]
11
+ <% else %>
12
+ <a href=".">Any</a>
13
+ <% end %>
14
+
15
+ <% if @params["category"] == 'none' %>
16
+ [<span class='selected'>None</span>]
17
+ <% else %>
18
+ <a href="?category=none">None</a>
19
+ <% end %>
20
+
21
+ <%= @category_links.join(', ') %>
22
+ </p>
23
+ </div>
24
+ <% end %>
25
+
26
+ <!-- Main Page List -->
27
+ <div id="listsContainer" style="float: left; width: 300px;">
28
+ <% unless @pages_that_are_orphaned.empty? && @page_names_that_are_wanted.empty? %>
29
+ <h2>
30
+ All Pages
31
+ <br/><small style="font-size: 12px"><i>All pages in <%= @set_name %> listed alphabetically</i></small>
32
+ </h2>
33
+ <% end %>
34
+
35
+ <ul><% for page in @pages_by_name.sort_by { |p| p.name } %><li><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></li><% end %></ul>
36
+
37
+ <% if @web.count_pages %>
38
+ <% total_chars = @pages_in_category.characters %>
39
+ <p><small>All content: <%= total_chars %> chars / <%= sprintf("%-.1f", (total_chars / 2275 )) %> pages</small></p>
40
+ <% end %>
41
+
42
+
43
+ <!-- Missing Pages -->
44
+ <% unless @page_names_that_are_wanted.empty? %>
45
+ <h2>
46
+ Wanted Pages
47
+ <br/><small style="font-size: 12px"><i>Unexisting pages that other pages in <%= @set_name %> reference</i></small>
48
+ </h2>
49
+
50
+ <ul style="margin-bottom: 10px">
51
+ <% for page_name in @page_names_that_are_wanted.sort_by { |pname| pname } %>
52
+ <li>
53
+ <a href="../show/<%= page_name %>"><%= truncate(WikiWords.separate(page_name), 35) %></a>
54
+ wanted by
55
+ <%= web.select.pages_that_reference(page_name).collect { |page| page.link }.join(", ") %>
56
+ </li>
57
+ <% end %>
58
+ </ul>
59
+ <% end %>
60
+
61
+ <!-- Orphaned Pages -->
62
+ <% unless @pages_that_are_orphaned.empty? %>
63
+ <h2>
64
+ Orphaned Pages
65
+ <br/><small style="font-size: 12px"><i>Pages in <%= @set_name %> that no other page reference</i></small>
66
+ </h2>
67
+
68
+ <ul style="margin-bottom: 35px">
69
+ <% for page in @pages_that_are_orphaned.sort_by { |p| p.name } %><li><a href="../show/<%= page.name %>"><%= truncate(page.plain_name, 35) %></a></li><% end %>
70
+ </ul>
71
+ <% end %>
72
+ </div>
73
+ <!-- Page Administration -->
74
+ <div id="pageAdmin"style="float: right; width: 280px; vertical-align: top;">
75
+ <script language="JavaScript1.2">
76
+ function validateSelection(fieldID) {
77
+ var selection = document.getElementById(fieldID).value;
78
+ if (selection == "noselect") {
79
+ alert("Please make a selection");
80
+ return false;
81
+ }
82
+ return true;
83
+ }
84
+ function validatePageName(fieldID) {
85
+ if (/^([A-Z]+[a-z]+[A-Z]\w+)$/.test(document.getElementById(fieldID).value)) {
86
+ return true;
87
+ } else {
88
+ alert('You wrote "' + document.getElementById(fieldID).value + '" as a page name, but it needs to be a wiki word.');
89
+ return false;
90
+ }
91
+ }
92
+ function verifyDelete() {
93
+ var del = confirm("Are you sure you want to delete " + document.getElementById('sel_delete').value + "?")
94
+ return del;
95
+ }
96
+ function verifyRename() {
97
+ if (!validatePageName('ren_newpage')) {
98
+ return false;
99
+ }
100
+ var ren = confirm("Are you sure you want to rename '" + document.getElementById('sel_rename').value +
101
+ "' to '" + document.getElementById('ren_newpage').value +
102
+ "'?\nNOTE: Links in other pages will have to be manually translated!")
103
+ return ren;
104
+ }
105
+ </script>
106
+
107
+ <!-- hr -->
108
+ <h2>Page Administration</h2>
109
+
110
+ <table border="0" style="font-size:10px">
111
+ <form class="navigation" action="list/" action="get">
112
+ <% if @web.check_pass_on_edit %>
113
+ <tr>
114
+ <td colspan="2">Enter edit Password <input type="password" name="password" id="password" size="11"> and...</td>
115
+ </tr>
116
+ <% end %>
117
+ <!-- Delete Page -->
118
+ <tr>
119
+ <td>Delete page:</td>
120
+ <td><select id="del_sel_page_name" name="del_sel_page_name" size="1" style="width:195">
121
+ <option value="noselect">------------</option>
122
+ <% for page in @pages_by_name %>
123
+ <option value="<%= page.name %>"><%= page.name %></option>
124
+ <% end %>
125
+ </select>
126
+ </td>
127
+ </tr>
128
+ <tr>
129
+ <td>&nbsp;</td>
130
+ <td align="right">
131
+ <input type="submit" name="Action" value="Delete" onClick="return validateSelection('sel_delete') && verifyDelete();">
132
+ </td>
133
+ </tr>
134
+ <!-- Rename Page -->
135
+ <tr>
136
+ <td>Rename:</td>
137
+ <td><select id="ren_sel_page_name" name="ren_sel_page_name" size="1" style="width:195">
138
+ <option value="noselect">------------</option>
139
+ <% for page in @pages_by_name %>
140
+ <option value="<%= page.name %>"><%= page.name %></option>
141
+ <% end %>
142
+ </select>
143
+ </td>
144
+ </tr>
145
+ <tr>
146
+ <td align="center">To:</td>
147
+ <td>
148
+ <input type="text" name="ren_newpage" id="ren_newpage" size="28">
149
+ </td>
150
+ </tr>
151
+ <tr>
152
+ <td>&nbsp;</td>
153
+ <td align="right">
154
+ <input type="submit" name="Action" value="Rename" onClick="return validateSelection('sel_rename') && verifyRename() && validatePageName('ren_newpage');">
155
+ </td>
156
+ </tr>
157
+ <!-- Create Page -->
158
+ <tr>
159
+ <td>Create New Page:</td>
160
+ <td>
161
+ <input type="text" name="newpage" id="newpage" size="28">
162
+ </td>
163
+ </tr>
164
+ <tr>
165
+ <td>&nbsp;</td>
166
+ <td align="right">
167
+ <input type="submit" name="Action" value="Create" onClick="return validatePageName('newpage');">
168
+ </td>
169
+ </td>
170
+ </tr>
171
+ </form>
172
+ </table>
173
+ </div>
174
+
175
+ <%= sub_template "bottom" %>