aboutsummaryrefslogtreecommitdiffstats
path: root/infrastructure/ace/README
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2010-06-08 09:01:43 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2010-06-08 09:01:43 +0200
commitd1fa08fdc9cb11dccee76d668ff85df30458c295 (patch)
tree1d19df6405103577d872902486792e8c23bce711 /infrastructure/ace/README
parentd7c5ad7d6263fd1baf9bfdbaa4c50b70ef2fbdb2 (diff)
parent70d1f9d6fcaefe611e778b8dbf3bafea8934aa08 (diff)
downloadetherpad-d1fa08fdc9cb11dccee76d668ff85df30458c295.tar.gz
etherpad-d1fa08fdc9cb11dccee76d668ff85df30458c295.tar.xz
etherpad-d1fa08fdc9cb11dccee76d668ff85df30458c295.zip
Merge remote branch 'upstream/master'
Conflicts: etherpad/src/etherpad/control/pro/admin/pro_admin_control.js etherpad/src/etherpad/control/pro/pro_main_control.js etherpad/src/etherpad/control/pro_help_control.js etherpad/src/etherpad/globals.js etherpad/src/etherpad/legacy_urls.js etherpad/src/etherpad/pne/pne_utils.js etherpad/src/etherpad/pro/pro_utils.js etherpad/src/main.js etherpad/src/plugins/fileUpload/templates/fileUpload.ejs etherpad/src/plugins/testplugin/templates/page.ejs etherpad/src/static/css/pad2_ejs.css etherpad/src/static/css/pro-help.css etherpad/src/static/img/jun09/pad/protop.gif etherpad/src/static/js/store.js etherpad/src/themes/default/templates/framed/framedheader-pro.ejs etherpad/src/themes/default/templates/main/home.ejs etherpad/src/themes/default/templates/pro-help/main.ejs etherpad/src/themes/default/templates/pro-help/pro-help-template.ejs infrastructure/com.etherpad/licensing.scala trunk/etherpad/src/etherpad/collab/ace/contentcollector.js trunk/etherpad/src/etherpad/collab/ace/linestylefilter.js trunk/etherpad/src/static/css/home-opensource.css trunk/etherpad/src/static/js/ace.js trunk/etherpad/src/static/js/linestylefilter_client.js trunk/etherpad/src/templates/email/eepnet_license_info.ejs trunk/etherpad/src/templates/pad/pad_body2.ejs trunk/etherpad/src/templates/pad/pad_content.ejs trunk/etherpad/src/templates/pad/padfull_body.ejs trunk/etherpad/src/templates/pro/admin/pne-license-manager.ejs
Diffstat (limited to 'infrastructure/ace/README')
-rw-r--r--infrastructure/ace/README69
1 files changed, 69 insertions, 0 deletions
diff --git a/infrastructure/ace/README b/infrastructure/ace/README
new file mode 100644
index 0000000..275684f
--- /dev/null
+++ b/infrastructure/ace/README
@@ -0,0 +1,69 @@
+=====
+ACE2 (originally AppJet Code Editor)
+=====
+
+(This doc started Dec 2009 by dgreenspan.)
+
+ACE2 is EtherPad's editor, a content-editable-based rich text editor
+that supports IE6+, FF(2?/)3+, Safari(3?/)4+. It supports
+collaborative editing using operation transforms (easysync2),
+undo/redo, copy/paste.
+
+The name "ACE2" is because this is a rewrite of aiba's original
+content-editable AppJet Code Editor.
+
+== Building it
+
+In this directory, run `bin/make normal etherpad` (requires scala),
+which generates `build/ace2.js` and copies this and other files into
+the etherpad source tree. To have the script keep running and
+automatically rebuild when source files change, run `bin/make auto
+etherpad`.
+
+The original reason for the build process was that ACE needs to
+construct two nested iframes on the client, and to do this without
+incurring round-trips to the server, it programmatically loads code
+into the outer iframe that loads code into the inner iframe; so the
+bulk of ACE's code is compressed into a string literal (twice). Later
+on, refactoring meant that the source is also divided into more than a
+dozen files that the build script combines, and some are also
+server-side EtherPad modules or client-side libraries (or both).
+
+The master copy of the operational transform (OT) library, easysync2,
+lives here.
+
+In the early days it was possible to run ACE in a sort of development
+mode, without the compression and iframe injection, by running it out
+of the 'www' directory, but this is no longer possible.
+
+== Browser support
+
+We went out of our way to support IE6+. IE's design-mode is quite
+robust, though there are some differences in manipulation of the
+selection and insertion point and in the DOM representation we had to
+use.
+
+We don't support Opera. Opera is a problematic case, because
+apparently JS running in different iframes is run concurrently, not
+linearized into a single event thread. This seems to be a rather
+obscure fact and is almost difficult to believe. As if iframes don't
+complicate scripting enough!
+
+== Syntax highlighting
+
+Though syntax highlighting predated rich text as the original
+motivation for the design of ACE, support was eventually dropped in
+EtherPad. At first the plan was to generalize it to other programming
+languages, but the task was deprioritized (and difficult), and during
+subsequent optimization and refactoring of ACE, calls to the
+incremental lexer were stripped out because they complicated things.
+
+One plan for multi-language syntax highlighting, never implemented,
+was to calculate syntax highlighting on the server as a sort of "style
+overlay" and feed updates to the client along with updates to the
+document text.
+
+== Changeset format
+
+See easysync-notes.txt for some notes on the changeset format, which
+was redesigned with the advent of rich text.