|Developer Name||John Walker Davidson|
Third Release - 26 Aug 2013
LynxWiki is a full-featured wiki with all the capabilities of much larger and more well-known applications. But LynxWiki has even more to offer than those other applications in that it also has an embedded scripting language, IronPython, that allows wiki authors, not just application programmers, to create executable scripts that run when a page is rendered. LynxWiki is also a powerful document management tool, enabling collaboration on a wide variety of documents external to the wiki texts. The document management functions include:
- Document Versioning;
- Edit summary;
- Check-in and Check-out of documents;
- Searchable full text indexes of current version of a document containing text
- Organizable into libraries by use of namespaces
- User and roles access controls on namespaces and documents
LynxWiki supports read/write authentication and authorization. Indeed this page is only writable by the local wiki administrator. Individuals who would like to see changes, or comment on the topic's content can do so on the topic's discussion page, which is not restricted.
The amazing thing about LynxWiki is that the application has been brought to this point with just 40 programmer-days of effort. There will be an addition 4 days of effort in providing documentation to support the initial release. LynxWiki has drawn a lot from a similar .Net-based wiki, FlexWiki. LynxWiki has a different code-base and architecture, but re-uses much of the wiki syntax.
LynxWiki is an MVC 4 application using Entity Framework 5, LINQ, XDocument and numerous other newer .Net 4.5 technologies. LynxWiki uses Lucene.Net for text searching. The current file store uses the Windows file directory structure. The wiki document is stored as an structured XML file, with the raw wiki text, an intermediate representation based on a Wiki Object Model (WOM), and numerous other properties. Wiki integrity is assured by storing a separate version file for each new version. Responsiveness is achieved by also storing a separate current version. The processing of user input to visible web page has 3 distinct phases:
- Wiki text - raw user input in the wiki editor;
- Wiki Object Model - a pack rat driven parser converts Wiki text to XML;
- Transformation from WOM to HTML in 2 steps:
- Resolve dynamic elements at request time to WOM;
- XSLT transform to HTML5 output for display.
The pack rat parser uses rules read from configuration files. These rules can be added to or revised to support different wiki syntax or additional wiki elements. The various wiki text input formats supported are detailed in the links found at FormattingRules.
LynxWiki supports uploading of files, including images and documents, see AttachmentLibrary for more details. Images can easily be displayed in a topic and hosted in the same web server as the wiki. Documents can also be attached to topics and could also be hosted on the wiki web server. Executables are excluded from upload, and uploads are limited to 4 MB at this time. These capabilities need to be tweaked in the next month so that the exact specification is managed through web.config settings.
The IronPython based scripting is based on a DSL that provides wiki related capability and access to the data store repositories. Security is enforced by excluding the 'import' key word and restricting that to web.config settings so that the server owner has control of IronPython plugin extensions (not yet implemented for web administrators). The IronWiki capabilities now include the ability to process a posted HttpRequest; see the IronPythonSupport page for the list of available imports. The scripting system now has access to create a web form in a topic and then pass form items to the script system. See WikiFormProcessing for more details.
LynxWiki has numerous advanced features beyond the scripting. Full text search is implemented using Lucene.Net. There is also support for inclusion of form elements to provide input methods for data that can be saved in sqlite3 databases, via scripting. Finally there is the ability to create complex mathematical formulae in topics.
External Packages Included
- Lucene.Net - http://lucenenet.apache.org/
- jsMath from Union University
- TEX Fonts - download from http://www.math.union.edu/~dpvc/jsmath/download/jsMath-fonts.html
- Silk Icons - from http://www.famfamfam.com
- DotNetLib - http://dotnetzip.codeplex.com
- DiffPlex - http://diffplex.codeplex.com
- EPocalipse.IFilter - http://www.codeproject.com/Articles/13391/Using-IFilter-in-C
- Adobe PDF IFilter 9 for 64-bit
- Microsoft Filter Pack 2.0 for 64-bit
SharpZipLib is an included package and should not be. It was originally part of Lucene.Net and was included early on using the classpath exception of the GPL. The NuGet packagers of Lucene.Net incorrectly have a prerequisite requiring SharpZipLib. Lucene.Net removed the dependency in 2009. The GPL has been clarified to excluded the use of a classpath exception when using any non-GPL compiler. The code for LynxWiki does not reference SharpZipLib in any way and will remove it as soon as the NuGet package is updated.
Source Code Repository
Detailed installation procedures for the release are in LynxWikiInstallationNotes. If there are questions or suggestions please use the Discussion tab of that topic. Instructions for the optional Rss and Atom feeds are as LynxWikiSyndicationInstallationNotes.
LynxWiki, the application, is licensed using the Apache v2.0 license
The user generated content in LynxWiki can be licensed using a variety of the International Creative Commons licenses
This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
Version: 58 Revised: 2013-09-03 09:25:56 Last Updated by: jwd Show Links to Topic