<?php

namespace Dcat\Admin\Grid\Displayers;

use Dcat\Admin\Admin;

class ContextMenuActions extends DropdownActions
{
    protected $elementId = 'grid-context-menu';

    protected function addScript()
    {
        $script = <<<JS
(function () {
    var id = '#{$this->elementId}';

    $("body").on("contextmenu", "#{$this->grid->getTableId()} tr", function(e) {
         $(id + ' .dropdown-menu').hide();

         var menu = $(this).find('td .grid-dropdown-actions .dropdown-menu');
         var index = $(this).index();

         if (menu.length) {
             menu.attr('index', index).detach().appendTo(id);
         } else {
             menu = $(id + ' .dropdown-menu[index='+index+']');
         }

         if (menu.height() > (document.body.clientHeight - e.pageY)) {
            menu.css({left: e.pageX+10, top: e.pageY - menu.height()}).show();
         } else {
            menu.css({left: e.pageX+10, top: e.pageY-10}).show();
         }
        return false;
    });

    if (! $(id).length) {
        $("body").append('<div id="{$this->elementId}" class="dropdown" style="display: contents"></div>');
    }

    $(document).on('click',function(){
        $(id + ' .dropdown-menu').hide();
    })

    $(id).click('a', function () {
        $(this).find('.dropdown-menu').hide();
    });
})();
JS;

        Admin::script($script);
    }

    public function display($callback = null)
    {
        $this->addScript();

        Admin::style('.grid__actions__ .dropdown{display: none!important;} th.grid__actions__{display: none!important;} .grid__actions__{width:1px}');

        return parent::display($callback);
    }
}