Juicy
What's wrong with existing Wikis
- Spaghetti: lack of structure (table of content,directories) makes it difficult to find content. For a writer, it can be difficult to know where to put stuff. For an admin, it can be difficult to know what's going on in which area.
- Bad search: searching in most Wikis is dumb, so we need to go through tons of documents before hitting what we were looking for. What about being able to search by topic (predefined), by people, by project, by date ?
- Small-scale view: one you've found an article, it can be difficult to spot where you are and navigate to connex articles.
- Rupture of context: switching to edit usually reloads the page and brings you to a text-area that does not look at all like the original page you were looking at. It is sometimes better when you can edit in place, but lack of WYSIWYG is a real pain.
- What's new ?: if you're looking at a page, you'd like to see what's new, or even better : what has changed since you last visited the page.
Core features
- Revisioned content: we're able to see what was changed, when in the document
- Structured content: the Wiki is like a filesystem with folders and document that you can interactively explore using your browser
- WYSIWYG: edit in place without markup, or use markup/HTML only if necessary
- Tags: in order to allow cross-hierarchy searches, we use tags
- Sitemap: allows to browse specific sections of the website using a sitemap
Additional cool features:
- RESTful? URLs? (and REST API)
- Wiki page as database (data can be stored within the HTML)
- Use JavaScript? to turn pages into live web applications
- Use CSS and HTML "templates" for specific types of pages (to-do list, tech note, feature description, etc)
- Choose between Markup or HTML for your pages
Really cool UI features:
- Live changes notification (update)
- Slider to go back in time for a specific page
- Changes since your last visit are highlighted for each page
- Link creation dialog: easily find what's available in the Wiki.
Implementation:
- (Almost) no database
- Pages stored on the filesystem in HTML
- Meta-information stored directly along with the HTML file on the FS
- Index file that can be re-generated containing the precomputed data (for quick load)
- Journal of recent changes and modifications
- When HTML is submitted, non-inlines are tagged with the current date (date=...) if they were not previously tagged. This allows to keep track of what changed when.
Rest API:
/[WIKI_PATH]/[PAGE]view an existing page or creates a new page if the page does not exist/[WIKI_PATH]/lists the content of a Wiki directory/[WIKI_PATH]/as/xmlreturns the raw content of the page as XML/[WIKI_PATH]/do/[OPERATION]invokes theOPERATIONon the page or directory
Objects operations:
- Directory:
GETcontent: returns the content of the directory as a list of JSON dictionaries describing each entry (directory or page) - Page:
GETcontent: returns the content of the page as an XML string - Page:
POSTcontent: sets the content of the page (a string with the XML content) - Page:
GETmeta: returns page meta information as a JSON dictionary
Storage cool features:
- Give short URLs? for pages, files, etc, that make it easy to address content
- Provide shortcut URLs? (redirect) to other site, so that for instance
/sharewould redirect tohttp://dev.mysite.org/sharedfiles/
