This is a big pile of unsorted old stuff, moved from FeatureRequests page
It is unlikely that anything of the stuff below gets done as long as there is noone caring to move it to separate FeatureRequests. Also, outdated stuff should get removed.
Old Feature Requests
Please do not add content on this page, these requests should be sorted to new pages.
Contents
-
Old Feature Requests
- Spell Checking
- File and Directory Permissions
- Revision History
- Automatic User Pages
- ACL controlled templates
- Metadata Support
- Twiki-like icon libraries
- ActionBar as IconBar
- Self-Documenting Extensions
- Include Macro header handling
- Watch list and rss
- i18n
- Attach Comments to Pages
- Add Published Mode
- allow plugins to generate extra files
- import css files / css-market
- cache per page rule
- MoinHistory page
- MediaWiki like image fuctionality / image macro
Spell Checking
Check all words/combinations for possible misspeling of existing WikiName's/pages.
For example: PostgreSql => PostgreSQL or 'twisted matrix' => TwistedMatrix -- Mike Rovner
File and Directory Permissions
Customization of File System Permisssions
Example Szenario: UNIX-System. You want to have setgid bit set for directories to share access within a group that performs administrative tasks (backup, restore, cleanup etc.) on file system level.
See JohannesZiegler/SomeUnixSampleInstallationScenario for motivation and detailled description.
To adjust the permission settings to these needs you would have to patch many of the source files since most of relevant values are hardcoded.
Now, it looks like this:
config.umask = 0775 os.mkdir(dirpath, 0777 & config.umask) os.chmod(dirpath, 0777 & config.umask)
It could look like this (dropping umask):
config.filemode = 00666 # octal: setuid, owner, group, other config.dirmode = 02777 # octal: setgid, owner, group, other os.mkdir(dirpath, config.dirmode) os.chmod(dirpath, config.dirmode)
or like this (keeping umask):
config.umask = 02777 # octal: setuid/setgid, owner, group, other config.filemode = 00666 # octal: setuid, owner, group, other config.dirmode = 02777 # octal: setgid, owner, group, other os.mkdir(dirpath, config.dirmode & config.umask) os.chmod(dirpath, config.dirmode & config.umask)
Contact me for a detailed description of the patches (i.e. which files). If you want me to contribute (coding) just ask. -- JohannesZiegler 2003-12-22 11:49:48
Revision History
Latest version link should include version number as a GET parameter
This allows one to copy a link for the current version easily if one wants to link to it as definitive.
Implemented in 1.7 -- JohannesBerg 2008-03-20 13:14:28
Differences between consecutive versions in RSS feed
Currently, the differences in the RSS feed are calculated against the current version of the page. This is fine when unique=1 and the RSS document is only showing a single instance of the page, but is less than obvious when unique=0.
With unique=0 and diffs=1, the RSS feed should show the difference between the version in question and the version prior to it. This makes it possible to more easily see the differences in each version.
I guess this could be optional if someone wants the comparison to be between the version in question and the current one.
-- TomiJunnila 2005-01-14 13:33:55
Here is a quick hack that implements this behaviour. I'm not very familiar with Python and MoinMoin, so the patch is most likely far from optimal.
--- rss_rc.py.orig-from-131 2005-01-17 08:56:05.805153102 +0200 +++ rss_rc.py 2005-01-17 09:42:48.002326950 +0200 @@ -138,10 +138,6 @@ # general attributes handler.simpleNode('title', item.pagename) - if ddiffs: - handler.simpleNode('link', link+"?action=diff") - else: - handler.simpleNode('link', link) handler.simpleNode(('dc', 'date'), util.W3CDate(item.time)) @@ -152,18 +148,26 @@ # searching for the matching pages doesn't really belong here revisions = page.getRevList() - rl = len(revisions) - for idx in range(rl): - rev = revisions[idx] - if rev <= item.rev: - if idx+1 < rl: - lines = wikiutil.pagediff(request, item.pagename, revisions[idx+1], item.pagename, 0, ignorews=1) - if len(lines) > 20: lines = lines[:20] + ['...\n'] - desc_text = '%s\n<pre>\n%s\n</pre>\n' % (desc_text, '\n'.join(lines)) + rev1 = 0 + log = editlog.EditLog(request, rootpagename=item.pagename) + for line in log.reverse(): + if item.time >= util.datetime.tmtuple(wikiutil.version2timestamp(line.ed_time_usecs)) and int(line.rev) != 99999999: + rev1 = int(line.rev) break + else: + rev1 = 1 + lines = wikiutil.pagediff(request, item.pagename, rev1-1, item.pagename, rev1, ignorews=1) + if len(lines) > 50: lines = lines[:50] + ['...\n'] + desc_text = '%s\n<pre>\n%s\n</pre>\n' % (desc_text, '\n'.join(lines)) + link="%s?action=diff&rev2=%s&rev1=%s" % (link,rev1,rev1-1) if desc_text: handler.simpleNode('description', desc_text) + if ddiffs and not diffs: + handler.simpleNode('link', link+"?action=diff") + else: + handler.simpleNode('link', link) + # contributor edattr = {} if cfg.show_hosts:
It doesn't work properly for the first revision of a page (where it compares revision 1 to revision 0), and it effectively forces ddiffs=1 when diffs=1 (the link includes action=diff and the revision numbers when diffs=1). There is also no checking for unique=0.
-- TomiJunnila 2005-01-17 08:41:32
Automatic User Pages
As a site option, it would be convenient to be able to automatically create a user WikiName page when creating an account via UserPreferences. It would be even more convenient if I could customize the information requested in UserPreferences and have it automatically filled in on the user's WikiName page. I recognize that this is not appropriate for every Wiki (ThomasWaldmann specifically mentioned in IRC not wanting empty useless pages) but I have a private (intranet-style) usage for which it is very appropriate and would keep users from having to take extra steps. I got used to this feature in TWiki, and while MoinMoin seems easier to use and I like the fact that it's written in Python, this is one feature I rather miss. (Well, two related features, really.)
-- Michael K Johnson 2/17/2004
I agree. We should give new users a hand and create a home page for them. This will help to build a community around a wiki. The home page can include an uploaded picture in a standard location and size, standard home page text and links (can be modified later) and category links. We can also put some links to the help pages for beginners, so a user home page will be a starting point to new users.
We should have more page building helpers for other types of pages. Using template is good for programmers, but regular people like to answer some questions and have the wiki do the work for them.
-- NirSoffer 2004-02-17 22:38:23
If forms worked, and we had a build page function that is accessable via a form post, then we could create the page creation helpers using the wiki! Something then that might be usefull would be just to have a redirect when a new user logins in.. the redirect could be specified in the config, and send them to the front page by default, but could be specified to send users to a welcome page, or a create your homepage wiki form.
-- JonathanDietrich 2004-03-23 16:31:29
At the moment all themes only add the 'home' icon if the user home page exists. My suggestion is to add this icon if the user is registered, whether the home page exists or not. This makes for an easy way to have new users discover the possiblity of having a home page, without having to provide one for those who don't care.
Like this:
--- classic.py Wed Jul 21 22:02:16 2004 +++ classic.py.new Sun Aug 15 21:57:33 2004 @@ -256,31 +256,30 @@ def iconbar(self, d): """ Assemble the iconbar @param d: parameter dictionary @rtype: string @return: iconbar html """ iconbar = [] + if d['user_valid'] and not d['q_page_home_page']: + d['q_page_home_page'] = d['user_name'] if config.page_iconbar and self.request.user.show_toolbar and d['page_name']: iconbar.append('<ul id="iconbar">\n') icons = config.page_iconbar[:] for icon in icons: if icon == "up": if d['page_parent_page']: iconbar.append('<li>%s</li>\n' % self.make_iconlink(icon, d)) elif icon == "subscribe": iconbar.append('<li>%s</li>\n' % self.make_iconlink( ["subscribe", "unsubscribe"][self.request.user.isSubscribedTo([d['page_name']])], d)) - elif icon == "home": - if d['page_home_page']: - iconbar.append('<li>%s</li>\n' % self.make_iconlink(icon, d)) else: iconbar.append('<li>%s</li>\n' % self.make_iconlink(icon, d)) iconbar.append('</ul>\n') return ''.join(iconbar)
As an additional feature: At the moment, if you follow a link to a page that doesn't exist, you get the usual possibility to creating that page, with a list of templates to choose from. You could have the page create action test if the page to be created is identical to the user's home page name. If it is, don't offer the list of templates to choose from, but just use CategoryHomepage if the user starts editing the page.
-- PeterKleiweg 2004-08-11 11:24:18
ACL controlled templates
Templates are nice if you only have users from the same domain, and therefore most of the templates are meaningful to them. When you have users from different application domains (e.g. in an intranet) you don't want to present them all the available templates. It just gets too messy. If ACLs would be honored when presenting the available templates, a user group (e.g. the legal department) could create their own templates and make them readable for the LegalGroup only. Even completely private templates would be possible! A drawback could be, if you forget to change the ACL back to some less restrictive permissions when saving the page. Or is it even a feature? Wouldn't it be a sensitive default to make group/private templates readable by you/the group by default?
you already can put ACLs on template pages (although I didn't try what exactly happens then for the list of them), so the main problem is to find a good procedure of what should happen on save - as a normal user isn't allowed to set or change ACLs (not even on new pages) - for good reasons. -- ThomasWaldmann 2004-04-27 14:26:06
Metadata Support
I was unsure of whether I should place this request under MarkupProposals, FeatureEnhancementProposals or InternalEnhancementProposals.
The use of WikiCategory is pretty primitive and unreliable. How about some kind of MetaData declaration at the beginning of the page, much like ProcessingInstructions? For example:
@Category Java Programming @Type Howto @Keywords Java; Frameworks; Jakarta Struts; Hibernate
Which should render as:
Category: Java Programming
Type: Howto
Keywords: Java, Frameworks, Jakarta Struts, Hibernate
A click a link should show a list of pages with the same metadata value.
Notice the @ character is used, so arbitrary metadata types can be defined by the users without colliding with #xxxxxx ProcessingInstructions. -GoofRider 2004.05.26
Could we merge this with MetaData?
Twiki-like icon libraries
In Twiki it is possible to create wiki-pages that act as an icon library. First you have to upload graphics to the page, then you can associate that graphic to a system-wide accessible shortcut:
The following line taken from TWikiDocGraphics:
| <img src="%ATTACHURLPATH%/help.gif" alt="help.gif" width="16" height="16" /> | =help.gif= | Help |
results in the shortcut %help.gif% which you can use on any page.
In moin it would be something like:
|| attachment:help.gif width="16" height="16" border="1" || =help.gif= || Help ||
looking like:
At the moment we have to put user-defined smileys in moin_cfg.py as a dict with the markup as the key and a tuple of width, height, border, image name as the value. This is cumbersome for users.
Q:BTW what is border, yes/no or 1/2 for size? What is markup, the theme?
-- SashaPoslavsky 2004-06-08 10:01:42
ActionBar as IconBar
I made a small Picture as a study for an ActionBar with the footer-Actions like the other Actions at the Top of the Page: |
A: Moving some of them to the top makes sense. So as soon as we have nice icons, we could do.
- your comment about the edit icon makes sense. we need one indicating "writing". The one you made is quite near what I would wish for that, except that white background. Maybe just leave that out and make the pencil a bit bigger.
- the action icons need to be clear and ad-hoc distinguishable (that means even if you don't really LOOK at them, but only have a quick glance at them). different color, low complexity of icon, different shape helps.
- a simple paper clip would be better visible than a page with a paper clip right of it
- same for a trashcan only for deleting a page
that sitemap icon indicates a sitemap, but I don't think it looks good
- great that you are helping with icons, thanks!
Q: Supposed I've built my own icons: What do I have to do, to get a Small-Action-Icon-Bar? A: As there currently is no such thing as an action bar, best would be to publish your icon set here and either work on a 1.3 theme for supporting it or wait until one of the existing theme authors jumps on that. Personally I prefer improved existing themes or far-better new ones over only partially better new ones that are worse in other things that are already solved in existing themes. 3 great themes are better than 30 bad ones.
Self-Documenting Extensions
HelpOnMacros and HelpOnActions are great, but what about adding some global docstrings to each macro, action, etc an some display macro to make them self documenting? Just a __manual__ and a __example__ string in each macro and HelpOnMacros could be created auomagically by the wiki, just listing the enabled/installed stuff. -- OliverGraf 2004-06-20 07:57:19
This would be a great idea and exactly what I was suggesting in MoinDev/PluginConcept. Have a MacroManagerMacro that lists the available macros/actions along with their usage and description. Would be utmost excellent. -- TheAnarcat 2004-07-16 15:51:10
This will be nice, but I don't see the need for __manual__ and __example__, just have nice docstring for each macro and have this docstring printed when calling with 'help' argument. In case of a user error, a short error message in the page - instead of nothing, will be nice also. here is an example:
Macros are not classes... thats why I suggested module global strings instead of some nice method. Converting macros to a class-based API would be great, but also great incompability. -- OliverGraf 2004-07-23 13:59:44
- We can add a docstring to the execute method of the macro, and get it printed by other code.
1 class MacroBase: 2 def getopt(self, text, options): 3 """ parse macro arguments and return error messages etc """ 4 # parsing code here... 5 if error: 6 return self.request.formatter.macro_error(self.usage()) 7 if help: 8 return self.request.parse(self.__doc__) 9 return agrs 10 11 class MacroName(MacroBase): 12 """ MacroName mini user manual 13 14 Some paragraphs using wiki markup about this macro 15 """ 16 17 def execute(self, text) 18 """ Use super to return error messages """ 19 args = self.getopt(text, options) 20 # specific macro code here 21 22 def usage(self): 23 """ define short replacement usage message for this macro 24 25 Returned when the macro is called with wrong arguments etc. 26 """ 27 return ( 28 '`[[MacroName(arg1, arg2)]]` arg is this, arg 2 is that' 29 'whatever needed to explain usage in one sentence' 30 'see HelpOnMacros' 31 )
Maybe [[Man([[MacroName]])]] to display the MacroName manual anywhere? and maybe `Man([[)]]' to display all?
-- NirSoffer 2004-07-23 13:30:46
Well, I like man(1) and all, but I think Manual would be more appropriate. Or a WikiName? Although this is BikeShed material. Whatever the name. -- TheAnarcat
Maybe [[HelpOn(MacroName)]] ?
[[HelpOn(BR)]]
Will print:BR- insert a line break
Use [[BR]] in the rare cases you need to insert a line break. Note that if you separate paragraphs with a blank line, the wiki will format as different paragraphs, using the wiki style sheet.
While this is BikeShed stuff, I think it's better to talk about these ideas before implementing the worst option. Brainstorming is good. -- NirSoffer 2004-07-23 15:29:06
I've been scouring the net trying to find an easier way to do line breaks than the [[BR]] because it's a big stumbling block. Line breaks are not a rare case, but a common occurance. I want to find a way to turn on auto line breaks and keep the embedded macro out of the document. -- Georgeh
It is intended that there is no really convenient way for line breaks, because most use of line breaks is simply wrong. -- FlorianFesti 2004-07-27 21:30:45
I agree -- NirSoffer 2004-07-27 22:50:26
I very much disagree. How can it be wrong to use line breaks to format text in the desired fashion? There's a reason why the "return" key is so large & accessible on a keyboard - it's because we use it all the time when we're typing! To make text more legible, and aid comprehension. --- ScorchPyro
A wiki is a word processor. Try to hit enter in your OpenOffice and you will NOT get a linebreak, but a paragraph break. If you want as-is formatting use a preformatted block or write yourself a text parser, which should be very easy to do. -- OliverGraf 2004-09-14 12:48:13
Include Macro header handling
Currently Include Macro just puts text inline as is, optionally prepending it with a header.
That seems counterintuitive that included text doesn't take the context from the place Include was called. It shall amend included text (ex. increase heading level) according to caller environment. Include macro parameters (heading level) override this context if specified.
Watch list and rss
I would like the option to add pages to your personal watch list. Pages should have a button "watch this", that let's you put pages on your watch list, and for those already on your watch list, a button "unwatch this" to remove it from your list.
Thats what subscribe is for. Wiki must be email enabled and email address needs to be entered in the UserPreferences for it to work. -- OliverGraf 2004-08-09 17:16:18
I mean, I would like to be able to use subscribe, not for receiving e-mail, but instead for having a custom page of Recent Changes or a custom rss feed. -- PeterKleiweg 2004-08-09 21:01:04
Then there should be a variant of "recent changes" that lists only changes to pages on your watch list. (Like in WikiPedia.)
This does not exists yet, and can be interesting addition, maybe as part of the facet browsing/filtering. On the other hand this might harm WikiWikiWeb:SoftSecurity, If you don't see all pages, you don't see the damage bad guys might have done. --NirSoffer
That goes for e-mail for subscribed pages as well. I am just proposing to have other possibilies to keep informed about subsubscribed pages. -- PeterKleiweg 2004-08-09 21:01:04
Secondly, there should be an rss-feed with a username as option that returns only changes in pages on the user's watch list.
The reason for requesting this: people who have limited time and can involve themselves with only a small part of a wiki need a quick overview of changes relevant to them. And if changes to those pages are infrequent, rss is the least time consuming to keep up to date.
-- PeterKleiweg 2004-08-09 16:01:11
i18n
Pages with same name in different languages
Suppose:
UserPreferences, language set to Dutch (nl)
user selects a link to a page MoinMoin
I would like MoinMoin to:
select page MoinMoin//nl if is exists
otherwise, select page MoinMoin if it exists
otherwise, offer to creat page MoinMoin
I have been busy translating system pages into Dutch, and found that some pages cannot be given a natural Dutch name, because that would be the same as some name in another language. And proper names are usually identical in many languages. -- PeterKleiweg 2004-08-15 16:11:49
I 2nd that! This is exactly the feature I need for my site... Radek Podgorny
Templates
Currently, what is recognised as a template is coded in, in page_template_regex, which can only be overriden in the config file. In any case, there is one pattern for a wiki server. I would like the pattern to be processed by the i18n mechanism. For instance, in nl.po I would want to put this:
msgid "[a-z]Template$" msgstr "[a-z]Sjabloon$"
-- PeterKleiweg 2004-08-17 01:30:16
You can simply (and more flexibly) set page_template_regex in your config. Often one wants also to include the original english pages (and not only pages matching the translated regex), so using somewhat like ".*(Template|Vorlage)" in the config is the best way. -- ThomasWaldmann 2004-08-17 06:22:18
Attach Comments to Pages
Wiki editing is potentially frightening to non-technical users - the syntax is confusing, and they might worry about messing up the wiki page. A simple form-based comment system would allow such users to simply tack on comments to the end of a page - a model they will likely be familiar with already.
Any content worthy for inclusion could then be incorporated by someone more experienced at a later time.
Note that this is not a limiting measure - any user could decide whether to edit content directly, or just append a comment.
The concept of first creating a mess and someone else cleanup that later often doesn't work.
Rather a narrow view, in my opinion.
- As hard as it is to believe, there are intelligent people who might have useful contributions to a wiki who are computer novices.
A structured comment system avoids "mess" while encouraging aforementioned users to contribute.
- I picture this being an optional feature, so those who would rather exclude people who aren't comfortable with mark-up at the expense of their wiki's content could do so.
Add Published Mode
A very cool feature (that I have seen so far only on instiki) is to have a "published" mode where pages are rendered without any Wiki-functions (i.e., no edit/login/etc.). These pages look just like ordinary webpages.
This is great for homepages: The reader is not confused by any buttons on the page, while it is still very easy to edit. The user interface is in the links: If you call "htp://mywiki/show/mypage" mypage is shown as a wiki page (i.e., with buttons and stuff) if you call "htp://mywiki/published/mypage" you get the same page, but without any distractions.
You can create an view only theme and make it default. Additionally you should secure your wiki with ACLs. There had been a viewonly theme in MoinMoin but it was unmaintained and had been removed.
allow plugins to generate extra files
Currently, plugins like my latex2 plugin can create extra files and serve them via the AttachFile action. That, however, is fairly inefficient. It'd be nice if this could be done in a way that
- allows apache to serve those files directly
- this can be unsecure (when webserver does execute such stuff)
- not really, the plugin just has to make sure it doesn't let the user specify the file extension (or whatever apache uses to decide how to call it). I don't want attachments served by apache, but rather stuff that's generated from a plugin.
- this can be unsecure (when webserver does execute such stuff)
- has a namespace for each plugin so that the plugin can wipe all files it created
- does not need attachments enabled
- optionally (let the plugin decide!) be integrated with caching (ie. moin could decide to throw away those files and call the plugin to regenerate)
- be aware that you can recall old revisions of any page. Throwing away cached data might break those old revisions.
-- JohannesBerg 2004-12-29 23:59:35
Not as good idea as it sounds. It will become very fragile if sometimes we'll implement database backend at last. -- MichaelDubner 2006-12-22 22:31:19
MoinMoin's name
The name of MoinMoin is different in "/usr/share/moin" and python's MoinMoin. I think we should unique the name of MoinMoin or moin.
That's nicer indeed, but also makes troubles: if we speak of the MoinMoin directory, it currently means the code directory. If we name them both MoinMoin, it maybe gets a bit harder to find the right one.
import css files / css-market
It would be fine to have the possibility to add css files probably as macro or something else. I would like to have this probability to show ImageLink or Hits with its own style. -- ReimarBauer 2004-12-30 08:29:02
cache per page rule
At the moment cache could be used for file types. But sometimes it could be useful to switch cache off for all on one page. e.g. the Hits macro result is cached too. You have always to refresh the page yourself to see the new count. -- ReimarBauer 2004-12-30 08:29:02
- You may want to look at the dependency var of your macro.
MoinHistory page
Does it already give a MoinHistory page somewhere?
What should it list? The history of MoinMoin? I cannot find any. Create it if you want to
MediaWiki like image fuctionality / image macro
For example with MediaWiki it is possible to have an image on the right side of a page and to have text next to it or to have a text describing the picture below it and a box around the picture and the text. See: http://en.wikipedia.org/wiki/Wikipedia:Picture_tutorial
This has been possible for years. Just look at HelpOnTables. MediaWiki has not really any big features that MoinMoin does not have (besides their security problems maybe)