instiki 0.9.2

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 (61) hide show
  1. data/README +172 -0
  2. data/app/controllers/wiki.rb +389 -0
  3. data/app/models/author.rb +4 -0
  4. data/app/models/chunks/category.rb +31 -0
  5. data/app/models/chunks/chunk.rb +20 -0
  6. data/app/models/chunks/engines.rb +38 -0
  7. data/app/models/chunks/include.rb +29 -0
  8. data/app/models/chunks/literal.rb +19 -0
  9. data/app/models/chunks/match.rb +19 -0
  10. data/app/models/chunks/nowiki.rb +31 -0
  11. data/app/models/chunks/test.rb +18 -0
  12. data/app/models/chunks/uri.rb +97 -0
  13. data/app/models/chunks/wiki.rb +82 -0
  14. data/app/models/page.rb +86 -0
  15. data/app/models/page_lock.rb +24 -0
  16. data/app/models/page_set.rb +64 -0
  17. data/app/models/revision.rb +90 -0
  18. data/app/models/web.rb +89 -0
  19. data/app/models/wiki_content.rb +105 -0
  20. data/app/models/wiki_service.rb +83 -0
  21. data/app/models/wiki_words.rb +25 -0
  22. data/app/views/bottom.rhtml +4 -0
  23. data/app/views/markdown_help.rhtml +16 -0
  24. data/app/views/navigation.rhtml +19 -0
  25. data/app/views/rdoc_help.rhtml +16 -0
  26. data/app/views/static_style_sheet.rhtml +199 -0
  27. data/app/views/textile_help.rhtml +28 -0
  28. data/app/views/top.rhtml +49 -0
  29. data/app/views/wiki/authors.rhtml +13 -0
  30. data/app/views/wiki/edit.rhtml +31 -0
  31. data/app/views/wiki/edit_web.rhtml +138 -0
  32. data/app/views/wiki/export.rhtml +14 -0
  33. data/app/views/wiki/feeds.rhtml +10 -0
  34. data/app/views/wiki/list.rhtml +57 -0
  35. data/app/views/wiki/locked.rhtml +14 -0
  36. data/app/views/wiki/login.rhtml +11 -0
  37. data/app/views/wiki/new.rhtml +27 -0
  38. data/app/views/wiki/new_system.rhtml +78 -0
  39. data/app/views/wiki/new_web.rhtml +64 -0
  40. data/app/views/wiki/page.rhtml +81 -0
  41. data/app/views/wiki/print.rhtml +16 -0
  42. data/app/views/wiki/published.rhtml +10 -0
  43. data/app/views/wiki/recently_revised.rhtml +30 -0
  44. data/app/views/wiki/revision.rhtml +81 -0
  45. data/app/views/wiki/rollback.rhtml +31 -0
  46. data/app/views/wiki/rss_feed.rhtml +22 -0
  47. data/app/views/wiki/search.rhtml +15 -0
  48. data/app/views/wiki/tex.rhtml +23 -0
  49. data/app/views/wiki/tex_web.rhtml +35 -0
  50. data/app/views/wiki/web_list.rhtml +13 -0
  51. data/app/views/wiki_words_help.rhtml +8 -0
  52. data/instiki +67 -0
  53. data/libraries/action_controller_servlet.rb +177 -0
  54. data/libraries/diff/diff.rb +475 -0
  55. data/libraries/erb.rb +490 -0
  56. data/libraries/madeleine_service.rb +68 -0
  57. data/libraries/rdocsupport.rb +156 -0
  58. data/libraries/redcloth_for_tex.rb +869 -0
  59. data/libraries/view_helper.rb +33 -0
  60. data/libraries/web_controller_server.rb +81 -0
  61. metadata +142 -0
@@ -0,0 +1,25 @@
1
+ # Contains all the methods for finding and replacing wiki words
2
+ module WikiWords
3
+ # In order of appearance: Latin, greek, cyrillian, armenian
4
+ I18N_HIGHER_CASE_LETTERS =
5
+ "ÀÁÂÃÄÅĀĄĂÆÇĆČĈĊĎĐÈÉÊËĒĘĚĔĖĜĞĠĢĤĦÌÍÎÏĪĨĬĮİIJĴĶŁĽĹĻĿÑŃŇŅŊÒÓÔÕÖØŌŐŎŒŔŘŖŚŠŞŜȘŤŢŦȚÙÚÛÜŪŮŰŬŨŲŴÝŶŸŹŽŻ" +
6
+ "ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ" +
7
+ "ΆΈΉΊΌΎΏѠѢѤѦѨѪѬѮѰѲѴѶѸѺѼѾҀҊҌҎҐҒҔҖҘҚҜҞҠҢҤҦҨҪҬҮҰҲҴҶҸҺҼҾӁӃӅӇӉӋӍӐӒӔӖӘӚӜӞӠӢӤӦӨӪӬӮӰӲӴӸЖ" +
8
+ "ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՏՐՑՒՓՔՕՖ"
9
+
10
+ I18N_LOWER_CASE_LETTERS =
11
+ "àáâãäåāąăæçćčĉċďđèéêëēęěĕėƒĝğġģĥħìíîïīĩĭįıijĵķĸłľĺļŀñńňņʼnŋòóôõöøōőŏœŕřŗśšşŝșťţŧțùúûüūůűŭũųŵýÿŷžżźÞþßſÐð" +
12
+ "άέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώΐ" +
13
+ "абвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљћќѝўџѡѣѥѧѩѫѭѯѱѳѵѷѹѻѽѿҁҋҍҏґғҕҗҙқҝҟҡңҥҧҩҫҭүұҳҵҷҹһҽҿӀӂӄӆӈӊӌӎӑӓӕӗәӛӝӟӡӣӥӧөӫӭӯӱӳӵӹ" +
14
+ "աբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆև"
15
+
16
+ WIKI_WORD_PATTERN = '[A-Z' + I18N_HIGHER_CASE_LETTERS + '][a-z' + I18N_LOWER_CASE_LETTERS + ']+[A-Z' + I18N_HIGHER_CASE_LETTERS + ']\w+'
17
+
18
+ def self.separate(wiki_word, ignore_separation = false)
19
+ if ignore_separation
20
+ wiki_word
21
+ else
22
+ wiki_word.gsub(/([a-z#{I18N_LOWER_CASE_LETTERS}])([A-Z#{I18N_HIGHER_CASE_LETTERS}])/u, '\1 \2')
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ </div>
2
+ </div>
3
+ </body>
4
+ </html>
@@ -0,0 +1,16 @@
1
+ <div id="TextileHelp" style="float: right; width: 250px; margin-top: 5px">
2
+ <h3>Markdown formatting tips (<a target="_new" href="http://daringfireball.net/projects/markdown/syntax">advanced</a>)</h3>
3
+ <table cellspacing="0" cellpadding="0">
4
+ <tr><td>_your text_</td><td class="arrow">&rarr;</td><td><em>your text</em></td></tr>
5
+ <tr><td>**your text**</td><td class="arrow">&rarr;</td><td><strong>your text</strong></td></tr>
6
+ <tr><td>`my code`</td><td class="arrow">&rarr;</td><td><code>my code</code></td></tr>
7
+ <tr><td>* Bulleted list<br />* Second item</td><td class="arrow">&rarr;</td><td>&#8226; Bulleted list<br />&#8226; Second item</td></tr>
8
+ <tr><td>1. Numbered list<br />1. Second item</td><td class="arrow">&rarr;</td><td>1. Numbered list<br />2. Second item</td></tr>
9
+ <tr><td>[link name](URL)</td><td class="arrow">&rarr;</td><td><a href="URL">link name</a></td></tr>
10
+ <tr><td>***</td><td class="arrow">&rarr;</td><td>Horizontal ruler</td></tr>
11
+ <tr><td>&lt;http://url><br />&lt;email@add.com></td><td class="arrow">&rarr;</td><td>Auto-linked</td></tr>
12
+ <tr><td>![Alt text](URL)</td><td class="arrow">&rarr;</td><td>Image</td></tr>
13
+ </table>
14
+
15
+ <%= sub_template "wiki_words_help" %>
16
+ </div>
@@ -0,0 +1,19 @@
1
+ <%
2
+ def list_item(title, url, description, accesskey = nil)
3
+ if @title == title
4
+ "<b class=\"navOn\" title=\"#{description}\" accesskey=\"#{accesskey}\">#{title}</b>"
5
+ else
6
+ "<a href=\"#{url}\" title=\"#{description}\" accesskey=\"#{accesskey}\">#{title}</a>"
7
+ end
8
+ end
9
+ %>
10
+
11
+ <form id="navigationForm" class="navigation" action="../search/" action="get" style="font-size: 10px">
12
+ <%= list_item "Home Page", "../show/HomePage", "Home, Sweet Home", "H" %> |
13
+ <%= list_item "All Pages", "../list/", "Alphabetically sorted list of pages", "A" %> |
14
+ <%= list_item "Recently Revised", "../recently_revised/", "Pages sorted by when they were last changed", "U" %> |
15
+ <%= list_item "Authors", "../authors/", "Who wrote what" %> |
16
+ <%= list_item "Feeds", "../feeds/", "Subscribe to changes by RSS" %> |
17
+ <%= list_item "Export", "../export/", "Download a zip with all the pages in this wiki", "X" %> |
18
+ <input type="text" id="searchField" name="query" style="font-size: 10px" value="Search" onClick="this.value == 'Search' ? this.value = '' : true">
19
+ </form>
@@ -0,0 +1,16 @@
1
+ <div id="TextileHelp" style="float: right; width: 250px; margin-top: 5px">
2
+ <h3>RDoc formatting tips (<a target="_new" href="http://rdoc.sourceforge.net/doc/files/markup/simple_markup_rb.html">advanced</a>)</h3>
3
+ <table cellspacing="0" cellpadding="0">
4
+ <tr><td>_your text_</td><td class="arrow">&rarr;</td><td><em>your text</em></td></tr>
5
+ <tr><td>*your text*</td><td class="arrow">&rarr;</td><td><strong>your text</strong></td></tr>
6
+ <tr><td>* Bulleted list<br />* Second item</td><td class="arrow">&rarr;</td><td>&#8226; Bulleted list<br />&#8226; Second item</td></tr>
7
+ <tr><td>1. Numbered list<br />2. Second item</td><td class="arrow">&rarr;</td><td>1. Numbered list<br />2. Second item</td></tr>
8
+ <tr><td>+my_code+</td><td class="arrow">&rarr;</td><td><code>my_code</code></td></tr>
9
+ <tr><td>---</td><td class="arrow">&rarr;</td><td>Horizontal ruler</td></tr>
10
+ <tr><td>[[URL linkname]]</td><td class="arrow">&rarr;</td><td><a href="URL">linkname</a></td></tr>
11
+ <tr><td>http://url<br />mailto:e@add.com</td><td class="arrow">&rarr;</td><td>Auto-linked</td></tr>
12
+ <tr><td>imageURL</td><td class="arrow">&rarr;</td><td>Image</td></tr>
13
+ </table>
14
+
15
+ <%= sub_template "wiki_words_help" %>
16
+ </div>
@@ -0,0 +1,199 @@
1
+ #Container {
2
+ float: none;
3
+ margin: 0 auto;
4
+ text-align: center;
5
+ }
6
+
7
+ #Content {
8
+ margin: 0;
9
+ padding: 5px;
10
+ text-align: left;
11
+ border-top: none;
12
+ float: left;
13
+ }
14
+
15
+ body { background-color: #fff; color: #333; }
16
+
17
+ body, p, ol, ul, td {
18
+ font-family: verdana, arial, helvetica, sans-serif;
19
+ font-size: 13px;
20
+ line-height: 18px;
21
+ }
22
+
23
+ a { color: #000; }
24
+
25
+ .newWikiWord { background-color: #eee; }
26
+ .newWikiWord a:hover { background-color: white; }
27
+
28
+ a:visited { color: #666; }
29
+ a:hover { color: #fff; background-color:#000; }
30
+
31
+ /* a.edit:link, a.edit:visited { color: #DA0006; } */
32
+
33
+
34
+ h1, h2, h3 { color: #333; font-family: georgia, verdana; }
35
+ h1 { font-size: 28px }
36
+ h2 { font-size: 19px }
37
+ h3 { font-size: 16px }
38
+
39
+ h1#pageName {
40
+ margin: 5px 0px 0px 0px;
41
+ padding: 0px 0px 0px 0px;
42
+ line-height: 28px;
43
+ }
44
+
45
+ h1#pageName small {
46
+ color: grey;
47
+ line-height: 10px;
48
+ font-size: 10px;
49
+ padding: 0px;
50
+ }
51
+
52
+ a.nav, a.nav:link, a.nav:visited { color: #000; }
53
+ a.nav:hover { color: #fff; background-color:#000; }
54
+
55
+ li { margin-bottom: 7px }
56
+
57
+ .navigation {
58
+ margin-top: 5px;
59
+ font-size : 12px;
60
+ color: #999;
61
+ }
62
+
63
+ .navigation a:hover { color: #fff; background-color:#000; }
64
+
65
+ .navigation a {
66
+ font-size: 11px;
67
+ color: black;
68
+ font-weight: bold;
69
+ }
70
+
71
+ .navigation small a {
72
+ font-weight: normal;
73
+ font-size: 11px;
74
+ }
75
+
76
+ .navOn{
77
+ font-size: 11px;
78
+ color: grey;
79
+ font-weight: bold;
80
+ text-decoration: none;
81
+ }
82
+
83
+ .help {
84
+ font-family: verdana, arial, helvetica, sans-serif;
85
+ font-size: 11px;
86
+ }
87
+
88
+ .inputBox {
89
+ font-family: verdana, arial, helvetica, sans-serif;
90
+ font-size: 11px;
91
+ background-color: #eee;
92
+ padding: 5px;
93
+ margin-bottom: 20px;
94
+ }
95
+
96
+ blockquote {
97
+ display: block;
98
+ margin: 0px 0px 20px 0px;
99
+ padding: 0px 30px;
100
+ font-size:11px;
101
+ line-height:17px;
102
+ font-style: italic;
103
+ }
104
+
105
+ pre {
106
+ background-color: #eee;
107
+ padding: 10px;
108
+ font-size: 11px;
109
+ }
110
+
111
+ ol.setup {
112
+ font-size: 19px;
113
+ font-family: georgia, verdana;
114
+ padding-left: 25px;
115
+ }
116
+
117
+ ol.setup li {
118
+ margin-bottom: 20px
119
+ }
120
+
121
+ .byline {
122
+ font-size: 10px;
123
+ font-style: italic;
124
+ margin-bottom: 10px;
125
+ color: #999;
126
+ }
127
+
128
+ .references {
129
+ font-size: 10px;
130
+ }
131
+
132
+ .diffdel {
133
+ background: pink;
134
+ }
135
+
136
+ .diffins {
137
+ background: lightgreen;
138
+ }
139
+
140
+ #TextileHelp table {
141
+ margin-bottom: 0;
142
+ }
143
+
144
+ #TextileHelp table+h3 {
145
+ margin-top: 11px;
146
+ }
147
+
148
+ #TextileHelp table td {
149
+ font-size: 11px;
150
+ padding: 3px;
151
+ vertical-align: top;
152
+ border-top: 1px dotted #ccc;
153
+ }
154
+
155
+ #TextileHelp table td.arrow {
156
+ padding-right: 5px;
157
+ padding-left: 10px;
158
+ color: #999;
159
+ }
160
+
161
+ #TextileHelp table td.label {
162
+ font-weight: bold;
163
+ white-space: nowrap;
164
+ font-size: 10px;
165
+ padding-right: 15px;
166
+ color: #000;
167
+ }
168
+
169
+ #TextileHelp h3 {
170
+ font-size: 11px;
171
+ font-weight: bold;
172
+ font-weight: normal;
173
+ margin: 0 0 5px 0;
174
+ padding: 5px 0 0 0;
175
+ }
176
+
177
+ #TextileHelp p {
178
+ font-size: 10px;
179
+ }
180
+
181
+ .rightHandSide {
182
+ float: right;
183
+ width: 147px;
184
+ margin-left: 10px;
185
+ padding-left: 20px;
186
+ border-left: 1px dotted #ccc;
187
+ }
188
+
189
+ .rightHandSide p {
190
+ font-size: 10px;
191
+ }
192
+
193
+ .newsList {
194
+ margin-top: 20px;
195
+ }
196
+
197
+ .newsList p {
198
+ margin-bottom:30px
199
+ }
@@ -0,0 +1,28 @@
1
+ <div id="TextileHelp" style="float: right; width: 250px; margin-top: 5px">
2
+ <h3>Textile formatting tips (<a href="#" onClick="quickRedReference(); return false;">advanced</a>)</h3>
3
+ <table cellspacing="0" cellpadding="0">
4
+ <tr><td>_your text_</td><td class="arrow">&rarr;</td><td><em>your text</em></td></tr>
5
+ <tr><td>*your text*</td><td class="arrow">&rarr;</td><td><strong>your text</strong></td></tr>
6
+ <tr><td>%{color:red}hello%</td><td class="arrow">&rarr;</td><td><span style="color: red;">hello</span></td></tr>
7
+ <tr><td>* Bulleted list<br />* Second item</td><td class="arrow">&rarr;</td><td>&#8226; Bulleted list<br />&#8226; Second item</td></tr>
8
+ <tr><td># Numbered list<br /># Second item</td><td class="arrow">&rarr;</td><td>1. Numbered list<br />2. Second item</td></tr>
9
+ <tr><td>"linkname":URL</td><td class="arrow">&rarr;</td><td><a href="URL">linkname</a></td></tr>
10
+ <tr><td>|a|table|row|<br />|b|table|row|</td><td class="arrow">&rarr;</td><td>Table</td></tr>
11
+ <tr><td>http://url<br />email@address.com</td><td class="arrow">&rarr;</td><td>Auto-linked</td></tr>
12
+ <tr><td>!imageURL!</td><td class="arrow">&rarr;</td><td>Image</td></tr>
13
+ </table>
14
+
15
+ <%= sub_template "wiki_words_help" %>
16
+ </div>
17
+
18
+ <script language="JavaScript">
19
+ function quickRedReference() {
20
+ window.open(
21
+ "http://hobix.com/textile/quick.html",
22
+ "redRef",
23
+ "height=600,width=550,channelmode=0,dependent=0," +
24
+ "directories=0,fullscreen=0,location=0,menubar=0," +
25
+ "resizable=0,scrollbars=1,status=1,toolbar=0"
26
+ );
27
+ }
28
+ </script>
@@ -0,0 +1,49 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <head>
4
+ <title>
5
+ <% if @web && @page && @page.name == "HomePage" && %( show published print ).include?(@action_name) %>
6
+ <%= @web.name %>
7
+ <% elsif @web %>
8
+ <%= @title %> in <%= @web.name %>
9
+ <% else %>
10
+ <%= @title %>
11
+ <% end %>
12
+ </title>
13
+
14
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
15
+
16
+ <style type="text/css">
17
+ h1#pageName, .newWikiWord a, a.existingWikiWord, .newWikiWord a:hover, #TextileHelp h3 {
18
+ color: #<%= @web ? @web.color : "393" %>;
19
+ }
20
+
21
+ #Container, #Content {
22
+ width: <%= @content_width || "600" %>px;
23
+ }
24
+ <%= sub_template("static_style_sheet") if @inline_style %>
25
+ </style>
26
+
27
+ <link rel="Stylesheet" href="../static_style_sheet/" type="text/css" media="screen" />
28
+
29
+ <style type="text/css">
30
+ <%= @style_additions %>
31
+ <%= @web ? web.additional_style : "" %>
32
+ </style>
33
+ </head>
34
+ <body>
35
+ <div id="Container">
36
+ <div id="Content">
37
+
38
+ <h1 id="pageName">
39
+ <% if @web && @page && @page.name == "HomePage" && %( show published print ).include?(@action_name) %>
40
+ <%= @web.name %>
41
+ <% elsif @web %>
42
+ <small><%= @web.name %></small><br />
43
+ <%= @title %>
44
+ <% else %>
45
+ <%= @title %>
46
+ <% end %>
47
+ </h1>
48
+
49
+ <%= sub_template "navigation" unless @web.nil? || @hide_navigation %>
@@ -0,0 +1,13 @@
1
+ <% @title = "Authors" %><%= sub_template "top" %>
2
+
3
+ <ul id="authorList">
4
+ <% for author in @authors %>
5
+ <li>
6
+ <%= @web.make_link(author) %>
7
+ co- or authored:
8
+ <%= @web.select.pages_authored_by(author).collect { |page| page.link }.join ", " %>
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+
13
+ <%= sub_template "bottom" %>
@@ -0,0 +1,31 @@
1
+ <%
2
+ @title = "Editing #{@page.name}"
3
+ @content_width = 720
4
+ @hide_navigation = true
5
+ %><%= sub_template "top" %>
6
+
7
+ <%= "<p style='color:red'>Please correct the error that caused this error in rendering:<br/><small>#{@params["msg"]}</small></p>" if @params["msg"] %>
8
+
9
+ <%= render_markup_help %>
10
+
11
+ <form id="editForm" action="../save/<%= @page.name %>" method="post" onSubmit="cleanAuthorName();">
12
+ <p>
13
+ <textarea name="content" style="width: 450px; height: 500px"><%= @page.content %></textarea>
14
+ </p>
15
+ <p>
16
+ <input type="submit" value="Update"> as
17
+ <input type="text" name="author" id="authorName" value="<%= @author %>"
18
+ onClick="this.value == 'AnonymousCoward' ? this.value = '' : true">
19
+ | <a href="../cancel_edit/<%= @page.name %>">Cancel</a> <small>(unlocks page)</small>
20
+ </p>
21
+ </form>
22
+
23
+ <script language="JavaScript1.2">
24
+ function cleanAuthorName() {
25
+ if (document.getElementById('authorName').value == "") {
26
+ document.getElementById('authorName').value = 'AnonymousCoward';
27
+ }
28
+ }
29
+ </script>
30
+
31
+ <%= sub_template "bottom" %>
@@ -0,0 +1,138 @@
1
+ <% @title = "Edit Web" %><%= sub_template "top" %>
2
+
3
+ <form action="../update_web" id="setup" method="post" onSubmit="cleanAddress(); return validateSetup()">
4
+ <h2 style="margin-bottom: 3px">Name and address</h2>
5
+ <div class="help">
6
+ The name of the web is included in the title on all pages. The address is the base path that all pages within the web live beneath.
7
+ Ex: the address "rails" gives URLs like <i>/rails/show/HomePage</i>.
8
+ </div>
9
+
10
+ <div class="inputBox">
11
+ Name: <input type="text" id="name" name="name" value="<%= @web.name %>" onChange="proposeAddress();"> &nbsp;&nbsp;
12
+ Address: <input type="text" id="address" name="address" value="<%= @web.address %>" onChange="cleanAddress();">
13
+ <i>(Letters & digits only)</i>
14
+ </div>
15
+
16
+ <h2 style="margin-bottom: 3px">Specialize</h2>
17
+ <div class="help">
18
+ Turning safe mode on will strip HTML tags and stylesheet options from the content of all pages.
19
+ Turning on "brackets only" will require all wiki words to be as [[wiki word]] and WikiWord won't work.
20
+ Additions to the stylesheet take precedence over the existing styles. <i>Hint:</i> View source on a page you want to
21
+ style to find ID names on individual tags. <a href="#" onClick="document.getElementById('additionalStyle').style.display='block';return false;">See styles >></a>
22
+ </div>
23
+ <div class="inputBox">
24
+ Markup:
25
+ <select name="markup">
26
+ <%= html_options({ "Textile" => :textile, "Markdown" => :markdown, "RDoc" => :rdoc }, @web.markup) %>
27
+ </select>
28
+
29
+ &nbsp;&nbsp;
30
+
31
+ Color:
32
+ <select name="color">
33
+ <%= html_options({ "Green" => "008B26", "Purple" => "504685", "Red" => "DA0006", "Orange" => "FA6F00", "Grey" => "8BA2B0" },
34
+ @web.color) %>
35
+ </select>
36
+
37
+ &nbsp;&nbsp;
38
+
39
+ <small>
40
+
41
+ <input type="checkbox" name="safe_mode"<%= " CHECKED" if @web.safe_mode %>> Safe mode
42
+
43
+ &nbsp;&nbsp;
44
+
45
+ <input type="checkbox" name="brackets_only"<%= " CHECKED" if @web.brackets_only %>> Brackets only
46
+
47
+ &nbsp;&nbsp;
48
+
49
+ <input type="checkbox" name="count_pages"<%= " CHECKED" if @web.count_pages %>> Count pages
50
+
51
+ </small>
52
+
53
+ <textarea id="additionalStyle" style="display: none; margin-top: 10px; margin-bottom: 5px; width: 560px; height: 200px" name="additional_style"><%= @web.additional_style %></textarea>
54
+ </div>
55
+
56
+ <h2 style="margin-bottom: 3px">Password protection for this web (<%= @web.name %>)</h2>
57
+ <div class="help">
58
+ This is the password that visitors need to view and edit this web. Setting the password to nothing will remove the password protection.
59
+ </div>
60
+ <div class="inputBox">
61
+ Password: <input type="password" id="password" name="password" value="<%= @web.password %>"> &nbsp;&nbsp;
62
+ Verify: <input type="password" id="password_check" value="<%= @web.password %>" name="password_check">
63
+ </div>
64
+
65
+ <h2 style="margin-bottom: 3px">Publish read-only version of this web (<%= @web.name %>)</h2>
66
+ <div class="help">
67
+ You can turn on a read-only version of this web that's accessible even when the regular web is password protected.
68
+ The published version is accessible through URLs like /wiki/published/HomePage.
69
+ </div>
70
+ <div class="inputBox">
71
+ <input type="checkbox" name="published"<%= " CHECKED" if @web.published %>> Publish this web
72
+ </div>
73
+
74
+ <p align="right">
75
+ <small>
76
+ Enter system password
77
+ <input type="password" id="system_password" name="system_password">
78
+ and
79
+ <input type="submit" value="Update Web">
80
+ <br/><br/>
81
+ ...or forget changes and <a href="/new_web/">create a new web</a>
82
+ </small>
83
+ </p>
84
+
85
+ </form>
86
+
87
+ <br/>
88
+ <h1>Other administrative tasks</h1>
89
+
90
+ <form action="../remove_orphaned_pages" id="remove_orphaned_pages" method="post">
91
+
92
+ <p align="right">
93
+ <small>
94
+ Clean up by entering system password
95
+ <input type="password" id="system_password" name="system_password">
96
+ and
97
+ <input type="submit" value="Delete Orphan Pages">
98
+ </small>
99
+ </p>
100
+
101
+ <script>
102
+ function proposeAddress() {
103
+ document.getElementById('address').value =
104
+ document.getElementById('name').value.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
105
+ }
106
+
107
+ function cleanAddress() {
108
+ document.getElementById('address').value =
109
+ document.getElementById('address').value.replace(/[^a-zA-Z0-9]/g, "").toLowerCase();
110
+ }
111
+
112
+ function validateSetup() {
113
+ if (document.getElementById('system_password').value == "") {
114
+ alert("You must enter the system password");
115
+ return false;
116
+ }
117
+
118
+ if (document.getElementById('name').value == "") {
119
+ alert("You must pick a name for the web");
120
+ return false;
121
+ }
122
+
123
+ if (document.getElementById('address').value == "") {
124
+ alert("You must pick an address for the web");
125
+ return false;
126
+ }
127
+
128
+ if (document.getElementById('password').value != "" &&
129
+ document.getElementById('password').value != document.getElementById('password_check').value) {
130
+ alert("The password and its verification doesn't match");
131
+ return false;
132
+ }
133
+
134
+ return true;
135
+ }
136
+ </script>
137
+
138
+ <%= sub_template "bottom" %>