|
1546 | 1546 | // operation that will run after contextMenu showed on screen |
1547 | 1547 | activated: function(menu){ |
1548 | 1548 | var $menu = menu; |
| 1549 | + var win = $(window); |
1549 | 1550 | var $menuOffset = $menu.offset(); |
1550 | | - var winHeight = $(window).height(); |
1551 | | - var winScrollTop = $(window).scrollTop(); |
1552 | | - var menuHeight = $menu.height(); |
| 1551 | + var winHeight = win.height(); |
| 1552 | + var winWidth = win.width(); |
| 1553 | + var winScrollTop = win.scrollTop(); |
| 1554 | + var menuHeight = $menu.outerHeight(); |
| 1555 | + var menuWidth = $menu.outerWidth(); |
1553 | 1556 | if(menuHeight > winHeight){ |
1554 | 1557 | $menu.css({ |
1555 | | - 'height' : winHeight + 'px', |
1556 | | - 'overflow-x': 'hidden', |
1557 | | - 'overflow-y': 'auto', |
1558 | | - 'top': winScrollTop + 'px' |
1559 | | - }); |
| 1558 | + 'height': winHeight - |
| 1559 | + (parseInt($menu.css('padding-top'))+parseInt($menu.css('margin-top')))+'px', |
| 1560 | + 'overflow-x':'hidden', |
| 1561 | + 'overflow-y':'auto', |
| 1562 | + 'top':winScrollTop+'px' |
| 1563 | + }); |
1560 | 1564 | } else if($menuOffset.top < winScrollTop){ |
1561 | | - $menu.css({ |
1562 | | - 'top': '0px' |
1563 | | - }); |
1564 | | - } else if($menuOffset.top + menuHeight > winScrollTop + winHeight){ |
1565 | | - $menu.css({ |
1566 | | - 'top':$menuOffset.top- Math.abs((winScrollTop+winHeight) - ($menuOffset.top+menuHeight)) |
1567 | | - }); |
1568 | | - } |
| 1565 | + $menu.css({ |
| 1566 | + 'top':'0px' |
| 1567 | + }); |
| 1568 | + } else if($menuOffset.top+menuHeight > winScrollTop + winHeight){ |
| 1569 | + $menu.css({ |
| 1570 | + 'top':$menuOffset.top - Math.abs((winScrollTop+winHeight)-($menuOffset.top+menuHeight)) -(parseInt($menu.css('padding-top'))+parseInt($menu.css('margin-top')))+'px' |
| 1571 | + }); |
| 1572 | + } |
| 1573 | + if($menuOffset.left + menuWidth > winWidth){ |
| 1574 | + var newLeftPosition = $menuOffset.left - Math.abs(($menuOffset.left+menuWidth) - winWidth); |
| 1575 | + var parent = $menu.parents('ul.context-menu-list').first(); |
| 1576 | + if(parent.length){ |
| 1577 | + if(newLeftPosition <= parent.offset().left + parent.outerWidth() |
| 1578 | + && newLeftPosition >= parent.offset().left){ |
| 1579 | + $menu.css({ |
| 1580 | + 'left':parent.offset().left - $menu.outerWidth() + 'px' |
| 1581 | + }); |
| 1582 | + }else{ |
| 1583 | + $menu.css({ |
| 1584 | + 'left':$menuOffset.left-Math.abs(($menuOffset.left+menuWidth) - winWidth) + 'px' |
| 1585 | + }); |
| 1586 | + } |
| 1587 | + }else{ |
| 1588 | + $menu.css({ |
| 1589 | + 'left':$menuOffset.left-Math.abs(($menuOffset.left+menuWidth) - winWidth) + 'px' |
| 1590 | + }); |
| 1591 | + } |
1569 | 1592 | } |
1570 | 1593 | }; |
1571 | 1594 |
|
|
0 commit comments