Available only in PRO Edition

Расширение Форматтеры

Эта функциональность доступна только в PRO версии.

Расширение gantt.ext.formatters предлагает два удобных метода для форматирования:

Вы также можете создать пользовательский форматтер, используя предоставленные в качестве основы.

Форматтер Длительности

Метод gantt.ext.formatters.durationFormatter(config) создает новый экземпляр DurationFormatter.

Конфигурация

  • durationFormatter (config): DurationFormatter - инициализирует Форматтер Длительности
    • config? - (object) - необязательный объект конфигурации с возможными атрибутами:
      • enter? - (string) - устанавливает формат по умолчанию для метода parse, когда входные значения не содержат единиц. По умолчанию "day".
      • store? - (string) - определяет, как значения длительности хранятся в гантте, влияя на вывод метода parse. По умолчанию "hour".
      • format? - (string | Array <string>) - определяет, как форматируется выходное значение. Поддерживаются форматы: "auto", "minute", "hour", "day", "week", "month", "year", или массив этих значений. Использование "auto" позволяет форматтеру выбрать наиболее подходящую единицу в зависимости от размера значения.
      • short? - (boolean) - включает короткие метки (аббревиатуры) для единиц времени. По умолчанию false.
      • minutesPerHour? - (number) - устанавливает коэффициент преобразования между минутами и часами. По умолчанию 60.
      • hoursPerDay? - (number) - устанавливает коэффициент преобразования между часами и днями. По умолчанию 8.
      • hoursPerWeek? - (number) - устанавливает коэффициент преобразования между часами и неделями. По умолчанию 40.
      • daysPerMonth? - (number) - устанавливает коэффициент преобразования между днями и месяцами. По умолчанию 30.
      • daysPerYear? - (number) - устанавливает коэффициент преобразования между днями и годами. По умолчанию 365.
      • labels? - (object) - настраивает текстовые метки для различных единиц времени. Эти метки применяются как к разобранным, так и к форматированным значениям.
        • minute? - (object) - конфигурация для минут
          • full? - (string) - полная метка для минут
          • plural? - (string) - множественная метка для минут
          • short? - (string) - короткая метка для минут
        • hour? - (object) - конфигурация для часов
          • full? - (string) - полная метка для часов
          • plural? - (string) - множественная метка для часов
          • short? - (string) - короткая метка для часов
        • day? - (object) - конфигурация для дней
          • full? - (string) - полная метка для дней
          • plural? - (string) - множественная метка для дней
          • short? - (string) - короткая метка для дней
        • week? - (object) - конфигурация для недель
          • full? - (string) - полная метка для недель
          • plural? - (string) - множественная метка для недель
          • short? - (string) - короткая метка для недель
        • month? - (object) - конфигурация для месяцев
          • full? - (string) - полная метка для месяцев
          • plural? - (string) - множественная метка для месяцев
          • short? - (string) - короткая метка для месяцев
        • year? - (object) - конфигурация для лет
          • full? - (string) - полная метка для лет
          • plural? - (string) - множественная метка для лет
          • short? - (string) - короткая метка для лет

Примеры:

Как настроить Форматтер Длительности с настройками по умолчанию:

const formatter = gantt.ext.formatters.durationFormatter();
// создает экземпляр объекта форматтера с использованием фабричного метода
  • enter:
formatter.parse("1"); // обрабатывает значение как 1 день, если enter:"day" (по умолчанию)
formatter.parse("1"); // обрабатывает значение как 1 час, если enter:"hour"
  • store:
formatter.parse("1 day"); // хранит значение как 8, если store:"hour"
formatter.parse("1 day"); // хранит значение как 480, если store:"minute"
  • format
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
  • short
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"
        }
    }
});

API

Экземпляр DurationFormatter предоставляет следующие методы:

  • canParse (value): boolean - проверяет, может ли предоставленная строка быть преобразована в значение длительности, возвращает true, если может, и false в противном случае.
    • value - (string) - строка для проверки
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.canParse("1 day"));
// true
 
console.log(formatter.canParse("abc"));
// false
  • format (value): string - преобразует значение длительности в строковое представление.
    • value - (number) - значение длительности для преобразования
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.format(24));
// 3 days
  • parse (value): number - преобразует строку в значение длительности. Если преобразование не удалось, возвращает ‘null’.
    • value - (string) - строка для преобразования
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.parse("1 day"));
// 8

Для получения более подробной информации обратитесь к статье durationFormatter в Расчет Рабочего Времени.

Форматтер Ссылок

Метод gantt.ext.formatters.linkFormatter(config) создает новый экземпляр LinkFormatter. Он делится некоторыми методами и опциями конфигурации с Форматтером Длительности.

Конфигурация

  • linkFormatter (config): LinkFormatter - инициализирует Форматтер Ссылок
    • config? - (object) - необязательный объект конфигурации с этими атрибутами:
      • durationFormatter? - (DurationFormatter) - экземпляр DurationFormatter, созданный с помощью gantt.ext.formatters.durationFormatter(). Это контролирует, как значения задержки/преимущества в ссылках анализируются и форматируются.
      • labels? - (object) - локализованные метки для различных типов ссылок:
        • finish_to_start? - (string) - метка для ссылок "Finish to Start"
        • start_to_start? - (string) - метка для ссылок "Start to Start"
        • finish_to_finish? - (string) - метка для ссылок "Finish to Finish"
        • start_to_finish? - (string) - метка для ссылок "Start to Finish"

Примеры:

Как настроить Форматтер Ссылок с настройками по умолчанию:

const formatter = gantt.ext.formatters.linkFormatter();
// создает экземпляр объекта форматтера с использованием фабричного метода
  • short:
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"
  • labels:
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"
    }
});

API

Экземпляр LinkFormatter предоставляет следующие методы:

  • canParse (value): boolean - проверяет, может ли предоставленная строка быть преобразована в объект ссылки, возвращает true, если может, и false в противном случае.
    • value - (string) - строка для проверки
const formatter = gantt.ext.formatters.linkFormatter();
console.log(formatter.canParse("1FS + 1 day"));
// true
 
console.log(formatter.canParse("abc"));
// false
  • format (link): string - преобразует объект ссылки в строковое представление.
    • value - (Link) - объект ссылки для преобразования
const formatter = gantt.ext.formatters.linkFormatter();
 
formatter.format({id:1, type:"1", source: 1, target: 2, lag: 5});
// "1SS+5 days"
  • parse (value): object - преобразует строку в объект ссылки. Если преобразование не удалось, возвращает ‘null’. Примечание: link.target будет иметь значение "null" для данной ссылки.
    • value - (string) - строка для преобразования
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
  • ${WBS}${TYPE}${LAG} - полный формат
    • ${WBS}: Обозначает код WBS задачи.
    • ${TYPE}: Это тип ссылки. Допустимые варианты включают 'FF', 'FS', 'SS', 'SF', или любые пользовательские значения, определенные в конфигурации labels LinkFormatter.
    • ${LAG}: Представляет задержку ссылки, которая может быть положительной или отрицательной, например, +1 day или -1 day. Формат этого значения определяется параметром durationFormatter, переданным в конструктор LinkFormatter.
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, обратитесь к статье Редактирование в гриде.


Пользовательский Форматтер

Гантт позволяет создавать пользовательские форматтеры на основе существующих. Эти пользовательские форматтеры могут быть добавлены в встроенный редактор. Внутренне, Гантт будет хранить данные в своем стандартном формате, но при открытии встроенного редактора он будет отображать значение в нужном формате.

Пользовательские форматтеры — это объекты, содержащие две функции: 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;
        // логика преобразования нужного формата обратно в объект ссылки
        return link;
    }
};

Существующие форматтеры также могут быть включены в пользовательские форматтеры, с модификацией их вывода по мере необходимости.

Для назначения пользовательских форматтеров встроенным редакторам процесс такой же, как и для стандартных форматтеров. Например:

const durationEditor = { 
    type: "duration", map_to: "duration", formatter: customDurationFormatter 
};

Вот пример того, как могут быть реализованы пользовательские форматтеры длительности и ссылок:

Related sample:  Custom duration and link formatters


Пользовательские Правила для Множественных Форм

Конфигурация по умолчанию для Форматтера Длительности поддерживает только одну множественную форму для существительных, что хорошо работает для английского языка, так как множественное число обычно образуется добавлением суффикса или изменением существительного.

Однако в других языках может быть несколько множественных форм с различными правилами их использования. Чтобы решить эту проблему, можно создать пользовательский форматтер, который определяет соответствующие правила для конкретного языка. Например, вот как можно применить пользовательские правила образования множественного числа для японского языка:

Related sample:  Custom duration formatter with different plural values for Japanese locale

К началу