Soks 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
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
+ }