Библиотека включает расширение Quick Info, которое отображает всплывающее окно с деталями задачи при нажатии на задачу на экране.
Related sample: QuickInfo extension
Чтобы начать использовать расширение, просто активируйте плагин "Quick Info" с помощью метода gantt.plugins.
gantt.plugins({
quick_info: true
});
Если вы хотите отключить расширение quick_info, установите свойство show_quick_info в false:
gantt.config.show_quick_info = false;
gantt.init("gantt_here");
Расширение Quick Info предоставляет набор API для настройки параметров, управления поведением или изменения внешнего вида всплывающего окна.
Вы можете использовать как API объекта gantt.ext.quickInfo, так и публичный API dhtmlxGantt, перечисленный ниже:
Методы
События
Свойства
Шаблоны
По умолчанию расширение Quick Info автоматически показывает всплывающее окно над выбранной задачей.
Начиная с версии 7.0, функциональность Quick Info была расширена объектом gantt.ext.quickInfo, который предоставляет методы для ручного управления всплывающим окном.
Объект gantt.ext.quickInfo предлагает следующие методы:
Всплывающее окно можно показать для конкретной задачи, ссылки, панели ресурсов или в произвольном месте экрана с помощью метода gantt.ext.quickInfo.show():
// показать окно для определённой задачи
var task = gantt.getTask(10);
gantt.ext.quickInfo.show(task.id);
// показать окно по определённым координатам
gantt.ext.quickInfo.show(100, 200);
Пример отображения окна для ресурса:
const quickInfo = gantt.ext.quickInfo;
gantt.attachEvent("onGanttReady", function(){
quickInfo.setContainer(document.body);
})
gantt.attachEvent("onEmptyClick", function (e) {
const domHelpers = gantt.utils.dom;
const resourceElement = domHelpers.closest(e.target, "[data-resource-id]");
if(resourceElement){
const resourceId = resourceElement.getAttribute("data-resource-id");
const resource = gantt.$resourcesStore.getItem(resourceId);
const position = resourceElement.getBoundingClientRect();
quickInfo.show(position.right, position.top);
const assignedTasks = gantt.getResourceAssignments(resourceId).map(function(assign){
return gantt.getTask(assign.task_id).text;
});
quickInfo.setContent({
header: {
title: resource.text,
date: ""
},
content: "Assigned tasks: " + assignedTasks.join(", "),
buttons: []
});
}
});
Пример отображения окна для определённой связи:
const quickInfo = gantt.ext.quickInfo;
gantt.attachEvent("onLinkClick", function(id,e){
//любая пользовательская логика
const link = gantt.getLink(id);
const linksFormatter = gantt.ext.formatters.linkFormatter();
const domHelpers = gantt.utils.dom;
const position = domHelpers.getRelativeEventPosition(e, gantt.$task_data);
const sourceTask = gantt.getTask(link.source);
const targetTask = gantt.getTask(link.target);
quickInfo.show(position.x, position.y);
let linkDescr = "";
if (link.type === gantt.config.links.start_to_start){
linkDescr = "Start to start";
} else if (link.type === gantt.config.links.start_to_finish){
linkDescr = "Start to finish";
} else if (link.type === gantt.config.links.finish_to_finish){
linkDescr = "Finish to Finish";
} else {
linkDescr = "Finish to start";
}
quickInfo.setContent({
header: {
title: `${linkDescr} link`,
date: ""
},
content: `Source: ${sourceTask.text}<br>
Target: ${targetTask.text}`,
buttons: []
});
});
Чтобы закрыть всплывающее окно, используйте метод gantt.ext.quickInfo.hide(). Его поведение зависит от настройки gantt.config.quick_info_detached и может быть двух вариантов:
gantt.config.quick_info_detached = false;
gantt.init("gantt_here");
// скрыть окно с анимацией
gantt.ext.quickInfo.hide();
gantt.config.quick_info_detached = false;
gantt.init("gantt_here");
// скрыть окно мгновенно
gantt.ext.quickInfo.hide(true);
Обратите внимание, что если gantt.config.quick_info_detached установлено в true, окно всегда закрывается мгновенно.
По умолчанию всплывающее окно quick info включает заголовок, дату, содержимое и кнопки, и выглядит так:
Если вы хотите изменить внешний вид окна или создать своё собственное, вы можете определить HTML-содержимое с помощью gantt.ext.quickInfo.setContent():
gantt.locale.labels.custom_button = "My button"
gantt.ext.quickInfo.setContent({
header:{
title: "My custom header",
date: "18th of February, 2020"
},
content: "some content here",
buttons: ["custom_button"]
})
В результате появится всплывающее окно quick info такого вида:
Объект $click позволяет добавить пользовательские действия для кнопок, размещённых во всплывающем окне:
gantt.config.quickinfo_buttons=["icon_delete","icon_edit","advanced_details_button"];
gantt.locale.labels["advanced_details_button"] = "Advanced Info";
gantt.init("gantt_here");
gantt.$click.buttons.advanced_details_button=function(id){
gantt.message("These are advanced details");
return false; //блокирует стандартное поведение
};
Используйте gantt.ext.quickInfo.setContainer(), чтобы отобразить всплывающее окно quick info внутри пользовательского контейнера:
const quickInfo = gantt.ext.quickInfo;
quickInfo.setContainer(document.body); gantt.ext.quickInfo.show(1300,100);
gantt.locale.labels.custom_button = "My button"
gantt.ext.quickInfo.setContent({
header:{
title: "My custom header",
date: "18th of February, 2020"
},
content: "some content here",
buttons: ["custom_button"]
});
Теперь окно с пользовательским содержимым появится внутри document.body, вне контейнера Gantt: