.. _advanced-designdecisions:

Software design considerations
==============================

These are assorted ramblings copy-pasted from various emails.


About rich text editors
-----------------------

We have been
struggling with rich text editors for a long time. To be honest, I do
not think it was a good idea to add that many features to the rich
text editor. Resizing images uploaded into a rich text editor is a
real pain, and what if you'd like to reuse these images or display
them using a lightbox script or something similar? You have to resort
to writing loads of JavaScript code which will only work on one
browser. You cannot really filter the HTML code generated by the user
to kick out ugly HTML code generated by copy-pasting from word. The
user will upload 10mb JPEGs and resize them to 50x50 pixels by
himself.

All of this convinced me that offering the user a rich text editor
with too much capabilities is a really bad idea. The rich text editor
in FeinCMS only has bold, italic, bullets, link and headlines
activated (and the HTML code button, because that's sort of inevitable
-- sometimes the rich text editor messes up and you cannot fix it
other than going directly into the HTML code. Plus, if someone really
knows what he's doing, I'd still like to give him the power to shot
his own foot).

If this does not seem convincing you can always add your own rich text
content type with a different configuration (or just override the rich
text editor initialization template in your own project). We do not want
to force our world view on you, it's just that we think that in this
case, more choice has the bigger potential to hurt than to help.


Content blocks
--------------

Images and other media files are inserted via objects;
the user can only select a file and a display mode (f.e. float/block
for images or something...). A page's content could look like this:

* Rich Text
* Floated image
* Rich Text
* YouTube Video Link, embedding code is automatically generated from the link
* Rich Text

It's of course easier for the user to start with only a single rich
text field, but I think that the user already has too much confusing
possibilities with an enhanced rich text editor. Once the user grasps
the concept of content blocks which can be freely added, removed and
reordered using drag/drop, I'd say it's much easier to administer the
content of a webpage. Plus, the content blocks can have their own
displaying and updating logic; implementing dynamic content inside the
CMS is not hard anymore, on the contrary. Since content blocks are
Django models, you can do anything you want inside them.
