this.publisher('currentElementChanged', element);
}
}.bind(this);
- var _moveCaretToTextElement = function(element, where) {
- var range = document.createRange();
- range.selectNodeContents(element.dom().contents()[0]);
-
- var collapseArg = true;
- if(where === 'end')
- collapseArg = false;
- range.collapse(collapseArg);
- var selection = document.getSelection();
- selection.removeAllRanges();
- selection.addRange(range);
- };
+
var isTextElement = element instanceof documentElement.DocumentTextElement,
textElementToLand = isTextElement ? element : findFirstDirectTextChild(element),
if(textElementToLand && !(textElementToLand.sameNode(currentTextElement))) {
_markAsCurrent(textElementToLand);
if(params.caretTo)
- _moveCaretToTextElement(textElementToLand, params.caretTo); // as method on element?
+ this._moveCaretToTextElement(textElementToLand, params.caretTo); // as method on element?
this.publisher('currentTextElementSet', element);
}
document.getSelection().removeAllRanges();
this.publisher('currentNodeElementSet', nodeElementToLand);
}
- }
+ },
+
+ _moveCaretToTextElement: function(element, where) {
+ var range = document.createRange(),
+ node = element.dom().contents()[0];
+
+ if(typeof where !== 'number') {
+ range.selectNodeContents(node);
+ } else {
+ range.setStart(node, where);
+ }
+
+ var collapseArg = true;
+ if(where === 'end')
+ collapseArg = false;
+ range.collapse(collapseArg);
+
+ var selection = document.getSelection();
+ selection.removeAllRanges();
+ selection.addRange(range);
+ this.wrapper.focus(); // FF requires this for caret to be put where range colllapses, Chrome doesn't.
+ },
+
+ setCursorPosition: function(position) {
+ if(position.element)
+ this._moveCaretToTextElement(position.element, position.offset);
+ }
});
$.extend(Canvas.prototype.list, {
var canvas = canvas3.fromXML('', sandbox.publish); //canvasCanvas.create();
var manager;
var canvasWrapper = $(template);
+ var shownAlready = false;
+ var scrollbarPosition = 0,
+ cursorPosition;
+
+ canvasWrapper.onShow = function() {
+ if(!shownAlready) {
+ shownAlready = true;
+ } else {
+ canvas.setCursorPosition(cursorPosition);
+ this.find('#rng-module-documentCanvas-contentWrapper').scrollTop(scrollbarPosition);
+ }
+ };
+
+ canvasWrapper.onHide = function() {
+ scrollbarPosition = this.find('#rng-module-documentCanvas-contentWrapper').scrollTop();
+ cursorPosition = canvas.getCursor().getPosition();
+ };
/* public api */
return {