MoinMoin 2.0

MoinMoin 2.0 (short: moin2) will be a big step in moin development, we are rewriting / heavily refactoring some core components of moin.

Documentation: moin2 online docs or docs/ in the repo.

Repo: http://hg.moinmo.in/moin/2.0 (Mirror on http://bitbucket.org/thomaswaldmann/moin-2.0 )

Issue Tracker: http://bitbucket.org/thomaswaldmann/moin-2.0/issues

Minefield: http://test.moinmo.in/

See also:

The big news

Sphinx-based docs

We are working on some nice docs using the Sphinx documentation system (same as e.g. python.org is using).

See the moin2 docs on readthedocs.org or docs/ in the repo.

(!) Docs are far from finished, help is appreciated.

Storage API

moin 1.x: the storage code was mixed into Page, PageEditor and AttachFile modules (yes, quite messy).

moin 2: storage code will be in MoinMoin.storage package and misc. storage backends will be supported, all conforming to the same "storage API".

Storage Layers: stores, backends, middlewares

Namespaces

More info: MoinMoin2.0/Namespaces

Mimetype items

In moin 1.x, there were 3 main types of stored objects in the wiki: pages, attachments and user profiles

In moin 2, there will be only 1 type of stored object: an "Item".

Some facts:

moin 1.9

moin 2

user_dir with user profiles

items with mimetype: application/x.moin.userprofile

data_dir with pages and attachments

items

page

item with mimetype: text/x.moin.wiki in metadata

jpeg attachment

item with mimetype: image/jpeg

unrevisioned attachments

items with appropriate mimetype

attachments have no metadata

revisions with arbitrary metadata

attachments "inherit" ACLs from page

all items/revisions may have own ACLs (in their own metadata)

Metadata

As seen above, moin2 does much more with (own) metadata and even enables storage of user-defined metadata.

To speed up processing, metadata of items and revisions will be indexed (using whoosh).

Index can be used for:

Item OO user interface

moin 1.x: pages and attachments had separate user interfaces (deleting a page worked differently than deleting an attachment, uploading an attachment worked differently than uploading page content, pages had revisions, attachments not).

moin 2: unified user interface for items:

(!) Page, PageEditor, AttachFile code modules are dead.

TODO:

Code cleanup

Lots of crappy code was deleted, still some left.

Tree based transformations

(See /Converters for more information)

moin 1.x: parse wiki markup line-by-line, create html on the fly (problems: crap html, no xhtml, crap include, crap TOC, ...)

moin 2.0: input -> converter -> DOM tree -> converter -> output

moin 2.0: reverse direction (e.g. for GUI editor)

Features:

TODO:

Processing Instructions

HelpOnProcessingInstructions have been replaced by

Processing Instructions

moin-2.0

## comment

in text, same functionality

#format specifier and optional-arguments

"contenttype" in meta and currently no optional-arguments

#redirect

? should be a meta key/val

#refresh

? should be a meta key/val

#pragma

? can be replaced by key/value meta parameter. value can be a list

GUI editor update and different approach

Themeing with Jinja2 templating engine

moin 1.x: Output generation was mostly done by python code with embedded html. Some of this was within pluggable themes, some was hardcoded.

moin 2.0: use Jinja2 templating engine for theme and user interface.

(!) some of the stuff has been worked on in GoogleSoc2010.

HTML / CSS / Images / ...

TODO:

Serialization

Storage contents can be serialized / unserialized to a custom, simple format that is basically a stream of json (revision metadata) and binary data (revision data).

Applications:

New plugin system

The old plugin system is not powerful enough and too complicated.

Just rough ideas, nothing final:

This is all still TODO!

Framework / Libs / Python

Already done:

Packaging

moin2 got rid of all the big 3rd party stuff that was bundled with moin 1.x and uses python packaging now, so you can use pip to install it (e.g. into a virtualenv) and it'll fetch all requirements from pypi.

How to help

As you see above, all this is a quite big task and we need help:

How to start:

Release date

As moin2 is still in heavy development, we can't give any release date yet.

"Maybe 2012" is maybe not totally unrealistic.

But we can give some criteria that help you to choose:

choose moin2 if ...

choose moin 1.9 if ...

Questions

Synchronisation of 2 wikis?

How about the synchronization of 2 wikis, is that included in moin2, and if, does it include also the attachments?

A: If we implement sync, it likely will include all types of items, but it is not implemented yet.

Page tree?

For navigation it is very useful to have a navigation tree for the pages (preferred left column). Is that possible now in moin2?
-- RudolfReuter 2011-02-22 13:40:10

A: Not implemented yet, but everything is possible - it may be just not in the first 2.0 release. If you want to help with a great theme just jump on it.

Porting extensions

How would one go about porting extensions to Moin 2.0? Right now, I can see lots of dependencies on the formatter and parser APIs in Moin 1.x that I would need to replace with something else. Will there be equivalents in Moin 2.0, and if so, are these things the kind of contributions that Moin 2.0 needs? If not, which APIs would I need to target? -- PaulBoddie 2012-02-25 18:22:46

moin2 is a rewrite of moin1 and works quite differently at many places. So likely a moin2 extension will be a rewrite of a moin1 extension. Please note that there is currently no plugin system. -- ThomasWaldmann 2012-02-25 22:17:16


Note: Some old content can be still seen here: here

MoinMoin: MoinMoin2.0 (last edited 2012-03-29 20:27:15 by BrunoMartin)