Wiki2Go 1.17.5 → 1.22.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/Wiki2Go_firewall_blacklist.rb +8 -0
- data/bin/Wiki2Go_make_cvs_repository.rb +1 -0
- data/bin/Wiki2Go_make_site.rb +1 -2
- data/bin/Wiki2Go_update_site.rb +1 -2
- data/lib/Web2Go/CGIRequest.rb +8 -2
- data/lib/Web2Go/CGIResponse.rb +17 -14
- data/lib/Web2Go/MockRequest.rb +12 -2
- data/lib/Web2Go/MockResponse.rb +10 -7
- data/lib/Web2Go/WebrickRequest.rb +106 -101
- data/lib/Web2Go/WebrickResponse.rb +4 -8
- data/lib/Wiki2Go/BlackList.rb +48 -25
- data/lib/Wiki2Go/DotGraphics.rb +1 -1
- data/lib/Wiki2Go/FileStorage.rb +266 -266
- data/lib/Wiki2Go/HTMLFormatter.rb +28 -0
- data/lib/Wiki2Go/Install/config/chonqed_blacklist.txt +418 -0
- data/lib/Wiki2Go/Install/config/passwords +1 -1
- data/lib/Wiki2Go/Install/config/url_blacklist.txt +3855 -0
- data/lib/Wiki2Go/Install/make_repository.rb +32 -26
- data/lib/Wiki2Go/Install/make_site.rb +197 -111
- data/lib/Wiki2Go/Install/site/error.html +1 -1
- data/lib/Wiki2Go/Install/site/robots.txt +10 -1
- data/lib/Wiki2Go/Install/site/style.css +129 -64
- data/lib/Wiki2Go/Install/templates/admin.htm +1 -1
- data/lib/Wiki2Go/Install/templates/admin_pages/edit.txt +2 -1
- data/lib/Wiki2Go/Install/templates/admin_pages/format_for_fck.txt +31 -0
- data/lib/Wiki2Go/Install/templates/admin_pages/passwords.txt +1 -1
- data/lib/Wiki2Go/Install/templates/edit.htm +62 -46
- data/lib/Wiki2Go/Install/templates/full_footer.htm +31 -33
- data/lib/Wiki2Go/Install/templates/header.htm +0 -1
- data/lib/Wiki2Go/Install/templates/menu.htm +29 -0
- data/lib/Wiki2Go/Install/templates/pagelist.htm +46 -43
- data/lib/Wiki2Go/Install/templates/simple_footer.htm +20 -16
- data/lib/Wiki2Go/Install/templates/versionlist.htm +52 -40
- data/lib/Wiki2Go/Install/templates/view.htm +46 -29
- data/lib/Wiki2Go/Install/templates/wikiedit.htm +63 -0
- data/lib/Wiki2Go/Install/wiki/delete.png +0 -0
- data/lib/Wiki2Go/Install/wiki/style.css +133 -63
- data/lib/Wiki2Go/LineFormatter.rb +345 -197
- data/lib/Wiki2Go/Page.rb +16 -3
- data/lib/Wiki2Go/PrivateWikiConfig.rb +5 -5
- data/lib/Wiki2Go/PublicWikiConfig.rb +83 -37
- data/lib/Wiki2Go/ReadWriteWikiConfig.rb +8 -8
- data/lib/Wiki2Go/Server.rb +6 -1
- data/lib/Wiki2Go/SpamFilter.rb +32 -41
- data/lib/Wiki2Go/Web.rb +10 -3
- data/lib/Wiki2Go/Wiki2Go.rb +301 -94
- data/lib/Wiki2Go/Wiki2GoConfig.rb +87 -6
- data/lib/Wiki2Go/Wiki2GoServlet.rb +66 -12
- data/lib/Wiki2Go/WikiFormatter.rb +60 -30
- data/lib/Wiki2Go/cgi/diff.rb +20 -0
- data/lib/Wiki2Go/cgi/secure/log_rss.rb +21 -0
- data/lib/Wiki2Go/cgi/sidebyside.rb +20 -0
- data/lib/Wiki2Go/cgi/wikiedit.rb +20 -0
- data/lib/Wiki2Go/firewall_blacklist.rb +88 -0
- data/test/All.rb +5 -2
- data/test/TestBlackList.rb +70 -14
- data/test/TestConfig.rb +5 -5
- data/test/TestDiff.rb +95 -0
- data/test/TestFormatter.rb +14 -16
- data/test/TestHTMLFormatter.rb +37 -0
- data/test/TestInstall.rb +70 -27
- data/test/TestLineFormatter.rb +71 -15
- data/test/TestRSS.rb +8 -7
- data/test/TestRepository.rb +50 -0
- data/test/TestServer.rb +3 -8
- data/test/TestSpamFilter.rb +33 -1
- data/test/TestStorage.rb +11 -0
- data/test/TestWeb.rb +2 -2
- data/test/TestWiki2Go.rb +766 -166
- data/test/TestWiki2GoServlet.rb +1122 -524
- data/test/UnitTestFiles.rb +7 -3
- data/test/Wiki2GoConfigForTest.rb +40 -6
- data/test/checksite.rb +17 -50
- data/test/test_firewall_blacklist.rb +131 -0
- data/test/test_page.rb +45 -0
- data/test/testdata/Registration.rbl.txt +7 -0
- data/test/testdata/config/url_blacklist.txt +38822 -0
- data/test/testdata/expected_changes.html +1 -2
- data/test/testdata/expected_edit.html +108 -59
- data/test/testdata/expected_full_rss.xml +2 -2
- data/test/testdata/expected_out.html +97 -61
- data/test/testdata/expected_put.html +88 -53
- data/test/testdata/expected_save.html +88 -52
- data/test/testdata/expected_savehtml.html +88 -52
- data/test/testdata/expected_search.html +68 -53
- data/test/testdata/expected_upload.html +88 -53
- data/test/testdata/expected_versions.html +97 -82
- data/test/testdata/expected_view.html +97 -61
- data/test/testdata/firewall/iptables.config +37 -0
- data/test/testdata/firewall/user_blacklist.txt +162 -0
- data/test/testdata/logs/wiki.log +652 -0
- data/test/testdata/logs/wiki.log.0 +113 -0
- data/test/testdata/logs/wiki.log.1 +113 -0
- data/test/testdata/logs/wiki.log.2 +113 -0
- data/test/testdata/logs/wiki.log.3 +115 -0
- data/test/testdata/logs/wiki.log.4 +5 -0
- data/test/testdata/logs/wiki.log.5 +7 -0
- data/test/testdata/logs/wiki.log.6 +5 -0
- data/test/testdata/logs/wiki.log.7 +118 -0
- data/test/testdata/logs/wiki.log.8 +12 -0
- data/test/testdata/site/html/Xpday/rss.xml +53 -103
- data/test/testdata/texts/Bugs/FrontPage.txt +6 -0
- data/test/testdata/texts/Bugs/NoHidden.spam +17850 -0
- data/test/testdata/texts/Bugs/PairProgrammingParties.spam +102 -0
- data/test/testdata/texts/Bugs/PairProgrammingParties.txt +99 -0
- metadata +53 -7
- data/test/TestMail.rb +0 -29
- data/test/gc.log +0 -2
Binary file
|
@@ -10,76 +10,77 @@ body
|
|
10
10
|
text-align: justify;
|
11
11
|
}
|
12
12
|
|
13
|
-
|
14
|
-
{
|
15
|
-
margin
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
/* Main structure */
|
14
|
+
#container {
|
15
|
+
margin: 0;
|
16
|
+
margin-left: 2em;
|
17
|
+
margin-right: 2em;
|
18
|
+
background: #fff;
|
19
|
+
border-left: 1px solid #ccc;
|
20
|
+
border-right: 1px solid #ccc;
|
21
|
+
border-top: 1px solid #ccc;
|
22
|
+
border-bottom: 1px solid #ccc;
|
21
23
|
}
|
22
24
|
|
23
|
-
|
25
|
+
#menu
|
24
26
|
{
|
25
|
-
|
26
|
-
|
27
|
-
|
27
|
+
border-right: black thin solid;
|
28
|
+
background-color: #F8F7F0;
|
29
|
+
padding-right : 0.5em ;
|
30
|
+
|
28
31
|
}
|
29
32
|
|
30
|
-
|
33
|
+
#body
|
31
34
|
{
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
padding-left : 0.5em ;
|
36
|
+
padding-right : 0.5em ;
|
37
|
+
width: 100%;
|
38
|
+
background-color: #FFFFFF;
|
36
39
|
}
|
37
40
|
|
38
|
-
|
41
|
+
#header
|
39
42
|
{
|
40
|
-
|
43
|
+
padding-right: 1em;
|
44
|
+
padding-left: 1em;
|
45
|
+
padding-bottom: 0.5em;
|
46
|
+
margin: 0px;
|
47
|
+
padding-top: 0px;
|
48
|
+
background-color: #B82619;
|
49
|
+
border-bottom: grey thin solid;
|
50
|
+
color : White ;
|
41
51
|
}
|
42
52
|
|
43
|
-
|
44
|
-
text-align: center ;
|
45
|
-
}
|
46
|
-
|
47
|
-
table.Header
|
53
|
+
#header a:link
|
48
54
|
{
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
padding-top: 0em;
|
53
|
-
color: black;
|
54
|
-
background-color: white;
|
55
|
-
text-align: left;
|
56
|
-
border-bottom: 1px solid #ccc;
|
55
|
+
color: White;
|
56
|
+
font-weight: bolder ;
|
57
|
+
text-decoration: none;
|
57
58
|
}
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
margin: 100px 0 0 0;
|
64
|
-
padding: 6px;
|
65
|
-
color: #000;
|
66
|
-
background: #fff;
|
67
|
-
border-top: 1px solid #ccc;
|
60
|
+
#header a:visited {
|
61
|
+
color: White;
|
62
|
+
text-decoration: none;
|
63
|
+
font-weight: normal ;
|
68
64
|
}
|
69
65
|
|
70
|
-
|
71
|
-
|
66
|
+
#header a:hover
|
67
|
+
{
|
68
|
+
color: cornsilk;
|
72
69
|
}
|
73
70
|
|
74
|
-
|
71
|
+
#header h1
|
75
72
|
{
|
76
|
-
|
73
|
+
color : White ;
|
77
74
|
}
|
78
75
|
|
79
|
-
|
80
|
-
|
76
|
+
#footer
|
77
|
+
{
|
78
|
+
border-top: grey thin solid;
|
79
|
+
background-color : silver;
|
81
80
|
}
|
82
81
|
|
82
|
+
/* Links */
|
83
|
+
|
83
84
|
a:link
|
84
85
|
{
|
85
86
|
color: #a50a11;
|
@@ -97,28 +98,76 @@ a:hover {
|
|
97
98
|
text-decoration: underline;
|
98
99
|
}
|
99
100
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
101
|
+
/* Headers */
|
102
|
+
|
103
|
+
h1
|
104
|
+
{
|
105
|
+
font-weight: bold;
|
106
|
+
font-size: 28pt;
|
107
|
+
color: black;
|
108
|
+
margin : 0em ;
|
109
|
+
}
|
110
|
+
|
111
|
+
h2,h3,h4,h5,h6
|
112
|
+
{
|
113
|
+
color:black
|
114
|
+
}
|
115
|
+
|
116
|
+
h2,h3.frontpage {
|
117
|
+
text-align: center ;
|
118
|
+
}
|
119
|
+
|
120
|
+
/* Style for tables drawn with --- and | in wiki markup */
|
121
|
+
|
122
|
+
table.wikitable
|
123
|
+
{
|
124
|
+
border-collapse: collapse;
|
125
|
+
}
|
126
|
+
|
127
|
+
table.wikitable tr
|
128
|
+
{
|
129
|
+
padding-right: 0.4em;
|
130
|
+
padding-left: 0.4em;
|
131
|
+
padding-bottom: 0.4em;
|
132
|
+
margin: 0em;
|
133
|
+
padding-top: 0.4em;
|
114
134
|
}
|
115
|
-
|
135
|
+
|
136
|
+
table.wikitable td
|
137
|
+
{
|
138
|
+
border-right: 1px solid;
|
139
|
+
padding-right: 0.5em;
|
140
|
+
border-top: 1px solid;
|
141
|
+
padding-left: 0.5em;
|
142
|
+
padding-bottom: 0.5em;
|
143
|
+
border-left: 1px solid;
|
144
|
+
padding-top: 0.5em;
|
145
|
+
border-bottom: 1px solid;
|
146
|
+
}
|
147
|
+
|
148
|
+
/* Menu items */
|
149
|
+
|
150
|
+
#menu ul
|
151
|
+
{
|
152
|
+
margin-left : 0 ;
|
153
|
+
padding-left : 0.5em ;
|
154
|
+
}
|
155
|
+
|
156
|
+
#menu li
|
157
|
+
{
|
158
|
+
list-style-type: none;
|
159
|
+
margin-left : 0 ;
|
160
|
+
padding-left : 0 ;
|
161
|
+
}
|
162
|
+
|
163
|
+
/* Style for lists of pages or versions (recent changes, search, versions */
|
164
|
+
|
116
165
|
table.topiclist
|
117
166
|
{
|
118
167
|
width: 100%;
|
119
168
|
}
|
120
169
|
|
121
|
-
table.topiclist
|
170
|
+
table.topiclist td.date
|
122
171
|
{
|
123
172
|
font-weight: bold;
|
124
173
|
}
|
@@ -131,3 +180,24 @@ table.topiclist tr.odd
|
|
131
180
|
table.topiclist tr.even
|
132
181
|
{
|
133
182
|
}
|
183
|
+
|
184
|
+
/* Style for the display of differences */
|
185
|
+
div.diff_kept
|
186
|
+
{
|
187
|
+
display : block ;
|
188
|
+
font-family: 'Courier New';
|
189
|
+
}
|
190
|
+
|
191
|
+
div.diff_added
|
192
|
+
{
|
193
|
+
background-color: #ffffcc;
|
194
|
+
display : block ;
|
195
|
+
font-family: 'Courier New';
|
196
|
+
}
|
197
|
+
|
198
|
+
div.diff_deleted
|
199
|
+
{
|
200
|
+
background-color: #ffcc33;
|
201
|
+
display : block ;
|
202
|
+
font-family: 'Courier New';
|
203
|
+
}
|
@@ -8,9 +8,9 @@ require 'English'
|
|
8
8
|
module Wiki2Go
|
9
9
|
|
10
10
|
class LineFormatter
|
11
|
-
|
11
|
+
|
12
12
|
attr_reader :config
|
13
|
-
|
13
|
+
|
14
14
|
def initialize(web,storage,config,generate_html,editable)
|
15
15
|
@web = web
|
16
16
|
@storage = storage
|
@@ -23,36 +23,47 @@ module Wiki2Go
|
|
23
23
|
@editable = editable
|
24
24
|
@absolute_urls = false
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
public
|
28
|
-
|
28
|
+
|
29
|
+
# Format one line with wiki formatting
|
29
30
|
def format_line(line)
|
30
31
|
@added_bullets = false
|
31
32
|
line = escape_wiki_markers(line)
|
32
|
-
line =
|
33
|
+
line = format_tags(line)
|
34
|
+
line = format_bullets(line)
|
35
|
+
line = format_markup(line)
|
33
36
|
line = format_table(line)
|
34
37
|
line = remove_markers(line)
|
35
38
|
if !@added_bullets then
|
36
39
|
emit_bullets
|
37
40
|
end
|
38
|
-
|
41
|
+
|
39
42
|
return formatted_output(line)
|
40
43
|
end
|
41
|
-
|
44
|
+
|
45
|
+
# Call when the last line has been formatted. We may need to close lists.
|
42
46
|
def formatting_done
|
43
47
|
emit_bullets
|
44
48
|
result =@pre_line
|
45
49
|
@pre_line = ''
|
46
50
|
result
|
47
51
|
end
|
48
|
-
|
52
|
+
|
49
53
|
# Return the path to the script verb, with the right extension and parameters
|
50
54
|
# * verb = name of the verb (view, edit,...)
|
51
55
|
# * parameters = further parameters: web.name, web.current_page, ...
|
52
56
|
def make_verb_url(verb,*parameters)
|
53
57
|
make_url(@web.script_prefix,verb + @web.script_extension,*parameters)
|
54
58
|
end
|
55
|
-
|
59
|
+
|
60
|
+
# Return the path to the script verb, with the right extension and parameters
|
61
|
+
# * verb = name of the verb (view, edit,...)
|
62
|
+
# Adds current subwiki and page name
|
63
|
+
def verb_url(verb)
|
64
|
+
return make_verb_url(verb,@web.name,@web.current_page)
|
65
|
+
end
|
66
|
+
|
56
67
|
# Return the path to the given resource. Nil and empty parameters are ignored
|
57
68
|
# The generated url is relative to the root of the site
|
58
69
|
def make_url(*parameters)
|
@@ -65,15 +76,30 @@ module Wiki2Go
|
|
65
76
|
end
|
66
77
|
result.squeeze('/')
|
67
78
|
end
|
68
|
-
|
79
|
+
|
80
|
+
# Return an <a> tag filled in.
|
81
|
+
def link_to(url,label,follow=true)
|
82
|
+
nofollow = (follow ? '' : " rel=\"nofollow\"")
|
83
|
+
return "<a href=\"#{url}\"#{nofollow}>#{label}</a>"
|
84
|
+
end
|
85
|
+
|
86
|
+
# Return an <a target="_blank"> tag filled in.
|
87
|
+
def link_to_new_page(url,label)
|
88
|
+
return "<a href=\"#{url}\" target=\"_blank\">#{label}</a>"
|
89
|
+
end
|
90
|
+
|
91
|
+
# Return absolute URL to current page
|
69
92
|
def absolute_url
|
70
93
|
absolute_url_of_topic(@web.current_page)
|
71
94
|
end
|
72
|
-
|
95
|
+
|
96
|
+
# Return absolute URL of given page
|
73
97
|
def absolute_url_of_topic(topic)
|
74
98
|
return @web.base_url.chop + view_page_url(@web.name,topic)
|
75
99
|
end
|
76
|
-
|
100
|
+
|
101
|
+
# Return a link suitable for creating a new page with the rich editor, if editing is allowed
|
102
|
+
# Return the name of the page, otherwise
|
77
103
|
def edit_link(subwiki,page,name)
|
78
104
|
if @editable then
|
79
105
|
return name + edit_this_link(subwiki,page,"?")
|
@@ -81,51 +107,115 @@ module Wiki2Go
|
|
81
107
|
return name
|
82
108
|
end
|
83
109
|
end
|
84
|
-
|
110
|
+
|
111
|
+
# Return a link suitable for editing a page with the rich editor, if editing is allowed
|
112
|
+
# Return empty string, otherwise
|
85
113
|
def edit_this_link(subwiki,page,name)
|
86
114
|
if @editable then
|
87
|
-
return
|
115
|
+
return link_to(make_verb_url('edit',subwiki,page),name,false)
|
88
116
|
else
|
89
117
|
return ""
|
90
118
|
end
|
91
119
|
end
|
92
|
-
|
93
|
-
|
120
|
+
|
121
|
+
# Return a link suitable for creating a new page with the wiki editor, if editing is allowed
|
122
|
+
# Return the name of the page, otherwise
|
123
|
+
def wikiedit_link(subwiki,page,name)
|
94
124
|
if @editable then
|
95
|
-
return
|
125
|
+
return name + wikiedit_this_link(subwiki,page,"?")
|
96
126
|
else
|
97
|
-
return
|
127
|
+
return name
|
98
128
|
end
|
99
129
|
end
|
100
|
-
|
101
|
-
|
102
|
-
|
130
|
+
|
131
|
+
# Return a link suitable for editing a page with the wiki editor, if editing is allowed
|
132
|
+
# Return empty string, otherwise
|
133
|
+
def wikiedit_this_link(subwiki,page,name)
|
134
|
+
if @editable then
|
135
|
+
return link_to(make_verb_url('wikiedit',subwiki,page),name,false)
|
136
|
+
else
|
137
|
+
return ""
|
138
|
+
end
|
103
139
|
end
|
104
|
-
|
105
|
-
|
106
|
-
|
140
|
+
|
141
|
+
# Return a link suitable for creating a new page with the confgured editor, if editing is allowed
|
142
|
+
# Return the name of the page, otherwise
|
143
|
+
def editor_link(subwiki,page,name)
|
144
|
+
if @editable then
|
145
|
+
return editor_this_link(subwiki,page,name)
|
146
|
+
else
|
147
|
+
return name
|
148
|
+
end
|
107
149
|
end
|
108
|
-
|
109
|
-
|
110
|
-
|
150
|
+
|
151
|
+
# Return a link suitable for creating a new page with the confgured editor, if editing is allowed
|
152
|
+
# Return the name of the page, otherwise
|
153
|
+
def editor_link2(subwiki,page,name)
|
154
|
+
if @editable then
|
155
|
+
return name + editor_this_link(subwiki,page,"?")
|
156
|
+
else
|
157
|
+
return name
|
158
|
+
end
|
111
159
|
end
|
112
|
-
|
160
|
+
|
161
|
+
# Return a link suitable for editing a page with the configured editor, if editing is allowed
|
162
|
+
# Return empty string, otherwise
|
163
|
+
def editor_this_link(subwiki,page,name)
|
164
|
+
if @editable then
|
165
|
+
return link_to(make_verb_url(@config.editor,subwiki,page),name,false)
|
166
|
+
else
|
167
|
+
return ""
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
# URL to save current page in current subwiki
|
113
172
|
def save_url
|
114
|
-
|
173
|
+
make_verb_url('save',@web.name,@web.current_page)
|
115
174
|
end
|
116
|
-
|
117
|
-
|
118
|
-
|
175
|
+
|
176
|
+
# Return a link suitable for saving a page, if editing is allowed
|
177
|
+
# Return page name, otherwise
|
178
|
+
# def save_this_link(subwiki,page)
|
179
|
+
# if @editable then
|
180
|
+
# return make_verb_url('save',subwiki,page)
|
181
|
+
#else
|
182
|
+
#return page
|
183
|
+
#end
|
184
|
+
#end
|
185
|
+
|
186
|
+
# URL to remove spam by user
|
187
|
+
def removespam_url(user)
|
188
|
+
return make_verb_url('removespam',@web.name,'')
|
119
189
|
end
|
120
|
-
|
121
|
-
|
122
|
-
|
190
|
+
|
191
|
+
# URL to display the different versions of a page
|
192
|
+
def versions_url(page)
|
193
|
+
return make_verb_url('versions',@web.name,page)
|
123
194
|
end
|
124
|
-
|
125
|
-
|
126
|
-
|
195
|
+
|
196
|
+
# Link to display the different versions of a page
|
197
|
+
def versions_link(page,label)
|
198
|
+
return link_to(versions_url(page),label,false)
|
127
199
|
end
|
128
|
-
|
200
|
+
|
201
|
+
alias :version_url :versions_url
|
202
|
+
alias :version_link :versions_link
|
203
|
+
|
204
|
+
# URL to search for (optional) text
|
205
|
+
def search_url(for_text=nil)
|
206
|
+
parameter = for_text.nil? ? '' : '?text=' + CGI::escape(for_text)
|
207
|
+
return make_verb_url('search',@web.name) + parameter
|
208
|
+
end
|
209
|
+
|
210
|
+
# Link to search for given text, with (optional) label to display within link
|
211
|
+
def search_link(for_text,label=nil)
|
212
|
+
label ||= for_text
|
213
|
+
return link_to(search_url(for_text),label,false)
|
214
|
+
end
|
215
|
+
|
216
|
+
alias :search_link2 :search_link
|
217
|
+
|
218
|
+
# URL of 'recent changes' page
|
129
219
|
def changes_url
|
130
220
|
if @generate_html then
|
131
221
|
return make_url(@web.name,'recent_changes.html')
|
@@ -133,114 +223,159 @@ module Wiki2Go
|
|
133
223
|
return make_verb_url('changes',@web.name)
|
134
224
|
end
|
135
225
|
end
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
def view_page_url(subwiki,page)
|
142
|
-
if @generate_html then
|
143
|
-
return make_url(subwiki,page + ".html")
|
144
|
-
else
|
145
|
-
return make_verb_url('view',subwiki,page)
|
146
|
-
end
|
226
|
+
|
227
|
+
# Link to 'recent changes' page
|
228
|
+
def changes_link(label)
|
229
|
+
return link_to(changes_url,label,false)
|
147
230
|
end
|
148
|
-
|
149
|
-
|
231
|
+
|
232
|
+
# URL to the given page in the given subwiki
|
233
|
+
# URL is relative or absolute depending on @absolute_urls setting
|
234
|
+
def view_url(subwiki,page)
|
150
235
|
if @absolute_urls then
|
151
236
|
return @web.base_url.chop + view_page_url(subwiki,page)
|
152
237
|
else
|
153
238
|
return view_page_url(subwiki,page)
|
154
239
|
end
|
155
240
|
end
|
156
|
-
|
157
241
|
|
158
|
-
|
242
|
+
# Link to view a page
|
159
243
|
def view_link(subwiki,page,name)
|
160
244
|
if subwiki == @web.name then
|
161
|
-
return
|
245
|
+
return link_to(view_url(subwiki,page),name)
|
162
246
|
else
|
163
|
-
|
247
|
+
if page == name then
|
248
|
+
return link_to(view_url(subwiki,page),"#{subwiki}:#{name}")
|
249
|
+
else
|
250
|
+
return link_to(view_url(subwiki,page),name)
|
251
|
+
end
|
164
252
|
end
|
165
253
|
end
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
254
|
+
|
255
|
+
# Link to a non-wikipages
|
256
|
+
# Images are rendered inline
|
257
|
+
# .rbl pages are performed
|
258
|
+
# HTML files are linked to
|
259
|
+
# Other files are opened in a new browser window
|
260
|
+
def resource_link(subwiki,page,name)
|
261
|
+
if page =~ /^(.+)\.(gif|jpg|jpeg|png)$/i then
|
262
|
+
filename = $1
|
263
|
+
alt_label = name
|
264
|
+
if page == name || url?(name) then
|
265
|
+
alt_label = filename
|
266
|
+
end
|
267
|
+
image_link = "<img src=\"#{resource_url(page)}\" border=0 alt=\"#{alt_label}\" >"
|
268
|
+
if url?(name) then
|
269
|
+
return redirect_link(image_link,name)
|
172
270
|
else
|
173
|
-
return
|
271
|
+
return image_link
|
174
272
|
end
|
175
|
-
|
176
|
-
|
273
|
+
elsif page =~ /^(.*)\.rbl$/i then
|
274
|
+
page_name = $1
|
275
|
+
if page == name then
|
276
|
+
name = page_name
|
277
|
+
end
|
278
|
+
return perform_link(subwiki,page,name)
|
279
|
+
elsif page =~ /^(.+)\.html?$/i then
|
280
|
+
return link_to(resource_url(page),name)
|
281
|
+
else
|
282
|
+
return link_to_new_page(resource_url(page),name)
|
177
283
|
end
|
178
284
|
end
|
179
285
|
|
180
|
-
|
181
|
-
|
286
|
+
# URL to a specific version of a page
|
287
|
+
def view_version_url(subwiki,page,version)
|
288
|
+
return make_verb_url('view',subwiki,page)+query_string( 'version' => version )
|
182
289
|
end
|
183
|
-
|
184
|
-
|
185
|
-
|
290
|
+
|
291
|
+
# Link to a specific version of a page
|
292
|
+
def view_version_link(subwiki,page,name,version)
|
293
|
+
return link_to(view_version_url(subwiki,page,version),name)
|
186
294
|
end
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
295
|
+
|
296
|
+
# URL to diff page versions
|
297
|
+
def diff_url(subwiki,page,from,to)
|
298
|
+
params = Hash.new
|
299
|
+
params['from'] = from if from >= 0
|
300
|
+
params['to'] = to if to >= 0
|
301
|
+
return make_verb_url('diff',subwiki,page)+query_string( params )
|
191
302
|
end
|
192
|
-
|
193
|
-
|
194
|
-
|
303
|
+
|
304
|
+
# Link to page version
|
305
|
+
def diff_link(subwiki,page,name,from,to)
|
306
|
+
return link_to(diff_url(subwiki,page,from,to),name,false) if from == -1 && to == -1
|
307
|
+
return '' if from < 0
|
308
|
+
return '' if from >= to
|
309
|
+
|
310
|
+
return link_to(diff_url(subwiki,page,from,to),name,false)
|
195
311
|
end
|
196
|
-
|
312
|
+
|
313
|
+
# URL to side by side view of two page versions
|
314
|
+
def sidebyside_url(subwiki,page,from,to)
|
315
|
+
params = Hash.new
|
316
|
+
params['from'] = from if from >= 0
|
317
|
+
params['to'] = to if to >= 0
|
318
|
+
return make_verb_url('sidebyside',subwiki,page)+query_string( params )
|
319
|
+
end
|
320
|
+
|
321
|
+
# Link to side by side view of two page versions
|
322
|
+
def sidebyside_link(subwiki,page,name,from,to)
|
323
|
+
return link_to(sidebyside_url(subwiki,page,from,to),name,false) if from == -1 && to == -1
|
324
|
+
return '' if from < 0
|
325
|
+
return '' if from >= to
|
326
|
+
|
327
|
+
return link_to(sidebyside_url(subwiki,page,from,to),name,false)
|
328
|
+
end
|
329
|
+
|
330
|
+
# Link to admin page
|
197
331
|
def admin_link(page,name)
|
198
|
-
return
|
332
|
+
return link_to(make_verb_url('admin',page),name)
|
199
333
|
end
|
200
|
-
|
201
|
-
|
334
|
+
|
335
|
+
|
202
336
|
def redirect_url(url)
|
203
337
|
if @config.redirect_url?(@web,url) then
|
204
|
-
|
205
|
-
return redirected_url
|
338
|
+
return make_verb_url('redirect',@web.name) + "?url=" + CGI::escape(url)
|
206
339
|
else
|
207
340
|
return url
|
208
341
|
end
|
209
342
|
end
|
210
|
-
|
343
|
+
|
211
344
|
def redirect_link(label,url)
|
212
345
|
if @config.redirect_url?(@web,url) then
|
213
|
-
|
214
|
-
return "<a href=\"#{redirected_url}\" rel=\"nofollow\" target=\"_blank\">#{label}</a>"
|
346
|
+
return "<a href=\"#{redirect_url(url)}\" rel=\"nofollow\" target=\"_blank\">#{label}</a>"
|
215
347
|
else
|
216
|
-
return
|
348
|
+
return link_to_new_page(url,label)
|
217
349
|
end
|
218
|
-
|
350
|
+
|
351
|
+
end
|
352
|
+
|
353
|
+
def escape_spaces(name)
|
354
|
+
name.gsub(/ /,'%20')
|
219
355
|
end
|
220
356
|
|
221
|
-
|
357
|
+
# URL to a static resource (under the html subdirectory of the site)
|
222
358
|
def resource_url(name)
|
223
359
|
if @absolute_urls then
|
224
|
-
@web.base_url.chop + make_url('html',@web.name,name)
|
360
|
+
@web.base_url.chop + make_url('html',@web.name,escape_spaces(name))
|
225
361
|
else
|
226
|
-
make_url('html',@web.name,name)
|
362
|
+
make_url('html',@web.name,escape_spaces(name))
|
227
363
|
end
|
228
364
|
end
|
229
|
-
|
365
|
+
|
366
|
+
# Encode a mail address with javascript, so that it isn't harvestable
|
230
367
|
def encode_mail_to(addr)
|
231
|
-
|
232
368
|
addr =~ /(.*)@(.*)/ ;
|
233
369
|
name = $1 ;
|
234
370
|
site = $2 ;
|
235
|
-
|
236
|
-
return "<a href=\"#{view_url(@web.name,"MailFormattingRules")}\" onmouseover=\"this.href='mai' + 'lto:' + '#{name}' + '@' + '#{site}'\">#{name}</a>"
|
371
|
+
return "<a href=\"#{view_url(@web.name,"MailFormattingRules")}\" rel=\"nofollow\" onmouseover=\"this.href='mai' + 'lto:' + '#{name}' + '@' + '#{site}'\">#{name}</a>"
|
237
372
|
end
|
238
|
-
|
373
|
+
|
239
374
|
alias :encodeMailTo :encode_mail_to
|
240
|
-
|
375
|
+
|
241
376
|
private
|
242
|
-
|
243
|
-
|
377
|
+
|
378
|
+
|
244
379
|
def append(before,match,after)
|
245
380
|
result = ''
|
246
381
|
result += before if !before.nil?
|
@@ -248,21 +383,67 @@ module Wiki2Go
|
|
248
383
|
result += after if !after.nil?
|
249
384
|
result
|
250
385
|
end
|
251
|
-
|
386
|
+
|
387
|
+
def format_tags(text)
|
388
|
+
original = text.dup
|
389
|
+
fragments = []
|
390
|
+
while ! text.nil? && text.length > 0
|
391
|
+
if text =~ /<(\S[^>]*)\>/ then
|
392
|
+
before,match,text = $`,$1,$'
|
393
|
+
fragments << format_wiki_markup(before)
|
394
|
+
fragments << escape_url_markers(format_tag(match))
|
395
|
+
else
|
396
|
+
fragments << format_wiki_markup(text)
|
397
|
+
break
|
398
|
+
end
|
399
|
+
end
|
400
|
+
|
401
|
+
fragments.join
|
402
|
+
end
|
403
|
+
|
252
404
|
def format_tag(text)
|
253
|
-
text = text.gsub(/"
|
254
|
-
|
405
|
+
text = text.gsub(/ target="_blank"/,'')
|
406
|
+
text = text.gsub(/^a (.*)"((http|ftp|gopher|news|https)\:[^"]*)"(.*)/i) { "a " + $1 + external_url($2) + $4 }
|
407
|
+
|
255
408
|
return '<' + text + '>'
|
256
409
|
end
|
257
|
-
|
258
|
-
|
410
|
+
|
411
|
+
# Relative URL to the given page in the given subwiki
|
412
|
+
def view_page_url(subwiki,page)
|
413
|
+
if @generate_html && !Page.is_dynamic?(page) then
|
414
|
+
return make_url(subwiki,page + ".html")
|
415
|
+
else
|
416
|
+
return make_verb_url('view',subwiki,page)
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
def perform_link(subwiki,page,name)
|
421
|
+
if @storage.exists?(File.join(subwiki,page)) then
|
422
|
+
url = make_verb_url('view',subwiki,page)
|
423
|
+
if subwiki == @web.name then
|
424
|
+
return link_to(url,name)
|
425
|
+
else
|
426
|
+
return link_to(url,"#{subwiki}:#{name}")
|
427
|
+
end
|
428
|
+
else
|
429
|
+
return editor_link2(subwiki,page,name)
|
430
|
+
end
|
431
|
+
end
|
432
|
+
|
433
|
+
def query_string(parameters)
|
434
|
+
return "" if parameters.nil? || parameters.size == 0
|
435
|
+
return "?" + parameters.collect { |key,value| key.to_s + '=' + CGI::escape(value.to_s)}.sort.join('&')
|
436
|
+
end
|
437
|
+
|
438
|
+
|
439
|
+
|
259
440
|
def format_wiki_markup(line)
|
260
441
|
if line =~ /^(.*)\{\!(.*)\!\}(.*)$/im then
|
261
442
|
before,match,after = $1,$2,$3
|
262
443
|
return append(format_wiki_markup(before),match,format_wiki_markup(after))
|
263
|
-
elsif line =~ /^(.*)<(\S.*)\>(.*)$/ then
|
264
|
-
before,match,after = $1,$2,$3
|
265
|
-
line = append(format_wiki_markup(before),escape_url_markers(format_tag(match)),format_wiki_markup(after))
|
444
|
+
# elsif line =~ /^(.*)<(\S.*)\>(.*)$/ then
|
445
|
+
# before,match,after = $1,$2,$3
|
446
|
+
# line = append(format_wiki_markup(before),escape_url_markers(format_tag(match)),format_wiki_markup(after))
|
266
447
|
elsif line =~ /^(.*)\{\%([^\}]*)\%\}(.*)$/ then
|
267
448
|
before,match,after = $1,$2,$3
|
268
449
|
line = append(format_wiki_markup(before),escape_url_markers(format_dynamic_link(match)),format_wiki_markup(after))
|
@@ -274,34 +455,32 @@ module Wiki2Go
|
|
274
455
|
line = append(format_wiki_markup(before),escape_url_markers(format_forced_link(match)),format_wiki_markup(after))
|
275
456
|
elsif line =~ /^(.*)((http|ftp|gopher|news|https)\:\/\/(\w|\/|\.|_|-|\?|\=|&|;|\~|#|,)+)(.*)$/ then
|
276
457
|
before,match,after = $1,$2,$5
|
277
|
-
line = append(format_wiki_markup(before),escape_url_markers(external_link(match)),format_wiki_markup(after))
|
458
|
+
line = append(format_wiki_markup(before),escape_url_markers(external_link(nil,match)),format_wiki_markup(after))
|
278
459
|
elsif line =~ /^(.*)mailto\:([a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+)(.*)$/ then
|
279
460
|
before,match,after = $1,$2,$3
|
280
461
|
line = append(format_wiki_markup(before),escape_url_markers(encode_mail_to(match)),format_wiki_markup(after))
|
281
462
|
else
|
282
463
|
line = format_brackets(line)
|
283
464
|
line = format_entities(line)
|
284
|
-
line =
|
465
|
+
line = format_wiki_words(line)
|
285
466
|
end
|
286
|
-
line = format_bullets(line)
|
287
|
-
line = format_markup(line)
|
288
467
|
return line
|
289
468
|
end
|
290
|
-
|
469
|
+
|
291
470
|
def formatted_output(line)
|
292
471
|
output = @pre_line + line + @post_line
|
293
472
|
@pre_line = ""
|
294
473
|
@post_line = ""
|
295
474
|
return output
|
296
475
|
end
|
297
|
-
|
298
|
-
|
476
|
+
|
477
|
+
|
299
478
|
def escape_wiki_markers(line)
|
300
479
|
line = line.gsub(/%%/,"&percent;")
|
301
480
|
line = line.gsub(/\{\{/,"&openingbrace;")
|
302
481
|
line = line.gsub(/\}\}/,"&closingbrace;")
|
303
482
|
end
|
304
|
-
|
483
|
+
|
305
484
|
def escape_url_markers(line)
|
306
485
|
line = line.gsub(/%/ ,'&percent;')
|
307
486
|
line = line.gsub(/\{/,'&openingbrace;')
|
@@ -311,7 +490,7 @@ module Wiki2Go
|
|
311
490
|
line = line.gsub(/_/ ,'&underscore;')
|
312
491
|
return line
|
313
492
|
end
|
314
|
-
|
493
|
+
|
315
494
|
def remove_markers(line)
|
316
495
|
line = line.gsub(/&percent;/,"%")
|
317
496
|
line = line.gsub(/&openingbrace;/,"{")
|
@@ -321,14 +500,14 @@ module Wiki2Go
|
|
321
500
|
line = line.gsub(/&underscore;/,"_")
|
322
501
|
return line
|
323
502
|
end
|
324
|
-
|
325
|
-
|
503
|
+
|
504
|
+
|
326
505
|
def format_brackets(line)
|
327
506
|
line = line.gsub(/</,"<\;") ;
|
328
507
|
line = line.gsub(/>/,">\;") ;
|
329
508
|
return line
|
330
509
|
end
|
331
|
-
|
510
|
+
|
332
511
|
def format_entities(line)
|
333
512
|
line = line.gsub(/\~/,"˜") ;
|
334
513
|
line = line.gsub(/&(\w+)\;/,"~\\1\;") ;
|
@@ -338,7 +517,7 @@ module Wiki2Go
|
|
338
517
|
line = line.gsub(/\t/," ") ;
|
339
518
|
return line
|
340
519
|
end
|
341
|
-
|
520
|
+
|
342
521
|
def format_markup(line)
|
343
522
|
line = line.gsub(/\*\*([^\*]*)\*\*/,"<h2>\\1<\/h2>")
|
344
523
|
line = line.gsub(/\*([^\*]+)\*/,"<STRONG>\\1<\/STRONG>")
|
@@ -346,13 +525,13 @@ module Wiki2Go
|
|
346
525
|
line = line.gsub(/^---+/,"<hr>")
|
347
526
|
return line
|
348
527
|
end
|
349
|
-
|
528
|
+
|
350
529
|
def format_bullets(line)
|
351
530
|
line = line.gsub(/^([\s]{3,99})\*(.*)$/) { add_bullet($1,$2,'u') }
|
352
531
|
line = line.gsub(/^([\s]{3,99})(\d)+\.?(.*)$/) { add_bullet($1,$3,'o') }
|
353
532
|
return line
|
354
533
|
end
|
355
|
-
|
534
|
+
|
356
535
|
def format_table(line)
|
357
536
|
if @in_table then
|
358
537
|
replacement = "</table>"
|
@@ -370,59 +549,52 @@ module Wiki2Go
|
|
370
549
|
line = line.gsub(/\|/,"<\/td><td>")
|
371
550
|
end
|
372
551
|
return line
|
373
|
-
|
552
|
+
|
374
553
|
end
|
375
|
-
|
376
|
-
def
|
377
|
-
line = line.gsub(/(^|[^\w\.])([A-Z]+[a-z0-9]+[A-Z]+[a-zA-Z0-9]*)/) { $1 +
|
378
|
-
|
554
|
+
|
555
|
+
def format_wiki_words(line)
|
556
|
+
line = line.gsub(/(^|[^\w\.])([A-Z]+[a-z0-9]+[A-Z]+[a-zA-Z0-9]*)/) { $1 + format_wiki_word($2) }
|
557
|
+
|
379
558
|
end
|
380
|
-
|
381
|
-
def external_link(url)
|
559
|
+
|
560
|
+
def external_link(label,url)
|
382
561
|
if url =~ /([^\/]+)\.(gif|jpg|jpeg|png)$/i then
|
383
|
-
alt = $1
|
562
|
+
alt = label || $1
|
384
563
|
return "<img src=\"#{url}\" alt=\"#{alt}\">"
|
385
564
|
else
|
386
|
-
return redirect_link(url,url)
|
565
|
+
return redirect_link(label || url,url)
|
387
566
|
end
|
388
567
|
end
|
389
|
-
|
390
|
-
def
|
568
|
+
|
569
|
+
def external_url(url)
|
391
570
|
return '"' + redirect_url(url) + (@config.redirect_url?(@web,url) ? '" rel="nofollow"' : '"') +' target="_blank"'
|
392
571
|
end
|
393
|
-
|
572
|
+
|
394
573
|
def format_forced_link(link)
|
395
|
-
if ! link.gsub!(/^([
|
396
|
-
link.gsub!(/^(([
|
574
|
+
if ! link.gsub!(/^([^@]+)@(http.+)$/) { external_link($1,$2) } then
|
575
|
+
link.gsub!(/^(([^@]+)@)?(([^:]+):)?(.+)$/) { internal_link($2,$4,$5) }
|
397
576
|
end
|
398
577
|
link
|
399
578
|
end
|
400
|
-
|
401
|
-
def
|
402
|
-
|
403
|
-
end
|
404
|
-
|
405
|
-
def labelLink(label,url)
|
406
|
-
return redirect_link(label,url)
|
407
|
-
end
|
408
|
-
|
409
|
-
def internalLink(page)
|
410
|
-
return internalSubwikiNamedLink(@web.name,page,page)
|
579
|
+
|
580
|
+
def format_wiki_word(word)
|
581
|
+
internal_link(word,@web.name,word)
|
411
582
|
end
|
412
|
-
|
413
|
-
def
|
414
|
-
|
415
|
-
subwiki = default_wiki if subwiki.nil? || subwiki.empty?
|
416
|
-
internalSubwikiNamedLink(subwiki,page,name)
|
583
|
+
|
584
|
+
def format_dynamic_link(link)
|
585
|
+
return link.gsub(/^(([^\%@]+)@)?(([^\%:]+):)?([^%]+)$/) { dynamic_link($2,$4,$5) }
|
417
586
|
end
|
418
|
-
|
419
|
-
def dynamic_link(
|
420
|
-
|
421
|
-
subwiki =
|
422
|
-
perform_link(subwiki,page+'.rbl',
|
587
|
+
|
588
|
+
def dynamic_link(label,subwiki,page)
|
589
|
+
label = page if label.nil? || label.empty?
|
590
|
+
subwiki = @web.name if subwiki.nil? || subwiki.empty?
|
591
|
+
perform_link(subwiki,page+'.rbl',label)
|
423
592
|
end
|
424
|
-
|
425
|
-
def
|
593
|
+
|
594
|
+
def internal_link(label,subwiki,page)
|
595
|
+
label = page if label.nil? || label.empty?
|
596
|
+
subwiki = @web.name if subwiki.nil? || subwiki.empty?
|
597
|
+
|
426
598
|
if subwiki == "xpnl" then
|
427
599
|
return "<a href=\"http://www.xpnl.org/Wiki/#{page}\" target=\"_blank\">xpnl:#{page}</a>"
|
428
600
|
elsif subwiki == 'xpbe' then
|
@@ -431,49 +603,25 @@ module Wiki2Go
|
|
431
603
|
return "<a href=\"http://c2.com/cgi/wiki?#{page}\" target=\"_blank\">wiki:#{page}</a>"
|
432
604
|
elsif subwiki == "book" then
|
433
605
|
return "<a href=\"http://bookshelved.org/cgi-bin/wiki.pl?#{page}\" target=\"_blank\">book:#{page}</a>"
|
606
|
+
elsif subwiki == 'technorati' then
|
607
|
+
return "<a href=\"http://technorati.com/tag/#{page}\" target=\"_blank\" rel=\"tag\">#{label}</a>"
|
434
608
|
elsif subwiki == "wiki2go" then
|
435
609
|
return "<a href=\"http://wiki2go.nayima.be/Wiki2Go/#{page}.html\" target=\"_blank\">wiki2go:#{page}</a>"
|
436
610
|
elsif subwiki =~ /^isbn$/i then
|
437
|
-
|
438
|
-
return "<a href=\"http://www.amazon.co.uk/exec/obidos/ASIN/#{page}/#{@config.amazon_affiliate}\" target=\"_blank\">#{
|
611
|
+
label = "ISBN " + page if page == label
|
612
|
+
return "<a href=\"http://www.amazon.co.uk/exec/obidos/ASIN/#{page}/#{@config.amazon_affiliate}\" target=\"_blank\">#{label}</a>"
|
439
613
|
elsif page =~ /^isbn(.+)$/i then
|
440
|
-
|
441
|
-
return "<a href=\"http://www.amazon.co.uk/exec/obidos/ASIN/#{$1}/#{@config.amazon_affiliate}\" target=\"_blank\">#{
|
614
|
+
label = "ISBN " + $1 if page == label
|
615
|
+
return "<a href=\"http://www.amazon.co.uk/exec/obidos/ASIN/#{$1}/#{@config.amazon_affiliate}\" target=\"_blank\">#{label}</a>"
|
442
616
|
elsif page =~ /\./ then
|
443
|
-
return resource_link(subwiki,page,
|
617
|
+
return resource_link(subwiki,page,label)
|
444
618
|
elsif @storage.exists?(File.join(subwiki,page)) then
|
445
|
-
return view_link(subwiki,page,
|
446
|
-
else
|
447
|
-
return edit_link(subwiki,page,name)
|
448
|
-
end
|
449
|
-
end
|
450
|
-
|
451
|
-
def resource_link(subwiki,page,name)
|
452
|
-
if page =~ /^(.+)\.(gif|jpg|jpeg|png)$/i then
|
453
|
-
filename = $1
|
454
|
-
alt_label = name
|
455
|
-
if page == name || url?(name) then
|
456
|
-
alt_label = filename
|
457
|
-
end
|
458
|
-
image_link = "<img src=\"#{resource_url(page)}\" border=0 alt=\"#{alt_label}\" >"
|
459
|
-
if url?(name) then
|
460
|
-
return redirect_link(image_link,name)
|
461
|
-
else
|
462
|
-
return image_link
|
463
|
-
end
|
464
|
-
elsif page =~ /^(.*)\.rbl$/i then
|
465
|
-
page_name = $1
|
466
|
-
if page == name then
|
467
|
-
name = page_name
|
468
|
-
end
|
469
|
-
return perform_link(subwiki,page,name)
|
470
|
-
elsif page =~ /^(.+)\.html?$/i then
|
471
|
-
return "<a href=\"#{resource_url(page)}\">#{name}</a>"
|
619
|
+
return view_link(subwiki,page,label)
|
472
620
|
else
|
473
|
-
return
|
621
|
+
return editor_link2(subwiki,page,label)
|
474
622
|
end
|
475
623
|
end
|
476
|
-
|
624
|
+
|
477
625
|
def add_bullet(prefix,text,code)
|
478
626
|
@added_bullets = true
|
479
627
|
depth = prefix.length / 3
|
@@ -497,18 +645,18 @@ module Wiki2Go
|
|
497
645
|
end
|
498
646
|
return result + "<li>#{text}"
|
499
647
|
end
|
500
|
-
|
648
|
+
|
501
649
|
def emit_bullets
|
502
650
|
while ! @bullets.empty?
|
503
651
|
bullet = @bullets.pop
|
504
652
|
@pre_line += "</#{bullet}l>"
|
505
653
|
end
|
506
654
|
end
|
507
|
-
|
655
|
+
|
508
656
|
def url?(name)
|
509
657
|
name =~ /(http|ftp|gopher|news|https)\:(\w|\/|\.|_|-|\?|\=|&|;|\~|#|,)+/
|
510
658
|
end
|
511
|
-
|
659
|
+
|
512
660
|
end
|
513
|
-
|
661
|
+
|
514
662
|
end
|