changeset 13:c0edd32443a7

Cursor position is now preserved when moving from editing a part to editing the whole document.
author Atul Varma <varmaa@toolness.com>
date Sun, 01 Feb 2009 16:33:42 -0800
parents 0158bed7e0c6
children f8354a940524
files wiki.js
diffstat 1 files changed, 13 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/wiki.js	Sun Feb 01 16:24:38 2009 -0800
+++ b/wiki.js	Sun Feb 01 16:33:42 2009 -0800
@@ -1,4 +1,5 @@
 var App = {
+  PART_SEPARATOR: "\n\n",
   eventHandlers: {}
 };
 
@@ -17,10 +18,10 @@
     function(i) { partsMarkup.push($(this).text()); }
   );
 
-  return partsMarkup.join("\n\n");
+  return partsMarkup.join(App.PART_SEPARATOR);
 };
 
-App.enterEditMode = function enterEditMode(parts, level) {
+App.enterEditMode = function enterEditMode(parts, level, cursorPos) {
   var editablePart = $('<textarea class="wiki-edit"></textarea>').get(0);
   $(editablePart).attr("value", App.getMarkup(parts));
 
@@ -39,10 +40,14 @@
 
     aEvt.preventDefault();
 
+    var prevMarkup = App.getMarkup($(this).prevAll());
+    var cursorPos = (prevMarkup.length + App.PART_SEPARATOR.length +
+                     this.selectionStart);
+
     var allSiblings = this.parentNode.childNodes;
     exitEditMode.apply(this);
 
-    App.enterEditMode(allSiblings, level-1);
+    App.enterEditMode(allSiblings, level-1, cursorPos);
   }
 
   $(editablePart).blur(exitEditMode);
@@ -52,6 +57,10 @@
   $(parts).replaceWith(editablePart);
   setScrollHeight.apply(editablePart);
 
+  if (typeof(cursorPos) != "undefined") {
+    editablePart.selectionStart = cursorPos;
+    editablePart.selectionEnd = cursorPos;
+  }
   $(editablePart).focus();
 };
 
@@ -68,7 +77,7 @@
 App.createParts = function createParts(text) {
   var parts = [];
 
-  var partsMarkup = text.split("\n\n");
+  var partsMarkup = text.split(App.PART_SEPARATOR);
   jQuery.each(
     partsMarkup,
     function(i) {