Changeset 163 for branches/vox-28/common/SelectionRange.js
- Timestamp:
- 04/25/07 20:40:05 (3 years ago)
- Files:
-
- 1 modified
-
branches/vox-28/common/SelectionRange.js (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/vox-28/common/SelectionRange.js
r159 r163 106 106 range2.collapse( true ); 107 107 var offset = 0; 108 var offsets = {}; 108 109 var steps = 0; 109 110 // bail after 1k iterations in case of borkage 111 while( (test = range2.compareEndPoints( compareType, range )) != 0 ) { 110 var broken = false; 111 112 /* this breaks if the user selects all, where the selection endpoint is at the end of body */ 113 /* hence storing previously-visited offsets */ 114 115 while( test = range2.compareEndPoints( compareType, range ) ) { 112 116 if( test < 0 ) { 113 117 range2.move( "character", delta ); … … 117 121 offset -= delta; 118 122 } 123 119 124 delta = max( 1, finiteInt( delta * 0.5 ) ); 125 126 /* visited this offset before? */ 127 if( offsets[ offset ] === offset ) { 128 broken = true; 129 break; 130 } 131 offsets[ offset ] = offset; 132 133 /* infinite loop bug */ 120 134 steps++; 121 if( steps > 1000 ) 122 throw "unable to find textrange endpoint in " + steps + " steps"; 123 } 124 125 // this breaks if the user selects all, where the selection endpoint is at the 126 // end of body 127 128 //log( "steps: " + steps ); 135 if( steps > 1000 || (offset < 0 || offset > length + 1) ) { 136 broken = true; 137 break; 138 } 139 } 140 141 /* 142 if( broken ) 143 log( "BROKEN: " + parent.tagName + " " + length + " " + compareType + " " + test + " " + delta + " " + offset ); 144 else 145 log( "GOOD: " + parent.tagName + " " + offset ); 146 */ 147 129 148 return DOM.Proxy.findTextPosition( parent, offset ); 130 149 },
