gf-Soks 1.0.4

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 (120) hide show
  1. data/LICENSE.txt +66 -0
  2. data/README.txt +64 -0
  3. data/bin/soks-create-wiki.rb +193 -0
  4. data/contrib/diff/lcs.rb +1105 -0
  5. data/contrib/diff/lcs/array.rb +21 -0
  6. data/contrib/diff/lcs/block.rb +51 -0
  7. data/contrib/diff/lcs/callbacks.rb +322 -0
  8. data/contrib/diff/lcs/change.rb +169 -0
  9. data/contrib/diff/lcs/hunk.rb +257 -0
  10. data/contrib/diff/lcs/ldiff.rb +226 -0
  11. data/contrib/diff/lcs/string.rb +19 -0
  12. data/contrib/diff_licence.txt +76 -0
  13. data/contrib/easyprompt.rb +58 -0
  14. data/contrib/easyprompt_licence.txt +504 -0
  15. data/contrib/redcloth-3.0.3.rb +1113 -0
  16. data/contrib/redcloth_license.txt +27 -0
  17. data/lib/authenticators.rb +121 -0
  18. data/lib/helpers/counter-helpers.rb +132 -0
  19. data/lib/helpers/default-helpers.rb +416 -0
  20. data/lib/helpers/mail2wiki-helper.rb +105 -0
  21. data/lib/helpers/maintenance-helpers.rb +149 -0
  22. data/lib/helpers/rss2wiki-helper.rb +47 -0
  23. data/lib/helpers/wiki2html.rb +60 -0
  24. data/lib/soks-model.rb +271 -0
  25. data/lib/soks-servlet.rb +177 -0
  26. data/lib/soks-storage.rb +187 -0
  27. data/lib/soks-upgrade-0.0.2.rb +70 -0
  28. data/lib/soks-utils.rb +327 -0
  29. data/lib/soks-view.rb +399 -0
  30. data/lib/soks.rb +27 -0
  31. data/rakefile +109 -0
  32. data/templates/default/attachment/favicon.ico +0 -0
  33. data/templates/default/attachment/logo.jpg +0 -0
  34. data/templates/default/attachment/logo.png +0 -0
  35. data/templates/default/attachment/logo.tiff +0 -0
  36. data/templates/default/attachment/newpage.js +41 -0
  37. data/templates/default/attachment/print_stylesheet.css +2 -0
  38. data/templates/default/attachment/robots.txt +6 -0
  39. data/templates/default/attachment/rss.png +0 -0
  40. data/templates/default/attachment/stylesheet.css +219 -0
  41. data/templates/default/banned_titles.txt +67 -0
  42. data/templates/default/caches/readme.txt +1 -0
  43. data/templates/default/content/Api%20for%20classes%20to%20modify%20the%20wiki.textile +30 -0
  44. data/templates/default/content/Author.textile +16 -0
  45. data/templates/default/content/Automatic%20Summaries.textile +40 -0
  46. data/templates/default/content/Automatic%20counters.textile +22 -0
  47. data/templates/default/content/Automatic%20exporters.textile +23 -0
  48. data/templates/default/content/Automatic%20importers.textile +59 -0
  49. data/templates/default/content/Automatic%20linking.textile +7 -0
  50. data/templates/default/content/Automatic%20maintenance%20helpers.textile +39 -0
  51. data/templates/default/content/Bug%3A%20Competing%20edits.textile +22 -0
  52. data/templates/default/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +3 -0
  53. data/templates/default/content/Bug%3A%20Email%20adresses%20in%20page%20titles%20cause%20incorrec.textile +3 -0
  54. data/templates/default/content/Bug%3A%20GEM%20limits%20title%20lengths.textile +3 -0
  55. data/templates/default/content/Bug%3A%20Memory%20leak.textile +13 -0
  56. data/templates/default/content/Bug%3A%20Page%2Einserted%5Finto%20is%20never%20purged.textile +17 -0
  57. data/templates/default/content/Bug%3A%20Pages%20that%20link%20here%20may%20not%20appear%20on%20r.textile +13 -0
  58. data/templates/default/content/Bug%3A%20Textile%20mishandles%20paragraphs.textile +37 -0
  59. data/templates/default/content/Bug%3A%20Unanticipated%20Rollbacks.textile +23 -0
  60. data/templates/default/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile +3 -0
  61. data/templates/default/content/Home%20Page.textile +22 -0
  62. data/templates/default/content/How%20to%20administrate%20this%20wiki.textile +57 -0
  63. data/templates/default/content/How%20to%20change%20the%20way%20this%20wiki%20looks.textile +32 -0
  64. data/templates/default/content/How%20to%20export%20a%20site%20from%20this%20wiki.textile +82 -0
  65. data/templates/default/content/How%20to%20get%20the%20latest%20Soks%20from%20cvs.textile +45 -0
  66. data/templates/default/content/How%20to%20hack%20soks.textile +66 -0
  67. data/templates/default/content/How%20to%20import%20a%20site%20from%20instiki.textile +15 -0
  68. data/templates/default/content/How%20to%20import%20data.textile +41 -0
  69. data/templates/default/content/How%20to%20install%20Soks.textile +33 -0
  70. data/templates/default/content/How%20to%20password%20protect%20your%20wiki.textile +53 -0
  71. data/templates/default/content/How%20to%20re%2Dbuild%20the%20page%20cache.textile +71 -0
  72. data/templates/default/content/How%20to%20report%20a%20bug.textile +9 -0
  73. data/templates/default/content/How%20to%20upgrade%20soks.textile +32 -0
  74. data/templates/default/content/How%20to%20use%20the%20Automatic%20Helper%20classes.textile +12 -0
  75. data/templates/default/content/How%20to%20use%20this%20wiki.textile +30 -0
  76. data/templates/default/content/List%20of%20changes.textile +10 -0
  77. data/templates/default/content/News%3A%20Version%201%2D0%2D0%20released.textile +19 -0
  78. data/templates/default/content/News%3A%20Version%201%2D0%2D1%20released.textile +12 -0
  79. data/templates/default/content/Pages%20to%20include%20in%20the%20distribution.textile +55 -0
  80. data/templates/default/content/Per%20Wiki%20Templates.textile +37 -0
  81. data/templates/default/content/Picture%20of%20a%20pair%20of%20soks.textile +1 -0
  82. data/templates/default/content/Planned%20Features.textile +74 -0
  83. data/templates/default/content/README.textile +64 -0
  84. data/templates/default/content/RSS%20feed.textile +9 -0
  85. data/templates/default/content/Recent%20changes%20to%20this%20site.textile +352 -0
  86. data/templates/default/content/SOKS%20features.textile +19 -0
  87. data/templates/default/content/Sidebar%20Page.textile +6 -0
  88. data/templates/default/content/Site%20Index.textile +241 -0
  89. data/templates/default/content/Soks%27s%20Licence.textile +66 -0
  90. data/templates/default/content/Tag%3A%20Include%20this%20page%20in%20the%20distribution.textile +6 -0
  91. data/templates/default/start.rb +90 -0
  92. data/templates/default/version.txt +1 -0
  93. data/templates/default/views/Page_content.rhtml +1 -0
  94. data/templates/default/views/Page_edit.rhtml +79 -0
  95. data/templates/default/views/Page_find.rhtml +35 -0
  96. data/templates/default/views/Page_linksfromrss.rhtml +24 -0
  97. data/templates/default/views/Page_listrss.rhtml +46 -0
  98. data/templates/default/views/Page_meta.rhtml +44 -0
  99. data/templates/default/views/Page_print.rhtml +6 -0
  100. data/templates/default/views/Page_revision.rhtml +39 -0
  101. data/templates/default/views/Page_revisions.rhtml +36 -0
  102. data/templates/default/views/Page_rss.rhtml +57 -0
  103. data/templates/default/views/Page_view.rhtml +8 -0
  104. data/templates/default/views/UploadPage_edit.rhtml +63 -0
  105. data/templates/default/views/frame.rhtml +63 -0
  106. data/templates/default/views/messages.yaml +7 -0
  107. data/test/html/2006Mar.html +66 -0
  108. data/test/html/poignant.html +36 -0
  109. data/test/html/poignant.textile +36 -0
  110. data/test/mock-objects.rb +69 -0
  111. data/test/test_counter-helper.rb +162 -0
  112. data/test/test_soks-helper-maintenance.rb +106 -0
  113. data/test/test_soks-helpers.rb +145 -0
  114. data/test/test_soks-model.rb +144 -0
  115. data/test/test_soks-servlet.rb +240 -0
  116. data/test/test_soks-storage.rb +108 -0
  117. data/test/test_soks-utils.rb +226 -0
  118. data/test/test_soks-view.rb +193 -0
  119. data/test/test_soks.rb +9 -0
  120. metadata +182 -0
@@ -0,0 +1,35 @@
1
+ <span class='pagename'>Search Results</span>
2
+
3
+ <%
4
+ search_regexp = /#{query['regex'].strip}/i
5
+ title_results = @wiki.select { |name,apage| name=~ search_regexp }
6
+ text_results = @wiki.select { |name,apage| apage.content=~ search_regexp }
7
+ %>
8
+
9
+ <h1>Results of Search for &#8220;<%= query['regex'] %>&#8221;</h1>
10
+
11
+ <% unless title_results.empty? %>
12
+ <h2>Matches in the titles of pages</h2>
13
+ <ul>
14
+ <% title_results.each do |name, page| %>
15
+ <li><a href='<%= url name %>' ><%= name %></a></li>
16
+ <% end %>
17
+ </ul>
18
+ <% else %>
19
+ <p>No matches in the titles of pages</p>
20
+ <% end %>
21
+
22
+ <% unless text_results.empty? %>
23
+ <h2>Matches in the text of pages</h2>
24
+ <ul>
25
+ <% text_results.each do |name, page| %>
26
+ <li><a href='<%= url name %>' ><%= name %></a></li>
27
+ <% end %>
28
+ </ul>
29
+ <% else %>
30
+ <p>No matches in the text of pages</p>
31
+ <% end %>
32
+
33
+ <div class='command'>
34
+ <a href='<%= url query['regex'], "edit" %>' accesskey="E" >Create a page titled &#8220;<%= query['regex'] %>&#8221;</a>
35
+ </div>
@@ -0,0 +1,24 @@
1
+ <%=
2
+ require "rss/maker"
3
+
4
+ RSS::Maker.make("2.0") do |maker|
5
+
6
+ maker.encoding = 'iso-8859-1'
7
+
8
+ maker.channel.title = "#{page.name} (#{name})"
9
+ maker.channel.description = description
10
+ maker.channel.link = url(page.name)
11
+
12
+ maker.image.title = name
13
+ maker.image.url = file("logo.png")
14
+
15
+ page.links_from.each do |linked_page|
16
+ item = maker.items.new_item
17
+ item.link = url(linked_page.name)
18
+ item.title = linked_page.name
19
+ item.date = linked_page.revised_on
20
+ item.author = linked_page.author
21
+ item.description = redcloth( linked_page )
22
+ end
23
+ end
24
+ %>
@@ -0,0 +1,46 @@
1
+ <%=
2
+ require "rss/maker"
3
+
4
+ RSS::Maker.make("2.0") do |maker|
5
+
6
+ maker.encoding = 'iso-8859-1'
7
+
8
+ maker.channel.title = "#{name} #{page.name}"
9
+ maker.channel.description = description
10
+ maker.channel.link = root_url
11
+
12
+ maker.image.title = name
13
+ maker.image.url = file('logo.png')
14
+
15
+ maker.items.do_sort = true
16
+
17
+ count = 0
18
+ page.textile.scan(%r{/revision/([^?]+)\?time=(\d+)}) do |linked_pagename,time|
19
+ break if (count +=1) == 15
20
+ linked_page = @wiki.page( linked_pagename )
21
+ revision = linked_page.revisions.detect { |revision| revision.created_on.to_i >= time.to_i }
22
+
23
+ item = maker.items.new_item
24
+ item.link = url(linked_page.name)
25
+ item.title = linked_page.name
26
+ item.date = revision.revised_on
27
+ item.author = revision.author
28
+ item.description = ""
29
+ revision.number.downto(0) do |number|
30
+ revision = linked_page.revision(number)
31
+ break unless revision.author == item.author
32
+ content_deleted = false
33
+ revision.changes.each do |change_group|
34
+ change_group.each do |change|
35
+ case change[0]
36
+ when "-"; content_deleted = true
37
+ when "+"; item.description << "#{change[2]}<br />"
38
+ end
39
+ end
40
+ item.description << "&#8230;<br />"
41
+ end
42
+ item.description << "Content was also deleted<br />" if content_deleted
43
+ end
44
+ end
45
+ end
46
+ %>
@@ -0,0 +1,44 @@
1
+ <span class='pagename'><a href='<%= url page.name %>'><%= page.name %></a> <%= page.deleted? ? "(Deleted)" : '' %></span>
2
+
3
+ <h1><%= pagename %></h1>
4
+
5
+ <% seconds_per_change = (page.revised_on-page.created_on)/page.revisions.size.to_i %>
6
+
7
+ <p>This page was created on <%= page.created_on %> by <%= page.revisions.first.author %>.</p>
8
+ <% if page.revisions.size > 1 %>
9
+ <p>It was last updated on <%= page.revised_on %> by <%= page.author %>.</p>
10
+ <p>It has been changed <%= page.revisions.size %> times (roughly once every <%= seconds_per_change.to_time_units %>).</p>
11
+ <% end %>
12
+
13
+ <div class='metacolumn' >
14
+ <h2>Wiki links from this page</h2>
15
+
16
+ <ul>
17
+ <% page.links_from.each do |linkedpage| %>
18
+ <li><a href='<%= url linkedpage.name %>'><%= linkedpage.name %></a></li>
19
+ <% end %>
20
+ </ul>
21
+
22
+ </div>
23
+
24
+ <div class='metacolumn' >
25
+ <h2>Wiki links to this page</h2>
26
+
27
+ <ul>
28
+ <% page.links_to.each do |linkedpage| %>
29
+ <li><a href='<%= url linkedpage.name %>'><%= linkedpage.name %></a></li>
30
+ <% end %>
31
+ </ul>
32
+
33
+ </div>
34
+
35
+ <div class='metacolumn' >
36
+ <h2>Authors</h2>
37
+
38
+ <ol>
39
+ <% page.revisions.map { |revision| revision.author }.uniq.each do |author| %>
40
+ <li><a href='<%= url author %>'><%= author %></a></li>
41
+ <% end %>
42
+ </ol>
43
+
44
+ </div>
@@ -0,0 +1,6 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml">
3
+ <body>
4
+ <%= renderedview %>
5
+ </body>
6
+ </html>
@@ -0,0 +1,39 @@
1
+ <span class='pagename'><a href='<%= url page.name, "meta" %>'><%= page.name %></a> <%= page.deleted? ? "(Deleted)" : '' %></span>
2
+
3
+ <%
4
+ if query['time']
5
+ final_revision = page.revisions.detect { |revision| revision.created_on.to_i >= query['time'].to_i }
6
+ final_revision_number = final_revision.number if final_revision
7
+ end
8
+ final_revision_number ||= ( query['revision'] || page.number ).to_i
9
+ final_revison_number = page.number if final_revision_number > page.number
10
+ final_revision ||= page.revision( final_revision_number )
11
+ %>
12
+
13
+ <h1>Revisions made by <%= final_revision.author%> up to <%= final_revision.revised_on.strftime('%H:%M %a %d %b %Y') %></h1>
14
+
15
+ <p>Note, if you wish to edit or undo these revisions, please follow the links from <a href='<%= url page.name, 'edit' %>'>here</a>. You cannot do it from here, becuase someone may have edited the page more recently and because you may need a password to edit the page.</p>
16
+
17
+ <% final_revision_number.downto(0) do |number| %>
18
+ <% revision = page.revision( number ) %>
19
+ <% break unless revision.author == final_revision.author %>
20
+ <div class="undochange">
21
+ <p><%= revision.created_on.strftime('%H:%M %a %d %b %Y') %></p>
22
+ <ol>
23
+ <% revision.changes.each do |change_group| %>
24
+ <% change_group.each do |change|
25
+ case change[0]
26
+ when "-" %>
27
+ <li><del><%= change[1] %>. <%= change[2].gsub('<','&lt;').gsub('>','&gt;') %></del></li>
28
+ <% when "+" %>
29
+ <li><%= change[1] %>. <%= change[2].gsub('<','&lt;').gsub('>','&gt;') %></li>
30
+ <% end %>
31
+ <% end %>
32
+ <% end %>
33
+ </ol>
34
+ </div>
35
+ <% end %>
36
+
37
+ <div class='command'>
38
+ <a href='<%= url page.name %>' accesskey="V" >View</a>, <a href='<%= url page.name, "edit" %>' accesskey="E" >Edit</a> or <a href='<%= url page.name, "revisions" %>' accesskey="R" >see all changes to</a> this page.
39
+ </div>
@@ -0,0 +1,36 @@
1
+ <span class='pagename'><a href='<%= url page.name, "meta" %>'><%= page.name %></a> <%= page.deleted? ? "(Deleted)" : '' %></span>
2
+
3
+ <% start_at_revision = query['revision'] ? query['revision'].to_i : 0 %>
4
+
5
+ <% if start_at_revision > 0 %>
6
+ <p><a href='<%= url page.name, "revisions", "?revision=#{start_at_revision-10}" %>' accesskey="N" >Newer revisions</a></p>
7
+ <% end %>
8
+
9
+ <% page.revisions[start_at_revision,10].reverse_each do |revision| %>
10
+ <div class="undochange">
11
+ <p><%= revision.created_on %> by <a href='<%= url revision.author %>'><%= revision.author %></a></p>
12
+ <ol>
13
+ <% revision.changes.each do |change_group| %>
14
+ <% change_group.each do |change|
15
+ case change[0]
16
+ when "-" %>
17
+ <li><del><%= change[1] %>. <%= change[2].gsub('<','&lt;').gsub('>','&gt;') %></del></li>
18
+ <% when "+" %>
19
+ <li><%= change[1] %>. <%= change[2].gsub('<','&lt;').gsub('>','&gt;') %></li>
20
+ <% end %>
21
+ <% end %>
22
+ <% end %>
23
+ </ol>
24
+ <form method=post action='<%= url page.name, "rollback" %>' >
25
+ <input name='revision' value='<%= revision.number-1 %>' type='hidden' />
26
+ <input name='action' value='Undo the changes above' type='submit' />
27
+ </form>
28
+ </div>
29
+ <% end %>
30
+
31
+ <% if (start_at_revision+10) < page.revisions.size %>
32
+ <p><a href='<%= url page.name, "revisions", "?revision=#{start_at_revision+10}" %>' accesskey="O" >Older revisions</a></p>
33
+ <% end %>
34
+ <div class='command'>
35
+ <a href='<%= url page.name, "edit" %>' accesskey="R" >Return to editing</a>
36
+ </div>
@@ -0,0 +1,57 @@
1
+ <%=
2
+ require "rss/maker"
3
+
4
+ RSS::Maker.make("2.0") do |maker|
5
+
6
+ maker.encoding = 'iso-8859-1'
7
+
8
+ maker.channel.title = "#{name} #{page.name}"
9
+ maker.channel.description = description
10
+ maker.channel.link = root_url
11
+
12
+ maker.image.title = name
13
+ maker.image.url = file "logo.png"
14
+
15
+ maker.textinput.title = "Search"
16
+ maker.textinput.description = "Search #{name}'s text"
17
+ maker.textinput.name = "regex"
18
+ maker.textinput.link = url('searchpage','find')
19
+
20
+ maker.items.do_sort = true
21
+
22
+ count = 0
23
+ page.revisions.reverse_each do |revision|
24
+ break if (count +=1) == 15
25
+ item = maker.items.new_item
26
+ item.link = url(page.name)
27
+ # Get the first change that makes an addition and use as the title
28
+ title = nil
29
+ revision.changes.each do |group|
30
+ group.each do |type,line,text|
31
+ if type == '+' && text != ''
32
+ title = text.gsub(/<.*?>/,'')
33
+ end
34
+ break if title
35
+ end
36
+ break if title
37
+ end
38
+ # If change found, take just the changed text and remove tags.
39
+ # If no change found, then must be because only deleted stuff so give that message
40
+ item.title = title || $MESSAGES[:some_content_has_been_deleted] # Default
41
+ item.date = revision.created_on
42
+ item.author = revision.author
43
+ item.description = ""
44
+ content_deleted = false
45
+ revision.changes.each do |change_group|
46
+ change_group.each do |change|
47
+ case change[0]
48
+ when "-"; content_deleted = true
49
+ when "+"; item.description << "#{change[2]}<br />"
50
+ end
51
+ end
52
+ item.description << "&#8230;<br />"
53
+ end
54
+ item.description << "Content was also deleted" if content_deleted
55
+ end
56
+ end
57
+ %>
@@ -0,0 +1,8 @@
1
+ <span class='pagename'><a href='<%= url page.name, "meta" %>'><%= pagename %></a> <%= page.deleted? ? "(Deleted)" : '' %></span>
2
+
3
+ <%= renderedview %>
4
+
5
+ <div class='command'>
6
+ <a href='<%= url page.name, "edit" %>' accesskey="E" >Edit this page</a> or
7
+ watch for changes using <a href='<%= url page.name, 'rss' %>'>RSS</a>.
8
+ </div>
@@ -0,0 +1,63 @@
1
+ <span class='pagename'>
2
+ <a href='<%= url page.name, "meta" %>'><%= page.name %></a>
3
+ <%= page.deleted? ? "(Deleted)" : '' %>
4
+ </span>
5
+
6
+ <a class='help' onclick='document.getElementById("tips").style.display = (document.getElementById("tips").style.display == "block") ? "none" : "block";' >Click me for help</a>
7
+
8
+ <div id='tips' style='display: none;'>
9
+ <p>To add a file or picture, click on the 'choose file' or 'browse...' button below, select the file you wish to add, then give it a meaningful title in the title box. Note that the title can be a sentence, e.g. "claim form" or "a beautiful balloon", and does not need to have an extension.</p>
10
+ <p>You can put add a link to the file from another page in the wiki by typing its title (e.g. "attached claim form"). To make a picture appear as part of another page write [[ insert picture name ]] (e.g. [[insert picture of a beautiful balloon]]).</p>
11
+ </div>
12
+
13
+ <form class='editpage' action='<%= url page.name, "upload" %>' method='post' enctype='multipart/form-data' >
14
+ <div id='fileedittitle'>
15
+ Title:
16
+ <% if page.is_a? ImagePage %>
17
+ <input type=hidden name='titleprefix' value='Picture of ' />
18
+ Picture of <input name='newtitle' size = '51' value='<%= page.name[ 10..-1].strip %>'
19
+ <% else %>
20
+ <input type=hidden name='titleprefix' value='Attached ' />
21
+ Attached <input name='newtitle' size = '52' value='<%= page.name[ 9..-1].strip %>'
22
+ <% end %>
23
+ onBlur="validateTitle( this.value );" onClick="this.value=this.value.replace('Type a title here','')" />
24
+ </div>
25
+
26
+ <div id='fileeditfile'>
27
+ <input name='file' type=file /></td></tr>
28
+ </div>
29
+
30
+ Hello <a href='<%= url person %>'><%= person %></a> (Quit browser to log out). Would you like to
31
+ <input name='action' value='Save Changes' type='submit' accesskey="S" /></form>,
32
+ <form class='editpage' method='post' action='<%= url page.name %>' >
33
+ <input name='action' value='Cancel Changes' type=submit accesskey="C" />
34
+ </form> or
35
+ <form class='editpage' method='post' action='<%= url page.name, 'delete' %>' >
36
+ <input name='action' value='Delete this Page' type='submit' accesskey="D" />
37
+ </form>?
38
+
39
+
40
+ <% unless page.empty? %>
41
+ <div class='change'>
42
+ <h2>The most recent change was made by <a href='<%= url page.author %>'><%= page.author %></a> who changed:</h2>
43
+ <%
44
+ page.changes.each do |change_group|
45
+ change_group.each do |change|
46
+ case change[0]
47
+ when "-" %>
48
+ <del><%= change[1] %>. <%= change[2] %></del><br />
49
+ <% when "+" %>
50
+ <%= change[1] %>. <%= change[2] %><br />
51
+ <%
52
+ end
53
+ end
54
+ end
55
+ %>
56
+ </div>
57
+ <p>
58
+ <form class='editpage' method=post action='<%= url page.name, "rollback" %>' >
59
+ <input name='revision' value='<%= page.number-1 %>' type='hidden' />
60
+ <input name='action' value='Undo this change' type='submit' accesskey="U" />
61
+ </form> or <a href='<%= url page.name, "revisions" %>' accesskey="A" >Show <b>A</b>ll changes</a>.
62
+ </p>
63
+ <% end %>
@@ -0,0 +1,63 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html>
3
+ <head>
4
+ <title><%= query['regex'] ? "Results of search for '#{query['regex']}'" : page.name %></title>
5
+ <meta name='description' content='<%= description %>' />
6
+ <meta name='keywords' content='Soks, <%= name %>' />
7
+ <link href='<%= file 'stylesheet.css' %>' rel='stylesheet' type='text/css' media='screen' />
8
+ <link href='<%= file 'print_stylesheet.css' %>' rel='stylesheet' type='text/css' media='print' />
9
+ <link rel='alternate' type='application/rss+xml' title='RSS' href='<%= url page.name, 'rss' %>' />
10
+ <script src='<%= file 'newpage.js' %>' type='text/javascript'></script>
11
+ </head>
12
+ <body onkeypress='hotkey(event,"<%= root_url %>/edit/");'>
13
+
14
+ <div id='content'>
15
+ <%= content_of_page %>
16
+ </div>
17
+
18
+ <div id='menu'>
19
+
20
+ <h1><%= self.name %></h1>
21
+ <a href='<%= url 'Home Page' %>' accesskey='H' >
22
+ <img width='149' src='<%= file 'logo.jpg' %>' alt='<%= self.name %>' />
23
+ </a>
24
+
25
+ <h2>Search</h2>
26
+ <form method='get' action='<%= url page.name, 'find' %>' >
27
+ <input class='search'
28
+ name='regex'
29
+ value='<%= query['regex'] || "Enter word & press return" %>'
30
+ onfocus="this.value=this.value.replace('Enter word & press return','')"
31
+ size='17' />
32
+ </form>
33
+
34
+ <h2><a href='<%= url "Sidebar Page" %>' >Important Pages</a></h2>
35
+ <% sidebarpage = @wiki.page( "Sidebar Page") %>
36
+ <div class='linklist'>
37
+ <%= redcloth( sidebarpage) %>
38
+ </div>
39
+
40
+ <% if page %>
41
+ <% dynamic_links = page.links_to - page.links_from - sidebarpage.links_from - [ sidebarpage ] %>
42
+ <% dynamic_links.delete_if { |page| page.name =~ /^Site Index ([a-z]|Other)\./i } %>
43
+ <% unless dynamic_links.empty? %>
44
+ <h2>See also:</h2>
45
+ <div class='linklist'>
46
+ <% dynamic_links.each do |linkedpage| %>
47
+ <a href='<%= url linkedpage.name %>'><%= linkedpage.name %></a>
48
+ <% end %>
49
+ </div>
50
+ <% end %>
51
+ <% end %>
52
+
53
+ <h2>Add a page</h2>
54
+ <div class='linklist'>
55
+ <a href='<%= url 'Type a title here', 'edit' %>'>Add a new page</a>
56
+ <a href='<%= url 'Picture of Type a title here', 'edit' %>'>Upload a new picture</a>
57
+ <a href='<%= url 'Attached Type a title here', 'edit' %>'>Upload a new file</a>
58
+ </div>
59
+
60
+ <h2>Powered by <a href='http://www.soks.org'>Soks</a></h2>
61
+ </div> <!-- menu -->
62
+ </body>
63
+ </html>
@@ -0,0 +1,7 @@
1
+ :some_content_has_been_deleted : "Some content has been deleted"
2
+ :Type_a_title_here : "Type a title here"
3
+ :Type_what_you_want_here_and_click_save : "Type what you want here and click save"
4
+ :Create : "Create"
5
+ :page_deleted : "page deleted"
6
+ :content_moved_to : "content moved to"
7
+ :content_moved_from : "content moved from"
@@ -0,0 +1,66 @@
1
+ <div class='calendar'>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Su </th>
6
+ <th>Mo </th>
7
+ <th>Tu </th>
8
+ <th>We </th>
9
+ <th>Th </th>
10
+ <th>Fr </th>
11
+ <th>Sa </th>
12
+ </tr>
13
+ <tr>
14
+ <td> . </td>
15
+ <td> . </td>
16
+ <td> . </td>
17
+ <td> <a href='http://testsite.com/view/2006Mar01' class='missing'>1</a> </td>
18
+ <td> <a href='http://testsite.com/view/2006Mar02' class='missing'>2</a> </td>
19
+ <td> <a href='http://testsite.com/view/2006Mar03' class='missing'>3</a> </td>
20
+ <td> <a href='http://testsite.com/view/2006Mar04' class='missing'>4</a> </td>
21
+ </tr>
22
+ <tr>
23
+ <td> <a href='http://testsite.com/view/2006Mar05' class='missing'>5</a> </td>
24
+ <td> <a href='http://testsite.com/view/2006Mar06' class='missing'>6</a> </td>
25
+ <td> <a href='http://testsite.com/view/2006Mar07' class='missing'>7</a> </td>
26
+ <td> <a href='http://testsite.com/view/2006Mar08' class='missing'>8</a> </td>
27
+ <td> <a href='http://testsite.com/view/2006Mar09' class='missing'>9</a> </td>
28
+ <td> <a href='http://testsite.com/view/2006Mar10' class='missing'>10</a> </td>
29
+ <td> <a href='http://testsite.com/view/2006Mar11' class='missing'>11</a> </td>
30
+ </tr>
31
+ <tr>
32
+ <td> <a href='http://testsite.com/view/2006Mar12' class='missing'>12</a> </td>
33
+ <td> <a href='http://testsite.com/view/2006Mar13' class='missing'>13</a> </td>
34
+ <td> <a href='http://testsite.com/view/2006Mar14' class='missing'>14</a> </td>
35
+ <td> <a href='http://testsite.com/view/2006Mar15' class='missing'>15</a> </td>
36
+ <td> <a href='http://testsite.com/view/2006Mar16' class='missing'>16</a> </td>
37
+ <td> <a href='http://testsite.com/view/2006Mar17' class='missing'>17</a> </td>
38
+ <td> <a href='http://testsite.com/view/2006Mar18' class='missing'>18</a> </td>
39
+ </tr>
40
+ <tr>
41
+ <td> <a href='http://testsite.com/view/2006Mar19' class='missing'>19</a> </td>
42
+ <td> <a href='http://testsite.com/view/2006Mar20' class='missing'>20</a> </td>
43
+ <td> <a href='http://testsite.com/view/2006Mar21' class='missing'>21</a> </td>
44
+ <td> <a href='http://testsite.com/view/2006Mar22' class='missing'>22</a> </td>
45
+ <td> <a href='http://testsite.com/view/2006Mar23' class='missing'>23</a> </td>
46
+ <td> <a href='http://testsite.com/view/2006Mar24' class='missing'>24</a> </td>
47
+ <td> <a href='http://testsite.com/view/2006Mar25' class='missing'>25</a> </td>
48
+ </tr>
49
+ <tr>
50
+ <td> <a href='http://testsite.com/view/2006Mar26' class='missing'>26</a> </td>
51
+ <td> <a href='http://testsite.com/view/2006Mar27' class='missing'>27</a> </td>
52
+ <td> <a href='http://testsite.com/view/2006Mar28' class='missing'>28</a> </td>
53
+ <td> <a href='http://testsite.com/view/2006Mar29' class='missing'>29</a> </td>
54
+ <td> <a href='http://testsite.com/view/2006Mar30' class='missing'>30</a> </td>
55
+ <td> <a href='http://testsite.com/view/2006Mar31' class='missing'>31</a> </td>
56
+ <td> . </td>
57
+ </tr>
58
+ </table>
59
+
60
+
61
+
62
+
63
+ <p><a href='http://testsite.com/view/2006Feb' class='automatic'>2006 Feb</a> <a href='http://testsite.com/view/2006Apr' class='automatic'>2006 Apr</a></p>
64
+
65
+
66
+ </div>