Soks 0.0.5 → 0.0.6

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 (284) hide show
  1. data/README.txt +14 -4
  2. data/bin/soks-create-wiki.rb +2 -2
  3. data/contrib/redcloth-3.0.3.rb +0 -1
  4. data/lib/helpers/default-helpers.rb +13 -12
  5. data/lib/helpers/mail2wiki-helper.rb +12 -7
  6. data/lib/helpers/mail2wiki-test.rb +15 -0
  7. data/lib/helpers/wiki2html.rb +60 -0
  8. data/lib/soks-drb.rb +20 -0
  9. data/lib/soks-fcgi.rb +127 -0
  10. data/lib/soks-model.rb +11 -3
  11. data/lib/soks-servlet.rb +68 -45
  12. data/lib/soks-storage.rb +11 -3
  13. data/lib/soks-utils.rb +32 -3
  14. data/lib/soks-view.rb +48 -69
  15. data/lib/soks.rb +6 -3
  16. data/templates/default/attachment/blank.gif +0 -0
  17. data/templates/default/attachment/logo.jpg +0 -0
  18. data/templates/default/attachment/newpage.js +9 -0
  19. data/templates/default/attachment/pngbehavior.htc +86 -0
  20. data/templates/default/attachment/robots.txt +2 -1
  21. data/templates/default/attachment/stylesheet.css +144 -37
  22. data/templates/default/banned_titles.txt +36 -0
  23. data/templates/default/content/Api%20for%20classes%20to%20modify%20the%20wiki.textile +24 -0
  24. data/templates/default/content/Author.textile +3 -3
  25. data/templates/default/content/Automatic%20Summaries.textile +14 -14
  26. data/templates/default/content/Automatic%20linking%20between%20pages.textile +2 -0
  27. data/templates/default/content/Bug%3A%20RSS%20feed%20does%20not%20validate.textile +10 -0
  28. data/templates/default/content/Bug%3A%20Textile%20mishandles%20paragraphs.textile +33 -0
  29. data/templates/default/content/Bug%3A%20Unanticipated%20Rollbacks.textile +21 -0
  30. data/templates/default/content/Home%20Page.textile +3 -2
  31. data/templates/default/content/How%20to%20administrate%20this%20wiki.textile +4 -19
  32. data/templates/default/content/How%20to%20get%20the%20latest%20Soks%20from%20cvs.textile +21 -0
  33. data/templates/default/content/How%20to%20import%20data%20to%20this%20wiki.textile +45 -0
  34. data/templates/default/content/How%20to%20install%20Soks.textile +12 -8
  35. data/templates/default/content/How%20to%20password%20protect%20your%20wiki.textile +43 -0
  36. data/templates/default/content/How%20to%20report%20a%20bug.textile +1 -1
  37. data/templates/default/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +2 -0
  38. data/templates/default/content/How%20to%20use%20this%20wiki.textile +1 -0
  39. data/templates/default/content/Instructions%20and%20Howtos.textile +4 -1
  40. data/templates/default/content/Known%20bugs.textile +5 -2
  41. data/templates/default/content/List%20of%20changes.textile +49 -0
  42. data/templates/default/content/New%20Recent%20Changes%20class.textile +58 -0
  43. data/templates/default/content/New%20page%20templates%20or%20categories%20code.textile +68 -0
  44. data/templates/default/content/Per%20Wiki%20Templates.textile +35 -0
  45. data/templates/default/content/Planned%20Features.textile +29 -8
  46. data/templates/default/content/README.textile +14 -4
  47. data/templates/default/content/RSS%20feed.textile +2 -0
  48. data/templates/default/content/Recent%20Changes%20to%20This%20Site.textile +200 -202
  49. data/templates/default/content/SOKS%20features.textile +2 -1
  50. data/templates/default/content/Sidebar%20Page.textile +3 -0
  51. data/templates/default/content/Type%20a%20title%20here.textile +1 -0
  52. data/templates/default/content/bug%3A%20competing%20edits.textile +13 -0
  53. data/templates/default/content/ctrl%2Dn.textile +1 -0
  54. data/templates/default/content/tamc.textile +1 -0
  55. data/templates/default/start.rb +38 -15
  56. data/templates/default/version.txt +1 -1
  57. data/templates/default/views/Page_edit.rhtml +71 -57
  58. data/templates/default/views/Page_meta.rhtml +6 -2
  59. data/templates/default/views/Page_revisions.rhtml +17 -9
  60. data/templates/default/views/Page_rss.rhtml +3 -1
  61. data/templates/default/views/Page_search_results.rhtml +11 -1
  62. data/templates/default/views/Page_view.rhtml +6 -2
  63. data/templates/default/views/UploadPage_edit.rhtml +58 -33
  64. data/templates/default/views/frame.rhtml +46 -27
  65. data/test/test_soks-utils.rb +37 -0
  66. metadata +27 -229
  67. data/templates/default/content/Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20picture%2.textile +0 -1
  68. data/templates/default/content/Bug%3A%20Automatic%20link%20links%20to%20stuff%20inside%20%3Chtml.textile +0 -1
  69. data/templates/default/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +0 -1
  70. data/templates/default/content/Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20appear.textile +0 -1
  71. data/templates/default/content/Bug%3A%20External%20links%20incorrectly%20include%20trailing%20pu.textile +0 -1
  72. data/templates/default/content/Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20link%20is%2.textile +0 -1
  73. data/templates/default/content/Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%20new%20.textile +0 -1
  74. data/templates/default/content/Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -1
  75. data/templates/default/content/Bug%3A%20Page%20titles%20cannot%20have%20html%20tags%20in%20them.textile +0 -1
  76. data/templates/default/content/Bug%3A%20Punctuation%20in%20page%20titles%20still%20problematic.textile +0 -7
  77. data/templates/default/content/Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%28not%20.textile +0 -1
  78. data/templates/default/content/Bug%3A%20Search%20box%20width%20does%20not%20match%20column%20wid.textile +0 -1
  79. data/templates/default/content/Bug%3A%20Search%20includes%20leading%20and%20trailing%20spaces.textile +0 -1
  80. data/templates/default/content/Bug%3A%20Search%20inluced%20leading%20and%20trailing%20spaces.textile +0 -1
  81. data/templates/default/content/Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -1
  82. data/templates/default/content/Bug%3A%20Symbols%20are%20not%20always%20correctly%20rendered%20in.textile +0 -1
  83. data/templates/default/content/Bug%3A%20Uploads%20are%20not%20password%20protected.textile +0 -3
  84. data/templates/default/content/Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fbase64.textile +0 -1
  85. data/templates/default/content/Fixed%20Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20p.textile +0 -34
  86. data/templates/default/content/Fixed%20Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20.textile +0 -3
  87. data/templates/default/content/Fixed%20Bug%3A%20External%20links%20incorrectly%20include%20trail.textile +0 -3
  88. data/templates/default/content/Fixed%20Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20lin.textile +0 -13
  89. data/templates/default/content/Fixed%20Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%.textile +0 -9
  90. data/templates/default/content/Fixed%20Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -4
  91. data/templates/default/content/Fixed%20Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%.textile +0 -15
  92. data/templates/default/content/Fixed%20Bug%3A%20Search%20box%20width%20does%20not%20match%20colu.textile +0 -3
  93. data/templates/default/content/Fixed%20Bug%3A%20Search%20includes%20leading%20and%20trailing%20s.textile +0 -3
  94. data/templates/default/content/Fixed%20Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -3
  95. data/templates/default/content/Fixed%20Bug%3A%20Symbols%20are%20not%20always%20correctly%20rende.textile +0 -5
  96. data/templates/default/content/Fixed%20Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fba.textile +0 -3
  97. data/templates/default/content/Site%20Index.textile +0 -60
  98. data/templates/default/content/fixed%20bug%3A%20automatic%20link%20links%20to%20stuff%20inside%2.textile +0 -3
  99. data/templates/default/content/sandbox.textile +0 -2
  100. data/templates/default/content/test%20page.textile +0 -1
  101. data/templates/instiki/attachment/header_backdrop.png +0 -0
  102. data/templates/instiki/attachment/instiki_style_sheet.css +0 -199
  103. data/templates/instiki/attachment/logo.tiff +0 -0
  104. data/templates/instiki/attachment/logotext.png +0 -0
  105. data/templates/instiki/attachment/newpage.js +0 -41
  106. data/templates/instiki/attachment/rss.png +0 -0
  107. data/templates/instiki/banned_titles.txt +0 -31
  108. data/templates/instiki/content/All%20News.textile +0 -9
  109. data/templates/instiki/content/Attached%20ruby%20logo.textile +0 -1
  110. data/templates/instiki/content/Attached%20test%20thing.textile +0 -1
  111. data/templates/instiki/content/Author.textile +0 -12
  112. data/templates/instiki/content/Automatic%20Summaries.textile +0 -77
  113. data/templates/instiki/content/Automatic%20linking%20between%20pages.textile +0 -5
  114. data/templates/instiki/content/Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20picture%2.textile +0 -1
  115. data/templates/instiki/content/Bug%3A%20Automatic%20link%20links%20to%20stuff%20inside%20%3Chtml.textile +0 -1
  116. data/templates/instiki/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +0 -1
  117. data/templates/instiki/content/Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20appear.textile +0 -1
  118. data/templates/instiki/content/Bug%3A%20External%20links%20incorrectly%20include%20trailing%20pu.textile +0 -1
  119. data/templates/instiki/content/Bug%3A%20GEM%20limits%20title%20lengths.textile +0 -1
  120. data/templates/instiki/content/Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20link%20is%2.textile +0 -1
  121. data/templates/instiki/content/Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%20new%20.textile +0 -1
  122. data/templates/instiki/content/Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -1
  123. data/templates/instiki/content/Bug%3A%20Page%20titles%20cannot%20have%20html%20tags%20in%20them.textile +0 -1
  124. data/templates/instiki/content/Bug%3A%20Punctuation%20in%20page%20titles%20still%20problematic.textile +0 -7
  125. data/templates/instiki/content/Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%28not%20.textile +0 -1
  126. data/templates/instiki/content/Bug%3A%20Search%20box%20width%20does%20not%20match%20column%20wid.textile +0 -1
  127. data/templates/instiki/content/Bug%3A%20Search%20includes%20leading%20and%20trailing%20spaces.textile +0 -1
  128. data/templates/instiki/content/Bug%3A%20Search%20inluced%20leading%20and%20trailing%20spaces.textile +0 -1
  129. data/templates/instiki/content/Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -1
  130. data/templates/instiki/content/Bug%3A%20Symbols%20are%20not%20always%20correctly%20rendered%20in.textile +0 -1
  131. data/templates/instiki/content/Bug%3A%20Uploads%20are%20not%20password%20protected.textile +0 -3
  132. data/templates/instiki/content/Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fbase64.textile +0 -1
  133. data/templates/instiki/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile +0 -1
  134. data/templates/instiki/content/Fixed%20Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20p.textile +0 -34
  135. data/templates/instiki/content/Fixed%20Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20.textile +0 -3
  136. data/templates/instiki/content/Fixed%20Bug%3A%20External%20links%20incorrectly%20include%20trail.textile +0 -3
  137. data/templates/instiki/content/Fixed%20Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20lin.textile +0 -13
  138. data/templates/instiki/content/Fixed%20Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%.textile +0 -9
  139. data/templates/instiki/content/Fixed%20Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -4
  140. data/templates/instiki/content/Fixed%20Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%.textile +0 -15
  141. data/templates/instiki/content/Fixed%20Bug%3A%20Search%20box%20width%20does%20not%20match%20colu.textile +0 -3
  142. data/templates/instiki/content/Fixed%20Bug%3A%20Search%20includes%20leading%20and%20trailing%20s.textile +0 -3
  143. data/templates/instiki/content/Fixed%20Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -3
  144. data/templates/instiki/content/Fixed%20Bug%3A%20Symbols%20are%20not%20always%20correctly%20rende.textile +0 -5
  145. data/templates/instiki/content/Fixed%20Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fba.textile +0 -3
  146. data/templates/instiki/content/Home%20Page.textile +0 -19
  147. data/templates/instiki/content/How%20to%20administrate%20this%20wiki.textile +0 -62
  148. data/templates/instiki/content/How%20to%20change%20the%20way%20this%20wiki%20looks.textile +0 -30
  149. data/templates/instiki/content/How%20to%20export%20a%20site%20from%20this%20wiki.textile +0 -60
  150. data/templates/instiki/content/How%20to%20hack%20soks.textile +0 -61
  151. data/templates/instiki/content/How%20to%20import%20a%20site%20from%20instiki.textile +0 -13
  152. data/templates/instiki/content/How%20to%20install%20Soks.textile +0 -27
  153. data/templates/instiki/content/How%20to%20report%20a%20bug.textile +0 -8
  154. data/templates/instiki/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +0 -13
  155. data/templates/instiki/content/How%20to%20use%20this%20wiki.textile +0 -27
  156. data/templates/instiki/content/Instructions%20and%20Howtos.textile +0 -18
  157. data/templates/instiki/content/Known%20bugs.textile +0 -15
  158. data/templates/instiki/content/Latest%20News.textile +0 -9
  159. data/templates/instiki/content/List%20of%20changes.textile +0 -67
  160. data/templates/instiki/content/Picture%20of%20Type%20a%20title%20here.textile +0 -1
  161. data/templates/instiki/content/Picture%20of%20a%20logo%20for%20the%20ruby%20language.textile +0 -1
  162. data/templates/instiki/content/Picture%20of%20a%20pair%20of%20soks.textile +0 -1
  163. data/templates/instiki/content/Picture%20of%20powered%20by%20ruby%20logo.textile +0 -1
  164. data/templates/instiki/content/Planned%20Features.textile +0 -19
  165. data/templates/instiki/content/README.textile +0 -63
  166. data/templates/instiki/content/RSS%20feed.textile +0 -7
  167. data/templates/instiki/content/Recent%20Blog%20Entries.textile +0 -5
  168. data/templates/instiki/content/Recent%20Changes%20to%20This%20Site.textile +0 -211
  169. data/templates/instiki/content/Recent%20News.textile +0 -9
  170. data/templates/instiki/content/Ruby.textile +0 -9
  171. data/templates/instiki/content/SOKS%20features.textile +0 -16
  172. data/templates/instiki/content/Site%20Index.textile +0 -60
  173. data/templates/instiki/content/Soks%20Licence.textile +0 -64
  174. data/templates/instiki/content/fixed%20bug%3A%20automatic%20link%20links%20to%20stuff%20inside%2.textile +0 -3
  175. data/templates/instiki/content/let%20me%20know.textile +0 -1
  176. data/templates/instiki/content/sandbox.textile +0 -2
  177. data/templates/instiki/content/tamc2.textile +0 -1
  178. data/templates/instiki/content/test%20page.textile +0 -1
  179. data/templates/instiki/start.rb +0 -112
  180. data/templates/instiki/version.txt +0 -1
  181. data/templates/instiki/views/Page_content.rhtml +0 -1
  182. data/templates/instiki/views/Page_edit.rhtml +0 -8
  183. data/templates/instiki/views/Page_meta.rhtml +0 -34
  184. data/templates/instiki/views/Page_print.rhtml +0 -6
  185. data/templates/instiki/views/Page_revisions.rhtml +0 -17
  186. data/templates/instiki/views/Page_rss.rhtml +0 -55
  187. data/templates/instiki/views/Page_search_results.rhtml +0 -18
  188. data/templates/instiki/views/Page_view.rhtml +0 -2
  189. data/templates/instiki/views/UploadPage_edit.rhtml +0 -16
  190. data/templates/instiki/views/frame.rhtml +0 -90
  191. data/templates/instiki/views/messages.yaml +0 -6
  192. data/templates/rails/attachment/2colheader.css +0 -77
  193. data/templates/rails/attachment/basics.css +0 -98
  194. data/templates/rails/attachment/header_backdrop.png +0 -0
  195. data/templates/rails/attachment/logo.tiff +0 -0
  196. data/templates/rails/attachment/logotext.png +0 -0
  197. data/templates/rails/attachment/newpage.js +0 -41
  198. data/templates/rails/attachment/rss.png +0 -0
  199. data/templates/rails/banned_titles.txt +0 -31
  200. data/templates/rails/content/All%20News.textile +0 -9
  201. data/templates/rails/content/Attached%20ruby%20logo.textile +0 -1
  202. data/templates/rails/content/Attached%20test%20thing.textile +0 -1
  203. data/templates/rails/content/Author.textile +0 -12
  204. data/templates/rails/content/Automatic%20Summaries.textile +0 -77
  205. data/templates/rails/content/Automatic%20linking%20between%20pages.textile +0 -5
  206. data/templates/rails/content/Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20picture%2.textile +0 -1
  207. data/templates/rails/content/Bug%3A%20Automatic%20link%20links%20to%20stuff%20inside%20%3Chtml.textile +0 -1
  208. data/templates/rails/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +0 -1
  209. data/templates/rails/content/Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20appear.textile +0 -1
  210. data/templates/rails/content/Bug%3A%20External%20links%20incorrectly%20include%20trailing%20pu.textile +0 -1
  211. data/templates/rails/content/Bug%3A%20GEM%20limits%20title%20lengths.textile +0 -1
  212. data/templates/rails/content/Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20link%20is%2.textile +0 -1
  213. data/templates/rails/content/Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%20new%20.textile +0 -1
  214. data/templates/rails/content/Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -1
  215. data/templates/rails/content/Bug%3A%20Page%20titles%20cannot%20have%20html%20tags%20in%20them.textile +0 -1
  216. data/templates/rails/content/Bug%3A%20Punctuation%20in%20page%20titles%20still%20problematic.textile +0 -7
  217. data/templates/rails/content/Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%28not%20.textile +0 -1
  218. data/templates/rails/content/Bug%3A%20Search%20box%20width%20does%20not%20match%20column%20wid.textile +0 -1
  219. data/templates/rails/content/Bug%3A%20Search%20includes%20leading%20and%20trailing%20spaces.textile +0 -1
  220. data/templates/rails/content/Bug%3A%20Search%20inluced%20leading%20and%20trailing%20spaces.textile +0 -1
  221. data/templates/rails/content/Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -1
  222. data/templates/rails/content/Bug%3A%20Symbols%20are%20not%20always%20correctly%20rendered%20in.textile +0 -1
  223. data/templates/rails/content/Bug%3A%20Uploads%20are%20not%20password%20protected.textile +0 -3
  224. data/templates/rails/content/Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fbase64.textile +0 -1
  225. data/templates/rails/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile +0 -1
  226. data/templates/rails/content/Fixed%20Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20p.textile +0 -34
  227. data/templates/rails/content/Fixed%20Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20.textile +0 -3
  228. data/templates/rails/content/Fixed%20Bug%3A%20External%20links%20incorrectly%20include%20trail.textile +0 -3
  229. data/templates/rails/content/Fixed%20Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20lin.textile +0 -13
  230. data/templates/rails/content/Fixed%20Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%.textile +0 -9
  231. data/templates/rails/content/Fixed%20Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -4
  232. data/templates/rails/content/Fixed%20Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%.textile +0 -15
  233. data/templates/rails/content/Fixed%20Bug%3A%20Search%20box%20width%20does%20not%20match%20colu.textile +0 -3
  234. data/templates/rails/content/Fixed%20Bug%3A%20Search%20includes%20leading%20and%20trailing%20s.textile +0 -3
  235. data/templates/rails/content/Fixed%20Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -3
  236. data/templates/rails/content/Fixed%20Bug%3A%20Symbols%20are%20not%20always%20correctly%20rende.textile +0 -5
  237. data/templates/rails/content/Fixed%20Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fba.textile +0 -3
  238. data/templates/rails/content/Home%20Page.textile +0 -19
  239. data/templates/rails/content/How%20to%20administrate%20this%20wiki.textile +0 -62
  240. data/templates/rails/content/How%20to%20change%20the%20way%20this%20wiki%20looks.textile +0 -30
  241. data/templates/rails/content/How%20to%20export%20a%20site%20from%20this%20wiki.textile +0 -60
  242. data/templates/rails/content/How%20to%20hack%20soks.textile +0 -61
  243. data/templates/rails/content/How%20to%20import%20a%20site%20from%20instiki.textile +0 -13
  244. data/templates/rails/content/How%20to%20install%20Soks.textile +0 -27
  245. data/templates/rails/content/How%20to%20report%20a%20bug.textile +0 -8
  246. data/templates/rails/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +0 -13
  247. data/templates/rails/content/How%20to%20use%20this%20wiki.textile +0 -27
  248. data/templates/rails/content/Instructions%20and%20Howtos.textile +0 -18
  249. data/templates/rails/content/Known%20bugs.textile +0 -15
  250. data/templates/rails/content/Latest%20News.textile +0 -9
  251. data/templates/rails/content/List%20of%20changes.textile +0 -67
  252. data/templates/rails/content/Picture%20of%20Type%20a%20title%20here.textile +0 -1
  253. data/templates/rails/content/Picture%20of%20a%20logo%20for%20the%20ruby%20language.textile +0 -1
  254. data/templates/rails/content/Picture%20of%20a%20pair%20of%20soks.textile +0 -1
  255. data/templates/rails/content/Picture%20of%20powered%20by%20ruby%20logo.textile +0 -1
  256. data/templates/rails/content/Planned%20Features.textile +0 -19
  257. data/templates/rails/content/README.textile +0 -63
  258. data/templates/rails/content/RSS%20feed.textile +0 -7
  259. data/templates/rails/content/Recent%20Blog%20Entries.textile +0 -5
  260. data/templates/rails/content/Recent%20Changes%20to%20This%20Site.textile +0 -211
  261. data/templates/rails/content/Recent%20News.textile +0 -9
  262. data/templates/rails/content/Ruby.textile +0 -9
  263. data/templates/rails/content/SOKS%20features.textile +0 -16
  264. data/templates/rails/content/Site%20Index.textile +0 -60
  265. data/templates/rails/content/Soks%20Licence.textile +0 -64
  266. data/templates/rails/content/fixed%20bug%3A%20automatic%20link%20links%20to%20stuff%20inside%2.textile +0 -3
  267. data/templates/rails/content/let%20me%20know.textile +0 -1
  268. data/templates/rails/content/sandbox.textile +0 -2
  269. data/templates/rails/content/tamc2.textile +0 -1
  270. data/templates/rails/content/test%20page.textile +0 -1
  271. data/templates/rails/start.rb +0 -113
  272. data/templates/rails/version.txt +0 -1
  273. data/templates/rails/views/Page_content.rhtml +0 -1
  274. data/templates/rails/views/Page_edit.rhtml +0 -61
  275. data/templates/rails/views/Page_meta.rhtml +0 -38
  276. data/templates/rails/views/Page_print.rhtml +0 -6
  277. data/templates/rails/views/Page_revisions.rhtml +0 -19
  278. data/templates/rails/views/Page_rss.rhtml +0 -55
  279. data/templates/rails/views/Page_search_results.rhtml +0 -19
  280. data/templates/rails/views/Page_view.rhtml +0 -3
  281. data/templates/rails/views/UploadPage_edit.rhtml +0 -38
  282. data/templates/rails/views/frame.rhtml +0 -60
  283. data/templates/rails/views/messages.yaml +0 -6
  284. /data/templates/default/attachment/{logo_thumb.bmp → tiny-logo thumb.bmp} +0 -0
data/lib/soks-storage.rb CHANGED
@@ -55,9 +55,17 @@ module WikiFlatFileStore
55
55
  def load_revisions( page )
56
56
  return [] unless File.exists?( filename_for_revisions( page.name ) )
57
57
  revisions = []
58
- File.open( filename_for_revisions( page.name ) ) { |file|
59
- YAML.each_document( file ) { |array| revisions[ array[0] ] = Revision.new( page, *array ) }
60
- }
58
+ begin
59
+ File.open( filename_for_revisions( page.name ) ) { |file|
60
+ YAML.each_document( file ) { |array|
61
+ next unless array.is_a? Array
62
+ next unless array.size == 4
63
+ next unless array[0].is_a? Integer
64
+ revisions[ array[0] ] = Revision.new( page, *array ) }
65
+ }
66
+ rescue
67
+ $stderr.puts "Error loading revisions with #{$!.to_s} in file #{page.name}"
68
+ end
61
69
  revisions.each_with_index { |r,i| $stderr.puts "#{page.name} missing revision #{i}" unless r }
62
70
  revisions
63
71
  end
data/lib/soks-utils.rb CHANGED
@@ -12,12 +12,14 @@ module Notify
12
12
  end
13
13
 
14
14
  def notify( event, *messages)
15
+ raise "Sorry! Shutting down..." if @shutting_down
15
16
  self.event_queue.event( event, messages )
16
17
  end
17
18
 
18
19
  def event_queue
19
20
  @event_queue ||= EventQueue.new
20
21
  end
22
+
21
23
  end
22
24
 
23
25
  class EventQueue
@@ -43,6 +45,10 @@ class EventQueue
43
45
  events.each { |event| attentive_watchers_for(event) << action_block }
44
46
  end
45
47
 
48
+ def empty?
49
+ @queue.empty?
50
+ end
51
+
46
52
  private
47
53
 
48
54
  def check_thread_ok
@@ -103,8 +109,6 @@ class EventQueue
103
109
 
104
110
  end
105
111
 
106
-
107
-
108
112
  class String
109
113
  # Return the left bit of a string e.g. "String".left(2) => "St"
110
114
  def left( length ) self.slice( 0, length ) end
@@ -113,7 +117,7 @@ class String
113
117
  def url_encode
114
118
  self.gsub(/([^a-zA-Z0-9]+)/n) do
115
119
  '%' + $1.unpack('H2' * $1.size).join('%').upcase
116
- end.tr(' ', '+')
120
+ end
117
121
  end
118
122
 
119
123
  # Decode a string url encoded so it can be used in urls (code coppied from CGI)
@@ -188,3 +192,28 @@ class FiniteUniqueList
188
192
  @list = @list.sort_by { |item| item.send( @sort_by ) }
189
193
  end
190
194
  end
195
+
196
+ # Kindly written by Bil Kleb
197
+ class Numeric
198
+ # similar to distance_of_time_in_words as found in
199
+ # actionpack-1.1.0/lib/action_view/helpers/date_helper.rb
200
+ def to_time_units
201
+ seconds = self.round
202
+ case seconds
203
+ when 0: "fraction of a second"
204
+ when 1: "second"
205
+ when 2..45: "#{seconds} seconds"
206
+ when 46..90: "minute"
207
+ when 91..(60*45): "#{(seconds.to_f/60.0).round} minutes"
208
+ when (60*45)..(60*90): "hour"
209
+ when (60*90)..(60*60*22): "#{(seconds.to_f/60.0/60.0).round} hours"
210
+ when (60*60*22)..(60*60*36): "day"
211
+ when (60*60*36)..(60*60*24*26): "#{(seconds.to_f/60.0/60.0/24.0).round} days"
212
+ when (60*60*24*26)..(60*60*24*45): "month"
213
+ when (60*60*24*45)..(60*60*24*30*11): "#{(seconds.to_f/60.0/60.0/24.0/30.0).round} months"
214
+ when (60*60*24*30*11)..(60*60*24*500): "year"
215
+ else "#{(seconds.to_f/60.0/60.0/24.0/365.0).round} years"
216
+ end
217
+ end
218
+ end
219
+
data/lib/soks-view.rb CHANGED
@@ -38,7 +38,6 @@ class Links
38
38
  linksto = Array.new
39
39
  @links.each do | pagefrom, pagesto |
40
40
  next if pagefrom == thispage
41
- next if [ "site index", "recent changes to this site" ].include? pagefrom.name.downcase
42
41
  next if linksto.include? pagefrom
43
42
  linksto << pagefrom if pagesto.include? thispage
44
43
  end
@@ -46,73 +45,48 @@ class Links
46
45
  end
47
46
  end
48
47
 
49
- # This class matches against a text finding the longest matches it can.
50
- # Note that it isn't that sophisticated, and will tend to match
51
- # the first thing it can, rather than skipping a shorter match to enable
52
- # a longer one that starts at a later point in the text
53
- class RollingMatch
54
- WORD_REGEX = /\w*/
55
- SPACE_REGEX = /\W*/
48
+ class BruteMatch
49
+
56
50
  IGNORE_CASE = true
57
-
51
+
58
52
  def initialize
59
- @firstwords, @matches = Hash.new, Hash.new
53
+ @matches = Hash.new
54
+ @titles = Array.new #sorted array for speed
60
55
  end
61
-
56
+
62
57
  def []( title ) @matches[ lower_case(title) ] end
63
58
  alias :object_for :[]
64
59
 
65
60
  def delete( title )
66
61
  @matches.delete( title )
62
+ update_titles
67
63
  end
68
64
 
69
65
  # Use this to add a string to match and an associated object to return
70
66
  # if an object is matched.
71
67
  def []=( title, object )
72
68
  @matches[lower_case(title)] = object
73
- unless lengths_for_first_word_of( title ).include? title.length
74
- (lengths_for_first_word_of( title ) << title.length).sort!
75
- end
69
+ update_titles
76
70
  end
77
-
78
- # This returns the longest match that starts with the first word in the text
79
- def longest_match( text, *dont_match )
80
- lengths_for_first_word_of( text ).reverse_each do |length|
81
- next if length > text.length
82
- if object_for(text.left(length)) && !dont_match.include?( lower_case( text.left(length) ) )
83
- return text.left(length)
84
- end
85
- end
86
- nil
87
- end
88
-
89
- # This iterates through the text returning the longest matches
90
- def rolling_match( text, *dont_match )
91
- text = text.dup
92
- skipped_text = ""
93
- until text.empty?
94
- skipped_text << text.slice!( SPACE_REGEX ) # Skip to the end of the next space
95
- matching_title = longest_match( text, *dont_match )
96
- if matching_title
97
- yield skipped_text, matching_title, object_for( matching_title )
98
- text.slice!( 0, matching_title.length ) # Skip to the end of the matched bit
99
- skipped_text = ""
100
- else
101
- skipped_text << text.slice!( WORD_REGEX ) # Skip to the next word
102
- end
71
+
72
+ def match( text )
73
+ @titles.each do |title|
74
+ regexp = /#{Regexp.escape(title)}/i
75
+ page = @matches[ title ]
76
+ text.gsub!( regexp ) { |match| yield match, page }
103
77
  end
104
- yield skipped_text, nil, nil
78
+ text
105
79
  end
106
-
80
+
107
81
  private
108
-
109
- def lengths_for_first_word_of(title)
110
- @firstwords[ lower_case( title ).slice( WORD_REGEX ) ] ||= Array.new
82
+
83
+ def update_titles
84
+ @titles = @matches.keys.sort_by { |title| title.length }.reverse
111
85
  end
112
-
86
+
113
87
  def lower_case( text )
114
88
  IGNORE_CASE ? text.downcase : text
115
- end
89
+ end
116
90
  end
117
91
 
118
92
  # This adds some extra match types to (a bodged version of) RedCloth
@@ -130,6 +104,7 @@ class WikiRedCloth < RedCloth
130
104
  @wiki, @page = wiki, page
131
105
  @internal_links_from_page = []
132
106
  super(insert_sub_strings( string.dup ), [ :no_span_caps])
107
+ self.hard_breaks = true if $SETTINGS[:redcloth_hard_breaks]
133
108
  end
134
109
 
135
110
  def to_html
@@ -143,7 +118,7 @@ class WikiRedCloth < RedCloth
143
118
  inline_soks_automatic_link text
144
119
  unhide text
145
120
  @wiki.links.set_links_from( @page, @internal_links_from_page )
146
- text
121
+ text
147
122
  end
148
123
 
149
124
  private
@@ -153,7 +128,7 @@ class WikiRedCloth < RedCloth
153
128
  end
154
129
 
155
130
  def hide_html_tags( text )
156
- text.gsub!(/<.*?>/) { |m| hide m }
131
+ text.gsub!(/<.*?>/m) { |m| hide m }
157
132
  end
158
133
 
159
134
  def unhide( text )
@@ -174,13 +149,17 @@ class WikiRedCloth < RedCloth
174
149
 
175
150
  def insert_sub_strings( text, count = 0 )
176
151
  return text if count > 5 # Stops us getting locked into a cycle if people mess up the insert
177
- text.gsub!(/\[\[\s*insert (.+?)\]\]/i) do |m|
178
- inserted_page = @wiki.page( $1.to_s.strip )
179
- if @wiki.exists? inserted_page.name
180
- @internal_links_from_page << inserted_page
181
- inserted_page.is_inserted_into( @page )
182
- end
183
- insert_sub_strings( "#{inserted_page.textile}\n", count + 1 )
152
+ text.gsub!(/\[\[\s*(insert (.+?))\s*\]\]/i) do |m|
153
+ unless @wiki.exists? $1 # So we don't accidentlaly match a page whose name starts 'insert'
154
+ inserted_page = @wiki.page( $2 )
155
+ if @wiki.exists? inserted_page.name
156
+ @internal_links_from_page << inserted_page
157
+ inserted_page.is_inserted_into( @page )
158
+ end
159
+ insert_sub_strings( "#{inserted_page.textile}\n", count + 1 )
160
+ else
161
+ m
162
+ end
184
163
  end
185
164
  text
186
165
  end
@@ -205,13 +184,8 @@ class WikiRedCloth < RedCloth
205
184
  end
206
185
  end
207
186
 
208
- def inline_soks_automatic_link( text )
209
- linkedtext = ""
210
- @wiki.rollingmatch.rolling_match( text, @page.name.downcase ) do |skip, title, page|
211
- linkedtext << skip
212
- linkedtext << wiki_link( page.name, title, 'automatic' ) if title
213
- end
214
- text.replace( linkedtext )
187
+ def inline_soks_automatic_link( text )
188
+ @wiki.rollingmatch.match( text ) { |title, page| wiki_link( page.name, title, 'automatic' ) }
215
189
  end
216
190
 
217
191
  def wiki_link( pagename, title, css_class = nil )
@@ -241,7 +215,7 @@ class View
241
215
 
242
216
  def initialize( wiki, name )
243
217
  @wikiname = name
244
- @rollingmatch, @links, @redcloth_cache, @erb_cache = RollingMatch.new, Links.new, Hash.new, Hash.new
218
+ @rollingmatch, @links, @redcloth_cache, @erb_cache = BruteMatch.new, Links.new, Hash.new, Hash.new
245
219
  @wiki = wiki
246
220
  wiki.watch_attentively_for( :page_revised ) { |event,page,revision| refresh_redcloth( page ) }
247
221
  end
@@ -275,8 +249,7 @@ class View
275
249
  @wiki.revise( newpagename, content, person )
276
250
  else
277
251
  @wiki.revise( newpagename, content, person )
278
- end
279
-
252
+ end
280
253
  end
281
254
 
282
255
  def move( oldpagename, person, newpagename )
@@ -297,8 +270,8 @@ class View
297
270
 
298
271
  def refresh_redcloth( page )
299
272
  $stderr.puts "Refreshing #{page}"
300
- clear_redcloth_cache( page )
301
- redcloth( page )
273
+ @redcloth_cache[page] = "" if page.textile.strip == ""
274
+ @redcloth_cache[ page ] = WikiRedCloth.new( self, page, page.textile ).to_html
302
275
  end
303
276
 
304
277
  def redcloth( page )
@@ -311,7 +284,7 @@ class View
311
284
  end
312
285
 
313
286
  def html( klass, view, _binding )
314
- #@erb_cache.clear
287
+ @erb_cache.clear if $SETTINGS[:reload_erb_each_request]
315
288
  ( @erb_cache[ path_for( klass, view ) ] ||= ERB.new( IO.readlines( erb_filename( klass, view ) ).join ) ).result( _binding )
316
289
  end
317
290
 
@@ -334,6 +307,7 @@ class View
334
307
  end
335
308
 
336
309
  def frame_erb
310
+ @frame_erb = nil if $SETTINGS[:reload_erb_each_request]
337
311
  @frame_erb ||= load_frame_erb
338
312
  end
339
313
 
@@ -345,6 +319,11 @@ class View
345
319
  end
346
320
  end
347
321
 
322
+ # CGI and FCGI can't access this global directly, so call through here
323
+ def settings
324
+ $SETTINGS
325
+ end
326
+
348
327
  def method_missing( method, *args, &block )
349
328
  @wiki.send( method, *args, &block )
350
329
  end
data/lib/soks.rb CHANGED
@@ -22,15 +22,18 @@ Socket.do_not_reverse_lookup = true
22
22
 
23
23
  # These are the default settings. Can be overriden in the call to soks-servlet.rb#start_wiki
24
24
  $SETTINGS = {
25
- :name => 'test',
25
+ :name => 'A Soks Wiki',
26
26
  :description => 'A Soks Wiki',
27
27
  :root_directory => 'soks-wiki',
28
28
  :check_files_every => 60, # Seconds
29
29
  :url => 'http://localhost:8000',
30
30
  :port => 8000,
31
+ :home_page => 'Home Page',
31
32
  :dont_frame_templates => ['print','rss'],
32
- :strict_html_removal => true, # True to prevent users from adding html.
33
- :authenticators => [ [ %r{/(view|rss|print|find|meta)/.*}, WEBrick::HTTPAuth::NoAuthenticationRequired.new ],
33
+ :force_no_cache => false, # Adds headers to restrict the cacheing of pages
34
+ :redcloth_hard_breaks => false, # Set Redcloth to use hard breaks
35
+ :server_type => WEBrick::SimpleServer, # Could be WEBrick::Daemon if you wish to fork
36
+ :authenticators => [ [ %r{/(view|rss|print|find|meta|attachment)/.*}, WEBrick::HTTPAuth::NoAuthenticationRequired.new ],
34
37
  # [ %r{/upload/.*}, WEBrick::HTTPAuth::NotPermitted.new ],
35
38
  # [ %r{/(edit|save)/home page}, WEBrick::HTTPAuth::SiteWidePassword.new('password','You need to enter the site wide password to edit the home page') ],
36
39
  # [ %r{/(view|edit|save)/private.*},WEBrick::HTTPAuth::BasicAuth.new( :UserDB => htpasswd, :Realm => realm ) ], # See webrick documentation
@@ -38,4 +38,13 @@ function hotkey( event )
38
38
  }
39
39
  }
40
40
  }
41
+ }
42
+
43
+ function validateTitle( proposed_title )
44
+ {
45
+ var illegalcharacters = /[\\\[\]\?<>&\^]/;
46
+ if (illegalcharacters.test( proposed_title ) == true )
47
+ {
48
+ alert( 'Unfortunately the characters \ [ ] ? < > & ^ in titles cause problems with Soks. Please try not to use them');
49
+ }
41
50
  }
@@ -0,0 +1,86 @@
1
+ <public:component lightWeight="true">
2
+ <public:attach event="onpropertychange" onevent="propertyChanged()" />
3
+ <public:attach event="onbeforeprint" onevent="beforePrint()" for="window"/>
4
+ <public:attach event="onafterprint" onevent="afterPrint()" for="window"/>
5
+ <script>
6
+
7
+ /*
8
+ * PNG Behavior
9
+ *
10
+ * This script was created by Erik Arvidsson (http://webfx.eae.net/contact.html#erik)
11
+ * for WebFX (http://webfx.eae.net)
12
+ * Copyright 2002-2004
13
+ *
14
+ * For usage see license at http://webfx.eae.net/license.html
15
+ *
16
+ * Version: 1.02
17
+ * Created: 2001-??-?? First working version
18
+ * Updated: 2002-03-28 Fixed issue when starting with a non png image and
19
+ * switching between non png images
20
+ * 2003-01-06 Fixed RegExp to correctly work with IE 5.0x
21
+ * 2004-05-09 When printing revert to original
22
+ *
23
+ */
24
+
25
+ var supported = /MSIE ((5\.5)|[6789])/.test(navigator.userAgent) &&
26
+ navigator.platform == "Win32";
27
+
28
+ var realSrc;
29
+ var blankSrc = "blank.gif";
30
+ var isPrinting = false;
31
+
32
+ if (supported) fixImage();
33
+
34
+ function propertyChanged() {
35
+ if (!supported || isPrinting) return;
36
+
37
+ var pName = event.propertyName;
38
+ if (pName != "src") return;
39
+ // if not set to blank
40
+ if (!new RegExp(blankSrc).test(src))
41
+ fixImage();
42
+ };
43
+
44
+ function fixImage() {
45
+ // get src
46
+ var src = element.src;
47
+
48
+ // check for real change
49
+ if (src == realSrc && /\.png$/i.test(src)) {
50
+ element.src = blankSrc;
51
+ return;
52
+ }
53
+
54
+ if ( ! new RegExp(blankSrc).test(src)) {
55
+ // backup old src
56
+ realSrc = src;
57
+ }
58
+
59
+ // test for png
60
+ if (/\.png$/i.test(realSrc)) {
61
+ // set blank image
62
+ element.src = blankSrc;
63
+ // set filter
64
+ element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft." +
65
+ "AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
66
+ }
67
+ else {
68
+ // remove filter
69
+ element.runtimeStyle.filter = "";
70
+ }
71
+ }
72
+
73
+ function beforePrint() {
74
+ isPrinting = true;
75
+ element.src = realSrc;
76
+ element.runtimeStyle.filter = "";
77
+ realSrc = null;
78
+ }
79
+
80
+ function afterPrint() {
81
+ isPrinting = false;
82
+ fixImage();
83
+ }
84
+
85
+ </script>
86
+ </public:component>
@@ -2,4 +2,5 @@ User-agent: *
2
2
  Disallow: /edit/
3
3
  Disallow: /find/
4
4
  Disallow: /rss/
5
- Disallow: /print/
5
+ Disallow: /print/
6
+ Disallow: /meta/
@@ -1,55 +1,106 @@
1
- /* Based, with permission, on bluerobot.com */
2
-
3
- body { margin:0px; padding:0px;
4
- font-size:smaller; font-family:verdana, arial, helvetica, sans-serif; color:#333; background-color:white; }
5
-
6
- h1 { color:#E00000; }
7
-
8
- a { color:#09c; text-decoration:none; }
9
-
10
- a:link {color:#09c;}a:visited {color:#07a;}
1
+ body { margin:0px;
2
+ padding:0px;
3
+ font-size:small;
4
+ color:#333;
5
+ font-family: arial, sans-serif;
6
+ background-color:white;
7
+ }
8
+
9
+ h1, h1 a, h1 a:visited { color:#008000; }
10
+ h2, h2 a, h2 a:visited { color:#008000; }
11
+
12
+ a {
13
+ color:#888;
14
+ text-decoration:none;
15
+ }
16
+
17
+ a:visited {color:#888;}
11
18
 
12
- a:hover {background-color:#eee;}
19
+ a:hover {
20
+ text-decoration:underline;
21
+ color: #000;
22
+ }
13
23
 
14
24
  a.missing {
15
25
  color:#E00000;
16
26
  }
17
27
 
18
- #content { margin:0px 210px 50px 10px; padding:10px; }
19
-
20
- #menu { position:absolute; top:12px; right:10px; width:162px; padding:10px; background-color:#E00000; border:1px solid #000000;/* Again, the ugly brilliant hack. */ voice-family: "\"}\""; voice-family:inherit; width:150px; }/* Again, "be nice to Opera 5". */body>#menu {width:150px;}
21
-
22
28
  td {
23
29
  font-size:smaller;
30
+ }
31
+
32
+ img {
33
+ border-style: none;
34
+ max-width: 300px;
24
35
  }
25
36
 
26
- #menu a {
27
- display: block;
28
- color:#000000;
29
- border-top: solid 1px #F00000;
37
+ #content {
38
+ margin:0px 210px 50px 10px;
39
+ padding:10px;
40
+ }
41
+
42
+ /* Based, with permission, on bluerobot.com */
43
+ #menu {
44
+ position:absolute;
45
+ top:40px;
46
+ right:10px;
47
+ width:162px;
48
+ text-align: center;
49
+ background-color:#E00000;
50
+ border:1px solid #000000;
51
+ /* Again, the ugly brilliant hack. */ voice-family: "\"}\""; voice-family:inherit; width:152px; }/* Again, "be nice to Opera 5". */body>#menu {width:152px;}
52
+
53
+ #menu input.search {
54
+ width:149px;
30
55
  }
31
56
 
32
- #menu input.search {
33
- width:149px;
34
- padding:0px;
35
- margin:0px;
36
- display: block;
37
- }
57
+ #menu h1 {
58
+ font-size: smaller;
59
+ background-color: #900000;
60
+ color: white;
61
+ padding: 5px;
62
+ margin: 0px;
63
+ font-weight: bold;
64
+ }
38
65
 
39
- .pagename {
40
- font-size: xx-small;
66
+ #menu h2 {
67
+ font-size: smaller;
68
+ background-color: #900000;
69
+ color: white;
70
+ padding: 5px;
71
+ margin: 12px 0px 0px 0px;
72
+ font-weight: bold;
73
+ }
74
+
75
+ #menu h2 a, #menu h2 a:visited {
76
+ color: white;
77
+ }
78
+
79
+ .linklist {
80
+ }
81
+
82
+ .linklist a, .linklist a:visited {
83
+ margin: 0px;
84
+ padding: 3px 5px;
85
+ color: black;
41
86
  display: block;
42
87
  }
43
88
 
44
- img {
45
- border-style: none;
46
- max-width: 600px;
89
+ .linklist a:hover {
90
+ background-color:#F4E600;
91
+ text-decoration: none;
47
92
  }
48
93
 
49
- .disclaimer {
94
+ .pagename {
50
95
  font-size: xx-small;
51
96
  display: block;
52
97
  }
98
+
99
+ .command {
100
+ border-top: 1px solid #333;
101
+ padding-top: 5px;
102
+ margin-top: 20px;
103
+ }
53
104
 
54
105
  .subpage {
55
106
  padding: 10px;
@@ -62,11 +113,12 @@ p.more {
62
113
  font-size: xx-small;
63
114
  text-align: right;
64
115
  padding: 0px;
65
- font-color: #grey;
66
- color: gray;
116
+ font-color: #grey;
117
+ color: gray;
67
118
  }
68
119
 
69
- .subpage h1 {
120
+ .subpage h1 {
121
+ color:#008000;
70
122
  }
71
123
 
72
124
  .calendar td {
@@ -76,7 +128,8 @@ p.more {
76
128
 
77
129
  .upcomingevents {
78
130
  padding: 0px 10px 0px 10px;
79
- margin: 0px; border: solid 1px #AAAAAA;
131
+ margin: 0px;
132
+ border: solid 1px #AAAAAA;
80
133
  }
81
134
 
82
135
  a.pageview {
@@ -87,12 +140,66 @@ pre.change {
87
140
  margin: 0px;
88
141
  padding: 0px;
89
142
  }
143
+
144
+ .change {
145
+ margin-top: 20px;
146
+ border-top: solid 1px #AAAAAA;
147
+ }
148
+
149
+ #fileedittitle input {
150
+ width: 85%;
151
+ }
152
+
153
+ #edittitle input {
154
+ width: 95%;
155
+ }
156
+
157
+ #editcontent textarea {
158
+ width: 100%;
159
+ height: 75%;
160
+ }
161
+
162
+ #tips h1 {
163
+ padding-left: 5px;
164
+ margin-top: 0px;
165
+ }
90
166
 
91
- ul.tips {
92
- list-style-type: none;
167
+ #tips li, #tips ul {
168
+ list-style-type: none;
169
+ padding-left: 5px;
93
170
  }
94
171
 
95
172
  .metacolumn {
96
173
  display: inline;
97
174
  font-size: smaller;
98
175
  }
176
+
177
+ form.editpage {
178
+ display: inline;
179
+ }
180
+
181
+ div.undochange {
182
+ border-top: solid 1px #AAAAAA;
183
+ margin-top: 10px;
184
+ }
185
+
186
+ .undochange li {
187
+ list-style-type: none;
188
+ padding-left: 0px;
189
+ }
190
+
191
+ .undochange input {
192
+ margin-left: 40px;
193
+ margin-top: 0px;
194
+ margin-bottom: 10px;
195
+ }
196
+
197
+ .undochange p {
198
+ font-weight: bold;
199
+ margin-top: 5px;
200
+ }
201
+
202
+ .help {
203
+ color: red;
204
+ text-align: center;
205
+ }