Motivation
TinyMCE already has some specific quirks coded into
WysiwygPlugin. With alternative editors, we will need to have specific targeting of quirks and work-arounds in
TML2HTML and
HTML2TML. Eg.:
- TinyMCE has a habit of ending up with
<p>
wrapping all content in table cells where the return key has been pressed, and the P cannot be removed
- However, it could be argued that a better work-around would be to write a javascript MCE plugin that hooks into the ForceBlocks object and checks that a
<p>
is being created unnecessarily (ie. parent node = <td>
).
- Light-weight editors suitable for some applications of WYSIWYG formfields Eg. jwysiwyg cannot deal with some elements, eg. tables.
- Although it could be argued that it's the wiki app developer's responsibility to ensure that the editor of choice has a content policy appropriately tuned to its capabilities.
Description
It might be necessary for
WysiwygPlugin's
HTML2TML and
TML2HTML to provide call-backs so that some details can be taken care of in the EditorPlugin's code.
In general though it might just be a matter of providing a way for EditorPlugins to turn certain quirks and work-arounds on and off. Examples:
- Wrap all content in a
<div>
- In TML2HTML, create a common div container around any TML table or list with any text that is on a line immediately before after (otherwise TMCE wraps stray text nodes in a
<p>
, which introduces unwanted newlines in HTML2TML). In HTML2TML, eat/flatten the inserted div.
- Ensure list items aren't null or only contain whitespace; replace with
instead
Implementation
Each quirk (call them requirements) should be named. Perhaps it can be named as a
ItemNNNN topic name. But each should have a unique topic at foswiki.org, if not a
ItemNNNN topic then a foswiki.org/Tasks/WysiwygRequirementName.
How's this:
- Tasks.Item2605 gets filed as a result of a bug. A new translation requirement is needed to solve it.
- Tasks.WysiwygNoEmptyListItems is created, which references Tasks.Item2605 and vice versa.
-
NoEmptyListItems
becomes a key in an options hash used by WysiwygPlugin (which will have to know which EditorPlugin is calling it so that it may lookup the appropriate preference for that editor)
-
{EditorPlugin}{Requirements}{NoEmptyListItems}
will itself be a hash of further key:value pairs, which may be necessary to provide editor agnostic work-arounds. For example let's assume empty/whitespace list items are a problem on all editors because Firefox is buggy. Let's pretend
isn't an appropriate solution across all editors. So it may be desirable to specify the dummy value to be used on a per-editor basis. For example:
-
{FckEditorPlugin}{Requirements}{NoEmptyListItems}{Enabled} => 1
-
{FckEditorPlugin}{Requirements}{NoEmptyListItems}{DummyValue} => '<!-- -->'
-
{TinyMCEPlugin}{Requirements}{NoEmptyListItems}{Enabled} => 1
- TinyMCEPlugin doesn't specify a
DummyValue
, so maybe the NoEmptyListItems
requirement will assume
there
I have different priorities now, and different ideas on how to solve this (
FoswikiDOM). Parking.
--
PaulHarvey - 17 Feb 2012