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.
- data/.gitignore +5 -0
- data/.rspec +2 -0
- data/CHANGES +3 -0
- data/COPYING +340 -0
- data/Gemfile +3 -0
- data/README.md +10 -0
- data/Rakefile +10 -0
- data/TextFormattingRules +137 -0
- data/TextFormattingRules.ja +143 -0
- data/bin/qwikdoc +34 -0
- data/lib/qwik_doc.rb +15 -0
- data/lib/qwik_doc/hack.rb +184 -0
- data/qwikdoc.gemspec +26 -0
- data/spec/qwik_doc_spec.rb +305 -0
- data/spec/spec_helper.rb +12 -0
- data/vendor/qwik/Makefile +63 -0
- data/vendor/qwik/Rakefile +17 -0
- data/vendor/qwik/act-aa.rb +83 -0
- data/vendor/qwik/act-archive.rb +386 -0
- data/vendor/qwik/act-attach.rb +304 -0
- data/vendor/qwik/act-backup.rb +236 -0
- data/vendor/qwik/act-basic.rb +325 -0
- data/vendor/qwik/act-book.rb +161 -0
- data/vendor/qwik/act-calc.rb +371 -0
- data/vendor/qwik/act-charset.rb +251 -0
- data/vendor/qwik/act-christel.rb +112 -0
- data/vendor/qwik/act-chronology.rb +149 -0
- data/vendor/qwik/act-code.rb +155 -0
- data/vendor/qwik/act-comment.rb +554 -0
- data/vendor/qwik/act-config.rb +49 -0
- data/vendor/qwik/act-counter.rb +125 -0
- data/vendor/qwik/act-day.rb +96 -0
- data/vendor/qwik/act-describe.rb +135 -0
- data/vendor/qwik/act-diary.rb +109 -0
- data/vendor/qwik/act-edit.rb +317 -0
- data/vendor/qwik/act-embed-html.rb +296 -0
- data/vendor/qwik/act-emode.rb +150 -0
- data/vendor/qwik/act-event.rb +187 -0
- data/vendor/qwik/act-file.rb +303 -0
- data/vendor/qwik/act-files.rb +771 -0
- data/vendor/qwik/act-getpass.rb +295 -0
- data/vendor/qwik/act-history.rb +136 -0
- data/vendor/qwik/act-html.rb +204 -0
- data/vendor/qwik/act-httpauth.rb +147 -0
- data/vendor/qwik/act-include.rb +142 -0
- data/vendor/qwik/act-interwiki.rb +189 -0
- data/vendor/qwik/act-isearch.rb +109 -0
- data/vendor/qwik/act-keywords.rb +137 -0
- data/vendor/qwik/act-lang.rb +81 -0
- data/vendor/qwik/act-license.rb +63 -0
- data/vendor/qwik/act-list.rb +287 -0
- data/vendor/qwik/act-login.rb +410 -0
- data/vendor/qwik/act-logout.rb +60 -0
- data/vendor/qwik/act-mail.rb +159 -0
- data/vendor/qwik/act-map.rb +292 -0
- data/vendor/qwik/act-md5.rb +42 -0
- data/vendor/qwik/act-mdlb.rb +741 -0
- data/vendor/qwik/act-media.rb +416 -0
- data/vendor/qwik/act-member.rb +157 -0
- data/vendor/qwik/act-menu.rb +142 -0
- data/vendor/qwik/act-metadata.rb +323 -0
- data/vendor/qwik/act-mlsubmitform.rb +49 -0
- data/vendor/qwik/act-monitor.rb +167 -0
- data/vendor/qwik/act-new.rb +418 -0
- data/vendor/qwik/act-pagelist.rb +248 -0
- data/vendor/qwik/act-password.rb +145 -0
- data/vendor/qwik/act-plan.rb +210 -0
- data/vendor/qwik/act-povray.rb +230 -0
- data/vendor/qwik/act-presen.rb +380 -0
- data/vendor/qwik/act-redirect.rb +133 -0
- data/vendor/qwik/act-ring.rb +1071 -0
- data/vendor/qwik/act-rrefs.rb +255 -0
- data/vendor/qwik/act-ruby.rb +116 -0
- data/vendor/qwik/act-sample.rb +170 -0
- data/vendor/qwik/act-save.rb +295 -0
- data/vendor/qwik/act-schedule.rb +374 -0
- data/vendor/qwik/act-search.rb +180 -0
- data/vendor/qwik/act-searchwords.rb +51 -0
- data/vendor/qwik/act-sendpass.rb +83 -0
- data/vendor/qwik/act-site.rb +89 -0
- data/vendor/qwik/act-sitebackup.rb +419 -0
- data/vendor/qwik/act-sitelog.rb +118 -0
- data/vendor/qwik/act-smil.rb +299 -0
- data/vendor/qwik/act-status.rb +220 -0
- data/vendor/qwik/act-style.rb +608 -0
- data/vendor/qwik/act-table.rb +263 -0
- data/vendor/qwik/act-tableform.rb +241 -0
- data/vendor/qwik/act-tag.rb +103 -0
- data/vendor/qwik/act-text.rb +70 -0
- data/vendor/qwik/act-textarea.rb +164 -0
- data/vendor/qwik/act-theme.rb +346 -0
- data/vendor/qwik/act-toc.rb +112 -0
- data/vendor/qwik/act-typekey.rb +198 -0
- data/vendor/qwik/act-under-const.rb +94 -0
- data/vendor/qwik/act-webservice.rb +321 -0
- data/vendor/qwik/act-wema.rb +558 -0
- data/vendor/qwik/act-wysiwyg.rb +238 -0
- data/vendor/qwik/action.rb +325 -0
- data/vendor/qwik/autoreload.rb +98 -0
- data/vendor/qwik/bench-bench.rb +28 -0
- data/vendor/qwik/bench-emode.rb +47 -0
- data/vendor/qwik/bench-format-xml.rb +70 -0
- data/vendor/qwik/bench-large-table.rb +62 -0
- data/vendor/qwik/bench-md5.rb +14 -0
- data/vendor/qwik/bench-module-session.rb +19 -0
- data/vendor/qwik/bench-page.rb +50 -0
- data/vendor/qwik/bench-s-md5.rb +28 -0
- data/vendor/qwik/bench-session.rb +25 -0
- data/vendor/qwik/bench-textformat.rb +31 -0
- data/vendor/qwik/catalog-factory.rb +91 -0
- data/vendor/qwik/catalog-ja.rb +479 -0
- data/vendor/qwik/catalog-ml-ja.rb +145 -0
- data/vendor/qwik/check-act-monitor.rb +112 -0
- data/vendor/qwik/check-act-monitor2.rb +46 -0
- data/vendor/qwik/check-act-theme.rb +27 -0
- data/vendor/qwik/check-event.rb +112 -0
- data/vendor/qwik/check-event2.rb +55 -0
- data/vendor/qwik/check-htree-rexml.rb +77 -0
- data/vendor/qwik/check-htree.rb +51 -0
- data/vendor/qwik/check-libxml.rb +135 -0
- data/vendor/qwik/check-many-pages.rb +47 -0
- data/vendor/qwik/check-monitor.rb +33 -0
- data/vendor/qwik/check-observer.rb +67 -0
- data/vendor/qwik/check-server.rb +61 -0
- data/vendor/qwik/check-uuencode.rb +33 -0
- data/vendor/qwik/check-webdav.rb +65 -0
- data/vendor/qwik/check-xml-xpath.rb +27 -0
- data/vendor/qwik/common-backtrace.rb +94 -0
- data/vendor/qwik/common-basic.rb +111 -0
- data/vendor/qwik/common-condition.rb +142 -0
- data/vendor/qwik/common-error.rb +48 -0
- data/vendor/qwik/common-gettext.rb +50 -0
- data/vendor/qwik/common-javascript.rb +45 -0
- data/vendor/qwik/common-notice.rb +132 -0
- data/vendor/qwik/common-plain.rb +105 -0
- data/vendor/qwik/common-plugin.rb +111 -0
- data/vendor/qwik/common-res.rb +76 -0
- data/vendor/qwik/common-resolve.rb +92 -0
- data/vendor/qwik/common-send.rb +171 -0
- data/vendor/qwik/common-session.rb +139 -0
- data/vendor/qwik/common-surface.rb +261 -0
- data/vendor/qwik/common-url.rb +90 -0
- data/vendor/qwik/compat/Makefile +12 -0
- data/vendor/qwik/compat/add_load_path.rb +1 -0
- data/vendor/qwik/config.rb +299 -0
- data/vendor/qwik/db-b-backup.rb +142 -0
- data/vendor/qwik/db-backup.rb +184 -0
- data/vendor/qwik/db-berkeley.rb +306 -0
- data/vendor/qwik/db-filesystem.rb +305 -0
- data/vendor/qwik/db-indexer.rb +154 -0
- data/vendor/qwik/db-searchwords.rb +238 -0
- data/vendor/qwik/description-ja.rb +267 -0
- data/vendor/qwik/description.rb +256 -0
- data/vendor/qwik/dev-add-copyright.rb +23 -0
- data/vendor/qwik/dev-backup.rb +24 -0
- data/vendor/qwik/dev-bench.rb +175 -0
- data/vendor/qwik/dev-calctime.rb +52 -0
- data/vendor/qwik/dev-css-compressor.rb +60 -0
- data/vendor/qwik/dev-extract-catalog.rb +102 -0
- data/vendor/qwik/dev-js-compressor.rb +73 -0
- data/vendor/qwik/dev-release.rb +235 -0
- data/vendor/qwik/dev-replace.rb +353 -0
- data/vendor/qwik/dev-sendmail.rb +25 -0
- data/vendor/qwik/farm.rb +283 -0
- data/vendor/qwik/gettext.rb +56 -0
- data/vendor/qwik/group-cond.rb +157 -0
- data/vendor/qwik/group-config.rb +247 -0
- data/vendor/qwik/group-confirm.rb +147 -0
- data/vendor/qwik/group-db.rb +326 -0
- data/vendor/qwik/group-mail.rb +195 -0
- data/vendor/qwik/group-member.rb +307 -0
- data/vendor/qwik/group-sendmail.rb +231 -0
- data/vendor/qwik/group-site.rb +374 -0
- data/vendor/qwik/group-sweep.rb +63 -0
- data/vendor/qwik/group.rb +157 -0
- data/vendor/qwik/helper.rb +6 -0
- data/vendor/qwik/html-generator.rb +104 -0
- data/vendor/qwik/html-to-wabisabi.rb +149 -0
- data/vendor/qwik/htree-diff.rb +87 -0
- data/vendor/qwik/htree-format-xml.rb +57 -0
- data/vendor/qwik/htree-generator.rb +144 -0
- data/vendor/qwik/htree-get.rb +251 -0
- data/vendor/qwik/htree-html-generator.rb +179 -0
- data/vendor/qwik/htree-template.rb +263 -0
- data/vendor/qwik/htree-to-wabisabi.rb +171 -0
- data/vendor/qwik/loadlib.rb +79 -0
- data/vendor/qwik/logger.rb +115 -0
- data/vendor/qwik/mail-body.rb +171 -0
- data/vendor/qwik/mail-header.rb +474 -0
- data/vendor/qwik/mail-multipart.rb +193 -0
- data/vendor/qwik/mail-parse.rb +147 -0
- data/vendor/qwik/mail.rb +341 -0
- data/vendor/qwik/mailaddress.rb +83 -0
- data/vendor/qwik/mdlb-model.rb +81 -0
- data/vendor/qwik/mdlb-sample.rb +324 -0
- data/vendor/qwik/ml-catalog-factory.rb +27 -0
- data/vendor/qwik/ml-exception.rb +15 -0
- data/vendor/qwik/ml-generator.rb +28 -0
- data/vendor/qwik/ml-gettext.rb +137 -0
- data/vendor/qwik/ml-logger.rb +82 -0
- data/vendor/qwik/ml-memory.rb +65 -0
- data/vendor/qwik/ml-msg-validator.rb +86 -0
- data/vendor/qwik/ml-processor.rb +609 -0
- data/vendor/qwik/ml-quickml-server.rb +122 -0
- data/vendor/qwik/ml-sendmail.rb +0 -0
- data/vendor/qwik/ml-server.rb +107 -0
- data/vendor/qwik/ml-session.rb +348 -0
- data/vendor/qwik/ml-sweeper.rb +101 -0
- data/vendor/qwik/mock-logger.rb +65 -0
- data/vendor/qwik/mock-sendmail.rb +78 -0
- data/vendor/qwik/mock-socket.rb +82 -0
- data/vendor/qwik/modulobe.rb +406 -0
- data/vendor/qwik/mongrel-server.rb +72 -0
- data/vendor/qwik/page-files.rb +249 -0
- data/vendor/qwik/page-generate.rb +82 -0
- data/vendor/qwik/page-get.rb +262 -0
- data/vendor/qwik/page-images.rb +168 -0
- data/vendor/qwik/page-put.rb +128 -0
- data/vendor/qwik/page-rrefs.rb +154 -0
- data/vendor/qwik/page-title.rb +0 -0
- data/vendor/qwik/page-wikidb.rb +234 -0
- data/vendor/qwik/page.rb +67 -0
- data/vendor/qwik/pages.rb +444 -0
- data/vendor/qwik/parse-plugin.rb +249 -0
- data/vendor/qwik/parser-emode.rb +116 -0
- data/vendor/qwik/parser-inline.rb +273 -0
- data/vendor/qwik/parser.rb +350 -0
- data/vendor/qwik/password.rb +183 -0
- data/vendor/qwik/periodic.rb +79 -0
- data/vendor/qwik/qp.rb +56 -0
- data/vendor/qwik/qwik-service.rb +341 -0
- data/vendor/qwik/qwik.rb +5 -0
- data/vendor/qwik/qwikweb-adduser.rb +34 -0
- data/vendor/qwik/qwikweb-catalog-validator.rb +110 -0
- data/vendor/qwik/qwikweb-incgen.rb +28 -0
- data/vendor/qwik/qwikweb-makesite.rb +41 -0
- data/vendor/qwik/qwikweb-server.rb +44 -0
- data/vendor/qwik/qwikweb-showpassword.rb +26 -0
- data/vendor/qwik/qwikweb-watchlog.rb +67 -0
- data/vendor/qwik/request-path.rb +304 -0
- data/vendor/qwik/request-ua.rb +76 -0
- data/vendor/qwik/request-webrick.rb +81 -0
- data/vendor/qwik/request.rb +91 -0
- data/vendor/qwik/resolve-tdiary.rb +292 -0
- data/vendor/qwik/resolve.rb +121 -0
- data/vendor/qwik/response.rb +228 -0
- data/vendor/qwik/server-memory.rb +57 -0
- data/vendor/qwik/server-webrick.rb +102 -0
- data/vendor/qwik/server.rb +252 -0
- data/vendor/qwik/site-config.rb +149 -0
- data/vendor/qwik/site-db.rb +136 -0
- data/vendor/qwik/site-event.rb +162 -0
- data/vendor/qwik/site-files.rb +86 -0
- data/vendor/qwik/site-group.rb +103 -0
- data/vendor/qwik/site-index.rb +47 -0
- data/vendor/qwik/site-log.rb +64 -0
- data/vendor/qwik/site-member.rb +230 -0
- data/vendor/qwik/site-monitor.rb +97 -0
- data/vendor/qwik/site-pages.rb +62 -0
- data/vendor/qwik/site-plan.rb +139 -0
- data/vendor/qwik/site-report.rb +282 -0
- data/vendor/qwik/site-resolve.rb +230 -0
- data/vendor/qwik/site-rrefs.rb +18 -0
- data/vendor/qwik/site-search.rb +180 -0
- data/vendor/qwik/site-timeline.rb +153 -0
- data/vendor/qwik/site-url.rb +189 -0
- data/vendor/qwik/site.rb +76 -0
- data/vendor/qwik/smil-time.rb +105 -0
- data/vendor/qwik/smtp-session.rb +331 -0
- data/vendor/qwik/template-generator.rb +149 -0
- data/vendor/qwik/template.rb +85 -0
- data/vendor/qwik/test-common.rb +10 -0
- data/vendor/qwik/test-ml-info.rb +225 -0
- data/vendor/qwik/test-module-ml.rb +142 -0
- data/vendor/qwik/test-module-path.rb +110 -0
- data/vendor/qwik/test-module-public.rb +70 -0
- data/vendor/qwik/test-module-server.rb +98 -0
- data/vendor/qwik/test-module-session.rb +264 -0
- data/vendor/qwik/test-module-suite.rb +91 -0
- data/vendor/qwik/test-ms-applemail.rb +59 -0
- data/vendor/qwik/test-ms-attach.rb +174 -0
- data/vendor/qwik/test-ms-basic.rb +40 -0
- data/vendor/qwik/test-ms-close.rb +35 -0
- data/vendor/qwik/test-ms-confirm.rb +75 -0
- data/vendor/qwik/test-ms-ignore-spam.rb +57 -0
- data/vendor/qwik/test-ms-japanese.rb +97 -0
- data/vendor/qwik/test-ms-jfilename.rb +82 -0
- data/vendor/qwik/test-ms-large.rb +58 -0
- data/vendor/qwik/test-ms-member.rb +103 -0
- data/vendor/qwik/test-ms-multipart.rb +84 -0
- data/vendor/qwik/test-ms-org.rb +129 -0
- data/vendor/qwik/test-ms-plan.rb +130 -0
- data/vendor/qwik/test-ms-post.rb +53 -0
- data/vendor/qwik/test-ms-quopri.rb +76 -0
- data/vendor/qwik/test-sub-quopri.rb +45 -0
- data/vendor/qwik/test-submit-base64.rb +59 -0
- data/vendor/qwik/test-submit-forward.rb +61 -0
- data/vendor/qwik/test-submit-html-mail.rb +52 -0
- data/vendor/qwik/test-submit-japanese.rb +135 -0
- data/vendor/qwik/test-submit-jfilename.rb +144 -0
- data/vendor/qwik/test-submit-uuencode.rb +71 -0
- data/vendor/qwik/test-suite-all.rb +8 -0
- data/vendor/qwik/test-suite-basic.rb +9 -0
- data/vendor/qwik/test-suite-ml.rb +9 -0
- data/vendor/qwik/test-typekey.rb +64 -0
- data/vendor/qwik/testunit.rb +45 -0
- data/vendor/qwik/tokenizer-inline.rb +294 -0
- data/vendor/qwik/tokenizer.rb +332 -0
- data/vendor/qwik/typekey.rb +160 -0
- data/vendor/qwik/util-basic.rb +135 -0
- data/vendor/qwik/util-charset.rb +332 -0
- data/vendor/qwik/util-css.rb +56 -0
- data/vendor/qwik/util-csv-tokenizer.rb +113 -0
- data/vendor/qwik/util-filename.rb +112 -0
- data/vendor/qwik/util-pathname.rb +202 -0
- data/vendor/qwik/util-pid.rb +58 -0
- data/vendor/qwik/util-safe.rb +67 -0
- data/vendor/qwik/util-sendmail.rb +273 -0
- data/vendor/qwik/util-string.rb +203 -0
- data/vendor/qwik/util-time.rb +125 -0
- data/vendor/qwik/util-webrick.rb +176 -0
- data/vendor/qwik/version.rb +11 -0
- data/vendor/qwik/wabisabi-basic.rb +163 -0
- data/vendor/qwik/wabisabi-diff.rb +130 -0
- data/vendor/qwik/wabisabi-format-xml.rb +310 -0
- data/vendor/qwik/wabisabi-generator.rb +262 -0
- data/vendor/qwik/wabisabi-index.rb +174 -0
- data/vendor/qwik/wabisabi-table.rb +212 -0
- data/vendor/qwik/wabisabi-template.rb +295 -0
- data/vendor/qwik/wabisabi-to-htree.rb +111 -0
- data/vendor/qwik/wabisabi-to-wiki.rb +690 -0
- data/vendor/qwik/wabisabi-traverse.rb +207 -0
- data/vendor/qwik/wabisabi-validator.rb +116 -0
- data/vendor/qwik/wabisabi.rb +5 -0
- 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(/\ \;/, '') # 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
|