Available only in PRO Edition
Эта функциональность доступна только в редакции PRO.
Расширение gantt.ext.formatters предоставляет два способа форматирования значений:
Вы также можете создать пользовательский форматтер, используя существующие в качестве основы.
Метод gantt.ext.formatters.durationFormatter(config) создает новый экземпляр DurationFormatter.
Примеры:
Создание форматтера длительности с настройками по умолчанию:
const formatter = gantt.ext.formatters.durationFormatter();
// экземпляр форматтера создается с помощью фабричного метода
formatter.parse("1"); // интерпретируется как 1 день, если enter:"day" (по умолчанию)
formatter.parse("1"); // интерпретируется как 1 час, если enter:"hour"
formatter.parse("1 day"); // сохраняется как 8, если store:"hour"
formatter.parse("1 day"); // сохраняется как 480, если store:"minute"
gantt.ext.formatters.durationFormatter({
format: ["hour", "minute"], store:"minute"
}).format(260); // результат: "4 hours 20 minutes"
gantt.ext.formatters.durationFormatter({
format: "hour", store:"minute"
}).format(260);// результат: "4.33 hours"
gantt.ext.formatters.durationFormatter({
format: ["week", "hour", "minute"],
store:"minute",
short: false }).format(10021); //"4 weeks 7 hours 1 minute"
gantt.ext.formatters.durationFormatter({
format: ["week", "hour", "minute"],
store:"minute",
short: true }).format(10021); //"4wk 7h 1min"
Пример с полной конфигурацией:
const formatter = gantt.ext.formatters.durationFormatter({
// значения по умолчанию
enter: "day",
store: "hour",
format: "auto",
short: false,
minutesPerHour: 60,
hoursPerDay: 8,
hoursPerWeek: 40,
daysPerMonth: 30,
daysPerYear: 365,
labels: {
minute: {
full: "minute",
plural: "minutes",
short: "min"
},
hour: {
full: "hour",
plural: "hours",
short: "h"
},
day: {
full: "day",
plural: "days",
short: "d"
},
week: {
full: "week",
plural: "weeks",
short: "wk"
},
month: {
full: "month",
plural: "months",
short: "mon"
},
year: {
full: "year",
plural: "years",
short: "y"
}
}
});
Экземпляр DurationFormatter предоставляет следующие методы:
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.canParse("1 day"));
// true
console.log(formatter.canParse("abc"));
// false
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.format(24));
// результат: 3 days
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.parse("1 day"));
// результат: 8
Подробнее о durationFormatter можно узнать в статье Расчёт рабочего времени.
Метод gantt.ext.formatters.linkFormatter(config) создает новый экземпляр LinkFormatter. Он имеет схожие методы и параметры конфигурации с форматтером длительности.
Примеры:
Создание форматтера связей с настройками по умолчанию:
const formatter = gantt.ext.formatters.linkFormatter();
// экземпляр форматтера создается с помощью фабричного метода
gantt.ext.formatters.linkFormatter()
.format({id:1, type:"1", source: 1, target: 2, lag: 5});
// результат: "1SS+5 days"
var durationFormatter = gantt.ext.formatters.durationFormatter({
short: true
});
gantt.ext.formatters.linkFormatter({durationFormatter: durationFormatter})
.format({id:1, type:"2", source: 1, target: 2, lag: -1});
// результат: "1FF-1d"
const formatter = gantt.ext.formatters.linkFormatter({
// значения по умолчанию
durationFormatter: gantt.ext.formatters.durationFormatter(),
labels: {
finish_to_start: "FS",
start_to_start: "SS",
finish_to_finish: "FF",
start_to_finish: "SF"
}
});
Экземпляр LinkFormatter предоставляет следующие методы:
const formatter = gantt.ext.formatters.linkFormatter();
console.log(formatter.canParse("1FS + 1 day"));
// true
console.log(formatter.canParse("abc"));
// false
const formatter = gantt.ext.formatters.linkFormatter();
formatter.format({id:1, type:"1", source: 1, target: 2, lag: 5});
// результат: "1SS+5 days"
const formatter = gantt.ext.formatters.linkFormatter();
formatter.parse("1SS+5 days");
// результат: {id:1, type:"1", source: 1, target: null, lag: 5}
LinkFormatter работает с двумя форматами ссылок:
const formatter = gantt.ext.formatters.linkFormatter();
console.log(formatter.parse("1.1"));
// {id:1, type:"0", source: 2, target: 3, lag: 0}
console.log(formatter.format({id:2, type:"0", source: 1, target: 3, lag: 0}));
// 1.1
const formatter = gantt.ext.formatters.linkFormatter();
console.log(formatter.parse("1.1SS + 1 day"));
// {id:1, type:"1", source: 2, target: null, lag: 1}
console.log(formatter.format({id:1, type:"1", source: 2, target: 3, lag: 1}));
// 1.1SS + 1 day
Связи типа Finish-To-Start без лага или опережения будут отображаться в коротком формате, остальные связи – в полном формате. Аналогично, если в метод parse передан только код WBS задачи, форматтер предполагает тип Finish-to-Start с нулевым лагом.
Более подробно о методе linkFormatter можно узнать в статье Редактирование "на месте" в гриде.
В Gantt можно создавать пользовательские форматтеры на основе встроенных. Эти пользовательские форматтеры можно подключать к редактору inline. Внутри грид Gantt хранит данные в своем ожидаемом формате, но при открытии редактора пользователю отображается значение в нужном формате.
Пользовательский форматтер — это объект с двумя функциями: format() и parse().
Функция format() преобразует число (для пользовательского форматтера длительности) или ссылку (для пользовательского форматтера ссылок) в нужное отображаемое значение. Функция parse() преобразует отформатированное значение обратно в число или объект ссылки.
Пример пользовательских форматтеров:
const customDurationFormatter = {
format: function (duration) {
let formattedDuration;
// код преобразования числа в нужное значение
return formattedDuration;
},
parse: function (formattedValue) {
let duration;
// код преобразования значения в число
return duration;
}
};
const customLinkFormatter = {
format: function (link) {
let formattedLink;
// код преобразования объекта ссылки в нужное значение
return formattedLink;
},
parse: function (formattedValue) {
let link;
// код преобразования значения в объект `link`
return link
}
};
Можно использовать существующие форматтеры внутри пользовательских и при необходимости изменять их вывод.
Пользовательские форматтеры назначаются редакторам так же, как и стандартные. Например:
const durationEditor = {
type: "duration", map_to: "duration", formatter: customDurationFormatter
};
Ниже приведён пример с пользовательскими форматтерами для длительности и ссылок:
Related sample: Custom duration and link formatters
Стандартный Duration Formatter предназначен для работы с английскими формами множественного числа, где обычно достаточно добавить суффикс или немного изменить существительное.
В других языках часто есть несколько форм множественного числа и разные правила их использования. Для этого можно создать пользовательский форматтер, реализующий нужные правила для вашего языка. Пример ниже показывает, как реализовать такие правила для японского языка:
Related sample: Custom duration formatter with different plural values for Japanese locale
К началу