is a wiki (or at least a Wiki-like system) built using ASP and client-side JScript. It is designed to run in an essentially 100% Microsoft intranet environment. The primary goal was to do a wiki that used MicrosoftFrontPage
for WYSIWYG editing.
Since editing is WYSIWYG (as much as possible using HTML), most of the traditional Wiki text formatting code is not needed. Right now MsWiki
only does special formatting for links, although in the future it may support other special formatting.
In order to facilitate working with MicrosoftFrontPage
, each page needs to be an HTML file, which precludes server side processing for formatting the links. Instead, MsWiki
does all the formatting on the client-side, using JScript. This is either very cool or very kludgey depending on how you look at it. One big advantage of doing the text formatting in JScript over server-side VBScript is that JScript has half way decent regular expression support.
Page creation is handled in ASP as will be Recent Changes
support when I get that implemented.
I haven't released anything yet. I may sometime in the future, assuming time and my employer permit. So far very little of what I've done is rocket science, and I'll explain that part.
There's nothing interesting about the ASP. The JScript used on the client side is more notable. There's some example prototype code at http://www.almostinfinite.com/preprocess.htm
. As you might suspect, you'll need IE 4.0 or above to see it work. After the page has loaded, view source to see how the reformatting works. Here's a simplified (and partly omitted example). The interesting part is the "<SCRIPT FOR=window...>" section. This script segment is executed after the page finishes loading. The code which actually does the reformatting is the statement
body.innerHTML = Reformat(body.innerHTML);
The innerHTML attribute is the raw HTML code that appears between the <body> and </body> tags. When you set it to a new value, IE reparses, and displays the new text.
<title>This Is a Test</title>
[[[ lots of interesting code ]]]
<SCRIPT FOR=window EVENT=onload LANGUAGE="JScript">
body.innerHTML = Reformat(body.innerHTML);
[[[ body HTML ]]]
...As you might suspect, you'll need IE 4.0 or above to see it work.
Has the WorldWideWeb
come to this? I can read the real WikiWikiWeb
from lynx or Netscape or w3 or IE3 or IE4, on NT or Linux or MacOs
... Please note above that this particular wiki is intended for use on a corporate intranet where everybody already has IE. I'd be perfectly happy to do a browser-agnostic solution if such were possible, though.
You can't be totally browser agnostic and still support WYSIWYG. However, you can provide both an agnostic version and a WYSIWYG version, and have the server pick the proper version based on requesting browser. That's what I do when I want to support browser specific features.
I wanted to see the whole thing because I don't understand how a wiki in general is implemented. MsWiki probably wouldn't be a good example. I'd recommend taking a look at the PyWiki code. -- cb
I think that not much would be gained by having WysiWyg
editing. The strength of wiki seems to be in its lightness. I have deployed several instantiations of a home grown MsWiki
for various project teams and have had no negative feedback on using the elementary markup. Several folks suggested table formatting.
I would be happy to share the ASP code, but alas, I am trapped behind the firewall. Any ideas on collaboration?
We used TimVoght
initially, which works pretty much like this one. That experiment was successful as a proof of concept, but we were just about to bring our MicrosoftFrontPage
/Office 2000 Web server on-line, and I did not believe that PyWiki
would survive the competition. Only a few of us used PyWiki
, so I wanted something that more people on our development team would use. And to be perfectly honest, I wanted WYSIWYG editing capability myself, so I wasn't sure I'd use PyWiki
once FP became an option. One final factor was that PyWiki
I would like to release the stuff I have at some point, but I'd like to spend another month or two refining it. In the meantime if anybody else wants to something similar, I'd be happy to share what I know so far.
for an interesting example of how Microsoft approaches the WysiWyg
editing problem. -- JB
Yup. The IE5 engine can also be used as an editor (Outlook Express and Visual InterDev? are both built on top of it, as is Vizact, a program I worked on when I was at Microsoft. Interestingly, most, if not all of the editing functionality can be accessed through script (VBScript or JScript). This is pretty cool, as long as you don't CutAgainstTheGrain?. -- CB
You might be interested in this experimental page that uses IE's (v. 4+) TextRange
object and methods to accomplish in-situ WYSIWYG editing: http://standardbrains.editthispage.com/
, for implementing the same kind of in-the-browser WYSIWYG editing in Mozilla/NS6 - see http://www.pbwizard.com/Articles/Moz_Range_Object_Article.htm
. The Range interface is a W3C DOM Level 2 standard, but the Mozilla implementation is still very incomplete and buggy; thus Jeff's patch.
The advantages over other solutions (such as the MSHTML 'edit-mode' in IE 5.5, replacing the IE4+ 'design-mode') are a certain degree of cross-browser and cross-version-number compatibility, greater flexibility in designing a custom UI, and low scripting overhead. -- Derek Robinson