ruwiki 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Readme.rubygems +86 -0
- data/Readme.tarfile +65 -0
- data/bin/ruwiki +58 -0
- data/bin/ruwiki.cgi +87 -0
- data/bin/ruwiki_convert +56 -0
- data/bin/ruwiki_service.rb +82 -0
- data/bin/ruwiki_servlet +53 -0
- data/contrib/enscript-token.rb +55 -0
- data/contrib/rublog_integrator.rb +68 -0
- data/data/Default/ProjectIndex.ruwiki +49 -0
- data/data/Ruwiki/Antispam.ruwiki +65 -0
- data/data/Ruwiki/BugTracking.ruwiki +33 -0
- data/data/Ruwiki/ChangeLog.ruwiki +102 -0
- data/data/Ruwiki/Configuring_Ruwiki.ruwiki +151 -0
- data/data/Ruwiki/Extending_Ruwiki.ruwiki +317 -0
- data/data/Ruwiki/LicenseAndAuthorInfo.ruwiki +30 -0
- data/data/Ruwiki/ProjectIndex.ruwiki +84 -0
- data/data/Ruwiki/Roadmap.ruwiki +225 -0
- data/data/Ruwiki/RuwikiTemplatingLibrary.ruwiki +156 -0
- data/data/Ruwiki/RuwikiUtilities.ruwiki +157 -0
- data/data/Ruwiki/SandBox.ruwiki +9 -0
- data/data/Ruwiki/To_Do.ruwiki +51 -0
- data/data/Ruwiki/TroubleShooting.ruwiki +33 -0
- data/data/Ruwiki/WikiFeatures.ruwiki +17 -0
- data/data/Ruwiki/WikiMarkup.ruwiki +261 -0
- data/data/Tutorial/AddingPages.ruwiki +16 -0
- data/data/Tutorial/AddingProjects.ruwiki +16 -0
- data/data/Tutorial/ProjectIndex.ruwiki +11 -0
- data/data/Tutorial/SandBox.ruwiki +9 -0
- data/data/agents.banned +60 -0
- data/data/agents.readonly +321 -0
- data/data/hostip.banned +30 -0
- data/data/hostip.readonly +28 -0
- data/lib/ruwiki.rb +622 -0
- data/lib/ruwiki/auth.rb +56 -0
- data/lib/ruwiki/auth/gforge.rb +73 -0
- data/lib/ruwiki/backend.rb +318 -0
- data/lib/ruwiki/backend/flatfiles.rb +217 -0
- data/lib/ruwiki/config.rb +244 -0
- data/lib/ruwiki/exportable.rb +192 -0
- data/lib/ruwiki/handler.rb +342 -0
- data/lib/ruwiki/lang/de.rb +339 -0
- data/lib/ruwiki/lang/en.rb +334 -0
- data/lib/ruwiki/lang/es.rb +339 -0
- data/lib/ruwiki/page.rb +262 -0
- data/lib/ruwiki/servlet.rb +38 -0
- data/lib/ruwiki/template.rb +553 -0
- data/lib/ruwiki/utils.rb +24 -0
- data/lib/ruwiki/utils/command.rb +102 -0
- data/lib/ruwiki/utils/converter.rb +297 -0
- data/lib/ruwiki/utils/manager.rb +639 -0
- data/lib/ruwiki/utils/servletrunner.rb +295 -0
- data/lib/ruwiki/wiki.rb +147 -0
- data/lib/ruwiki/wiki/tokens.rb +136 -0
- data/lib/ruwiki/wiki/tokens/00default.rb +211 -0
- data/lib/ruwiki/wiki/tokens/01wikilinks.rb +166 -0
- data/lib/ruwiki/wiki/tokens/02actions.rb +63 -0
- data/lib/ruwiki/wiki/tokens/abbreviations.rb +40 -0
- data/lib/ruwiki/wiki/tokens/calendar.rb +147 -0
- data/lib/ruwiki/wiki/tokens/headings.rb +43 -0
- data/lib/ruwiki/wiki/tokens/lists.rb +112 -0
- data/lib/ruwiki/wiki/tokens/rubylists.rb +48 -0
- data/ruwiki.conf +22 -0
- data/ruwiki.pkg +0 -0
- data/templates/default/body.tmpl +19 -0
- data/templates/default/content.tmpl +7 -0
- data/templates/default/controls.tmpl +23 -0
- data/templates/default/edit.tmpl +27 -0
- data/templates/default/error.tmpl +14 -0
- data/templates/default/footer.tmpl +23 -0
- data/templates/default/ruwiki.css +297 -0
- data/templates/default/save.tmpl +8 -0
- data/templates/sidebar/body.tmpl +19 -0
- data/templates/sidebar/content.tmpl +8 -0
- data/templates/sidebar/controls.tmpl +8 -0
- data/templates/sidebar/edit.tmpl +27 -0
- data/templates/sidebar/error.tmpl +13 -0
- data/templates/sidebar/footer.tmpl +22 -0
- data/templates/sidebar/ruwiki.css +347 -0
- data/templates/sidebar/save.tmpl +10 -0
- data/templates/simple/body.tmpl +13 -0
- data/templates/simple/content.tmpl +7 -0
- data/templates/simple/controls.tmpl +8 -0
- data/templates/simple/edit.tmpl +25 -0
- data/templates/simple/error.tmpl +10 -0
- data/templates/simple/footer.tmpl +10 -0
- data/templates/simple/ruwiki.css +192 -0
- data/templates/simple/save.tmpl +8 -0
- data/tests/harness.rb +52 -0
- data/tests/tc_backend_flatfile.rb +103 -0
- data/tests/tc_bugs.rb +74 -0
- data/tests/tc_exportable.rb +64 -0
- data/tests/tc_template.rb +145 -0
- data/tests/tc_tokens.rb +335 -0
- data/tests/testall.rb +20 -0
- metadata +182 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
page!content: = Extending Ruwiki 0.9.0
|
|
2
|
+
Ruwiki is relatively easily extended to support new features. There are
|
|
3
|
+
four primary ways in which Ruwiki can be extended or modified by the
|
|
4
|
+
end user: templates, translating Ruwiki messages and labels, markup
|
|
5
|
+
tokens, and creating new backends.
|
|
6
|
+
|
|
7
|
+
== Templates
|
|
8
|
+
Templating is done with a heavily modified version of the \RDoc
|
|
9
|
+
template.rb library included in the distribution of Ruwiki. The
|
|
10
|
+
templating library allows for nested templates, and this is used
|
|
11
|
+
extensively in Ruwiki. This library is documented in
|
|
12
|
+
RuwikiTemplatingLibrary.
|
|
13
|
+
|
|
14
|
+
There are four major templates: content, edit, save, and error. Each of
|
|
15
|
+
these has a slightly different combination of template files used, and
|
|
16
|
+
this means that there are different sets of variables available.
|
|
17
|
+
|
|
18
|
+
The major templates are “composite templates” that are
|
|
19
|
+
defined as follows:
|
|
20
|
+
; content or search : body.tmpl, content.tmpl, controls.tmpl, footer.tmpl
|
|
21
|
+
; edit or preview : body.tmpl, edit.tmpl
|
|
22
|
+
; save : body.tmpl, save.tmpl, controls.tmpl, footer.tmpl
|
|
23
|
+
; error : body.tmpl, error.tmpl
|
|
24
|
+
|
|
25
|
+
=== Common Variables
|
|
26
|
+
The following template variables are presented for all composite
|
|
27
|
+
templates.
|
|
28
|
+
; <tt>%css_link%</tt> : The contents of the CSS file for the template set.
|
|
29
|
+
; <tt>%home_link%</tt> : A link to the root page of the Wiki.
|
|
30
|
+
; <tt>%editable%</tt> : A boolean value to mark the page as editable or not. Used in a conditional block in the templates.
|
|
31
|
+
; <tt>%cgi_url%</tt> : The URL for the Wiki.
|
|
32
|
+
; <tt>%content%</tt> : The formatted content of the current page.
|
|
33
|
+
; <tt>%page_project%</tt> : The project for the current page.
|
|
34
|
+
; <tt>%page_raw_topic%</tt> : The topic for the current page, escaped for safe transmission over the web.
|
|
35
|
+
; <tt>%page_topic%</tt> : The printable topic for the current page.
|
|
36
|
+
; <tt>%url_project%</tt> : The URL to the current page’s project.
|
|
37
|
+
; <tt>%url_topic_search%</tt> : The URL to search for the current topic in the current project.
|
|
38
|
+
; <tt>%link_topic_search%</tt> : A link to the current topic search.
|
|
39
|
+
|
|
40
|
+
=== Variables for :content, :save, :search, :edit, :preview
|
|
41
|
+
; <tt>%message%</tt> : A message presented at the top of the Wiki when Ruwiki needs to inform the user of something that is not an error.
|
|
42
|
+
|
|
43
|
+
=== Variables for :content, :save, :search
|
|
44
|
+
; <tt>%wiki_title%</tt> : The title of the Wiki.
|
|
45
|
+
; <tt>%label_topic_or_search%</tt> : Either <tt>#topic#</tt> or <tt>#search#</tt>.
|
|
46
|
+
; <tt>%page_topic_name%</tt> : The same as <tt>%page_topic%</tt>.
|
|
47
|
+
|
|
48
|
+
=== Variables for :edit, :preview
|
|
49
|
+
; <tt>%wiki_title%</tt> : The title of the Wiki with a tag to indicate that the page is being edited.
|
|
50
|
+
; <tt>%page_content%</tt> : The content of the page.
|
|
51
|
+
; <tt>%page_version%</tt> : The current version number of the page.
|
|
52
|
+
; <tt>%unedited_page_content%</tt> : The formatted, unedited content of the page.
|
|
53
|
+
; <tt>%pre_page_content%</tt> : A Web-escaped form of the page content.
|
|
54
|
+
; <tt>%edit_comment%</tt> : The current edit comment.
|
|
55
|
+
|
|
56
|
+
=== Variables for :error
|
|
57
|
+
; <tt>%wiki_title%</tt> : The title of the Wiki with an error message.
|
|
58
|
+
; <tt>%name%</tt> : The name of the error.
|
|
59
|
+
; <tt>%backtrace%</tt> : The backtrace of the error.
|
|
60
|
+
; <tt>%backtrace_email%</tt> : The backtrace of the error formatted for sending by email.
|
|
61
|
+
; <tt>%webmaster%</tt> : The email address of the webmaster.
|
|
62
|
+
|
|
63
|
+
== Translating Ruwiki Messages
|
|
64
|
+
: NOTE: The mechanism for specifying language may be changed in a
|
|
65
|
+
: future version of Ruwiki, although the internationalisation mechanism
|
|
66
|
+
: will not be changing.
|
|
67
|
+
|
|
68
|
+
Ruwiki is internationalized. This method sets the Ruwiki error messages
|
|
69
|
+
(and a few other messages) to the specified language Module. The
|
|
70
|
+
language Module must have a constant Hash called <tt>Message</tt>
|
|
71
|
+
containing a set of symbols and localized versions of the messages
|
|
72
|
+
associated with them.
|
|
73
|
+
|
|
74
|
+
If the file <em>ruwiki/lang/es.rb</em> contains the module
|
|
75
|
+
<tt>Ruwiki::Lang::ES</tt>, the messages for RSS could be localized to
|
|
76
|
+
Spanish thus:
|
|
77
|
+
|
|
78
|
+
require 'ruwiki/lang/es'
|
|
79
|
+
...
|
|
80
|
+
wiki.config.language = Ruwiki::Lang::ES
|
|
81
|
+
|
|
82
|
+
Localization is currently per wiki instance. In a servlet environment,
|
|
83
|
+
this may mean that only a single language is recognised.
|
|
84
|
+
|
|
85
|
+
It is recommended that the hash be created with a default proc that
|
|
86
|
+
reports unknown message keys.
|
|
87
|
+
|
|
88
|
+
Message = Hash.new { |h, k| "Language ERROR: Unknown message key #{k.inspect}." }
|
|
89
|
+
|
|
90
|
+
== Extending Ruwiki Markup
|
|
91
|
+
|
|
92
|
+
: <strong>WARNING:</strong> These \APIs will change in Ruwiki 0.9.0,
|
|
93
|
+
: replacing the instance variables @project, @backend, and @script with
|
|
94
|
+
: a Handler object. There may be other changes as well.
|
|
95
|
+
|
|
96
|
+
Ruwiki’s WikiMarkup can be extended by creating a new
|
|
97
|
+
Ruwiki::Wiki::Token. Tokens will be automatically loaded if they are
|
|
98
|
+
placed in <em>ruwiki/wiki/tokens</em>.
|
|
99
|
+
|
|
100
|
+
It is recommended that new tokens be added to the test cases in
|
|
101
|
+
<tt>tests/tc_tokens.rb</tt>.
|
|
102
|
+
|
|
103
|
+
The following Ruwiki::Wiki::Token class will convert strings in the
|
|
104
|
+
forms of \[ruby-talk:12345] to links.
|
|
105
|
+
|
|
106
|
+
class RubyTalkLinks < Ruwiki::Wiki::Token
|
|
107
|
+
def self.rank
|
|
108
|
+
2
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def self.regexp
|
|
112
|
+
%r{\[ruby-talk:(\d+)\]}
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def replace
|
|
116
|
+
lm = @match.captures[0]
|
|
117
|
+
%Q(<a class="rw_extlink" href="http://www.ruby-talk.org/#{lm}">#{@match[0]}</a>)
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
=== Known Instance Variables
|
|
122
|
+
==== @match
|
|
123
|
+
The match data for this token instance is is kept in @match. This is
|
|
124
|
+
what will be used in #replace and #restore.
|
|
125
|
+
|
|
126
|
+
==== @project
|
|
127
|
+
The project being processed.
|
|
128
|
+
|
|
129
|
+
==== @backend
|
|
130
|
+
The Backend for the wiki. If you are using Ruwiki tokenizers outside of
|
|
131
|
+
Ruwiki, this does not need to be a \BackendDelegator, but can be the
|
|
132
|
+
direct Backend (which expects less information).
|
|
133
|
+
|
|
134
|
+
==== @script
|
|
135
|
+
The URI to the script.
|
|
136
|
+
|
|
137
|
+
==== @message
|
|
138
|
+
The message hash for displaying localised messages.
|
|
139
|
+
|
|
140
|
+
==== @title
|
|
141
|
+
The title of the wiki instance.
|
|
142
|
+
|
|
143
|
+
=== Required Methods
|
|
144
|
+
==== ::regexp
|
|
145
|
+
Ruwiki tokens are matched only through regular expression matches. As
|
|
146
|
+
shown in the example above, the regular expression for ruby-talk
|
|
147
|
+
mailing list posts is <tt>%r{\[ruby-\talk:(\d+)\]}</tt>. The purpose of
|
|
148
|
+
the ::regexp method is to return the regexp for matching.
|
|
149
|
+
|
|
150
|
+
For most inline matches, Ruwiki will ensure that the escape character
|
|
151
|
+
(\) works automatically. For whole-line matches, it is necessary to
|
|
152
|
+
match the escape character manually and provide a #restore method.
|
|
153
|
+
|
|
154
|
+
As an example, the \HRule class implements these methods.
|
|
155
|
+
|
|
156
|
+
def self.regexp
|
|
157
|
+
%r|^\\?-{4,}|
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
def restore
|
|
161
|
+
@match[0][1 .. -1]
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
It may also be necessary to match escapes manually on inline matches
|
|
165
|
+
that must be along word boundaries where the regular expression
|
|
166
|
+
includes characters that normally match word boundaries. The project
|
|
167
|
+
index match (e.g., \::Ruwiki) regular expression does this
|
|
168
|
+
<tt>%r{(\B|\\)::([A-Z][a-z]+)}</tt>.
|
|
169
|
+
|
|
170
|
+
==== #replace
|
|
171
|
+
This returns the formatted token. In the \RubyTalkLinks class above,
|
|
172
|
+
the matched regular expression will be replaced with a hyperlink. The
|
|
173
|
+
text of the hyperlink will be the matched text; the target of the
|
|
174
|
+
hyperlink will include the first captured value.
|
|
175
|
+
|
|
176
|
+
def replace
|
|
177
|
+
lm = @match.captures[0]
|
|
178
|
+
%Q(<a class="rw_extlink" href="http://www.ruby-talk.org/#{lm}">#{@match[0]}</a>)
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
=== Optional Methods
|
|
182
|
+
==== ::rank
|
|
183
|
+
By default, a token will be processed in the order created. Tokens may
|
|
184
|
+
be given a specific rank to ensure that they are processed in a
|
|
185
|
+
particular order. The default rank is <tt>9999</tt>.
|
|
186
|
+
|
|
187
|
+
==== #restore
|
|
188
|
+
Restores the token without replacement. Implements the results of the
|
|
189
|
+
escape character. Each Token class is responsible for its own
|
|
190
|
+
restoration. As noted in #regexp, whole-line tokens are most likely to
|
|
191
|
+
need a #restore implementation.
|
|
192
|
+
|
|
193
|
+
==== ::post_replace
|
|
194
|
+
Performs any necessary massaging of the data. The Lists token uses this
|
|
195
|
+
to ensure that lists are collapsed together; the Paragraph token uses
|
|
196
|
+
this to ensure that there are no empty paragraph tag pairs
|
|
197
|
+
(<p></p>).
|
|
198
|
+
|
|
199
|
+
: <strong>Note:</strong> This has been changed from Ruwiki 0.6.x.
|
|
200
|
+
: Plugins written for the Ruwiki 0.6.x Token API will need to be
|
|
201
|
+
: modified so that this is defined as:
|
|
202
|
+
|
|
203
|
+
def self.post_replace
|
|
204
|
+
...
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
: as opposed to:
|
|
208
|
+
|
|
209
|
+
def post_replace
|
|
210
|
+
...
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
== Extending Ruwiki Backends
|
|
214
|
+
Ruwiki can support varying backends, as the backend interface has been
|
|
215
|
+
abstracted completely from the data store. The backend
|
|
216
|
+
<strong>must</strong>:
|
|
217
|
+
|
|
218
|
+
# reside in <em>ruwiki/backends/</em> as <em>backend_name</em>.rb.
|
|
219
|
+
# be registered by adding the <em>backend_name</em> as a symbol (e.g., :<em>backend_name</em>) to Ruwiki::KNOWN_BACKENDS.
|
|
220
|
+
# inherit from Ruwiki::Backend.
|
|
221
|
+
# exist as Ruwiki::Backend::<em>\Backend_name</em>.
|
|
222
|
+
|
|
223
|
+
=== Required Methods
|
|
224
|
+
==== #initialize(storage_options)
|
|
225
|
+
The backend may only obtain its configuration information from an
|
|
226
|
+
option hash provided by the \BackendDelegate. This is obtained from
|
|
227
|
+
<tt>wiki.config.options[backend]</tt>. If a configuration error is
|
|
228
|
+
detected during initialization, the backend should raise the
|
|
229
|
+
\Ruwiki::Backend exception class \BackendError. This would be done
|
|
230
|
+
with:
|
|
231
|
+
|
|
232
|
+
raise Ruwiki::Backend::BackendError.new([:message_symbol, [message_parameters]])
|
|
233
|
+
|
|
234
|
+
Backend writers should add appropriate messages to the
|
|
235
|
+
<em>lang/en.rb</em> at a minimum. The \BackendDelegator will detect
|
|
236
|
+
this and report the results appropriately.
|
|
237
|
+
|
|
238
|
+
==== #load(topic, project)
|
|
239
|
+
The backend will be provided the name of the topic and project. It must
|
|
240
|
+
return the selected page as a hash of hashes. The hash must match that
|
|
241
|
+
of \Ruwiki::Page#export. It will be passed as the parameter to
|
|
242
|
+
\Ruwiki:::Page.new.
|
|
243
|
+
|
|
244
|
+
==== #store(page)
|
|
245
|
+
This method must store the provided Ruwiki::Page object. Current Ruwiki
|
|
246
|
+
backend implementations store the Ruwiki::Page#export hash. This method
|
|
247
|
+
is responsible for calling the private method Backend#make_diff and
|
|
248
|
+
adding the result to the list of diffs for the page.
|
|
249
|
+
|
|
250
|
+
===== Backend#make_diff(oldpage, newpage)
|
|
251
|
+
This method expects two page objects, or their Ruwiki::Page#export
|
|
252
|
+
representation. It will return a hash representing the difference set
|
|
253
|
+
between the two pages.
|
|
254
|
+
|
|
255
|
+
==== #obtain_lock(page, time, expire, address = 'UKNOWN')
|
|
256
|
+
Obtains an exclusive lock on the page. The \BackendDelegator is called
|
|
257
|
+
with the page, the address, and a timeout which is provided. The time
|
|
258
|
+
is provided by the call to the BackendDelegate, and the expire is also
|
|
259
|
+
provided by the call to the BackendDelegate which is given a timeout
|
|
260
|
+
value (by default 600 seconds). If the lock is still in effect, a
|
|
261
|
+
second call to #obtain_lock should renew the timeout on the lock.
|
|
262
|
+
|
|
263
|
+
==== #release_lock(page, address = 'UNKNOWN')
|
|
264
|
+
Releases the exclusive lock on the page. The lock should not be released
|
|
265
|
+
unless the IP address on the lock is the same or the lock has expired.
|
|
266
|
+
|
|
267
|
+
==== #project_exists?(project)
|
|
268
|
+
Returns <tt>true</tt> if the project exists.
|
|
269
|
+
|
|
270
|
+
==== #page_exists?(topic, project = 'Default')
|
|
271
|
+
Returns <tt>true</tt> if the page exists within the specified project.
|
|
272
|
+
|
|
273
|
+
==== #create_project(project)
|
|
274
|
+
Attempts to create the project.
|
|
275
|
+
|
|
276
|
+
==== #search_project(project, search_string)
|
|
277
|
+
String search all topic names and content in a project and return a
|
|
278
|
+
hash of topic hits:
|
|
279
|
+
|
|
280
|
+
topicname => hits
|
|
281
|
+
|
|
282
|
+
==== #list_projects
|
|
283
|
+
Return an array of all projects.
|
|
284
|
+
|
|
285
|
+
==== #list_topics(project)
|
|
286
|
+
Return an array of all topics within the project.
|
|
287
|
+
|
|
288
|
+
=== Future Methods
|
|
289
|
+
Note that these methods are currently optional (they are not yet called
|
|
290
|
+
from Ruwiki), but will become required moving forward as the functions
|
|
291
|
+
are implemented in Ruwiki.
|
|
292
|
+
|
|
293
|
+
==== #destroy(page)
|
|
294
|
+
Removes the page from the wiki. This should <strong>not</strong> remove
|
|
295
|
+
the change history of the topic (in the event that the page has been
|
|
296
|
+
removed maliciously). There will be a separate method to remove the
|
|
297
|
+
page history.
|
|
298
|
+
|
|
299
|
+
==== #destroy_project(project)
|
|
300
|
+
Attempts to destroy the project.
|
|
301
|
+
|
|
302
|
+
=== Optional Methods
|
|
303
|
+
These methods are completely optional. They are guarded in the
|
|
304
|
+
\BackendDelegate by a call to #respond_to?().
|
|
305
|
+
|
|
306
|
+
==== #global_search(search_string)
|
|
307
|
+
The global search in the backend delegate is by default implemented as
|
|
308
|
+
a looping search through all projects. A backend may have a more
|
|
309
|
+
efficient backend global search mechanism. If the backend responds to
|
|
310
|
+
#global_search, then the \BackendDelegate will use this method.
|
|
311
|
+
properties!project: Ruwiki
|
|
312
|
+
properties!title: Extending_Ruwiki
|
|
313
|
+
properties!topic: Extending_Ruwiki
|
|
314
|
+
properties!version: 1
|
|
315
|
+
ruwiki!content-version: 2
|
|
316
|
+
ruwiki!version: 0.9.0
|
|
317
|
+
properties!editable: false
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
page!content: = Ruwiki Licence
|
|
2
|
+
Ruwiki is copyright © 2002 - 2004 [mailto:alan@digikata.com Alan
|
|
3
|
+
Chen] and [mailto:ruwiki@halostatue.ca Austin Ziegler].
|
|
4
|
+
|
|
5
|
+
Ruwiki is provided free of use and without any warranty express or
|
|
6
|
+
implied. You may use, distribute, or modify Ruwiki under the conditions
|
|
7
|
+
of Ruby’s licence or the [http://www.gnu.org/copyleft/gpl.html
|
|
8
|
+
GNU General Public Licence].
|
|
9
|
+
|
|
10
|
+
* Ruwiki includes a modified version of rdoc/template.rb originally by Dave Thomas for use in \RDoc.
|
|
11
|
+
|
|
12
|
+
== Translations
|
|
13
|
+
* Translation to German by [mailto:chneukirchen@yahoo.de Christian Neukirchen] on 2003.10.22, with corrections by Mauricio Fernáez. Note that the initial template translations (./templates/de/) were done via \AltaVista Babelfish and should not be blamed on Christian.
|
|
14
|
+
* Translation to Spanish by [mailto:batsman.geo@yahoo.com Mauricio Fernández] on 2003.10.22. Note that the initial template translations (./templates/es/) were done via \AltaVista Babelfish and should not be blamed on Mauricio.
|
|
15
|
+
|
|
16
|
+
== Austin’s Other Projects
|
|
17
|
+
Austin has also released several other projects available on the RAA that you may be interested in:
|
|
18
|
+
* [http://raa.ruby-lang.org/list.rhtml?name=mime-types MIME::Types], \RubyForge [http://rubyforge.org/projects/mime-types project].
|
|
19
|
+
* [http://raa.ruby-lang.org/list.rhtml?name=pdf-writer PDF::Writer], \RubyForge [http://rubyforge.org/projects/ruby-pdf project].
|
|
20
|
+
* [http://raa.ruby-lang.org/list.rhtml?name=text-format Text::Format], \RubyForge [http://rubyforge.org/projects/text-format project].
|
|
21
|
+
* [http://raa.ruby-lang.org/list.rhtml?name=trans-simple Transaction::Simple], \RubyForge [http://rubyforge.org/projects/trans-simple project].
|
|
22
|
+
* [http://raa.ruby-lang.org/list.rhtml?name=uninheritable Uninheritable], Transaction::Simple’s \RubyForge [http://rubyforge.org/projects/trans-simple project].
|
|
23
|
+
* [http://raa.ruby-lang.org/list.rhtml?name=diff-lcs Diff::LCS], Ruwiki’s \RubyForge [http://rubyforge.org/projects/ruwiki project].
|
|
24
|
+
properties!project: Ruwiki
|
|
25
|
+
properties!title: LicenseAndAuthorInfo
|
|
26
|
+
properties!topic: LicenseAndAuthorInfo
|
|
27
|
+
properties!version: 1
|
|
28
|
+
ruwiki!content-version: 2
|
|
29
|
+
ruwiki!version: 0.9.0
|
|
30
|
+
properties!editable: false
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
page!content: = Ruwiki 0.9.0
|
|
2
|
+
This is the \ProjectIndex page for Ruwiki. For any given project, the
|
|
3
|
+
\ProjectIndex topic will be the default topic for plain project links.
|
|
4
|
+
|
|
5
|
+
== Features and Information
|
|
6
|
+
* This wiki supports a variety of WikiFeatures that you may be interested in. The rules for WikiMarkup are similar to some other wikis, but there are a few unique markup capabilities in Ruwiki.
|
|
7
|
+
* Configuring_Ruwiki is simple.
|
|
8
|
+
* Extending_Ruwiki is almost as simple.
|
|
9
|
+
* What you need to know for using Ruwiki's [[Antispam]] capabilities.
|
|
10
|
+
* Who wrote Ruwiki? Read the LicenseAndAuthorInfo.
|
|
11
|
+
|
|
12
|
+
== Requirements
|
|
13
|
+
Ruwiki currently requires Ruby 1.8, Diff::LCS 1.1.2 and
|
|
14
|
+
Archive::Tar::Minitar 0.5.1. These packages are included in the
|
|
15
|
+
<em>packages/</em> directory in the
|
|
16
|
+
<code>ruwiki-0.9.0-full.tar.gz</code> form of the distribution.
|
|
17
|
+
|
|
18
|
+
The YAML backend requires Ruby 1.8.2 preview 3 or later.
|
|
19
|
+
|
|
20
|
+
== Upgrading
|
|
21
|
+
Ruwiki 0.9.0 has a flatfile format that is incompatible with versions
|
|
22
|
+
of Ruwiki older than Ruwiki 0.8.0. If you are upgrading from one of
|
|
23
|
+
these versions, you must use the bin/ruwiki_convert. The simple case
|
|
24
|
+
will be (assuming that your data files are in ./data):
|
|
25
|
+
|
|
26
|
+
% ruwiki_convert ./data
|
|
27
|
+
|
|
28
|
+
The ruwiki_convert utility is automatically installed by \RubyGems and
|
|
29
|
+
RPA. See RuwikiUtilities for more information. Note that this utility
|
|
30
|
+
will probably be incorporated into the main Ruwiki utility in a future
|
|
31
|
+
version.
|
|
32
|
+
|
|
33
|
+
== Getting Started
|
|
34
|
+
There are some differences between the startup of <tt>.tar.gz</tt>,
|
|
35
|
+
\RubyGems, and RPA installations of Ruwiki.
|
|
36
|
+
|
|
37
|
+
=== \QuickStart (Read-only: \RubyGem and RPA Installation Only)
|
|
38
|
+
Run:
|
|
39
|
+
% ruwiki_servlet --central
|
|
40
|
+
|
|
41
|
+
Point your web browser to \http://localhost:8808/.
|
|
42
|
+
|
|
43
|
+
=== \QuickStart (CGI)
|
|
44
|
+
# Install the Ruwiki CGI (<tt>ruwiki.cgi</tt>) program in a place where your webserver can execute it.
|
|
45
|
+
#* <strong>\RubyGem:</strong> <tt>ruwiki install cgi,data --to <em>directory</em></tt>
|
|
46
|
+
#* <strong><tt>.tar.gz</tt>:</strong> Extract the Ruwiki directory to that directory. <tt>cp bin/ruwiki.cgi .</tt> <em>or</em> <tt>copy bin\ruwiki.cgi .</tt>
|
|
47
|
+
# Point your web browser to the appropriate URL.
|
|
48
|
+
|
|
49
|
+
=== \QuickStart (\WEBrick)
|
|
50
|
+
# Install the Ruwiki servlet or data.
|
|
51
|
+
#* <strong>\RubyGem:</strong> <tt>ruwiki install data --to <em>directory</em></tt> <em>or</em> <tt>ruwiki install servlet,data --to <em>directory</em></tt>
|
|
52
|
+
#* <strong><tt>.tar.gz</tt>:</strong> Extract the Ruwiki directory.
|
|
53
|
+
# Run <tt>ruwiki_servlet</tt>. Under the <tt>.tar.gz</tt>, this would be <tt>bin/ruwiki_servlet</tt> <em>or</em> <tt>ruby bin\ruwiki_servlet</tt>
|
|
54
|
+
# Point your web browser to \http://localhost:8808/.
|
|
55
|
+
|
|
56
|
+
== Support
|
|
57
|
+
* Troubles with Ruwiki? See TroubleShooting for some suggestions. Have a new problem? Add it to the main [http://ruwiki.rubyforge.org/ruwiki.cgi/Ruwiki/TroubleShooting TroubleShooting] page.
|
|
58
|
+
* Subscribe to [http://rubyforge.org/mailman/listinfo/ruwiki-discuss ruwiki-discuss] ([http://rubyforge.org/pipermail/ruwiki-discuss/ archives]).
|
|
59
|
+
* You can also use the [http://rubyforge.org/forum/?group_id=84 Ruwiki Public Forum] or the on \RubyForge.
|
|
60
|
+
|
|
61
|
+
== Tracking Ruwiki Development
|
|
62
|
+
The development progress of Ruwiki is kept primarily in the wiki
|
|
63
|
+
itself, but the services of [http://rubyforge.org RubyForge] are used
|
|
64
|
+
as well.
|
|
65
|
+
* The BugTracking page in Ruwiki keeps track of open and closed bugs in Ruwiki. Bugs can also be found in the \RubyForge [http://rubyforge.org/tracker/?atid=407&group_id=84&func=browse bug tracker] and [http://rubyforge.org/tracker/?atid=408&group_id=84&func=browse Support Requests].
|
|
66
|
+
* The To_Do list keeps track of major development goals for Ruwiki. Items for this list can be found on \RubyForge in [http://rubyforge.org/tracker/?atid=410&group_id=84&func=browse Feature Requests] and [http://rubyforge.org/tracker/?atid=409&group_id=84&func=browse Patches].
|
|
67
|
+
* There is a mailing list to track CVS changes: [http://rubyforge.org/mailman/listinfo/ruwiki-checkin ruwiki-checkin] ([http://rubyforge.org/pipermail/ruwiki-checkin/ archives]).
|
|
68
|
+
|
|
69
|
+
== Different Features?
|
|
70
|
+
If this wiki doesn’t have the right combination of features, (or if it
|
|
71
|
+
just doesn’t feel right) try these other Ruby-based Wikis:
|
|
72
|
+
|
|
73
|
+
* [http://pimwiki.rubyforge.org/ PIMWiki]
|
|
74
|
+
* [http://instiki.rubyforge.org/ Instiki]
|
|
75
|
+
* [http://www.walrus-ruby.org/amrita/cgi-bin/aswiki/aswiki.cgi Amrita Wiki]
|
|
76
|
+
* [http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=top RWiki]
|
|
77
|
+
* [http://www.xpsd.com/MiniRubyWiki MiniRubyWiki]
|
|
78
|
+
properties!project: Ruwiki
|
|
79
|
+
properties!title: ProjectIndex
|
|
80
|
+
properties!topic: ProjectIndex
|
|
81
|
+
properties!version: 1
|
|
82
|
+
ruwiki!content-version: 2
|
|
83
|
+
ruwiki!version: 0.9.0
|
|
84
|
+
properties!editable: false
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
page!content: = Ruwiki 0.9.0: The Road Ahead
|
|
2
|
+
This roadmap is accurate as of the release of 0.9.0.
|
|
3
|
+
|
|
4
|
+
What lies ahead for Ruwiki? The To_Do list will give a detailed list
|
|
5
|
+
of what is to follow, but this list is not the roadmap. There is no
|
|
6
|
+
clear indication of the reason for — and in some cases, the
|
|
7
|
+
meaning of — the items on the list. The intention of this
|
|
8
|
+
document is to expand on that list. As items are completed, they will
|
|
9
|
+
be removed from this document.
|
|
10
|
+
|
|
11
|
+
== A Note About Targets
|
|
12
|
+
Ruwiki development is not proceeding as quickly as I would prefer, but
|
|
13
|
+
it is continuing steadily. I am at times choosing to delay releases
|
|
14
|
+
and bypass some versions because there are other pressing concerns; I
|
|
15
|
+
am definitely aiming for quality here, not for timeliness.
|
|
16
|
+
|
|
17
|
+
== Development Inputs
|
|
18
|
+
The primary driver of development on Ruwiki is the needs of a few
|
|
19
|
+
groups of people. First, both Alan and Austin use or will use Ruwiki
|
|
20
|
+
at work. There are particular needs that both have. Austin will be
|
|
21
|
+
replacing an installation of \PhpWiki with an installation of Ruwiki
|
|
22
|
+
sometime in early 2005.
|
|
23
|
+
|
|
24
|
+
Second, [http://www.rubygarden.org/ruby RubyGarden], and
|
|
25
|
+
[http://www.rubyforge.org RubyForge], and the
|
|
26
|
+
[http://rpa.rubygarden.org <acronym title="Ruby Production Archive">RPA</acronym>]
|
|
27
|
+
have expressed an intention to replace the Perl-based \UseMod wiki
|
|
28
|
+
with a Ruby-based wiki. The popular and easy-to-use Instiki
|
|
29
|
+
(“there is no step 3”) is not an ideal choice for either
|
|
30
|
+
because they either require or prefer a CGI-based wiki. Ruwiki has the
|
|
31
|
+
desired level of performance and implemenation simplicity that
|
|
32
|
+
impresses both groups, and it is the current preferred choice. Thus,
|
|
33
|
+
the needs of both websites factor highly into the goals for Ruwiki.
|
|
34
|
+
|
|
35
|
+
Third, Austin gave a talk on Ruwiki at \RubyConf 2004. Many of the
|
|
36
|
+
features in the current release come from a development effort leading
|
|
37
|
+
up to the talk and in the weeks following.
|
|
38
|
+
|
|
39
|
+
Last, and certainly not least, feature requests and bug reports are a
|
|
40
|
+
factor. One of the things that changed in Ruwiki 0.8.0 was the look
|
|
41
|
+
and feel; admittedly, the look and feel in earlier versions was a bit
|
|
42
|
+
garish, designed to fit in with a particular website more than be a
|
|
43
|
+
general wiki theme. Users complained, and we changed this. The
|
|
44
|
+
continual spam defacement of the \RubyGarden wiki suggested several
|
|
45
|
+
possible improvements that could be made in Ruwiki to fight wiki spam;
|
|
46
|
+
initial work has been implemented in Ruwiki 0.9.0 and more work
|
|
47
|
+
remains. Additionally, Ruwiki is the first wiki with built-in
|
|
48
|
+
deployment support for package management systems (such as \RubyGems
|
|
49
|
+
and rpa-base), although Instiki has been modified for RPA by the RPA
|
|
50
|
+
team to support limited installation in RPA locations.
|
|
51
|
+
|
|
52
|
+
== Ruwiki 0.10.0: “Are You Being Served?”
|
|
53
|
+
Ruwiki 0.8.0 introduced an incompatible change in the way that page
|
|
54
|
+
diffs were stored, so users were advised to remove any existing .rdiff
|
|
55
|
+
files. This isn’t as problematic as it may sound, as until
|
|
56
|
+
0.10.0, there is no way to actually view the page diffs from Ruwiki
|
|
57
|
+
itself.
|
|
58
|
+
|
|
59
|
+
In Ruwiki 0.7.0, a new token was introduced: %calendar(). The concept
|
|
60
|
+
here is a sound one that can be extended to make token addition
|
|
61
|
+
easier. Currently, it is necessary for token writers to create their
|
|
62
|
+
own regular expressions. The “function token” will be
|
|
63
|
+
added — although the form may not be
|
|
64
|
+
“%<em>function-name</em>” — that will work with
|
|
65
|
+
either a line replacement or a word replacement so that the regular
|
|
66
|
+
expression does not need to be written. Tests for the replacement will
|
|
67
|
+
still need to be written, but standardizing new custom tokens will be
|
|
68
|
+
a good thing.
|
|
69
|
+
|
|
70
|
+
Chad Fowler’s port of \RubLog’s vector search will
|
|
71
|
+
probably be added to this version.
|
|
72
|
+
|
|
73
|
+
The presence of static HTML content (headers and footers) per page has
|
|
74
|
+
been accounted for in Ruwiki 0.8.0, but it will not be displayed.
|
|
75
|
+
Further, there is currently no way to specify or display static
|
|
76
|
+
content for the wiki or the project. (A related problem here is that
|
|
77
|
+
projects do not have any properties. This will become important as
|
|
78
|
+
projects should be able to be marked private within a wiki in the
|
|
79
|
+
future.)
|
|
80
|
+
|
|
81
|
+
The purpose of the \WikiWikiWeb is to provide a collaborative,
|
|
82
|
+
community knowledge editing environment. Unfortunately, the pondscum
|
|
83
|
+
known as spammers have figured out that the \WikiWikiWeb provides a
|
|
84
|
+
positive Google \PageRank, and having their links on our Wikis is
|
|
85
|
+
benefits them. Just as they don’t care about filling our
|
|
86
|
+
mailboxes with junk, they don’t care about defacing our
|
|
87
|
+
community knowledge. Ruwiki 0.10.0 provides additional antispam
|
|
88
|
+
defences.
|
|
89
|
+
|
|
90
|
+
The \RecentChanges mechanism will be updated to make it possible to
|
|
91
|
+
see the \GlobalRecentChanges list.
|
|
92
|
+
|
|
93
|
+
The most significant change in Ruwiki 0.10.0 will be the modification
|
|
94
|
+
of the request pipeline. This will not be visible to the end user, but
|
|
95
|
+
it will be significant to users who wish to extend Ruwiki. Currently,
|
|
96
|
+
Ruwiki processes all commands in ruwiki.rb. In Ruwiki 0.10.0, this
|
|
97
|
+
will be changed to a dispatch mechanism, where Action objects are
|
|
98
|
+
introduced, and ruwiki.rb dispatches requests to Action objects.
|
|
99
|
+
|
|
100
|
+
<table summary="Pipeline" style="border: 1px solid black"><tr><td>
|
|
101
|
+
+---------+ +-------------------+
|
|
102
|
+
| Request |--------->| Authorize Request |
|
|
103
|
+
+---------+ +-------------------+
|
|
104
|
+
|
|
|
105
|
+
v
|
|
106
|
+
+-------------------+
|
|
107
|
+
| Configure Ruwiki |
|
|
108
|
+
+-------------------+
|
|
109
|
+
|
|
|
110
|
+
v
|
|
111
|
+
+-------------------+
|
|
112
|
+
| Parse Request |
|
|
113
|
+
+-------------------+
|
|
114
|
+
|
|
|
115
|
+
v
|
|
116
|
+
+-------------------+
|
|
117
|
+
| Perform Action |
|
|
118
|
+
+-------------------+
|
|
119
|
+
|
|
|
120
|
+
v
|
|
121
|
+
+-------------------+
|
|
122
|
+
| Prepare Response |
|
|
123
|
+
+-------------------+
|
|
124
|
+
|
|
|
125
|
+
v
|
|
126
|
+
+--------+ +----+--------------+
|
|
127
|
+
| Page |<----------| Send Page |
|
|
128
|
+
+--------+ +-------------------+
|
|
129
|
+
</td></tr></table>
|
|
130
|
+
|
|
131
|
+
The diagram above shows the general pipeline. The difference is that
|
|
132
|
+
the action will be its own object. In general, it will need to know
|
|
133
|
+
how to process certain URL formats.
|
|
134
|
+
|
|
135
|
+
In the process of defining the action objects, \ActionCards will be
|
|
136
|
+
created. Below is an example \ActionCard for the default action,
|
|
137
|
+
<tt>_show</tt>. In \ActionCards, everything is relative to the Ruwiki
|
|
138
|
+
root URI. Important to note is that \ActionCards are an ideal: they may
|
|
139
|
+
not represent something that can be accomplished for 0.10.0, 0.11.0,
|
|
140
|
+
or even 1.0. They do, however, represent the ultimate target.
|
|
141
|
+
|
|
142
|
+
Ruwiki does some implicit URI rewriting in the general form of:
|
|
143
|
+
|
|
144
|
+
<table summary="Ruwiki URI rewriting" style="border: 1px solid black; border-collapse: collapse">
|
|
145
|
+
<tr><th style="border: 1px solid black">URI</th><th style="border: 1px solid black">Rewritten URI</th></tr>
|
|
146
|
+
<tr><td style="border: 1px solid black">/</td><td style="border: 1px solid black">/Project<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
|
|
147
|
+
<tr><td style="border: 1px solid black">/Action</td><td style="border: 1px solid black">/Project<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action</td></tr>
|
|
148
|
+
<tr><td style="border: 1px solid black">/Topic</td><td style="border: 1px solid black">/Project<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Topic/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
|
|
149
|
+
<tr><td style="border: 1px solid black">/Project/</td><td style="border: 1px solid black">/Project/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
|
|
150
|
+
<tr><td style="border: 1px solid black">/Project/Action</td><td style="border: 1px solid black">/Project/Topic<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%">/Action</td></tr>
|
|
151
|
+
<tr><td style="border: 1px solid black">/Project/Topic</td><td style="border: 1px solid black">/Project/Topic/Action<sub style="border: 1px solid black; font-size: 50%">Default</sub style="border: 1px solid black; font-size: 50%"></td></tr>
|
|
152
|
+
<tr><td style="border: 1px solid black">/Project/Topic/Action</td><td style="border: 1px solid black">/Project/Topic/Action</td></tr>
|
|
153
|
+
</table>
|
|
154
|
+
|
|
155
|
+
<table summary="_show Action Card" style="border: 1px solid black"><tr><td>
|
|
156
|
+
=== Action: Show [_show] <strong>DEFAULT</strong>
|
|
157
|
+
The Show action is the default action that will be performed when
|
|
158
|
+
there is no action specified. Without any arguments, the latest
|
|
159
|
+
version of the page will be displayed.
|
|
160
|
+
|
|
161
|
+
==== Action Arguments
|
|
162
|
+
; ?r=<em>revision</em> : Show the specified revision of the page.
|
|
163
|
+
; ?r : Show the list of revisions known to the page.
|
|
164
|
+
; ?r=<em>revision1</em>:<em>revision2</em> : Shows the difference of revision1 and revision2 for the page.
|
|
165
|
+
; ?r=:<em>revision</em> : Shows the difference between the current page and the specified revision.
|
|
166
|
+
; ?d=<em>yyyymmdd[:hh[mm[ss]]]</em> : Shows the last revision from at or before the specified date and time. If time is not specified, it is assumed to be 23:59:59.
|
|
167
|
+
|
|
168
|
+
==== Interaction Notes
|
|
169
|
+
Without arguments, _show generates pages pages that are editable and
|
|
170
|
+
indexable (<meta name="robots" content="index,follow,archive">). If
|
|
171
|
+
any argument is specified, the page is still editable, but not
|
|
172
|
+
indexable (<meta name="robots" content="noindex,nofollow,noarchive">).
|
|
173
|
+
</td></tr></table>
|
|
174
|
+
|
|
175
|
+
== Ruwiki 0.11.0: “What’s My Line?”
|
|
176
|
+
The antispam techniques introduced in 0.9.0 are positive steps in the
|
|
177
|
+
fight against wiki defacement. They are hopefully effective, too. The
|
|
178
|
+
problem is that because 0.9.0 doesn’t offer users or user
|
|
179
|
+
authentication, there’s no way of safely allowing the edit of
|
|
180
|
+
the antispam lists. Thus, to allow this and other potentially
|
|
181
|
+
dangerous actions, a user and capability framework will be added to
|
|
182
|
+
Ruwiki. This framework will allow for user identification,
|
|
183
|
+
authentication, and authorization to indicate what users are allowed
|
|
184
|
+
to perform what actions.
|
|
185
|
+
|
|
186
|
+
Authenticated users will be able to bypass blacklist checking; thus,
|
|
187
|
+
if “msn.com” is blocked, “joe.blog@msn.com”
|
|
188
|
+
could still authenticate with Ruwiki and edit the pages. Some users
|
|
189
|
+
will be able to manage user permissions (including user management),
|
|
190
|
+
edit antispam lists, etc.
|
|
191
|
+
|
|
192
|
+
Other actions will be added, including the ability to rename topics
|
|
193
|
+
and move topics between projects. In both cases, the topic change
|
|
194
|
+
history must be maintained.
|
|
195
|
+
|
|
196
|
+
The documentation for Ruwiki will be substantially complete with this
|
|
197
|
+
version, lacking only specific information on the features that will
|
|
198
|
+
be added in Ruwiki 1.0.0.
|
|
199
|
+
|
|
200
|
+
== Ruwiki 1.0.0: “Yes, Minister”
|
|
201
|
+
A combined strength and weakness of Ruwiki is that it currently does
|
|
202
|
+
little to protect against arbitrary HTML being inserted into the
|
|
203
|
+
current topic. The allowed subset of HTML should be restricted to a
|
|
204
|
+
safe subset to prevent cross-site-scripting attacks.
|
|
205
|
+
|
|
206
|
+
Pages and projects have properties: we need to provide the ability to
|
|
207
|
+
edit those properties. Part of the properties that should be editable
|
|
208
|
+
include whether a page is frozen — this means that the page is
|
|
209
|
+
no longer editable by any user (unless it is unfrozen) and is
|
|
210
|
+
effectively a plain HTML page. Other properties include the static
|
|
211
|
+
header and footer information in a page or project.
|
|
212
|
+
|
|
213
|
+
Modern Wikis require an RSS feed. Ruwiki will provide one.
|
|
214
|
+
|
|
215
|
+
== The Future: “Yes, Prime Minister”
|
|
216
|
+
Ruwiki 1.0.0 does not represent the end of the line for Ruwiki, but
|
|
217
|
+
what the future holds is unclear. We’ll see what the future
|
|
218
|
+
brings.
|
|
219
|
+
properties!project: Ruwiki
|
|
220
|
+
properties!title: Roadmap
|
|
221
|
+
properties!topic: Roadmap
|
|
222
|
+
properties!version: 1
|
|
223
|
+
ruwiki!content-version: 2
|
|
224
|
+
ruwiki!version: 0.9.0
|
|
225
|
+
properties!editable: false
|