qwikdoc 0.0.1

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 (335) hide show
  1. data/.gitignore +5 -0
  2. data/.rspec +2 -0
  3. data/CHANGES +3 -0
  4. data/COPYING +340 -0
  5. data/Gemfile +3 -0
  6. data/README.md +10 -0
  7. data/Rakefile +10 -0
  8. data/TextFormattingRules +137 -0
  9. data/TextFormattingRules.ja +143 -0
  10. data/bin/qwikdoc +34 -0
  11. data/lib/qwik_doc.rb +15 -0
  12. data/lib/qwik_doc/hack.rb +184 -0
  13. data/qwikdoc.gemspec +26 -0
  14. data/spec/qwik_doc_spec.rb +305 -0
  15. data/spec/spec_helper.rb +12 -0
  16. data/vendor/qwik/Makefile +63 -0
  17. data/vendor/qwik/Rakefile +17 -0
  18. data/vendor/qwik/act-aa.rb +83 -0
  19. data/vendor/qwik/act-archive.rb +386 -0
  20. data/vendor/qwik/act-attach.rb +304 -0
  21. data/vendor/qwik/act-backup.rb +236 -0
  22. data/vendor/qwik/act-basic.rb +325 -0
  23. data/vendor/qwik/act-book.rb +161 -0
  24. data/vendor/qwik/act-calc.rb +371 -0
  25. data/vendor/qwik/act-charset.rb +251 -0
  26. data/vendor/qwik/act-christel.rb +112 -0
  27. data/vendor/qwik/act-chronology.rb +149 -0
  28. data/vendor/qwik/act-code.rb +155 -0
  29. data/vendor/qwik/act-comment.rb +554 -0
  30. data/vendor/qwik/act-config.rb +49 -0
  31. data/vendor/qwik/act-counter.rb +125 -0
  32. data/vendor/qwik/act-day.rb +96 -0
  33. data/vendor/qwik/act-describe.rb +135 -0
  34. data/vendor/qwik/act-diary.rb +109 -0
  35. data/vendor/qwik/act-edit.rb +317 -0
  36. data/vendor/qwik/act-embed-html.rb +296 -0
  37. data/vendor/qwik/act-emode.rb +150 -0
  38. data/vendor/qwik/act-event.rb +187 -0
  39. data/vendor/qwik/act-file.rb +303 -0
  40. data/vendor/qwik/act-files.rb +771 -0
  41. data/vendor/qwik/act-getpass.rb +295 -0
  42. data/vendor/qwik/act-history.rb +136 -0
  43. data/vendor/qwik/act-html.rb +204 -0
  44. data/vendor/qwik/act-httpauth.rb +147 -0
  45. data/vendor/qwik/act-include.rb +142 -0
  46. data/vendor/qwik/act-interwiki.rb +189 -0
  47. data/vendor/qwik/act-isearch.rb +109 -0
  48. data/vendor/qwik/act-keywords.rb +137 -0
  49. data/vendor/qwik/act-lang.rb +81 -0
  50. data/vendor/qwik/act-license.rb +63 -0
  51. data/vendor/qwik/act-list.rb +287 -0
  52. data/vendor/qwik/act-login.rb +410 -0
  53. data/vendor/qwik/act-logout.rb +60 -0
  54. data/vendor/qwik/act-mail.rb +159 -0
  55. data/vendor/qwik/act-map.rb +292 -0
  56. data/vendor/qwik/act-md5.rb +42 -0
  57. data/vendor/qwik/act-mdlb.rb +741 -0
  58. data/vendor/qwik/act-media.rb +416 -0
  59. data/vendor/qwik/act-member.rb +157 -0
  60. data/vendor/qwik/act-menu.rb +142 -0
  61. data/vendor/qwik/act-metadata.rb +323 -0
  62. data/vendor/qwik/act-mlsubmitform.rb +49 -0
  63. data/vendor/qwik/act-monitor.rb +167 -0
  64. data/vendor/qwik/act-new.rb +418 -0
  65. data/vendor/qwik/act-pagelist.rb +248 -0
  66. data/vendor/qwik/act-password.rb +145 -0
  67. data/vendor/qwik/act-plan.rb +210 -0
  68. data/vendor/qwik/act-povray.rb +230 -0
  69. data/vendor/qwik/act-presen.rb +380 -0
  70. data/vendor/qwik/act-redirect.rb +133 -0
  71. data/vendor/qwik/act-ring.rb +1071 -0
  72. data/vendor/qwik/act-rrefs.rb +255 -0
  73. data/vendor/qwik/act-ruby.rb +116 -0
  74. data/vendor/qwik/act-sample.rb +170 -0
  75. data/vendor/qwik/act-save.rb +295 -0
  76. data/vendor/qwik/act-schedule.rb +374 -0
  77. data/vendor/qwik/act-search.rb +180 -0
  78. data/vendor/qwik/act-searchwords.rb +51 -0
  79. data/vendor/qwik/act-sendpass.rb +83 -0
  80. data/vendor/qwik/act-site.rb +89 -0
  81. data/vendor/qwik/act-sitebackup.rb +419 -0
  82. data/vendor/qwik/act-sitelog.rb +118 -0
  83. data/vendor/qwik/act-smil.rb +299 -0
  84. data/vendor/qwik/act-status.rb +220 -0
  85. data/vendor/qwik/act-style.rb +608 -0
  86. data/vendor/qwik/act-table.rb +263 -0
  87. data/vendor/qwik/act-tableform.rb +241 -0
  88. data/vendor/qwik/act-tag.rb +103 -0
  89. data/vendor/qwik/act-text.rb +70 -0
  90. data/vendor/qwik/act-textarea.rb +164 -0
  91. data/vendor/qwik/act-theme.rb +346 -0
  92. data/vendor/qwik/act-toc.rb +112 -0
  93. data/vendor/qwik/act-typekey.rb +198 -0
  94. data/vendor/qwik/act-under-const.rb +94 -0
  95. data/vendor/qwik/act-webservice.rb +321 -0
  96. data/vendor/qwik/act-wema.rb +558 -0
  97. data/vendor/qwik/act-wysiwyg.rb +238 -0
  98. data/vendor/qwik/action.rb +325 -0
  99. data/vendor/qwik/autoreload.rb +98 -0
  100. data/vendor/qwik/bench-bench.rb +28 -0
  101. data/vendor/qwik/bench-emode.rb +47 -0
  102. data/vendor/qwik/bench-format-xml.rb +70 -0
  103. data/vendor/qwik/bench-large-table.rb +62 -0
  104. data/vendor/qwik/bench-md5.rb +14 -0
  105. data/vendor/qwik/bench-module-session.rb +19 -0
  106. data/vendor/qwik/bench-page.rb +50 -0
  107. data/vendor/qwik/bench-s-md5.rb +28 -0
  108. data/vendor/qwik/bench-session.rb +25 -0
  109. data/vendor/qwik/bench-textformat.rb +31 -0
  110. data/vendor/qwik/catalog-factory.rb +91 -0
  111. data/vendor/qwik/catalog-ja.rb +479 -0
  112. data/vendor/qwik/catalog-ml-ja.rb +145 -0
  113. data/vendor/qwik/check-act-monitor.rb +112 -0
  114. data/vendor/qwik/check-act-monitor2.rb +46 -0
  115. data/vendor/qwik/check-act-theme.rb +27 -0
  116. data/vendor/qwik/check-event.rb +112 -0
  117. data/vendor/qwik/check-event2.rb +55 -0
  118. data/vendor/qwik/check-htree-rexml.rb +77 -0
  119. data/vendor/qwik/check-htree.rb +51 -0
  120. data/vendor/qwik/check-libxml.rb +135 -0
  121. data/vendor/qwik/check-many-pages.rb +47 -0
  122. data/vendor/qwik/check-monitor.rb +33 -0
  123. data/vendor/qwik/check-observer.rb +67 -0
  124. data/vendor/qwik/check-server.rb +61 -0
  125. data/vendor/qwik/check-uuencode.rb +33 -0
  126. data/vendor/qwik/check-webdav.rb +65 -0
  127. data/vendor/qwik/check-xml-xpath.rb +27 -0
  128. data/vendor/qwik/common-backtrace.rb +94 -0
  129. data/vendor/qwik/common-basic.rb +111 -0
  130. data/vendor/qwik/common-condition.rb +142 -0
  131. data/vendor/qwik/common-error.rb +48 -0
  132. data/vendor/qwik/common-gettext.rb +50 -0
  133. data/vendor/qwik/common-javascript.rb +45 -0
  134. data/vendor/qwik/common-notice.rb +132 -0
  135. data/vendor/qwik/common-plain.rb +105 -0
  136. data/vendor/qwik/common-plugin.rb +111 -0
  137. data/vendor/qwik/common-res.rb +76 -0
  138. data/vendor/qwik/common-resolve.rb +92 -0
  139. data/vendor/qwik/common-send.rb +171 -0
  140. data/vendor/qwik/common-session.rb +139 -0
  141. data/vendor/qwik/common-surface.rb +261 -0
  142. data/vendor/qwik/common-url.rb +90 -0
  143. data/vendor/qwik/compat/Makefile +12 -0
  144. data/vendor/qwik/compat/add_load_path.rb +1 -0
  145. data/vendor/qwik/config.rb +299 -0
  146. data/vendor/qwik/db-b-backup.rb +142 -0
  147. data/vendor/qwik/db-backup.rb +184 -0
  148. data/vendor/qwik/db-berkeley.rb +306 -0
  149. data/vendor/qwik/db-filesystem.rb +305 -0
  150. data/vendor/qwik/db-indexer.rb +154 -0
  151. data/vendor/qwik/db-searchwords.rb +238 -0
  152. data/vendor/qwik/description-ja.rb +267 -0
  153. data/vendor/qwik/description.rb +256 -0
  154. data/vendor/qwik/dev-add-copyright.rb +23 -0
  155. data/vendor/qwik/dev-backup.rb +24 -0
  156. data/vendor/qwik/dev-bench.rb +175 -0
  157. data/vendor/qwik/dev-calctime.rb +52 -0
  158. data/vendor/qwik/dev-css-compressor.rb +60 -0
  159. data/vendor/qwik/dev-extract-catalog.rb +102 -0
  160. data/vendor/qwik/dev-js-compressor.rb +73 -0
  161. data/vendor/qwik/dev-release.rb +235 -0
  162. data/vendor/qwik/dev-replace.rb +353 -0
  163. data/vendor/qwik/dev-sendmail.rb +25 -0
  164. data/vendor/qwik/farm.rb +283 -0
  165. data/vendor/qwik/gettext.rb +56 -0
  166. data/vendor/qwik/group-cond.rb +157 -0
  167. data/vendor/qwik/group-config.rb +247 -0
  168. data/vendor/qwik/group-confirm.rb +147 -0
  169. data/vendor/qwik/group-db.rb +326 -0
  170. data/vendor/qwik/group-mail.rb +195 -0
  171. data/vendor/qwik/group-member.rb +307 -0
  172. data/vendor/qwik/group-sendmail.rb +231 -0
  173. data/vendor/qwik/group-site.rb +374 -0
  174. data/vendor/qwik/group-sweep.rb +63 -0
  175. data/vendor/qwik/group.rb +157 -0
  176. data/vendor/qwik/helper.rb +6 -0
  177. data/vendor/qwik/html-generator.rb +104 -0
  178. data/vendor/qwik/html-to-wabisabi.rb +149 -0
  179. data/vendor/qwik/htree-diff.rb +87 -0
  180. data/vendor/qwik/htree-format-xml.rb +57 -0
  181. data/vendor/qwik/htree-generator.rb +144 -0
  182. data/vendor/qwik/htree-get.rb +251 -0
  183. data/vendor/qwik/htree-html-generator.rb +179 -0
  184. data/vendor/qwik/htree-template.rb +263 -0
  185. data/vendor/qwik/htree-to-wabisabi.rb +171 -0
  186. data/vendor/qwik/loadlib.rb +79 -0
  187. data/vendor/qwik/logger.rb +115 -0
  188. data/vendor/qwik/mail-body.rb +171 -0
  189. data/vendor/qwik/mail-header.rb +474 -0
  190. data/vendor/qwik/mail-multipart.rb +193 -0
  191. data/vendor/qwik/mail-parse.rb +147 -0
  192. data/vendor/qwik/mail.rb +341 -0
  193. data/vendor/qwik/mailaddress.rb +83 -0
  194. data/vendor/qwik/mdlb-model.rb +81 -0
  195. data/vendor/qwik/mdlb-sample.rb +324 -0
  196. data/vendor/qwik/ml-catalog-factory.rb +27 -0
  197. data/vendor/qwik/ml-exception.rb +15 -0
  198. data/vendor/qwik/ml-generator.rb +28 -0
  199. data/vendor/qwik/ml-gettext.rb +137 -0
  200. data/vendor/qwik/ml-logger.rb +82 -0
  201. data/vendor/qwik/ml-memory.rb +65 -0
  202. data/vendor/qwik/ml-msg-validator.rb +86 -0
  203. data/vendor/qwik/ml-processor.rb +609 -0
  204. data/vendor/qwik/ml-quickml-server.rb +122 -0
  205. data/vendor/qwik/ml-sendmail.rb +0 -0
  206. data/vendor/qwik/ml-server.rb +107 -0
  207. data/vendor/qwik/ml-session.rb +348 -0
  208. data/vendor/qwik/ml-sweeper.rb +101 -0
  209. data/vendor/qwik/mock-logger.rb +65 -0
  210. data/vendor/qwik/mock-sendmail.rb +78 -0
  211. data/vendor/qwik/mock-socket.rb +82 -0
  212. data/vendor/qwik/modulobe.rb +406 -0
  213. data/vendor/qwik/mongrel-server.rb +72 -0
  214. data/vendor/qwik/page-files.rb +249 -0
  215. data/vendor/qwik/page-generate.rb +82 -0
  216. data/vendor/qwik/page-get.rb +262 -0
  217. data/vendor/qwik/page-images.rb +168 -0
  218. data/vendor/qwik/page-put.rb +128 -0
  219. data/vendor/qwik/page-rrefs.rb +154 -0
  220. data/vendor/qwik/page-title.rb +0 -0
  221. data/vendor/qwik/page-wikidb.rb +234 -0
  222. data/vendor/qwik/page.rb +67 -0
  223. data/vendor/qwik/pages.rb +444 -0
  224. data/vendor/qwik/parse-plugin.rb +249 -0
  225. data/vendor/qwik/parser-emode.rb +116 -0
  226. data/vendor/qwik/parser-inline.rb +273 -0
  227. data/vendor/qwik/parser.rb +350 -0
  228. data/vendor/qwik/password.rb +183 -0
  229. data/vendor/qwik/periodic.rb +79 -0
  230. data/vendor/qwik/qp.rb +56 -0
  231. data/vendor/qwik/qwik-service.rb +341 -0
  232. data/vendor/qwik/qwik.rb +5 -0
  233. data/vendor/qwik/qwikweb-adduser.rb +34 -0
  234. data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
  235. data/vendor/qwik/qwikweb-incgen.rb +28 -0
  236. data/vendor/qwik/qwikweb-makesite.rb +41 -0
  237. data/vendor/qwik/qwikweb-server.rb +44 -0
  238. data/vendor/qwik/qwikweb-showpassword.rb +26 -0
  239. data/vendor/qwik/qwikweb-watchlog.rb +67 -0
  240. data/vendor/qwik/request-path.rb +304 -0
  241. data/vendor/qwik/request-ua.rb +76 -0
  242. data/vendor/qwik/request-webrick.rb +81 -0
  243. data/vendor/qwik/request.rb +91 -0
  244. data/vendor/qwik/resolve-tdiary.rb +292 -0
  245. data/vendor/qwik/resolve.rb +121 -0
  246. data/vendor/qwik/response.rb +228 -0
  247. data/vendor/qwik/server-memory.rb +57 -0
  248. data/vendor/qwik/server-webrick.rb +102 -0
  249. data/vendor/qwik/server.rb +252 -0
  250. data/vendor/qwik/site-config.rb +149 -0
  251. data/vendor/qwik/site-db.rb +136 -0
  252. data/vendor/qwik/site-event.rb +162 -0
  253. data/vendor/qwik/site-files.rb +86 -0
  254. data/vendor/qwik/site-group.rb +103 -0
  255. data/vendor/qwik/site-index.rb +47 -0
  256. data/vendor/qwik/site-log.rb +64 -0
  257. data/vendor/qwik/site-member.rb +230 -0
  258. data/vendor/qwik/site-monitor.rb +97 -0
  259. data/vendor/qwik/site-pages.rb +62 -0
  260. data/vendor/qwik/site-plan.rb +139 -0
  261. data/vendor/qwik/site-report.rb +282 -0
  262. data/vendor/qwik/site-resolve.rb +230 -0
  263. data/vendor/qwik/site-rrefs.rb +18 -0
  264. data/vendor/qwik/site-search.rb +180 -0
  265. data/vendor/qwik/site-timeline.rb +153 -0
  266. data/vendor/qwik/site-url.rb +189 -0
  267. data/vendor/qwik/site.rb +76 -0
  268. data/vendor/qwik/smil-time.rb +105 -0
  269. data/vendor/qwik/smtp-session.rb +331 -0
  270. data/vendor/qwik/template-generator.rb +149 -0
  271. data/vendor/qwik/template.rb +85 -0
  272. data/vendor/qwik/test-common.rb +10 -0
  273. data/vendor/qwik/test-ml-info.rb +225 -0
  274. data/vendor/qwik/test-module-ml.rb +142 -0
  275. data/vendor/qwik/test-module-path.rb +110 -0
  276. data/vendor/qwik/test-module-public.rb +70 -0
  277. data/vendor/qwik/test-module-server.rb +98 -0
  278. data/vendor/qwik/test-module-session.rb +264 -0
  279. data/vendor/qwik/test-module-suite.rb +91 -0
  280. data/vendor/qwik/test-ms-applemail.rb +59 -0
  281. data/vendor/qwik/test-ms-attach.rb +174 -0
  282. data/vendor/qwik/test-ms-basic.rb +40 -0
  283. data/vendor/qwik/test-ms-close.rb +35 -0
  284. data/vendor/qwik/test-ms-confirm.rb +75 -0
  285. data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
  286. data/vendor/qwik/test-ms-japanese.rb +97 -0
  287. data/vendor/qwik/test-ms-jfilename.rb +82 -0
  288. data/vendor/qwik/test-ms-large.rb +58 -0
  289. data/vendor/qwik/test-ms-member.rb +103 -0
  290. data/vendor/qwik/test-ms-multipart.rb +84 -0
  291. data/vendor/qwik/test-ms-org.rb +129 -0
  292. data/vendor/qwik/test-ms-plan.rb +130 -0
  293. data/vendor/qwik/test-ms-post.rb +53 -0
  294. data/vendor/qwik/test-ms-quopri.rb +76 -0
  295. data/vendor/qwik/test-sub-quopri.rb +45 -0
  296. data/vendor/qwik/test-submit-base64.rb +59 -0
  297. data/vendor/qwik/test-submit-forward.rb +61 -0
  298. data/vendor/qwik/test-submit-html-mail.rb +52 -0
  299. data/vendor/qwik/test-submit-japanese.rb +135 -0
  300. data/vendor/qwik/test-submit-jfilename.rb +144 -0
  301. data/vendor/qwik/test-submit-uuencode.rb +71 -0
  302. data/vendor/qwik/test-suite-all.rb +8 -0
  303. data/vendor/qwik/test-suite-basic.rb +9 -0
  304. data/vendor/qwik/test-suite-ml.rb +9 -0
  305. data/vendor/qwik/test-typekey.rb +64 -0
  306. data/vendor/qwik/testunit.rb +45 -0
  307. data/vendor/qwik/tokenizer-inline.rb +294 -0
  308. data/vendor/qwik/tokenizer.rb +332 -0
  309. data/vendor/qwik/typekey.rb +160 -0
  310. data/vendor/qwik/util-basic.rb +135 -0
  311. data/vendor/qwik/util-charset.rb +332 -0
  312. data/vendor/qwik/util-css.rb +56 -0
  313. data/vendor/qwik/util-csv-tokenizer.rb +113 -0
  314. data/vendor/qwik/util-filename.rb +112 -0
  315. data/vendor/qwik/util-pathname.rb +202 -0
  316. data/vendor/qwik/util-pid.rb +58 -0
  317. data/vendor/qwik/util-safe.rb +67 -0
  318. data/vendor/qwik/util-sendmail.rb +273 -0
  319. data/vendor/qwik/util-string.rb +203 -0
  320. data/vendor/qwik/util-time.rb +125 -0
  321. data/vendor/qwik/util-webrick.rb +176 -0
  322. data/vendor/qwik/version.rb +11 -0
  323. data/vendor/qwik/wabisabi-basic.rb +163 -0
  324. data/vendor/qwik/wabisabi-diff.rb +130 -0
  325. data/vendor/qwik/wabisabi-format-xml.rb +310 -0
  326. data/vendor/qwik/wabisabi-generator.rb +262 -0
  327. data/vendor/qwik/wabisabi-index.rb +174 -0
  328. data/vendor/qwik/wabisabi-table.rb +212 -0
  329. data/vendor/qwik/wabisabi-template.rb +295 -0
  330. data/vendor/qwik/wabisabi-to-htree.rb +111 -0
  331. data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
  332. data/vendor/qwik/wabisabi-traverse.rb +207 -0
  333. data/vendor/qwik/wabisabi-validator.rb +116 -0
  334. data/vendor/qwik/wabisabi.rb +5 -0
  335. metadata +416 -0
@@ -0,0 +1,238 @@
1
+ # -*- coding: shift_jis -*-
2
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
3
+ # This is free software with ABSOLUTELY NO WARRANTY.
4
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
5
+
6
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
7
+ require 'qwik/act-edit'
8
+ require 'qwik/html-to-wabisabi'
9
+ require 'qwik/wabisabi-to-wiki'
10
+ require 'qwik/act-event'
11
+ require 'qwik/act-md5'
12
+
13
+ module Qwik
14
+ class Action
15
+ D_ExtWysiwyg = {
16
+ :dt => 'WYSIWYG editing mode',
17
+ :dd => 'You can edit a page in wysiwyg mode.',
18
+ :dc => "* Example
19
+ You can access [[edit FrontPage|FrontPage.wysiwyg]] in wysiwyg mode.
20
+
21
+ You can show a link to wysiwyg mode by this plugin.
22
+ {{wysiwyg}}
23
+ {{wysiwyg}}
24
+ "
25
+ }
26
+
27
+ D_ExtWysiwyg_ja = {
28
+ :dt => '�����܂ܕҏW���[�h',
29
+ :dd => '�y�[�W�������܂܂̏�ԂŕҏW�ł��܂��B',
30
+ :dc => "* ��
31
+ ���Ƃ��΁A[[FrontPage�������܂ܕҏW|FrontPage.wysiwyg]]�y�[�W�ɂ����ƁA
32
+ FrontPage�������܂܂̏�ԂŕҏW�����ʂɂƂт܂��B
33
+
34
+ ���̃y�[�W���猩���܂ܕҏW��ʂɔ�Ԃɂ́A���L�̃v���O�C�����g���܂��B
35
+ {{wysiwyg}}
36
+ {{wysiwyg}}
37
+ "
38
+ }
39
+
40
+ def plg_wysiwyg
41
+ return if @req.user.nil?
42
+ return page_attribute('wysiwyg', _('Edit in this page'))
43
+ end
44
+ alias plg_edit_wysiwyg plg_wysiwyg
45
+
46
+ def plg_watch(pagename=@req.base, ext=nil)
47
+ ext ||= 'html'
48
+ return if defined?(@watch_defined)
49
+ @watch_defined = true
50
+
51
+ #//alert('hi');
52
+ script = "
53
+ g_watcher_env.add('#{pagename}', '#{ext}');
54
+ g_watcher_env.start();
55
+ g_weditor.init('#{pagename}', '#{ext}');
56
+ g_weditor.check();
57
+ "
58
+ md5 = @site[pagename].get.md5hex
59
+
60
+ div = [:div, {:id=>'watch'}]
61
+
62
+ if @config.debug || defined?($test) && $test
63
+ # div << "watch(#{pagename})"
64
+ end
65
+
66
+ div << [:input, {:type=>'hidden', :name=>'watch_md5', :value=>md5}]
67
+ div << [:script,
68
+ {:type=>'text/javascript', :src=>'.theme/js/watch.js'}, '']
69
+ div << [:script, {:type=>'text/javascript'}, script]
70
+ return div
71
+ end
72
+
73
+ def ext_wysiwyg
74
+ c_require_pagename
75
+ c_require_page_exist
76
+ c_require_member
77
+ c_require_no_path_args
78
+ c_require_no_ext_args
79
+
80
+ if 0 < @req.query.length
81
+ return wysiwyg_save
82
+ end
83
+
84
+ return wysiwyg_editor_page(@site, @req.base)
85
+ end
86
+
87
+ def wysiwyg_save
88
+ wtext = @req.query['wtext']
89
+ return c_nerror('null content') if wtext.nil? || wtext.empty?
90
+ wtext = wtext.gsub(/\&nbsp\;/, '') # delete_bogus
91
+
92
+ wabisabi = HtmlToWabisabi.parse(wtext)
93
+ wiki = WabisabiToWiki.translate(wabisabi)
94
+ return ext_save(wiki, 'wysiwyg') # in act-save.rb
95
+ end
96
+
97
+ def wysiwyg_editor_page(site, pagename)
98
+ page = site[pagename]
99
+ str = page.load
100
+ w = c_parse(str) # without resolve
101
+
102
+ #w = c_tdiary_resolve(w)
103
+ md5hex = str.md5hex
104
+ ar = Action.wysiwyg_generate(pagename, w, md5hex, $test)
105
+
106
+ title = "#{pagename} : "+_('Edit in this page')
107
+ c_surface(title, false) { ar }
108
+
109
+ wysiwyg_patch_sidemenu
110
+
111
+ return nil
112
+ end
113
+
114
+ def wysiwyg_patch_sidemenu
115
+ side = @res.body.get_path("//div[@class='sidebar']")
116
+ side.insert(2, plg_watch(@req.base, @req.ext))
117
+ end
118
+
119
+ def self.wysiwyg_generate(pagename, w, md5hex, debug)
120
+ s = [:div, {:class=>'section'}]
121
+ s << [:style, "@import '.theme/css/wema.css';"]
122
+ s << wysiwyg_toolbar(pagename)
123
+ s << wysiwyg_editor(w) # important
124
+ s << wysiwyg_form(pagename, md5hex, debug)
125
+ s << [:script, {:type=>'text/javascript', :src=>'.theme/js/wysiwyg.js'},
126
+ '']
127
+ div = [:div, {:class=>'wysiwyg'}, [:div, {:class=>'day'}, s]]
128
+ return div
129
+ end
130
+
131
+ def self.wysiwyg_toolbar(pagename)
132
+ div = [:div, {:class=>'toolbar'},
133
+ [:a, {:href=>'javascript:wysiwyg_save()'},
134
+ [:img, {:alt=>'Save', :src=>'.theme/i/action_save.gif'}]],
135
+ [:input, {:type=>'checkbox', :name=>'autosave',
136
+ :title=>'Auto-save'}],
137
+
138
+ [:a, {:href=>"javascript:wysiwyg_command('bold')"},
139
+ [:img, {:alt=>'Bold', :src=>'.theme/i/text_bold.png'}]],
140
+ [:a, {:href=>"javascript:wysiwyg_command('italic')"},
141
+ [:img, {:alt=>'Italic', :src=>'.theme/i/text_italic.png'}]],
142
+
143
+ [:a, {:href=>"javascript:wysiwyg_command('InsertUnorderedList')"},
144
+ [:img, {:alt=>'UL', :src=>'.theme/i/text_list_bullets.png'}]],
145
+ [:a, {:href=>"javascript:wysiwyg_command('InsertOrderedList')"},
146
+ [:img, {:alt=>'OL', :src=>'.theme/i/text_list_numbers.png'}]],
147
+
148
+ [:a, {:href=>"javascript:wysiwyg_markup('h2')"},
149
+ [:img, {:alt=>'H2', :src=>'.theme/i/text_heading_2.png'}]],
150
+ [:a, {:href=>"javascript:wysiwyg_markup('h3')"},
151
+ [:img, {:alt=>'H3', :src=>'.theme/i/text_heading_3.png'}]],
152
+ [:a, {:href=>"javascript:wysiwyg_markup('h4')"},
153
+ [:img, {:alt=>'H4', :src=>'.theme/i/text_heading_4.png'}]],
154
+
155
+ [:a, {:href=>"javascript:wysiwyg_command('CreateLink')"},
156
+ [:img, {:alt=>'Link', :src=>'.theme/i/icon_link.gif'}]],
157
+ [:a, {:href=>'javascript:wysiwyg_image()'},
158
+ [:img, {:alt=>'Image', :src=>'.theme/i/image.gif'}]],
159
+
160
+ [:a, {:href=>'javascript:wysiwyg_deleteTags()'},
161
+ [:img, {:alt=>'Normal', :src=>'.theme/i/text_align_justify.png'}]],
162
+
163
+ [:span, {:class=>'wupdate_here'},
164
+ [:a, {:href=>"#{pagename}.wysiwyg"},
165
+ [:img,
166
+ {:alt=>'Update', :src=>'.theme/i/action_refresh_blue.gif'}]]],
167
+ [:input, {:type=>'checkbox', :name=>'autoupdate',
168
+ :title=>'Auto update'}],
169
+ ]
170
+ return div
171
+ end
172
+
173
+ def self.wysiwyg_editor(w)
174
+ # The attribute 'contenteditable' makes it editable. Only works in IE.
175
+ return [:div, {:id=>'weditor', :contenteditable=>'true'}, w]
176
+ end
177
+
178
+ def self.wysiwyg_form(pagename, md5hex, debug=false)
179
+ #debug = true
180
+ div = [:div]
181
+ div << {:style=>'display:none;'} if ! debug
182
+ div << [:form, {:action=>pagename+'.wysiwyg', :method=>'POST',
183
+ :name=>'wform', :id=>'wform'},
184
+ [:input, {:type=>'submit', :value=>'Submit'}],
185
+ [:input, {:type=>'text', :name=>'mode', :value=>'save'}],
186
+ [:input, {:type=>'text', :name=>'md5hex', :value=>md5hex}],
187
+ [:textarea, {:name=>'wtext', :id=>'wtext'}, '']]
188
+
189
+ return div
190
+ end
191
+ end
192
+ end
193
+
194
+ if $0 == __FILE__
195
+ require 'qwik/test-common'
196
+ $test = true
197
+ end
198
+
199
+ if defined?($test) && $test
200
+ class TestActWysiwyg < Test::Unit::TestCase
201
+ include TestSession
202
+
203
+ def test_plg_edit_wysiwyg
204
+ ok_wi([:span, {:class=>'attribute'},
205
+ [:a, {:href=>'1.wysiwyg'}, 'Edit in this page']],
206
+ '{{edit_wysiwyg}}')
207
+ ok_wi([:span, {:class=>'attribute'},
208
+ [:a, {:href=>'1.wysiwyg'}, 'Edit in this page']],
209
+ '{{wysiwyg}}')
210
+ end
211
+
212
+ def test_ext_wysiwyg
213
+ t_add_user
214
+
215
+ page = @site.create_new
216
+ page.store('* t')
217
+
218
+ res = session('/test/1.wysiwyg')
219
+ ok_title('1 : Edit in this page')
220
+
221
+ res = session('POST /test/1.wysiwyg?wtext=ttt')
222
+ ok_eq('ttt', page.load)
223
+
224
+ res = session('POST /test/1.wysiwyg?wtext=<p>t</p>')
225
+ ok_eq("t\n", page.load)
226
+
227
+ res = session('POST /test/1.wysiwyg?wtext=<h2>t</h2>')
228
+ ok_eq("* t\n", page.load)
229
+
230
+ res = session('POST /test/1.wysiwyg?wtext=<p>a %26nbsp%3b b</p>')
231
+ ok_eq("a b\n", page.load)
232
+
233
+ # test_wysiwyg_bug
234
+ res = session('/test/TextFormatSimple.wysiwyg')
235
+ ok_title('TextFormatSimple : Edit in this page')
236
+ end
237
+ end
238
+ end
@@ -0,0 +1,325 @@
1
+ # Copyright (C) 2003-2006 Kouichirou Eto, All rights reserved.
2
+ # This is free software with ABSOLUTELY NO WARRANTY.
3
+ # You can redistribute it and/or modify it under the terms of the GNU GPL 2.
4
+
5
+ $LOAD_PATH.unshift '..' unless $LOAD_PATH.include? '..'
6
+
7
+ require 'qwik/parser'
8
+ require 'qwik/server-memory'
9
+ require 'qwik/template'
10
+ require 'qwik/tokenizer'
11
+ require 'qwik/wabisabi'
12
+
13
+ # Load utils.
14
+ require 'qwik/util-basic'
15
+ require 'qwik/util-charset'
16
+ require 'qwik/util-filename'
17
+ require 'qwik/util-time'
18
+
19
+ # Load common actions.
20
+ require 'qwik/common-basic'
21
+ require 'qwik/common-backtrace'
22
+ require 'qwik/common-condition'
23
+ require 'qwik/common-gettext'
24
+ require 'qwik/common-javascript'
25
+ require 'qwik/common-notice'
26
+ require 'qwik/common-plain'
27
+ require 'qwik/common-plugin'
28
+ require 'qwik/common-res'
29
+ require 'qwik/common-send'
30
+ require 'qwik/common-session'
31
+ require 'qwik/common-surface'
32
+ require 'qwik/common-url'
33
+
34
+ # Load some basic actions.
35
+ require 'qwik/act-basic'
36
+ require 'qwik/act-edit'
37
+ require 'qwik/act-file'
38
+ require 'qwik/act-html'
39
+ require 'qwik/act-interwiki'
40
+ require 'qwik/act-login'
41
+ require 'qwik/act-new' # newpage_form
42
+ require 'qwik/act-sitelog'
43
+ require 'qwik/act-theme'
44
+ require 'qwik/act-toc'
45
+
46
+ # Use for site_updated
47
+ require 'qwik/act-metadata'
48
+ require 'qwik/act-archive'
49
+
50
+ module Qwik
51
+ class Action
52
+ def initialize
53
+ @config = @memory = @req = @res = nil
54
+ end
55
+
56
+ def init(config, memory, req, res)
57
+ @config, @memory, @req, @res = config, memory, req, res
58
+ end
59
+
60
+ def site_updated
61
+ pagelist_update
62
+ metadata_clear_cache
63
+ archive_clear_cache
64
+ end
65
+
66
+ def run
67
+ init_gettext
68
+
69
+ # for maps plugin support.
70
+ sitename = @req.query['site']
71
+ @req.sitename = sitename if sitename
72
+ pagename = @req.query['page']
73
+ @req.base = pagename if pagename
74
+
75
+ # Get site.
76
+ @site = @memory.farm.get_site(@req.sitename)
77
+
78
+ if @site.nil?
79
+ @site = @memory.farm.get_top_site
80
+ unless @req.plugin == 'theme'
81
+ return action_no_such_site(@req.sitename)
82
+ end
83
+ end
84
+
85
+ begin
86
+ # Get user.
87
+ login_get_user
88
+
89
+ # Do PRE Action.
90
+ method = "pre_act_#{@req.plugin}"
91
+ if self.respond_to?(method)
92
+ return self.send(method)
93
+ end
94
+
95
+ # Do PRE Ext.
96
+ method = "pre_ext_#{@req.ext}"
97
+ if self.respond_to?(method)
98
+ return self.send(method)
99
+ end
100
+
101
+ # Check auth for the site.
102
+ require_mail = true
103
+ require_member = true
104
+ if @site.is_open?
105
+ require_mail = false
106
+ require_member = false
107
+ end
108
+
109
+ if require_mail && @req.user.nil?
110
+ @res.clear_cookies
111
+ return action_go_login
112
+ end
113
+
114
+ if require_member && !@site.member.exist?(@req.user)
115
+ user = @req.user
116
+ ml = @site.ml_address
117
+ return action_go_login if user.nil?
118
+ return action_member_only_form(user, ml)
119
+ end
120
+
121
+ # Do action.
122
+ if @req.plugin
123
+ action = @req.plugin
124
+ method = "act_#{action}"
125
+ if self.respond_to?(method)
126
+ return self.send(method)
127
+ else
128
+ return c_nerror("no such action : #{action}")
129
+ end
130
+ end
131
+
132
+ # Do ext action.
133
+ ext = @req.ext
134
+ method = "ext_#{ext}"
135
+ if self.respond_to?(method)
136
+ return self.send(method)
137
+ else
138
+ # Special attached file mode.
139
+ @req.path_args = ["#{@req.base}.#{@req.ext}"]
140
+ @req.base = 'FrontPage'
141
+ return act_files
142
+ end
143
+
144
+ rescue InvalidUserError
145
+ @res.clear_cookies # important
146
+ return login_invalid_user
147
+
148
+ rescue RequireLogin
149
+ return action_require_login
150
+
151
+ rescue RequireMember
152
+ return action_go_login if @req.user.nil?
153
+ return action_member_only_form(@req.user, @site.ml_address)
154
+
155
+ rescue RequirePost
156
+ return action_require_post
157
+
158
+ rescue PageNotFound
159
+ return action_page_not_found
160
+
161
+ rescue RequireNoPathArgs
162
+ return action_require_no_path_args
163
+
164
+ rescue BaseIsNotSitename
165
+ return action_require_base_is_sitename
166
+
167
+ rescue WEBrick::HTTPStatus::Status
168
+ raise $!
169
+
170
+ rescue StandardError
171
+ e = $!
172
+ # Why?
173
+ pp e.message
174
+ pp e.backtrace
175
+ raise e
176
+ #return c_nerror(e.message){ backtrace_html($!) }
177
+ end
178
+ end
179
+
180
+ def action_no_such_site(sitename)
181
+ c_notfound(_('No such site.')) {
182
+ [:div,
183
+ [:p, [:b, sitename], ' : ', _('No corresponding site.')],
184
+ [:p , _('Please send mail to make a site')],
185
+ [:p, [:a, {:href=>'http://qwik.jp/'}, 'qwik.jp'],
186
+ _('Access here and see how to.')]]
187
+ }
188
+ end
189
+
190
+ def action_go_login
191
+ url = c_relative_to_root('.login')
192
+ c_notice(_('Login'), url, 200, 1) {
193
+ [:div,
194
+ [:p, _('Please log in.')],
195
+ [:p, login_create_login_link]]
196
+ }
197
+ end
198
+
199
+ def action_require_login
200
+ c_nerror(_('Please log in.')) {
201
+ [:div,
202
+ [:p, _('You need to log in to use this function.')],
203
+ [:p, login_create_login_link, ' : ' + _('Access here.')],
204
+ [:hr],
205
+ [:p, [:a, {:href=>'FrontPage.html'}, _('Go back')]]]
206
+ }
207
+ end
208
+
209
+ def action_member_only_form(user, ml)
210
+ c_nerror(_('Members Only')) {
211
+ [:div,
212
+ [:p, _('You are now logged in with this user id.'), [:br],
213
+ [:strong, user]],
214
+ [:p, _('This user with this ID is not a member of this group.'), [:br],
215
+ [:strong, ml]],
216
+ [:p, _('If you would like to log in on another account,'), [:br],
217
+ _('please log out first.')],
218
+ logout_form]
219
+ }
220
+ end
221
+
222
+ def action_require_post
223
+ c_nerror(_('Please input POST')) {
224
+ [[:p, _('This function requires POST input.')],
225
+ [:p, [:a, {:href=>'FrontPage.html'}, _('Go back')]]]
226
+ }
227
+ end
228
+
229
+ def action_require_no_path_args
230
+ c_notfound(_('Incorrect path arguments.')) {
231
+ [:h2, _('Path arguments are not acceptable.')]
232
+ }
233
+ end
234
+
235
+ # action_page_not_found is moved to act-new.rb
236
+
237
+ def action_require_base_is_sitename
238
+ c_notfound(_('Not found.')) {
239
+ [:h2, _('Not found.')]
240
+ }
241
+ end
242
+
243
+ # Null ext.
244
+ def pre_ext_
245
+ sitename = @req.base
246
+ title = "redirect to site : #{sitename}"
247
+ url = c_relative_to_root("#{sitename}/")
248
+ c_notice(title, url) {
249
+ [:h2, title]
250
+ }
251
+ end
252
+ end
253
+ end
254
+
255
+ if $0 == __FILE__
256
+ require 'qwik/test-common'
257
+ $test = true
258
+ end
259
+
260
+ if defined?($test) && $test
261
+ class TestAction < Test::Unit::TestCase
262
+ include TestSession
263
+
264
+ def test_nonexistent_site
265
+ res = session '/nosuchsite/'
266
+ ok_title 'No such site.'
267
+ assert_text 'No such site.', 'h1'
268
+ assert_text 'nosuchsite', 'b'
269
+ eq 404, @res.status
270
+ end
271
+
272
+ def test_private_site
273
+ res = session '/test/'
274
+ ok_title 'Members Only'
275
+ ok_xp [:p, 'You are now logged in with this user id.', [:br],
276
+ [:strong, 'user@e.com']],'//p'
277
+ end
278
+
279
+ def test_nonexistent_action
280
+ t_add_user
281
+ res = session '/test/.nosuch'
282
+ ok_title 'no such action : nosuch'
283
+ end
284
+
285
+ def test_nonexistent_ext
286
+ t_add_user
287
+ res = session '/test/1.nosuch'
288
+ ok_title "No such file"
289
+ end
290
+
291
+ def test_redirect
292
+ res = session '/test'
293
+ ok_title 'redirect to site : test'
294
+ ok_xp [:meta, {:content=>'0; url=/test/',
295
+ 'http-equiv'=>'Refresh'}], '//meta[2]'
296
+ end
297
+
298
+ def test_redirect
299
+ t_with_path {
300
+ res = session '/test'
301
+ ok_title 'redirect to site : test'
302
+ ok_xp [:meta, {:content=>'0; url=/qwik/test/',
303
+ 'http-equiv'=>'Refresh'}], '//meta[2]'
304
+ }
305
+ end
306
+
307
+ def test_go_login
308
+ res = session('/test/') {|req|
309
+ req.cookies.clear
310
+ }
311
+ ok_title 'Login'
312
+ ok_xp [:meta, {:content=>'1; url=/test/.login',
313
+ 'http-equiv'=>'Refresh'}], '//meta[2]'
314
+
315
+ t_with_path {
316
+ res = session('/test/') {|req|
317
+ req.cookies.clear
318
+ }
319
+ ok_title 'Login'
320
+ ok_xp [:meta, {:content=>'1; url=/qwik/test/.login',
321
+ 'http-equiv'=>'Refresh'}], '//meta[2]'
322
+ }
323
+ end
324
+ end
325
+ end