Сообщения в Gantt используются для информирования пользователей об ошибках, подтверждения или отмены действий, выбора опций и других целей. Эти сообщения построены на основе форка репозитория dhtmlxMessage, поэтому все возможности dhtmlxMessage доступны и для сообщений dhtmlxGantt.
Существует два основных типа сообщений: простое всплывающее сообщение и модальное окно с кнопками, блокирующее взаимодействие с приложением.
Модальные окна бывают трёх видов:
Чтобы показать простое всплывающее сообщение, используйте метод gantt.message. Обязательный параметр — текст сообщения:
gantt.message("The task is updated");
Доступны три стиля сообщений:
Чтобы создать нужный тип сообщения, укажите свойство type с соответствующим значением:
// создание окна с ошибкой
gantt.message({type:"error", text:"Invalid data format"});
Related sample: Gantt message types
Чтобы изменить стиль окна сообщения, укажите CSS-класс через параметр type, как описано здесь.
По умолчанию всплывающие сообщения появляются в правом верхнем углу окна. В отличие от модальных окон, они не блокируют взаимодействие с родительским приложением. Положение можно изменить, установив свойство gantt.message.position:
gantt.message.position = 'bottom';
Related sample: Message position
Доступные значения для position:
Вы можете настроить, как долго сообщение будет оставаться видимым, используя параметр expire — время в миллисекундах до исчезновения окна. По умолчанию — 4000 миллисекунд.
Чтобы изменить продолжительность или отключить автоматическое скрытие, установите другой параметр или значение -1. Если указать -1, сообщение исчезнет только при клике на него.
gantt.message({
type:"error",
text:"Invalid data format",
expire:10000
});
Чтобы вручную скрыть конкретное сообщение до его автоматического исчезновения, используйте метод gantt.message.hide(boxId). Он принимает один параметр:
gantt.message({
id:"myBox",
text:"Page is loaded"
});
gantt.message.hide("myBox");
Модальные окна блокируют взаимодействие с родительским приложением до выполнения действия, обычно — нажатия кнопки. Они закрываются по клику по кнопке и при необходимости вызывают функцию обратного вызова.
Существует три типа модальных окон:
Общие параметры:
Окно с сообщением содержит кнопку "OK". Текст кнопки можно задать через параметр ok:
gantt.alert("Text");
gantt.alert({
text:"some text",
title:"Error!",
ok:"Yes",
callback:function(){...}
});
Окно подтверждения содержит две кнопки: "OK" и "Cancel". Их текст задаётся через соответствующие параметры.
gantt.confirm("ConfirmText");
gantt.confirm({
text: "Continue?",
ok:"Yes",
cancel:"No",
callback: function(result){
gantt.message("Result: "+result);
}
});
Модальные окна обладают особыми возможностями:
gantt.modalbox({
title:"Settings",
text: " ... html code here... ",
buttons:["Save", "Defaults", "Cancel"],
callback: function(result){
gantt.alert(result);
}
});
Существует два основных способа настройки кнопок modalbox:
gantt.modalbox({
// другие параметры
buttons:["Save", "Delete", "Cancel"],
callback: function(result){
switch(result){
case "0":
//Save
break;
case "1":
//Delete
break;
case "2":
//Cancel
break;
}
}
});
В этой форме callback получает строковой индекс нажатой кнопки ("0", "1", "2" и т.д.). Каждая кнопка получает CSS-класс на основе её подписи в нижнем регистре, например, gantt_save_button, gantt_delete_button, gantt_cancel_button.
Вы можете стилизовать кнопки с помощью этих классов:
.gantt_delete_button div{
background:red;
}
Если несколько всплывающих окон используют одну и ту же подпись кнопки, но требуют разного оформления, можно использовать параметр type:
gantt.modalbox({
// другие параметры
type:"special_popup",
buttons:["Save", "Delete", "Cancel"]
});
type добавляется с префиксом "gantt_" как класс к элементу popup:
.gantt_special_popup .gantt_delete_button div{
background:red;
}
Можно явно задать CSS-классы кнопок и значения callback с помощью более детальной конфигурации:
gantt.modalbox({
// другие параметры
buttons: [
{ label:"Save", css:"link_save_btn", value:"save" },
{ label:"Cancel", css:"link_cancel_btn", value:"cancel" },
{ label:"Delete", css:"link_delete_btn", value:"delete" }
],
callback: function(result){
switch(result){
case "save":
//Save
break;
case "cancel":
//Cancel
break;
case "delete":
//Delete
break;
}
}
});
label обязателен, а css и value — опциональны. Если они не указаны, CSS-класс и значение вычисляются по подписи и индексу кнопки, как в короткой форме.
CSS-класс добавляется с префиксом "gantt_" к кнопке:
.gantt_link_delete_btn div{
background:red;
}
Чтобы вручную закрыть модальное окно, используйте метод gantt.modalbox.hide(), передав контейнер modalbox:
var box = gantt.modalbox({
title:"Settings",
text: " ... html code here... ",
buttons:["Save", "Defaults", "Cancel"],
callback: function(result){
gantt.alert(result);
}
});
gantt.modalbox.hide(box);
Для модальных окон alert и confirm также используется метод gantt.modalbox.hide():
var box = gantt.confirm({
text: "Continue?",
ok:"Yes",
cancel:"No",
callback: function(result){
gantt.message("Result: "+result);
}
});
gantt.modalbox.hide(box);
По умолчанию имена кнопок — это просто текст. Если имя кнопки задано как HTML-элемент (например, с жирным шрифтом или иконкой), функция обратного вызова при клике по кнопке вернёт null.
Это происходит потому, что Gantt отслеживает определённые атрибуты у родительского элемента нажатого объекта. Если ожидаемых атрибутов нет, Gantt возвращает null. Кроме того, Gantt оборачивает все элементы, которые вы указываете для кнопок, в теги <div>
.
То есть, если вы возвращаете строковый элемент при клике по тексту, его родитель — пустой <div>
, что приводит к результату null
. Однако при клике по кнопке вне текста родительский элемент содержит необходимые атрибуты, и callback возвращает ожидаемые значения:
value
(для полной формы)Это означает, что если вы хотите использовать HTML-элемент в качестве имени кнопки, его нужно обернуть в два <div>
, оба с атрибутом data-result
. Например:
gantt.confirm({
ok:`<div data-result="yes"><div data-result="yes"><i>Yes</i></div></div>`,
cancel:`<div data-result="no"><div data-result="no"><i>No</i></div></div>`,
});
gantt.modalbox({
buttons: [
{ label:`<div data-result="yes">
<div data-result="yes"><i>Yes</i></div>
</div>`,
css:"link_save_btn", value:"yes" },
{ label:`<div data-result="no">
<div data-result="no"><i>No</i></div>
</div>`,
css:"link_cancel_btn", value:"no" },
{ label:`<div data-result="cancel">
<div data-result="cancel"><i>Cancel</i></div>
</div>`,
css:"link_cancel_btn", value:"cancel" },
],
});
Если вы хотите использовать другие элементы для кнопки, убедитесь, что все родительские элементы также имеют атрибут data-result
. В примере ниже для имени кнопки используются теги <u>
, и у них, как и у двух родительских <div>
, есть атрибут data-result
:
gantt.confirm({
ok:`<div data-result="yes">
<div data-result="yes"><u data-result="yes"><i>Yes</i></u></div>
</div>`,
cancel:`<div data-result="no">
<div data-result="no"><u data-result="no"><i>No</i></u></div>
</div>`,
});
gantt.modalbox({
buttons: [
{ label:`<div data-result="yes">
<div data-result="yes">
<u data-result="yes"><i>Yes</i></u>
</div>
</div>`,
css:"link_save_btn", value:"yes" },
{ label:`<div data-result="no">
<div data-result="no">
<u data-result="no"><i>No</i></u>
</div>
</div>`,
css:"link_cancel_btn", value:"no" },
{ label:`<div data-result="cancel">
<div data-result="cancel">
<u data-result="cancel"><i>Cancel</i></u>
</div>
</div>`,
css:"link_cancel_btn", value:"cancel" },
],
});
Вы можете настроить внешний вид любого message box, определив собственные стили. Обычно для этого вы указываете CSS-класс через параметр type: создаёте CSS-класс и присваиваете его имя этому параметру.
Вот несколько важных моментов, которые следует учитывать при установке параметра 'type':
<style type="text/css">
.gantt-myCss div{
font-weight:bold;
color:wheat;
background-color:crimson;
}
</style>
gantt.message({ type:"myCss", text:"some text" });
Related sample: Styling message boxes
Поддержка клавиатуры для модальных окон регулируется свойством gantt.message.keyboard, которое по умолчанию включено (true).
По умолчанию модальные окна блокируют события клавиатуры на странице, кроме некоторых клавиш:
Если установить gantt.message.keyboard в false, события клавиатуры больше не блокируются, и эти клавиши не будут вызывать действие модального окна:
gantt.message.keyboard = false;
gantt.modalbox({...});
Это позволяет полноценно использовать клавиатуру, например, для ввода текста в поля внутри модальных окон.
К началу