/**
* EGroupware egw_dragdrop_dhtmlxmenu - egw action framework
*
* @link https://www.egroupware.org
* @author Andreas Stöckel
* @copyright 2011 by Andreas Stöckel
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package egw_action
*/
import {egwBitIsSet} from "./egw_action_common";
import {EGW_AI_DRAG_OUT, EGW_AI_DRAG_OVER, EGW_AO_STATE_FOCUSED, EGW_AO_STATE_SELECTED} from "./egw_action_constants";
import {egwActionObjectInterface} from "./egw_action";
/**
* This file contains an egw_actionObjectInterface which allows a dhtmlx tree
* row to be a drag target and contains a function which transforms a complete
* dhtmlx tree into egw_actionObjects
*/
declare class dhtmlXTreeObject
{
_globalIdStorageFind(_itemId: string): any
}
export function dhtmlxTree_getNode(_tree: dhtmlXTreeObject, _itemId: string)
{
const node = _tree._globalIdStorageFind(_itemId);
if (node != null)
{
// Get the outer html table node of the tree node - return the first
// "tr" child of the element
return node.htmlNode.querySelector("tr:first-child")
}
}
// An action object interface for an dhtmlxTree entry - it only contains the
// code needed for drag/drop handling
export class dhtmlxtreeItemAOI
{
constructor(_tree, _itemId)
{
const aoi = new egwActionObjectInterface();
// Retrieve the actual node from the tree
aoi.node = dhtmlxTree_getNode(_tree, _itemId);
aoi.id = _itemId;
aoi.doGetDOMNode = function () {
return aoi.node;
}
aoi.doTriggerEvent = function (_event) {
if (_event == EGW_AI_DRAG_OVER)
{
jQuery(this.node).addClass("draggedOver");
}
if (_event == EGW_AI_DRAG_OUT)
{
jQuery(this.node).removeClass("draggedOver");
}
}
aoi.doSetState = function (_state) {
if (!_tree || !_tree.focusItem) return;
// Update the "focused" flag
if (egwBitIsSet(_state, EGW_AO_STATE_FOCUSED))
{
_tree.focusItem(this.id);
}
if (egwBitIsSet(_state, EGW_AO_STATE_SELECTED))
{
_tree.selectItem(this.id, false); // false = do not trigger onSelect
}
}
return aoi;
}
}