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.
- data/README.txt +14 -4
- data/bin/soks-create-wiki.rb +2 -2
- data/contrib/redcloth-3.0.3.rb +0 -1
- data/lib/helpers/default-helpers.rb +13 -12
- data/lib/helpers/mail2wiki-helper.rb +12 -7
- data/lib/helpers/mail2wiki-test.rb +15 -0
- data/lib/helpers/wiki2html.rb +60 -0
- data/lib/soks-drb.rb +20 -0
- data/lib/soks-fcgi.rb +127 -0
- data/lib/soks-model.rb +11 -3
- data/lib/soks-servlet.rb +68 -45
- data/lib/soks-storage.rb +11 -3
- data/lib/soks-utils.rb +32 -3
- data/lib/soks-view.rb +48 -69
- data/lib/soks.rb +6 -3
- data/templates/default/attachment/blank.gif +0 -0
- data/templates/default/attachment/logo.jpg +0 -0
- data/templates/default/attachment/newpage.js +9 -0
- data/templates/default/attachment/pngbehavior.htc +86 -0
- data/templates/default/attachment/robots.txt +2 -1
- data/templates/default/attachment/stylesheet.css +144 -37
- data/templates/default/banned_titles.txt +36 -0
- data/templates/default/content/Api%20for%20classes%20to%20modify%20the%20wiki.textile +24 -0
- data/templates/default/content/Author.textile +3 -3
- data/templates/default/content/Automatic%20Summaries.textile +14 -14
- data/templates/default/content/Automatic%20linking%20between%20pages.textile +2 -0
- data/templates/default/content/Bug%3A%20RSS%20feed%20does%20not%20validate.textile +10 -0
- data/templates/default/content/Bug%3A%20Textile%20mishandles%20paragraphs.textile +33 -0
- data/templates/default/content/Bug%3A%20Unanticipated%20Rollbacks.textile +21 -0
- data/templates/default/content/Home%20Page.textile +3 -2
- data/templates/default/content/How%20to%20administrate%20this%20wiki.textile +4 -19
- data/templates/default/content/How%20to%20get%20the%20latest%20Soks%20from%20cvs.textile +21 -0
- data/templates/default/content/How%20to%20import%20data%20to%20this%20wiki.textile +45 -0
- data/templates/default/content/How%20to%20install%20Soks.textile +12 -8
- data/templates/default/content/How%20to%20password%20protect%20your%20wiki.textile +43 -0
- data/templates/default/content/How%20to%20report%20a%20bug.textile +1 -1
- data/templates/default/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +2 -0
- data/templates/default/content/How%20to%20use%20this%20wiki.textile +1 -0
- data/templates/default/content/Instructions%20and%20Howtos.textile +4 -1
- data/templates/default/content/Known%20bugs.textile +5 -2
- data/templates/default/content/List%20of%20changes.textile +49 -0
- data/templates/default/content/New%20Recent%20Changes%20class.textile +58 -0
- data/templates/default/content/New%20page%20templates%20or%20categories%20code.textile +68 -0
- data/templates/default/content/Per%20Wiki%20Templates.textile +35 -0
- data/templates/default/content/Planned%20Features.textile +29 -8
- data/templates/default/content/README.textile +14 -4
- data/templates/default/content/RSS%20feed.textile +2 -0
- data/templates/default/content/Recent%20Changes%20to%20This%20Site.textile +200 -202
- data/templates/default/content/SOKS%20features.textile +2 -1
- data/templates/default/content/Sidebar%20Page.textile +3 -0
- data/templates/default/content/Type%20a%20title%20here.textile +1 -0
- data/templates/default/content/bug%3A%20competing%20edits.textile +13 -0
- data/templates/default/content/ctrl%2Dn.textile +1 -0
- data/templates/default/content/tamc.textile +1 -0
- data/templates/default/start.rb +38 -15
- data/templates/default/version.txt +1 -1
- data/templates/default/views/Page_edit.rhtml +71 -57
- data/templates/default/views/Page_meta.rhtml +6 -2
- data/templates/default/views/Page_revisions.rhtml +17 -9
- data/templates/default/views/Page_rss.rhtml +3 -1
- data/templates/default/views/Page_search_results.rhtml +11 -1
- data/templates/default/views/Page_view.rhtml +6 -2
- data/templates/default/views/UploadPage_edit.rhtml +58 -33
- data/templates/default/views/frame.rhtml +46 -27
- data/test/test_soks-utils.rb +37 -0
- metadata +27 -229
- data/templates/default/content/Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20picture%2.textile +0 -1
- data/templates/default/content/Bug%3A%20Automatic%20link%20links%20to%20stuff%20inside%20%3Chtml.textile +0 -1
- data/templates/default/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +0 -1
- data/templates/default/content/Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20appear.textile +0 -1
- data/templates/default/content/Bug%3A%20External%20links%20incorrectly%20include%20trailing%20pu.textile +0 -1
- data/templates/default/content/Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20link%20is%2.textile +0 -1
- data/templates/default/content/Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%20new%20.textile +0 -1
- data/templates/default/content/Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -1
- data/templates/default/content/Bug%3A%20Page%20titles%20cannot%20have%20html%20tags%20in%20them.textile +0 -1
- data/templates/default/content/Bug%3A%20Punctuation%20in%20page%20titles%20still%20problematic.textile +0 -7
- data/templates/default/content/Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%28not%20.textile +0 -1
- data/templates/default/content/Bug%3A%20Search%20box%20width%20does%20not%20match%20column%20wid.textile +0 -1
- data/templates/default/content/Bug%3A%20Search%20includes%20leading%20and%20trailing%20spaces.textile +0 -1
- data/templates/default/content/Bug%3A%20Search%20inluced%20leading%20and%20trailing%20spaces.textile +0 -1
- data/templates/default/content/Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -1
- data/templates/default/content/Bug%3A%20Symbols%20are%20not%20always%20correctly%20rendered%20in.textile +0 -1
- data/templates/default/content/Bug%3A%20Uploads%20are%20not%20password%20protected.textile +0 -3
- data/templates/default/content/Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fbase64.textile +0 -1
- data/templates/default/content/Fixed%20Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20p.textile +0 -34
- data/templates/default/content/Fixed%20Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20.textile +0 -3
- data/templates/default/content/Fixed%20Bug%3A%20External%20links%20incorrectly%20include%20trail.textile +0 -3
- data/templates/default/content/Fixed%20Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20lin.textile +0 -13
- data/templates/default/content/Fixed%20Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%.textile +0 -9
- data/templates/default/content/Fixed%20Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -4
- data/templates/default/content/Fixed%20Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%.textile +0 -15
- data/templates/default/content/Fixed%20Bug%3A%20Search%20box%20width%20does%20not%20match%20colu.textile +0 -3
- data/templates/default/content/Fixed%20Bug%3A%20Search%20includes%20leading%20and%20trailing%20s.textile +0 -3
- data/templates/default/content/Fixed%20Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -3
- data/templates/default/content/Fixed%20Bug%3A%20Symbols%20are%20not%20always%20correctly%20rende.textile +0 -5
- data/templates/default/content/Fixed%20Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fba.textile +0 -3
- data/templates/default/content/Site%20Index.textile +0 -60
- data/templates/default/content/fixed%20bug%3A%20automatic%20link%20links%20to%20stuff%20inside%2.textile +0 -3
- data/templates/default/content/sandbox.textile +0 -2
- data/templates/default/content/test%20page.textile +0 -1
- data/templates/instiki/attachment/header_backdrop.png +0 -0
- data/templates/instiki/attachment/instiki_style_sheet.css +0 -199
- data/templates/instiki/attachment/logo.tiff +0 -0
- data/templates/instiki/attachment/logotext.png +0 -0
- data/templates/instiki/attachment/newpage.js +0 -41
- data/templates/instiki/attachment/rss.png +0 -0
- data/templates/instiki/banned_titles.txt +0 -31
- data/templates/instiki/content/All%20News.textile +0 -9
- data/templates/instiki/content/Attached%20ruby%20logo.textile +0 -1
- data/templates/instiki/content/Attached%20test%20thing.textile +0 -1
- data/templates/instiki/content/Author.textile +0 -12
- data/templates/instiki/content/Automatic%20Summaries.textile +0 -77
- data/templates/instiki/content/Automatic%20linking%20between%20pages.textile +0 -5
- data/templates/instiki/content/Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20picture%2.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Automatic%20link%20links%20to%20stuff%20inside%20%3Chtml.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20appear.textile +0 -1
- data/templates/instiki/content/Bug%3A%20External%20links%20incorrectly%20include%20trailing%20pu.textile +0 -1
- data/templates/instiki/content/Bug%3A%20GEM%20limits%20title%20lengths.textile +0 -1
- data/templates/instiki/content/Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20link%20is%2.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%20new%20.textile +0 -1
- data/templates/instiki/content/Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Page%20titles%20cannot%20have%20html%20tags%20in%20them.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Punctuation%20in%20page%20titles%20still%20problematic.textile +0 -7
- data/templates/instiki/content/Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%28not%20.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Search%20box%20width%20does%20not%20match%20column%20wid.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Search%20includes%20leading%20and%20trailing%20spaces.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Search%20inluced%20leading%20and%20trailing%20spaces.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Symbols%20are%20not%20always%20correctly%20rendered%20in.textile +0 -1
- data/templates/instiki/content/Bug%3A%20Uploads%20are%20not%20password%20protected.textile +0 -3
- data/templates/instiki/content/Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fbase64.textile +0 -1
- data/templates/instiki/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile +0 -1
- data/templates/instiki/content/Fixed%20Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20p.textile +0 -34
- data/templates/instiki/content/Fixed%20Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20.textile +0 -3
- data/templates/instiki/content/Fixed%20Bug%3A%20External%20links%20incorrectly%20include%20trail.textile +0 -3
- data/templates/instiki/content/Fixed%20Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20lin.textile +0 -13
- data/templates/instiki/content/Fixed%20Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%.textile +0 -9
- data/templates/instiki/content/Fixed%20Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -4
- data/templates/instiki/content/Fixed%20Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%.textile +0 -15
- data/templates/instiki/content/Fixed%20Bug%3A%20Search%20box%20width%20does%20not%20match%20colu.textile +0 -3
- data/templates/instiki/content/Fixed%20Bug%3A%20Search%20includes%20leading%20and%20trailing%20s.textile +0 -3
- data/templates/instiki/content/Fixed%20Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -3
- data/templates/instiki/content/Fixed%20Bug%3A%20Symbols%20are%20not%20always%20correctly%20rende.textile +0 -5
- data/templates/instiki/content/Fixed%20Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fba.textile +0 -3
- data/templates/instiki/content/Home%20Page.textile +0 -19
- data/templates/instiki/content/How%20to%20administrate%20this%20wiki.textile +0 -62
- data/templates/instiki/content/How%20to%20change%20the%20way%20this%20wiki%20looks.textile +0 -30
- data/templates/instiki/content/How%20to%20export%20a%20site%20from%20this%20wiki.textile +0 -60
- data/templates/instiki/content/How%20to%20hack%20soks.textile +0 -61
- data/templates/instiki/content/How%20to%20import%20a%20site%20from%20instiki.textile +0 -13
- data/templates/instiki/content/How%20to%20install%20Soks.textile +0 -27
- data/templates/instiki/content/How%20to%20report%20a%20bug.textile +0 -8
- data/templates/instiki/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +0 -13
- data/templates/instiki/content/How%20to%20use%20this%20wiki.textile +0 -27
- data/templates/instiki/content/Instructions%20and%20Howtos.textile +0 -18
- data/templates/instiki/content/Known%20bugs.textile +0 -15
- data/templates/instiki/content/Latest%20News.textile +0 -9
- data/templates/instiki/content/List%20of%20changes.textile +0 -67
- data/templates/instiki/content/Picture%20of%20Type%20a%20title%20here.textile +0 -1
- data/templates/instiki/content/Picture%20of%20a%20logo%20for%20the%20ruby%20language.textile +0 -1
- data/templates/instiki/content/Picture%20of%20a%20pair%20of%20soks.textile +0 -1
- data/templates/instiki/content/Picture%20of%20powered%20by%20ruby%20logo.textile +0 -1
- data/templates/instiki/content/Planned%20Features.textile +0 -19
- data/templates/instiki/content/README.textile +0 -63
- data/templates/instiki/content/RSS%20feed.textile +0 -7
- data/templates/instiki/content/Recent%20Blog%20Entries.textile +0 -5
- data/templates/instiki/content/Recent%20Changes%20to%20This%20Site.textile +0 -211
- data/templates/instiki/content/Recent%20News.textile +0 -9
- data/templates/instiki/content/Ruby.textile +0 -9
- data/templates/instiki/content/SOKS%20features.textile +0 -16
- data/templates/instiki/content/Site%20Index.textile +0 -60
- data/templates/instiki/content/Soks%20Licence.textile +0 -64
- data/templates/instiki/content/fixed%20bug%3A%20automatic%20link%20links%20to%20stuff%20inside%2.textile +0 -3
- data/templates/instiki/content/let%20me%20know.textile +0 -1
- data/templates/instiki/content/sandbox.textile +0 -2
- data/templates/instiki/content/tamc2.textile +0 -1
- data/templates/instiki/content/test%20page.textile +0 -1
- data/templates/instiki/start.rb +0 -112
- data/templates/instiki/version.txt +0 -1
- data/templates/instiki/views/Page_content.rhtml +0 -1
- data/templates/instiki/views/Page_edit.rhtml +0 -8
- data/templates/instiki/views/Page_meta.rhtml +0 -34
- data/templates/instiki/views/Page_print.rhtml +0 -6
- data/templates/instiki/views/Page_revisions.rhtml +0 -17
- data/templates/instiki/views/Page_rss.rhtml +0 -55
- data/templates/instiki/views/Page_search_results.rhtml +0 -18
- data/templates/instiki/views/Page_view.rhtml +0 -2
- data/templates/instiki/views/UploadPage_edit.rhtml +0 -16
- data/templates/instiki/views/frame.rhtml +0 -90
- data/templates/instiki/views/messages.yaml +0 -6
- data/templates/rails/attachment/2colheader.css +0 -77
- data/templates/rails/attachment/basics.css +0 -98
- data/templates/rails/attachment/header_backdrop.png +0 -0
- data/templates/rails/attachment/logo.tiff +0 -0
- data/templates/rails/attachment/logotext.png +0 -0
- data/templates/rails/attachment/newpage.js +0 -41
- data/templates/rails/attachment/rss.png +0 -0
- data/templates/rails/banned_titles.txt +0 -31
- data/templates/rails/content/All%20News.textile +0 -9
- data/templates/rails/content/Attached%20ruby%20logo.textile +0 -1
- data/templates/rails/content/Attached%20test%20thing.textile +0 -1
- data/templates/rails/content/Author.textile +0 -12
- data/templates/rails/content/Automatic%20Summaries.textile +0 -77
- data/templates/rails/content/Automatic%20linking%20between%20pages.textile +0 -5
- data/templates/rails/content/Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20picture%2.textile +0 -1
- data/templates/rails/content/Bug%3A%20Automatic%20link%20links%20to%20stuff%20inside%20%3Chtml.textile +0 -1
- data/templates/rails/content/Bug%3A%20Does%20not%20make%20use%20of%20if%2Dmodified%2Dsince%20r.textile +0 -1
- data/templates/rails/content/Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20appear.textile +0 -1
- data/templates/rails/content/Bug%3A%20External%20links%20incorrectly%20include%20trailing%20pu.textile +0 -1
- data/templates/rails/content/Bug%3A%20GEM%20limits%20title%20lengths.textile +0 -1
- data/templates/rails/content/Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20link%20is%2.textile +0 -1
- data/templates/rails/content/Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%20new%20.textile +0 -1
- data/templates/rails/content/Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -1
- data/templates/rails/content/Bug%3A%20Page%20titles%20cannot%20have%20html%20tags%20in%20them.textile +0 -1
- data/templates/rails/content/Bug%3A%20Punctuation%20in%20page%20titles%20still%20problematic.textile +0 -7
- data/templates/rails/content/Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%28not%20.textile +0 -1
- data/templates/rails/content/Bug%3A%20Search%20box%20width%20does%20not%20match%20column%20wid.textile +0 -1
- data/templates/rails/content/Bug%3A%20Search%20includes%20leading%20and%20trailing%20spaces.textile +0 -1
- data/templates/rails/content/Bug%3A%20Search%20inluced%20leading%20and%20trailing%20spaces.textile +0 -1
- data/templates/rails/content/Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -1
- data/templates/rails/content/Bug%3A%20Symbols%20are%20not%20always%20correctly%20rendered%20in.textile +0 -1
- data/templates/rails/content/Bug%3A%20Uploads%20are%20not%20password%20protected.textile +0 -3
- data/templates/rails/content/Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fbase64.textile +0 -1
- data/templates/rails/content/Bug%3A%20notextile%20does%20not%20prevent%20page%20inserts.textile +0 -1
- data/templates/rails/content/Fixed%20Bug%3A%20%5BFATAL%5D%20When%20renaming%20upload%20%2F%20p.textile +0 -34
- data/templates/rails/content/Fixed%20Bug%3A%20Duplicate%20links%2Dto%20a%20page%20sometimes%20.textile +0 -3
- data/templates/rails/content/Fixed%20Bug%3A%20External%20links%20incorrectly%20include%20trail.textile +0 -3
- data/templates/rails/content/Fixed%20Bug%3A%20In%20a%20list%20of%20links%2C%20the%20last%20lin.textile +0 -13
- data/templates/rails/content/Fixed%20Bug%3A%20Inserted%20pages%20are%20not%20refreshed%20when%.textile +0 -9
- data/templates/rails/content/Fixed%20Bug%3A%20No%20robots%2Etxt%20or%20favicon%2Eico.textile +0 -4
- data/templates/rails/content/Fixed%20Bug%3A%20RSS%20feed%20shows%20oldest%2015%20revisions%20%.textile +0 -15
- data/templates/rails/content/Fixed%20Bug%3A%20Search%20box%20width%20does%20not%20match%20colu.textile +0 -3
- data/templates/rails/content/Fixed%20Bug%3A%20Search%20includes%20leading%20and%20trailing%20s.textile +0 -3
- data/templates/rails/content/Fixed%20Bug%3A%20Site%20Index%20updates%20on%20every%20revision.textile +0 -3
- data/templates/rails/content/Fixed%20Bug%3A%20Symbols%20are%20not%20always%20correctly%20rende.textile +0 -5
- data/templates/rails/content/Fixed%20Bug%3A%20no%20superclass%20method%20%60%5Fdeprecated%5Fba.textile +0 -3
- data/templates/rails/content/Home%20Page.textile +0 -19
- data/templates/rails/content/How%20to%20administrate%20this%20wiki.textile +0 -62
- data/templates/rails/content/How%20to%20change%20the%20way%20this%20wiki%20looks.textile +0 -30
- data/templates/rails/content/How%20to%20export%20a%20site%20from%20this%20wiki.textile +0 -60
- data/templates/rails/content/How%20to%20hack%20soks.textile +0 -61
- data/templates/rails/content/How%20to%20import%20a%20site%20from%20instiki.textile +0 -13
- data/templates/rails/content/How%20to%20install%20Soks.textile +0 -27
- data/templates/rails/content/How%20to%20report%20a%20bug.textile +0 -8
- data/templates/rails/content/How%20to%20use%20the%20keyboard%20shortcuts.textile +0 -13
- data/templates/rails/content/How%20to%20use%20this%20wiki.textile +0 -27
- data/templates/rails/content/Instructions%20and%20Howtos.textile +0 -18
- data/templates/rails/content/Known%20bugs.textile +0 -15
- data/templates/rails/content/Latest%20News.textile +0 -9
- data/templates/rails/content/List%20of%20changes.textile +0 -67
- data/templates/rails/content/Picture%20of%20Type%20a%20title%20here.textile +0 -1
- data/templates/rails/content/Picture%20of%20a%20logo%20for%20the%20ruby%20language.textile +0 -1
- data/templates/rails/content/Picture%20of%20a%20pair%20of%20soks.textile +0 -1
- data/templates/rails/content/Picture%20of%20powered%20by%20ruby%20logo.textile +0 -1
- data/templates/rails/content/Planned%20Features.textile +0 -19
- data/templates/rails/content/README.textile +0 -63
- data/templates/rails/content/RSS%20feed.textile +0 -7
- data/templates/rails/content/Recent%20Blog%20Entries.textile +0 -5
- data/templates/rails/content/Recent%20Changes%20to%20This%20Site.textile +0 -211
- data/templates/rails/content/Recent%20News.textile +0 -9
- data/templates/rails/content/Ruby.textile +0 -9
- data/templates/rails/content/SOKS%20features.textile +0 -16
- data/templates/rails/content/Site%20Index.textile +0 -60
- data/templates/rails/content/Soks%20Licence.textile +0 -64
- data/templates/rails/content/fixed%20bug%3A%20automatic%20link%20links%20to%20stuff%20inside%2.textile +0 -3
- data/templates/rails/content/let%20me%20know.textile +0 -1
- data/templates/rails/content/sandbox.textile +0 -2
- data/templates/rails/content/tamc2.textile +0 -1
- data/templates/rails/content/test%20page.textile +0 -1
- data/templates/rails/start.rb +0 -113
- data/templates/rails/version.txt +0 -1
- data/templates/rails/views/Page_content.rhtml +0 -1
- data/templates/rails/views/Page_edit.rhtml +0 -61
- data/templates/rails/views/Page_meta.rhtml +0 -38
- data/templates/rails/views/Page_print.rhtml +0 -6
- data/templates/rails/views/Page_revisions.rhtml +0 -19
- data/templates/rails/views/Page_rss.rhtml +0 -55
- data/templates/rails/views/Page_search_results.rhtml +0 -19
- data/templates/rails/views/Page_view.rhtml +0 -3
- data/templates/rails/views/UploadPage_edit.rhtml +0 -38
- data/templates/rails/views/frame.rhtml +0 -60
- data/templates/rails/views/messages.yaml +0 -6
- /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
|
-
|
|
59
|
-
|
|
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
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
@
|
|
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
|
-
|
|
74
|
-
(lengths_for_first_word_of( title ) << title.length).sort!
|
|
75
|
-
end
|
|
69
|
+
update_titles
|
|
76
70
|
end
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
78
|
+
text
|
|
105
79
|
end
|
|
106
|
-
|
|
80
|
+
|
|
107
81
|
private
|
|
108
|
-
|
|
109
|
-
def
|
|
110
|
-
|
|
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
|
-
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
209
|
-
|
|
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 =
|
|
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
|
-
|
|
301
|
-
|
|
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
|
-
|
|
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 => '
|
|
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
|
-
:
|
|
33
|
-
:
|
|
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
|
|
Binary file
|
|
Binary file
|
|
@@ -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>
|
|
@@ -1,55 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
a
|
|
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 {
|
|
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
|
-
#
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
40
|
-
font-size:
|
|
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
|
-
|
|
45
|
-
|
|
46
|
-
|
|
89
|
+
.linklist a:hover {
|
|
90
|
+
background-color:#F4E600;
|
|
91
|
+
text-decoration: none;
|
|
47
92
|
}
|
|
48
93
|
|
|
49
|
-
.
|
|
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;
|
|
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
|
-
|
|
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
|
+
}
|