@@ -118,13 +118,55 @@ var Cursor = (function() {
118118 } ,
119119
120120 moveBefore : function ( element ) {
121- this . range . setStart ( element , 0 ) ;
122- this . range . setEnd ( element , 0 ) ;
121+ this . setHost ( element ) ;
122+ this . range . setStartBefore ( element ) ;
123+ this . range . setEndBefore ( element ) ;
124+ if ( this . isSelection ) return new Cursor ( this . host , this . range ) ;
123125 } ,
124126
125127 moveAfter : function ( element ) {
128+ this . setHost ( element ) ;
129+ this . range . setStartAfter ( element ) ;
130+ this . range . setEndAfter ( element ) ;
131+ if ( this . isSelection ) return new Cursor ( this . host , this . range ) ;
132+ } ,
133+
134+ moveAtBeginning : function ( element ) {
135+ if ( ! element ) element = this . host ;
136+ this . setHost ( element ) ;
137+ this . range . selectNodeContents ( element ) ;
138+ this . range . collapse ( true ) ;
139+ if ( this . isSelection ) return new Cursor ( this . host , this . range ) ;
140+ } ,
141+
142+ moveAtEnd : function ( element ) {
143+ if ( ! element ) element = this . host ;
144+ this . setHost ( element ) ;
126145 this . range . selectNodeContents ( element ) ;
127146 this . range . collapse ( false ) ;
147+ if ( this . isSelection ) return new Cursor ( this . host , this . range ) ;
148+ } ,
149+
150+ setHost : function ( element ) {
151+ this . host = parser . getHost ( element ) ;
152+ if ( ! this . host ) {
153+ error ( 'Can not set cursor outside of an editable block' ) ;
154+ }
155+ } ,
156+
157+ save : function ( ) {
158+ this . savedRangeInfo = rangeSaveRestore . save ( this . range ) ;
159+ this . savedRangeInfo . host = this . host ;
160+ } ,
161+
162+ restore : function ( ) {
163+ if ( this . savedRangeInfo ) {
164+ this . host = this . savedRangeInfo . host ;
165+ this . range = rangeSaveRestore . restore ( this . host , this . savedRangeInfo ) ;
166+ this . savedRangeInfo = undefined ;
167+ } else {
168+ error ( 'Could not restore selection' ) ;
169+ }
128170 } ,
129171
130172 equals : function ( cursor ) {
0 commit comments