ContextMenuActions.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <?php
  2. namespace Dcat\Admin\Grid\Displayers;
  3. use Dcat\Admin\Admin;
  4. class ContextMenuActions extends DropdownActions
  5. {
  6. /**
  7. * {@inheritdoc}
  8. */
  9. protected function addScript()
  10. {
  11. parent::addScript();
  12. $script = <<<JS
  13. (function () {
  14. $("body").on("contextmenu", "table#{$this->grid->getTableId()} tr", function(e) {
  15. $('#grid-context-menu .dropdown-menu').hide();
  16. var menu = $(this).find('td .grid-dropdown-actions .dropdown-menu');
  17. var index = $(this).index();
  18. if (menu.length) {
  19. menu.attr('index', index).detach().appendTo('#grid-context-menu');
  20. } else {
  21. menu = $('#grid-context-menu .dropdown-menu[index='+index+']');
  22. }
  23. if (menu.height() > (document.body.clientHeight - e.pageY)) {
  24. menu.css({left: e.pageX+10, top: e.pageY - menu.height()}).show();
  25. } else {
  26. menu.css({left: e.pageX+10, top: e.pageY-10}).show();
  27. }
  28. return false;
  29. });
  30. $(document).on('click',function(){
  31. $('#grid-context-menu .dropdown-menu').hide();
  32. })
  33. $('#grid-context-menu').click('a', function () {
  34. $('#grid-context-menu .dropdown-menu').hide();
  35. });
  36. })();
  37. JS;
  38. Admin::script($script);
  39. }
  40. /**
  41. * {@inheritdoc}
  42. */
  43. public function display($callback = null)
  44. {
  45. Admin::html('<div id="grid-context-menu" class="dropdown" style="display: contents"></div>');
  46. Admin::style('.grid__actions__ .dropdown{display: none!important;} th.grid__actions__{display: none!important;} .grid__actions__{width:1px}');
  47. return parent::display($callback);
  48. }
  49. }