add selection.toJSON method
This commit is contained in:
parent
fa13f377e1
commit
7798de7bd3
3 changed files with 141 additions and 56 deletions
|
|
@ -171,6 +171,30 @@ module.exports = {
|
||||||
selection.addRange(range2);
|
selection.addRange(range2);
|
||||||
editor.execCommand('insertfoo');
|
editor.execCommand('insertfoo');
|
||||||
assert.equal('l1foo\nl2foo', editor.getValue());
|
assert.equal('l1foo\nl2foo', editor.getValue());
|
||||||
|
},
|
||||||
|
|
||||||
|
"test multiselect fromJSON/toJSON": function() {
|
||||||
|
var doc = new EditSession(["l1", "l2"]);
|
||||||
|
editor = new Editor(new MockRenderer(), doc);
|
||||||
|
MultiSelect(editor);
|
||||||
|
var selection = editor.selection;
|
||||||
|
|
||||||
|
var before = selection.toJSON();
|
||||||
|
|
||||||
|
var range1 = new Range(0,2,0,2);
|
||||||
|
var range2 = new Range(1,2,1,2);
|
||||||
|
selection.fromOrientedRange(range1)
|
||||||
|
selection.addRange(range2);
|
||||||
|
|
||||||
|
var after = selection.toJSON();
|
||||||
|
|
||||||
|
selection.fromJSON(before);
|
||||||
|
assert.ok(!selection.isEqual(after));
|
||||||
|
assert.ok(selection.isEqual(before));
|
||||||
|
|
||||||
|
selection.fromJSON(after);
|
||||||
|
assert.ok(!selection.isEqual(before));
|
||||||
|
assert.ok(selection.isEqual(after));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (c) 2010, Ajax.org B.V.
|
* Copyright (c) 2010, Ajax.org B.V.
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
* * Redistributions of source code must retain the above copyright
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
* * Neither the name of Ajax.org B.V. nor the
|
* * Neither the name of Ajax.org B.V. nor the
|
||||||
* names of its contributors may be used to endorse or promote products
|
* names of its contributors may be used to endorse or promote products
|
||||||
* derived from this software without specific prior written permission.
|
* derived from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
|
@ -37,7 +37,7 @@ var EventEmitter = require("./lib/event_emitter").EventEmitter;
|
||||||
var Range = require("./range").Range;
|
var Range = require("./range").Range;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Contains the cursor position and the text selection of an edit session.
|
* Contains the cursor position and the text selection of an edit session.
|
||||||
*
|
*
|
||||||
* The row/columns used in the selection are in document coordinates representing ths coordinates as thez appear in the document before applying soft wrap and folding.
|
* The row/columns used in the selection are in document coordinates representing ths coordinates as thez appear in the document before applying soft wrap and folding.
|
||||||
|
|
@ -49,22 +49,22 @@ var Range = require("./range").Range;
|
||||||
* Emitted when the cursor position changes.
|
* Emitted when the cursor position changes.
|
||||||
* @event changeCursor
|
* @event changeCursor
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
/**
|
/**
|
||||||
* Emitted when the cursor selection changes.
|
* Emitted when the cursor selection changes.
|
||||||
* @event changeSelection
|
* @event changeSelection
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
/**
|
/**
|
||||||
* Creates a new `Selection` object.
|
* Creates a new `Selection` object.
|
||||||
* @param {EditSession} session The session to use
|
* @param {EditSession} session The session to use
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @constructor
|
* @constructor
|
||||||
**/
|
**/
|
||||||
var Selection = function(session) {
|
var Selection = function(session) {
|
||||||
|
|
@ -95,7 +95,7 @@ var Selection = function(session) {
|
||||||
oop.implement(this, EventEmitter);
|
oop.implement(this, EventEmitter);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Returns `true` if the selection is empty.
|
* Returns `true` if the selection is empty.
|
||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
**/
|
**/
|
||||||
|
|
@ -106,7 +106,7 @@ var Selection = function(session) {
|
||||||
));
|
));
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns `true` if the selection is a multi-line.
|
* Returns `true` if the selection is a multi-line.
|
||||||
* @returns {Boolean}
|
* @returns {Boolean}
|
||||||
**/
|
**/
|
||||||
|
|
@ -118,7 +118,7 @@ var Selection = function(session) {
|
||||||
return this.getRange().isMultiLine();
|
return this.getRange().isMultiLine();
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the current position of the cursor.
|
* Gets the current position of the cursor.
|
||||||
* @returns {Number}
|
* @returns {Number}
|
||||||
**/
|
**/
|
||||||
|
|
@ -131,7 +131,7 @@ var Selection = function(session) {
|
||||||
* @param {Number} row The new row
|
* @param {Number} row The new row
|
||||||
* @param {Number} column The new column
|
* @param {Number} column The new column
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.setSelectionAnchor = function(row, column) {
|
this.setSelectionAnchor = function(row, column) {
|
||||||
this.anchor.setPosition(row, column);
|
this.anchor.setPosition(row, column);
|
||||||
|
|
@ -156,7 +156,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Returns an object containing the `row` and `column` of the calling selection lead.
|
* Returns an object containing the `row` and `column` of the calling selection lead.
|
||||||
* @returns {Object}
|
* @returns {Object}
|
||||||
**/
|
**/
|
||||||
|
|
@ -168,7 +168,7 @@ var Selection = function(session) {
|
||||||
* Shifts the selection up (or down, if [[Selection.isBackwards `isBackwards()`]] is true) the given number of columns.
|
* Shifts the selection up (or down, if [[Selection.isBackwards `isBackwards()`]] is true) the given number of columns.
|
||||||
* @param {Number} columns The number of columns to shift by
|
* @param {Number} columns The number of columns to shift by
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.shiftSelection = function(columns) {
|
this.shiftSelection = function(columns) {
|
||||||
|
|
@ -245,7 +245,7 @@ var Selection = function(session) {
|
||||||
* @param {Range} range The range of text to select
|
* @param {Range} range The range of text to select
|
||||||
* @param {Boolean} reverse Indicates if the range should go backwards (`true`) or not
|
* @param {Boolean} reverse Indicates if the range should go backwards (`true`) or not
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @method setSelectionRange
|
* @method setSelectionRange
|
||||||
* @alias setRange
|
* @alias setRange
|
||||||
**/
|
**/
|
||||||
|
|
@ -274,7 +274,7 @@ var Selection = function(session) {
|
||||||
* @param {Number} row The row to select to
|
* @param {Number} row The row to select to
|
||||||
* @param {Number} column The column to select to
|
* @param {Number} column The column to select to
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.selectTo = function(row, column) {
|
this.selectTo = function(row, column) {
|
||||||
|
|
@ -287,7 +287,7 @@ var Selection = function(session) {
|
||||||
* Moves the selection cursor to the row and column indicated by `pos`.
|
* Moves the selection cursor to the row and column indicated by `pos`.
|
||||||
* @param {Object} pos An object containing the row and column
|
* @param {Object} pos An object containing the row and column
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.selectToPosition = function(pos) {
|
this.selectToPosition = function(pos) {
|
||||||
|
|
@ -297,7 +297,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection up one row.
|
* Moves the selection up one row.
|
||||||
**/
|
**/
|
||||||
this.selectUp = function() {
|
this.selectUp = function() {
|
||||||
|
|
@ -305,7 +305,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection down one row.
|
* Moves the selection down one row.
|
||||||
**/
|
**/
|
||||||
this.selectDown = function() {
|
this.selectDown = function() {
|
||||||
|
|
@ -313,7 +313,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Moves the selection right one column.
|
* Moves the selection right one column.
|
||||||
**/
|
**/
|
||||||
|
|
@ -322,7 +322,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection left one column.
|
* Moves the selection left one column.
|
||||||
**/
|
**/
|
||||||
this.selectLeft = function() {
|
this.selectLeft = function() {
|
||||||
|
|
@ -330,7 +330,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection to the beginning of the current line.
|
* Moves the selection to the beginning of the current line.
|
||||||
**/
|
**/
|
||||||
this.selectLineStart = function() {
|
this.selectLineStart = function() {
|
||||||
|
|
@ -338,7 +338,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection to the end of the current line.
|
* Moves the selection to the end of the current line.
|
||||||
**/
|
**/
|
||||||
this.selectLineEnd = function() {
|
this.selectLineEnd = function() {
|
||||||
|
|
@ -346,7 +346,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection to the end of the file.
|
* Moves the selection to the end of the file.
|
||||||
**/
|
**/
|
||||||
this.selectFileEnd = function() {
|
this.selectFileEnd = function() {
|
||||||
|
|
@ -354,7 +354,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection to the start of the file.
|
* Moves the selection to the start of the file.
|
||||||
**/
|
**/
|
||||||
this.selectFileStart = function() {
|
this.selectFileStart = function() {
|
||||||
|
|
@ -362,7 +362,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection to the first word on the right.
|
* Moves the selection to the first word on the right.
|
||||||
**/
|
**/
|
||||||
this.selectWordRight = function() {
|
this.selectWordRight = function() {
|
||||||
|
|
@ -370,14 +370,14 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the selection to the first word on the left.
|
* Moves the selection to the first word on the left.
|
||||||
**/
|
**/
|
||||||
this.selectWordLeft = function() {
|
this.selectWordLeft = function() {
|
||||||
this.$moveSelection(this.moveCursorWordLeft);
|
this.$moveSelection(this.moveCursorWordLeft);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Moves the selection to highlight the entire word.
|
* Moves the selection to highlight the entire word.
|
||||||
* @related EditSession.getWordRange
|
* @related EditSession.getWordRange
|
||||||
**/
|
**/
|
||||||
|
|
@ -389,16 +389,16 @@ var Selection = function(session) {
|
||||||
}
|
}
|
||||||
return this.session.getWordRange(row, column);
|
return this.session.getWordRange(row, column);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Selects an entire word boundary.
|
* Selects an entire word boundary.
|
||||||
**/
|
**/
|
||||||
this.selectWord = function() {
|
this.selectWord = function() {
|
||||||
this.setSelectionRange(this.getWordRange());
|
this.setSelectionRange(this.getWordRange());
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selects a word, including its right whitespace.
|
* Selects a word, including its right whitespace.
|
||||||
* @related EditSession.getAWordRange
|
* @related EditSession.getAWordRange
|
||||||
**/
|
**/
|
||||||
|
|
@ -433,7 +433,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor up one row.
|
* Moves the cursor up one row.
|
||||||
**/
|
**/
|
||||||
this.moveCursorUp = function() {
|
this.moveCursorUp = function() {
|
||||||
|
|
@ -441,7 +441,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor down one row.
|
* Moves the cursor down one row.
|
||||||
**/
|
**/
|
||||||
this.moveCursorDown = function() {
|
this.moveCursorDown = function() {
|
||||||
|
|
@ -449,7 +449,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor left one column.
|
* Moves the cursor left one column.
|
||||||
**/
|
**/
|
||||||
this.moveCursorLeft = function() {
|
this.moveCursorLeft = function() {
|
||||||
|
|
@ -474,7 +474,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor right one column.
|
* Moves the cursor right one column.
|
||||||
**/
|
**/
|
||||||
this.moveCursorRight = function() {
|
this.moveCursorRight = function() {
|
||||||
|
|
@ -499,7 +499,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor to the start of the line.
|
* Moves the cursor to the start of the line.
|
||||||
**/
|
**/
|
||||||
this.moveCursorLineStart = function() {
|
this.moveCursorLineStart = function() {
|
||||||
|
|
@ -524,7 +524,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor to the end of the line.
|
* Moves the cursor to the end of the line.
|
||||||
**/
|
**/
|
||||||
this.moveCursorLineEnd = function() {
|
this.moveCursorLineEnd = function() {
|
||||||
|
|
@ -543,7 +543,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor to the end of the file.
|
* Moves the cursor to the end of the file.
|
||||||
**/
|
**/
|
||||||
this.moveCursorFileEnd = function() {
|
this.moveCursorFileEnd = function() {
|
||||||
|
|
@ -553,7 +553,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor to the start of the file.
|
* Moves the cursor to the start of the file.
|
||||||
**/
|
**/
|
||||||
this.moveCursorFileStart = function() {
|
this.moveCursorFileStart = function() {
|
||||||
|
|
@ -561,7 +561,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor to the word on the right.
|
* Moves the cursor to the word on the right.
|
||||||
**/
|
**/
|
||||||
this.moveCursorLongWordRight = function() {
|
this.moveCursorLongWordRight = function() {
|
||||||
|
|
@ -607,7 +607,7 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* Moves the cursor to the word on the left.
|
* Moves the cursor to the word on the left.
|
||||||
**/
|
**/
|
||||||
this.moveCursorLongWordLeft = function() {
|
this.moveCursorLongWordLeft = function() {
|
||||||
|
|
@ -704,11 +704,11 @@ var Selection = function(session) {
|
||||||
|
|
||||||
if (column == line.length) {
|
if (column == line.length) {
|
||||||
var l = this.doc.getLength();
|
var l = this.doc.getLength();
|
||||||
do {
|
do {
|
||||||
row++;
|
row++;
|
||||||
rightOfCursor = this.doc.getLine(row)
|
rightOfCursor = this.doc.getLine(row)
|
||||||
} while (row < l && /^\s*$/.test(rightOfCursor))
|
} while (row < l && /^\s*$/.test(rightOfCursor))
|
||||||
|
|
||||||
if (!/^\s+/.test(rightOfCursor))
|
if (!/^\s+/.test(rightOfCursor))
|
||||||
rightOfCursor = ""
|
rightOfCursor = ""
|
||||||
column = 0;
|
column = 0;
|
||||||
|
|
@ -729,11 +729,11 @@ var Selection = function(session) {
|
||||||
|
|
||||||
var line = this.session.getLine(row).substring(0, column);
|
var line = this.session.getLine(row).substring(0, column);
|
||||||
if (column == 0) {
|
if (column == 0) {
|
||||||
do {
|
do {
|
||||||
row--;
|
row--;
|
||||||
line = this.doc.getLine(row);
|
line = this.doc.getLine(row);
|
||||||
} while (row > 0 && /^\s*$/.test(line))
|
} while (row > 0 && /^\s*$/.test(line))
|
||||||
|
|
||||||
column = line.length;
|
column = line.length;
|
||||||
if (!/\s+$/.test(line))
|
if (!/\s+$/.test(line))
|
||||||
line = ""
|
line = ""
|
||||||
|
|
@ -760,11 +760,11 @@ var Selection = function(session) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document.
|
* Moves the cursor to position indicated by the parameters. Negative numbers move the cursor backwards in the document.
|
||||||
* @param {Number} rows The number of rows to move by
|
* @param {Number} rows The number of rows to move by
|
||||||
* @param {Number} chars The number of characters to move by
|
* @param {Number} chars The number of characters to move by
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* @related EditSession.documentToScreenPosition
|
* @related EditSession.documentToScreenPosition
|
||||||
**/
|
**/
|
||||||
this.moveCursorBy = function(rows, chars) {
|
this.moveCursorBy = function(rows, chars) {
|
||||||
|
|
@ -790,7 +790,7 @@ var Selection = function(session) {
|
||||||
* Moves the selection to the position indicated by its `row` and `column`.
|
* Moves the selection to the position indicated by its `row` and `column`.
|
||||||
* @param {Object} position The position to move to
|
* @param {Object} position The position to move to
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.moveCursorToPosition = function(position) {
|
this.moveCursorToPosition = function(position) {
|
||||||
this.moveCursorTo(position.row, position.column);
|
this.moveCursorTo(position.row, position.column);
|
||||||
|
|
@ -802,7 +802,7 @@ var Selection = function(session) {
|
||||||
* @param {Number} column The column to move to
|
* @param {Number} column The column to move to
|
||||||
* @param {Boolean} keepDesiredColumn [If `true`, the cursor move does not respect the previous column]{: #preventUpdateBool}
|
* @param {Boolean} keepDesiredColumn [If `true`, the cursor move does not respect the previous column]{: #preventUpdateBool}
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.moveCursorTo = function(row, column, keepDesiredColumn) {
|
this.moveCursorTo = function(row, column, keepDesiredColumn) {
|
||||||
// Ensure the row/column is not inside of a fold.
|
// Ensure the row/column is not inside of a fold.
|
||||||
|
|
@ -826,7 +826,7 @@ var Selection = function(session) {
|
||||||
* @param {Number} column The column to move to
|
* @param {Number} column The column to move to
|
||||||
* @param {Boolean} keepDesiredColumn {:preventUpdateBool}
|
* @param {Boolean} keepDesiredColumn {:preventUpdateBool}
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
this.moveCursorToScreen = function(row, column, keepDesiredColumn) {
|
this.moveCursorToScreen = function(row, column, keepDesiredColumn) {
|
||||||
var pos = this.session.screenToDocumentPosition(row, column);
|
var pos = this.session.screenToDocumentPosition(row, column);
|
||||||
|
|
@ -861,6 +861,52 @@ var Selection = function(session) {
|
||||||
return range;
|
return range;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.toJSON = function() {
|
||||||
|
if (this.rangeCount) {
|
||||||
|
var data = this.ranges.map(function(r) {
|
||||||
|
var r1 = r.clone();
|
||||||
|
r1.isBackwards = r.cursor == r.start;
|
||||||
|
return r1;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
var data = this.getRange();
|
||||||
|
data.isBackwards = this.isBackwards();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.fromJSON = function(data) {
|
||||||
|
if (data.start == undefined) {
|
||||||
|
if (this.toSingleRange) {
|
||||||
|
this.toSingleRange(data[0]);
|
||||||
|
for (var i = data.length; i--; ) {
|
||||||
|
var r = Range.fromPoints(data[i].start, data[i].end);
|
||||||
|
if (data.isBackwards)
|
||||||
|
r.cursor = r.start;
|
||||||
|
this.addRange(r, true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
data = data[0];
|
||||||
|
}
|
||||||
|
if (this.toSingleRange)
|
||||||
|
this.toSingleRange(data);
|
||||||
|
this.setSelectionRange(data, data.isBackwards);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.isEqual = function(data) {
|
||||||
|
if ((data.length || this.rangeCount) && data.length != this.rangeCount)
|
||||||
|
return false;
|
||||||
|
if (!data.length || !this.ranges)
|
||||||
|
return this.getRange().isEqual(data);
|
||||||
|
|
||||||
|
for (var i = this.ranges.length; i--; ) {
|
||||||
|
if (!this.ranges[i].isEqual(data[i]))
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}).call(Selection.prototype);
|
}).call(Selection.prototype);
|
||||||
|
|
||||||
exports.Selection = Selection;
|
exports.Selection = Selection;
|
||||||
|
|
|
||||||
|
|
@ -434,9 +434,7 @@ module.exports = {
|
||||||
},
|
},
|
||||||
|
|
||||||
"test (keyboard navigation) when curLine is not EOL and targetLine is all whitespace new column should be current column": function() {
|
"test (keyboard navigation) when curLine is not EOL and targetLine is all whitespace new column should be current column": function() {
|
||||||
var session = new EditSession("function (a) {\n\
|
var session = new EditSession("function (a) {\n \n}");
|
||||||
\n\
|
|
||||||
}");
|
|
||||||
var selection = session.getSelection();
|
var selection = session.getSelection();
|
||||||
|
|
||||||
selection.moveCursorTo(2, 0);
|
selection.moveCursorTo(2, 0);
|
||||||
|
|
@ -445,16 +443,33 @@ module.exports = {
|
||||||
assert.position(selection.getCursor(), 1, 0);
|
assert.position(selection.getCursor(), 1, 0);
|
||||||
},
|
},
|
||||||
|
|
||||||
"test (keyboard navigation) when curLine is EOL and targetLine is shorter dan current column, new column should be targetLine's EOL": function() {
|
"test (keyboard navigation) when curLine is EOL and targetLine is shorter than current column, new column should be targetLine's EOL": function() {
|
||||||
var session = new EditSession("function (a) {\n\
|
var session = new EditSession("function (a) {\n \n}");
|
||||||
\n\
|
|
||||||
}");
|
|
||||||
var selection = session.getSelection();
|
var selection = session.getSelection();
|
||||||
|
|
||||||
selection.moveCursorTo(0, 14);
|
selection.moveCursorTo(0, 14);
|
||||||
selection.moveCursorDown();
|
selection.moveCursorDown();
|
||||||
|
|
||||||
assert.position(selection.getCursor(), 1, 4);
|
assert.position(selection.getCursor(), 1, 4);
|
||||||
|
},
|
||||||
|
|
||||||
|
"test fromJSON/toJSON": function() {
|
||||||
|
var session = new EditSession("function (a) {\n \n}");
|
||||||
|
var selection = session.getSelection();
|
||||||
|
|
||||||
|
selection.moveCursorTo(0, 14);
|
||||||
|
selection.moveCursorDown();
|
||||||
|
assert.position(selection.getCursor(), 1, 4);
|
||||||
|
var data = selection.toJSON();
|
||||||
|
data = JSON.parse(JSON.stringify(data))
|
||||||
|
selection.moveCursorDown();
|
||||||
|
assert.position(selection.getCursor(), 2, 1);
|
||||||
|
|
||||||
|
assert.ok(!selection.isEqual(data));
|
||||||
|
|
||||||
|
selection.fromJSON(data);
|
||||||
|
assert.position(selection.getCursor(), 1, 4);
|
||||||
|
assert.ok(selection.isEqual(data));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue