set user's cursor to either the beginning or end of the document
This commit is contained in:
@@ -11,7 +11,7 @@ define([
|
|||||||
var verbose = function (x) { if (window.verboseMode) { console.log(x); } };
|
var verbose = function (x) { if (window.verboseMode) { console.log(x); } };
|
||||||
|
|
||||||
/* accepts the document used by the editor */
|
/* accepts the document used by the editor */
|
||||||
return function (inner) {
|
var Cursor = function (inner) {
|
||||||
var cursor = {};
|
var cursor = {};
|
||||||
|
|
||||||
// there ought to only be one cursor at a time, so let's just
|
// there ought to only be one cursor at a time, so let's just
|
||||||
@@ -387,6 +387,58 @@ define([
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
cursor.lastTextNode = function () {
|
||||||
|
var lastEl = Tree.rightmostNode(inner);
|
||||||
|
if (lastEl && lastEl.nodeType === 3) { return lastEl; }
|
||||||
|
|
||||||
|
var firstEl = Tree.leftmostNode(inner);
|
||||||
|
|
||||||
|
while (lastEl !== firstEl) {
|
||||||
|
lastEl = Tree.previousNode(lastEl, inner);
|
||||||
|
if (lastEl && lastEl.nodeType === 3) { return lastEl; }
|
||||||
|
}
|
||||||
|
|
||||||
|
return lastEl;
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor.firstTextNode = function () {
|
||||||
|
var firstEl = Tree.leftmostNode(inner);
|
||||||
|
if (firstEl && firstEl.nodeType === 3) { return firstEl; }
|
||||||
|
|
||||||
|
var lastEl = Tree.rightmostNode(inner);
|
||||||
|
|
||||||
|
while (firstEl !== lastEl) {
|
||||||
|
firstEl = Tree.nextNode(firstEl, inner);
|
||||||
|
if (firstEl && firstEl.nodeType === 3) { return firstEl; }
|
||||||
|
}
|
||||||
|
return firstEl;
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor.setToStart = function () {
|
||||||
|
var el = cursor.firstTextNode();
|
||||||
|
if (!el) { return; }
|
||||||
|
fixStart(el, 0);
|
||||||
|
fixEnd(el, 0);
|
||||||
|
fixSelection(makeSelection(), makeRange());
|
||||||
|
return el;
|
||||||
|
};
|
||||||
|
|
||||||
|
cursor.setToEnd = function () {
|
||||||
|
var el = cursor.lastTextNode();
|
||||||
|
if (!el) { return; }
|
||||||
|
|
||||||
|
var offset = el.textContent.length;
|
||||||
|
|
||||||
|
fixStart(el, offset);
|
||||||
|
fixEnd(el, offset);
|
||||||
|
fixSelection(makeSelection(), makeRange());
|
||||||
|
return el;
|
||||||
|
};
|
||||||
|
|
||||||
return cursor;
|
return cursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Cursor.Tree = Tree;
|
||||||
|
|
||||||
|
return Cursor;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ define([
|
|||||||
logFights: true,
|
logFights: true,
|
||||||
fights: [],
|
fights: [],
|
||||||
Cryptpad: Cryptpad,
|
Cryptpad: Cryptpad,
|
||||||
|
Cursor: Cursor,
|
||||||
};
|
};
|
||||||
|
|
||||||
var emitResize = module.emitResize = function () {
|
var emitResize = module.emitResize = function () {
|
||||||
@@ -131,7 +132,7 @@ define([
|
|||||||
color: '#fff',
|
color: '#fff',
|
||||||
});
|
});
|
||||||
|
|
||||||
var cursor = window.cursor = Cursor(inner);
|
var cursor = module.cursor = Cursor(inner);
|
||||||
|
|
||||||
var setEditable = module.setEditable = function (bool) {
|
var setEditable = module.setEditable = function (bool) {
|
||||||
if (bool) {
|
if (bool) {
|
||||||
@@ -718,6 +719,13 @@ define([
|
|||||||
realtimeOptions.onLocal();
|
realtimeOptions.onLocal();
|
||||||
module.$userNameButton.click();
|
module.$userNameButton.click();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
editor.focus();
|
||||||
|
if (newPad) {
|
||||||
|
cursor.setToEnd();
|
||||||
|
} else {
|
||||||
|
cursor.setToFix();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user