WYSIWYG editor

From Meta, a Wikimedia project coordination wiki
This is an archived version of this page, as edited by Majorly (talk | contribs) at 09:31, 6 June 2007 (Reverted edits by 221.16.112.57 (Talk); changed back to last version by 24.85.224.218). It may differ significantly from the current version.
 
This page should be moved to MediaWiki.org.
Please do not move the page by hand. It will be imported by a MediaWiki.org administrator with the full edit history. In the meantime, you may continue to edit the page as normal.

For the more technically inclined, Wiki markup is a simple way of formatting a wiki page. However, many would-be users of MediaWiki are put off by what looks to them—rightly—to be code of any sort. These users are adjusted to publishing and editing in a more visually straightforward WYSIWYG (What You See Is What You Get) environment.

The acronym WYSIWYG is most often used, but in the case of mediawiki, this is false, you can never get exactly what you see, since what you get depends on your browser, screen resolution, fonts, your mediawiki skin and so on. WYSIWYM (What You See Is What You Mean) is more precise but rare.


State of WYSIWYG and WikiMedia

Presently there is no available 'ready-to-go' package for incorporating full WYSIWYG into the WikiMedia software.

Design

Conceptual

As noted above, HTML TEXTAREAS could be a fallback for older browsers or those that prefer this for fine control. The WYSIWYG editor could also be limited to reflect only existing wiki markup, with its democratically decided simplicities and compromises for complexities -- adding nothing to the wiki markup, only providing a more visually straightforward means of changing the markup....

Implementation

There are a few options for making a WYSIWYG editor that works in the browser.

  1. Pure DHTML/Javascript. Capture mouse input, buttons, keystrokes, etc., and actually edit the HTML of the current document. It's not trivial, but possible. Epoz 1.0 is an example for this approach. Epoz and HTMLArea, the most prominent ones, are cross-browser - they iron out the subtle differences in the editing API between IE/Moz. This leaves all browsers not based on MSIE or Gecko (most notably Opera and KHTML (backend used by Konqueror and Apple's Safari browser)) as non-supported.
    I'm working with FCKeditor which supports last versions of Opera and (afaik) KHTMl too. If you feel interested to see the results of my integration - contact me. --Shtriter 07:20, 26 July 2006 (UTC)[reply]
    FCKeditor doesn't work in Opera 9.02 (latest version as of now) --Amikortol 23:00, 2 October 2006 (UTC)[reply]
  2. Create a custom browser plug-in, Java applet, ActiveX control. This would probably be workable, but would take quite a bit of hackery, and may or may not work. Requiring users to install any sort of plugin is very undesirable.
    Imho, limited approach. Only Java applet is (possibly) cross-browser compatible. But not all users have Java on their machines and JavaScript is supported by all popular browsers (well, maybe except text-based, but I think that Java wouldn't work there too)... --Shtriter 07:20, 26 July 2006 (UTC)[reply]
  3. Both Mozilla and Internet Explorer include a way to make sections of a page editable. IE has the MSHTML Editing Platform, and Mozilla has its Rich Text Editing API. Both technologies allow Web developers to make parts of a page editable -- in slightly different ways, of course.

Most current in-browser WYSIWYG editors use the third option.

Proof of concept: WYSIWYG Editors

FCKeditor

An experimental implementation of FCKeditor into MediaWiki 1.7.1 is described here which converts your input into HTML. A version based on 1.5.3 can be downloaded from here.

Another implementation using HTML::WikiConverter is described at FCKeditor and HTML::WikiConverter.

TinyMCE

You can also download the following patch: http://www.logicsupply.com/pub/wysiwyg.patch.zip. This patch integrates TinyMCE into MediaWiki version 1.5.7. The TinyMCE source is included in the patch. I've added an option to the user preferences to enable or disable the editor on a per user basis. All HTML is converted to appropriate wiki markup before previewing/saving.

Limitations include:

  • Links and images must still be specified using wiki markup
  • Preformatted text (lines starting with whitespace) doesn't survive the trip to and from HTML
  • Some features, like underline and strikethrough, have no effect.

If someone wants to hack TinyMCE to make these features work, they're more than welcome.

For details on implementing TinyMCE see the article on TinyMCE.

Mozile

Mozile takes a different approach to editing, using DOM operations instead of the designMode features which most other editors rely on. It also supports structured editing based on RelaxNG. A MediaWiki editing demo is available which makes use of the html2wiki.xsl tool mentioned below.

Wikiwyg

Wikiwyg This extension apparently can be used as a mediawiki extension or with greasemonkey. Seems to require a Mozilla-based browser.

Wikia and SocialText launched a joint project in August 2006 to integrate Wikiwyg into MediaWiki. Some of the JavaScript code for the integration is in the Wikiwyg Subversion repository.

Sites with Wikiwyg on Mediawiki:

wikEd

wikEd is a full featured JavaScript rich-text in-browser editor for Mozilla-based browsers that integrates into MediaWiki edit pages. wikEd keeps the wikicode text but adds character formatting and wikicode syntax highlighting. It also lets you manipulate the text like in a real word processor. Features include:

  • Pasting formatted text, e.g. from MS-Word (including tables), wiki pages, and web pages
  • Converting the formatted text to wikicode
  • Wikicode syntax highlighting
  • Regular expression search and replace
  • Server-independent Show preview and Show changes
  • Single-click fixing of common mistakes
  • History for summary, search, and replace fields

Other Wiki engines/services that have WYSIWYM

Try out the editing feature on these sites, for some inspiration:

Internal Links and Images

http://www.aulinx.de/hilfe/plone/bilder/bildeinfuegen.png

Epoz 0.74 features a great tool box to insert internal links and images. It's based on a search box, images are displayed with thumbnails and can be inserted with a single click. Inserting different image sizes is easy to do by customizing the tool box template. More documentation and screenshots (in german)

HTML to Wiki markup

Leveraging the power of existing html editing/spell checking tools makes it necessary to convert the produced html/xhtml to wiki markup.

If we manage to create a python or php script that converts simplified tidy output (xhtml) to wiki-code, this would be easy to do with epoz. Epoz 0.74 feeds the html through tidy on the server via xml-rpc when switching to source view and on save. This works great, it's Plone's standard editor- I used it to write the Squid document for example. Our conversion script can hook in after tidy, the source visible in 'source view' and submitted to the server would be wiki markup. All without reloading the surrounding page. Creating the conversion script is a challenge, but operating on tidy-cleaned xhtml should simplify matters. Epoz only allows structural markup (no font tags etc), so this is mainly a str_replace(). With the appropriate configuration tidy will strip the complex things first.

This setup combines the advantages of both worlds by providing two views switchable back and forth without reloading the page:

  • WYSIWYG view: uses the default css and html editing
  • SOURCE view: WIKI source


That's great! But I wonder again, why only server-side scripts? I believe that it would be better to do it on client-side and let the user to switch between the views dynamically. There is already very limited but working prototype for it. For further information - contact me. --Shtriter 07:20, 26 July 2006 (UTC)[reply]


An XSLT stylesheet for converting HTML to wiki markup is now available: html2wiki.xsl. It is still a work in progress but it can handle a wide range of formatting.

Advantages:

  • XSLT can be used client-side by most modern browsers.
  • The resulting wiki markup can be submitted as if it came from an HTML textarea.

Disadvantages:

  • Much of the white space information is lost during parsing and the XSL transformation.
  • The current MediaWiki parser does not provide enough information about templates and other generated content in an article's HTML.

Any HTML to wiki markup conversion tool will need more information about the generated content than the MediaWiki parser currently includes in the HTML which it generates. Otherwise it will have to interpret templates as normal content, for example, when they should be converted to the {{Template}} syntax. The most direct solution to this problem is to make the parser include more information. In large part this would simply require better use of the "class" attribute. Sometimes it would require adding elements to wrap the generated content.

Proposed changes to the parser:

  • The <nowiki> tag should become <p class="nowiki">.
  • Container <div> elements for images should distinguish between the "thumb" class for thumbnails and the "frame" class for frames, even if the CSS for the two classes is the same. The containers for scaled images (those with their size property set) should be marked with a "scaled" class.
  • Templates (but not nested templates) need to be marked as such in the HTML.
{{Template name}}

should become

<span class="template">
  <span class="template-name">Template name</span>
  Expanded template...
</span>

The "template-name" class can be marked as display: none in CSS.

  • References need to include their content at the reference point.
<ref>Reference content.</ref>

should become

<sup class="reference">
  <span class="reference-content">Reference content.</span>
  Reference links and number...
</span>

The "reference-content" class can be marked as display: none in CSS.

  • Category links need to be included in the HTML.
{{Category:Category name}}

should become

<span class="category-link">Category name</span>

The "category-link" class can be marked as display: none in CSS.

The use of new elements with CSS display: none is in the spirit of adding semantic structure. It would be possible to use comment tags instead, in order to provide better support for legacy browsers.

Possible problems

Things which need to be worked around include:

  1. An editor should support the user in getting a headline right instead of using a big font, marking a citation instead of italicizing text, and so on. Imho most wysiwyg-editors lures people away from thinking about the meaning, and this is wrong. -- 01:47, 6 August 2006 (UTC)[reply]
  2. Displaying differences between italics and emphasis, bold and strong emphasis. Italics and bold are only used for articles on typesetting. (Technically mathematical formulae should use <var> but probably people are using <i> as it is shorter.)
    Mediawiki originally interpreted double apostrophes as emphasis and triple apostrophes as strong, but this has been changed to italics and bold. We should probably get the developers to make up their minds before we start worrying about how a WYSIWYG editor implements it... — Omegatron 22:04, 14 December 2006 (UTC)[reply]
  3. Displaying formulae and potentially also music, maps, timelines, chess... allow editing?
    Perhaps MathML supporting browsers will be able to edit formulae
    There is ajax Math Preview. The source code was here. For more info - google in Mediawiki-l maillist. --Shtriter 07:19, 26 July 2006 (UTC)[reply]
  4. Displaying templates and allowing editing and inclusion of templates
    What about protected templates in a non-protected page? (Other similar combinations...)
    I have an idea. It would show up as a square box with the template name inside, and upon double-clicking a new tab would open (between the text box and formatting buttons) and allow editing of that template. This is a bit like handling of OLE objects in Microsoft Office.
    I'm working over it on en:User:Pilaf/InstaView/Devel --Shtriter 07:19, 26 July 2006 (UTC)[reply]
  5. Allow easy input other tags such as strikethrough, often used off the article namespace?
    No problem. FCKeditor even allows to insert images without any difficulties!
    Or do you want the delete tag? Maybe we could restrict which buttons were displayed in which namespace to discourage certain tags from being used in the main article namespace? — Omegatron 22:11, 14 December 2006 (UTC)[reply]
  6. Displaying category links, interlanguage links?
    Same as MW do? I'm working over it on en:User:Pilaf/InstaView/Devel --Shtriter 07:19, 26 July 2006 (UTC)[reply]
  7. Over-use of color, size, and other features. See MySpace.com profiles for examples of people with no design knowlege let loose.
    Any suggestions? Prohibit color editing? Or at list for not registered users? --Shtriter 07:19, 26 July 2006 (UTC)[reply]
    Seriously. As soon as we implement this the site will turn into Myspace if we don't limit what the interface can do. It should only be capable of the things that the standard toolbar is capable of. Users shouldn't be allowed to change fonts, colors or create big bold text for headers, for instance. If they want to do things like that for special cases, they should be forced to use the source code editor. — Omegatron 22:08, 14 December 2006 (UTC)[reply]
  8. Issues with users cutting and pasting from word processing software especially Microsoft Word. This results in non-compliant HTML and could be rendered incorrectly (if at all) from non microsoft platforms.
    We can have it strip anything except basic markup, but we'd have to incorporate a list in the software to indicate what "basic" means. — Omegatron 22:09, 14 December 2006 (UTC)[reply]

Wikipedia-WYSIWYG-Editors not running inside the browser

Other text-editors are covered in Wikipedia:Text_editor_support, too.

See also

External links

  • WYSIWYG editor Toko multi-functional WYSIWYG content management system.
  • wclEditor - A combination of FCKeditor and a set of useful js. Allows dynamic switching between original editing and WYSIWYG and even more...
  • List of all WYSIWYG editors. Table info about almost all WYSIWYG editors on the net.
  • WYSIWIKI - Questioning WISIWIG in the Internet Age
  • widgEditor. New! Small (32Kb) WYSIWYG editor where HTML can be swapped for wiki markup. Promising.
  • A WYSIWYG editor at an existing wiki, opened to a test page.
  • another WYSIWYG editor at a commercial "wiki farm" (www.seedwiki.com), opened to an existing page. Uses unmodified FCKeditor - may be converting back to wikitext.
  • Epoz 0.74 is a cross-browser WYSIWYG editor for Zope, with xhtml cleanup (tidy via xml-rpc), source view, works with IE5.5+ and Mozilla, falls back to textarea otherwise. Uses Rich Text Editing API on moz. Demo- switch to source view with the checkbox in the bottom left corner
  • Epoz NG (1.0), (now called Kupu) - next generation based on a different concept, currently under heavy development. Features native xhtml, async saving, propably xslt...
  • FCKeditor
  • HTMLArea 3 - works with IE5.5+ and Mozilla, falls back to textarea otherwise ("we have to inform you that we no longer actively maintain HTMLArea").
  • Alternate site) is a BSD-licensed, cross-browser WYSIWYG editor. There's a good demo. Also features a spell checker plugin potentially useful for Epoz (Demo).
  • Wiki:WysiwygWiki has some more links and discussion.
  • WysiwygEdit on WikiFeatures (one working htmlarea demo, no wiki src editing)
  • Rich Text Editing API is Mozilla's built-in WYSIWYG editor, the equivalent of IE5.5+'s 'Rich Text Editor'. There's a demo. Most Editors are based on these two mostly compatible editing APIs.
  • Richtext Editor. Has lot of tools like "Insert Special Characters". IE only. Demo. License: LGPL ← DEADLINK
  • Mozile -- New-generation in-browser editor for Mozilla
  • HTML Parser for PHP -- a good candidate for inclusion in MediaWiki for parsing WYSIWYG editor output back to Wiki markup
  • HTML->MediaWiki converter -- demo of the HTML::WikiConverter perl module
  • HtmlDiff solutions
  • Diderot - Demo for integrated Wikipedia editor - Win only
  • WackoWiki [ru] -- Wiki engine with built-in WYSIWYG editor
  • OSCOM Kupu -- Open Source Content Management: Kupu WYSIWYG XHTML Editor, easy to integrate and extend, uses CSS, BSD source code license
  • KOIVI TTW HTML Editor - cross browser, cross platform - some Safari/412 support!
  • MoinMoin (written in Python) used FCKedit as GUI wiki editor.
  • WIKIWIG --A lite WYSIWYG Wiki based on HtmlArea3. GPL, developed in PHP, so lite and easy to set up.
  • Dojo Rich Text Editor The Dojo rich text editor supports inline editing as well as WYSIWYG
  • AjaxWrite XUL based WYSIWIG editor, supports several file formats (RDF, PDF, MS-Word, etc); perhaps could be made to support WikiText
  • The HtmlArea 3.0 spell checker plugin:

http://wp.aulinx.de/pics/htmlarea3_spellchecker.png

  • WYMeditor: WYMeditor is an open source web-based WYSIWYM editor.
  • TWiki an Enterprise Collaboration Platform written in Perl.
  • Microsoft Word Macros which help converting MS Word to Wiki markup.