@@ -1353,15 +1353,19 @@ function emitUserStatus(force) {
13531353}
13541354
13551355function checkCursorTag ( coord , ele ) {
1356+ if ( ! ele ) return ;
13561357 var curosrtagMargin = 60 ;
1357- var viewport = editor . getViewport ( ) ;
1358- var viewportHeight = ( viewport . to - viewport . from ) * editor . defaultTextHeight ( ) ;
1358+ var cursor = editor . getCursor ( ) ;
1359+ //var viewport = editor.getViewport();
1360+ //var viewportHeight = (viewport.to - viewport.from) * editor.defaultTextHeight();
13591361 var editorWidth = ui . area . codemirror . width ( ) ;
13601362 var editorHeight = ui . area . codemirror . height ( ) ;
13611363 var width = ele . width ( ) ;
13621364 var height = ele . height ( ) ;
1365+ if ( ! lineHeightMap )
1366+ buildMapInner ( ) ;
13631367 var left = coord . left ;
1364- var top = coord . top ;
1368+ var top = lineHeightMap [ cursor . line ] * defaultTextHeight ; // coord.top;
13651369 var offsetLeft = - 3 ;
13661370 var offsetTop = defaultTextHeight ;
13671371 var statusBarHeight = 0 ;
@@ -1371,8 +1375,8 @@ function checkCursorTag(coord, ele) {
13711375 if ( left + width + offsetLeft > editorWidth - curosrtagMargin ) {
13721376 offsetLeft = - ( width + 10 ) ;
13731377 }
1374- offsetTop = - ( height ) ;
13751378 if ( top + height + offsetTop > Math . max ( editor . doc . height , editorHeight ) + curosrtagMargin - statusBarHeight * 2 && top - height > curosrtagMargin ) {
1379+ offsetTop = - ( height + 4 ) ;
13761380 }
13771381 }
13781382 ele [ 0 ] . style . left = offsetLeft + 'px' ;
@@ -1863,10 +1867,11 @@ if ($('.cursor-menu').length <= 0) {
18631867}
18641868
18651869var upSideDown = false ;
1866- var menuMargin = 60 ;
18671870
18681871function checkCursorMenu ( ) {
1872+ var menuMargin = 60 ;
18691873 var dropdown = $ ( '.cursor-menu .dropdown-menu' ) ;
1874+ if ( dropdown . length <= 0 ) return ;
18701875 var cursor = editor . getCursor ( ) ;
18711876 var scrollInfo = editor . getScrollInfo ( ) ;
18721877 if ( ! dropdown . hasClass ( 'other-cursor' ) )
@@ -1877,24 +1882,32 @@ function checkCursorMenu() {
18771882 line : cursor . line ,
18781883 ch : cursor . ch
18791884 } , 'windows' ) ;
1880- var viewport = editor . getViewport ( ) ;
1881- var viewportHeight = ( viewport . to - viewport . from ) * editor . defaultTextHeight ( ) ;
1885+ // var viewport = editor.getViewport();
1886+ // var viewportHeight = (viewport.to - viewport.from) * editor.defaultTextHeight();
18821887 var editorWidth = ui . area . codemirror . width ( ) ;
18831888 var editorHeight = ui . area . codemirror . height ( ) ;
1884- var width = dropdown . width ( ) ;
1885- var height = dropdown . height ( ) ;
1889+ var width = dropdown . outerWidth ( ) ;
1890+ var height = dropdown . outerHeight ( ) ;
1891+ if ( ! lineHeightMap )
1892+ buildMapInner ( ) ;
18861893 var left = coord . left ;
1887- var top = coord . top ;
1894+ var top = lineHeightMap [ cursor . line ] * defaultTextHeight ; // coord.top;
18881895 var offsetLeft = 0 ;
18891896 var offsetTop = defaultTextHeight ;
18901897 var statusBarHeight = 0 ;
18911898 if ( statusBar )
18921899 statusBarHeight = statusBar . outerHeight ( ) ;
18931900 if ( left + width + offsetLeft > editorWidth - menuMargin )
18941901 offsetLeft = - ( left + width - editorWidth + menuMargin ) ;
1895- offsetTop = - ( height + defaultTextHeight ) ;
18961902 if ( top + height + offsetTop > Math . max ( editor . doc . height , editorHeight ) + menuMargin - statusBarHeight * 2 && top - height > menuMargin ) {
1903+ offsetTop = - ( height + 4 ) ;
18971904 upSideDown = true ;
1905+ var items = dropdown . find ( '.textcomplete-item' ) ;
1906+ items . sort ( function ( a , b ) {
1907+ return $ ( b ) . attr ( 'data-index' ) - $ ( a ) . attr ( 'data-index' ) ;
1908+ } ) ;
1909+ dropdown . html ( items ) ;
1910+ dropdown . scrollTop ( dropdown [ 0 ] . scrollHeight ) ;
18981911 } else {
18991912 upSideDown = false ;
19001913 }
0 commit comments