///
import $ from "jquery";
import { coreModule } from "app/core/core";
var template = `
{{ctrl.panel.title | interpolateTemplateVars:this}}
{{ctrl.timeInfo}}
`;
function renderMenuItem(item, ctrl) {
let html = "";
let listItemClass = "";
if (item.divider) {
return '
';
}
if (item.submenu) {
listItemClass = "dropdown-submenu";
}
html += ``;
html += `${item.text}`;
if (item.shortcut) {
html += ``;
}
html += ``;
if (item.submenu) {
html += '";
}
html += ``;
return html;
}
function createMenuTemplate(ctrl) {
let html = "";
for (let item of ctrl.getMenu()) {
html += renderMenuItem(item, ctrl);
}
return html;
}
/** @ngInject **/
function panelHeader($compile) {
return {
restrict: "E",
template: template,
link: function(scope, elem, attrs) {
let menuElem = elem.find(".panel-menu");
let menuScope;
let isDragged;
elem.click(function(evt) {
const targetClass = evt.target.className;
// remove existing scope
if (menuScope) {
menuScope.$destroy();
}
menuScope = scope.$new();
let menuHtml = createMenuTemplate(scope.ctrl);
menuElem.html(menuHtml);
$compile(menuElem)(menuScope);
if (
targetClass.indexOf("panel-title-text") >= 0 ||
targetClass.indexOf("panel-title") >= 0
) {
togglePanelMenu(evt);
}
});
elem.find(".panel-menu-toggle").click(() => {
togglePanelStackPosition();
});
function togglePanelMenu(e) {
if (!isDragged) {
e.stopPropagation();
togglePanelStackPosition();
elem.find("[data-toggle=dropdown]").dropdown("toggle");
}
}
/**
* Hack for adding special class 'dropdown-menu-open' to the panel.
* This class sets z-index for panel and prevents menu overlapping.
*/
function togglePanelStackPosition() {
const menuOpenClass = "dropdown-menu-open";
const panelGridClass = ".react-grid-item.panel";
let panelElem = elem
.find("[data-toggle=dropdown]")
.parentsUntil(".panel")
.parent();
let menuElem = elem.find("[data-toggle=dropdown]").parent();
panelElem = panelElem && panelElem.length ? panelElem[0] : undefined;
if (panelElem) {
panelElem = $(panelElem);
$(panelGridClass).removeClass(menuOpenClass);
let state = !menuElem.hasClass("open");
panelElem.toggleClass(menuOpenClass, state);
}
}
let mouseX, mouseY;
elem.mousedown(e => {
mouseX = e.pageX;
mouseY = e.pageY;
});
elem.mouseup(e => {
if (mouseX === e.pageX && mouseY === e.pageY) {
isDragged = false;
} else {
isDragged = true;
}
});
}
};
}
coreModule.directive("panelHeader", panelHeader);