Available only in PRO Edition

Formatters-Erweiterung

Diese Funktionalität ist nur in der PRO-Edition verfügbar.

Die gantt.ext.formatters-Erweiterung bietet zwei Möglichkeiten zur Formatierung von Werten:

Sie können auch einen benutzerdefinierten Formatter erstellen, indem Sie auf den vorhandenen aufbauen.

Duration Formatter

Die Methode gantt.ext.formatters.durationFormatter(config) erzeugt eine neue DurationFormatter-Instanz.

Konfiguration

  • durationFormatter (config): DurationFormatter – erstellt einen Duration Formatter
    • config? – (object) – optionales Konfigurationsobjekt mit folgenden Optionen:
      • enter? – (string) – legt das Standardformat fest, das von der parse-Methode verwendet wird, wenn die Eingabe keine Einheit enthält. Standard ist "day".
      • store? – (string) – definiert das Format, in dem Dauerwerte im Gantt gespeichert werden. Dies beeinflusst die Ausgabe der parse-Methode. Standard ist "hour".
      • format? – (string | Array <string>) – legt das Ausgabeformat fest. Unterstützte Werte sind "auto", "minute", "hour", "day", "week", "month", "year" oder ein Array dieser Werte. "auto" bedeutet, dass das Format je nach Wertgröße automatisch gewählt wird (größere Werte nutzen Tage/Monate/Jahre, kleinere Minuten/Stunden).
      • short? – (boolean) – aktiviert kurze Bezeichnungen (Abkürzungen) für Zeiteinheiten. Standard ist false.
      • minutesPerHour? – (number) – steuert die Umrechnung zwischen Minuten und Stunden. Standard ist 60.
      • hoursPerDay? – (number) – steuert die Umrechnung zwischen Stunden und Tagen. Standard ist 8.
      • hoursPerWeek? – (number) – steuert die Umrechnung zwischen Stunden und Wochen. Standard ist 40.
      • daysPerMonth? – (number) – steuert die Umrechnung zwischen Tagen und Monaten. Standard ist 30.
      • daysPerYear? – (number) – steuert die Umrechnung zwischen Tagen und Jahren. Standard ist 365.
      • labels? – (object) – legt Textbezeichnungen für verschiedene Zeiteinheiten fest, die beim Parsen und Formatieren verwendet werden:
        • minute? – (object) – Bezeichnungen für Minuten
          • full? – (string) – vollständige Bezeichnung für Minuten
          • plural? – (string) – Pluralbezeichnung für Minuten
          • short? – (string) – Kurzbezeichnung für Minuten
        • hour? – (object) – Bezeichnungen für Stunden
          • full? – (string) – vollständige Bezeichnung für Stunden
          • plural? – (string) – Pluralbezeichnung für Stunden
          • short? – (string) – Kurzbezeichnung für Stunden
        • day? – (object) – Bezeichnungen für Tage
          • full? – (string) – vollständige Bezeichnung für Tage
          • plural? – (string) – Pluralbezeichnung für Tage
          • short? – (string) – Kurzbezeichnung für Tage
        • week? – (object) – Bezeichnungen für Wochen
          • full? – (string) – vollständige Bezeichnung für Wochen
          • plural? – (string) – Pluralbezeichnung für Wochen
          • short? – (string) – Kurzbezeichnung für Wochen
        • month? – (object) – Bezeichnungen für Monate
          • full? – (string) – vollständige Bezeichnung für Monate
          • plural? – (string) – Pluralbezeichnung für Monate
          • short? – (string) – Kurzbezeichnung für Monate
        • year? – (object) – Bezeichnungen für Jahre
          • full? – (string) – vollständige Bezeichnung für Jahre
          • plural? – (string) – Pluralbezeichnung für Jahre
          • short? – (string) – Kurzbezeichnung für Jahre

Beispiele:

Einen Duration Formatter mit Standardeinstellungen erstellen:

const formatter = gantt.ext.formatters.durationFormatter();
// eine Formatter-Instanz wird mit der Factory-Methode erstellt
  • enter:
formatter.parse("1"); // wird als 1 Tag interpretiert, wenn enter:"day" (Standard)
formatter.parse("1"); // wird als 1 Stunde interpretiert, wenn enter:"hour"
  • store:
formatter.parse("1 day"); // wird als 8 gespeichert, wenn store:"hour"
formatter.parse("1 day"); // wird als 480 gespeichert, wenn store:"minute"
  • format
gantt.ext.formatters.durationFormatter({
    format: ["hour", "minute"],     store:"minute"
}).format(260); // gibt "4 hours 20 minutes" aus
 
gantt.ext.formatters.durationFormatter({
    format: "hour",     store:"minute"  
}).format(260);// gibt "4.33 hours" aus
  • 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"

Beispiel mit vollständiger Konfiguration:

const formatter = gantt.ext.formatters.durationFormatter({
    // Standardwerte
    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

Die DurationFormatter-Instanz stellt folgende Methoden bereit:

  • canParse (value): boolean – prüft, ob ein String in einen Dauerwert geparst werden kann; gibt true zurück, wenn ja, andernfalls false
    • value – (string) – der zu prüfende String
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.canParse("1 day"));
// true
 
console.log(formatter.canParse("abc"));
// false
  • format (value): string – wandelt einen Dauerwert in einen formatierten String um
    • value – (number) – der zu konvertierende Dauerwert
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.format(24));
// Ausgabe: 3 days
  • parse (value): number – parst einen String in einen Dauerwert oder gibt ‘null’ zurück, falls das Parsen fehlschlägt
    • value – (string) – der zu parsende String
const formatter = gantt.ext.formatters.durationFormatter();
console.log(formatter.parse("1 day"));
// Ausgabe: 8

Weitere Details zu durationFormatter finden Sie im Artikel Arbeitszeitberechnung.

Link Formatter

Die Methode gantt.ext.formatters.linkFormatter(config) erstellt eine neue LinkFormatter-Instanz. Sie teilt sich einige Methoden und Konfigurationen mit dem Duration Formatter.

Konfiguration

  • linkFormatter (config): LinkFormatter – erstellt einen Link Formatter
    • config? – (object) – optionales Konfigurationsobjekt mit folgenden Optionen:
      • durationFormatter? – (DurationFormatter) – eine Instanz, die mit gantt.ext.formatters.durationFormatter() erstellt wurde und beeinflusst, wie Lag-/Lead-Werte geparst und formatiert werden.
      • labels? – (object) – Bezeichnungen für verschiedene Linktypen:
        • finish_to_start? – (string) – Bezeichnung für Finish to Start-Links
        • start_to_start? – (string) – Bezeichnung für Start to Start-Links
        • finish_to_finish? – (string) – Bezeichnung für Finish to Finish-Links
        • start_to_finish? – (string) – Bezeichnung für Start to Finish-Links

Beispiele:

Einen Link Formatter mit Standardeinstellungen erstellen:

const formatter = gantt.ext.formatters.linkFormatter();
// eine Formatter-Instanz wird mit der Factory-Methode erstellt
  • short:
gantt.ext.formatters.linkFormatter()
   .format({id:1, type:"1", source: 1, target: 2, lag: 5});
// Ausgabe: "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});
// Ausgabe: "1FF-1d"
  • labels:
const formatter = gantt.ext.formatters.linkFormatter({
    // Standardwerte
    durationFormatter: gantt.ext.formatters.durationFormatter(),
    labels: {
        finish_to_start: "FS",
        start_to_start: "SS",
        finish_to_finish: "FF",
        start_to_finish: "SF"
    }
});

API

Die LinkFormatter-Instanz bietet folgende Methoden:

  • canParse (value): boolean – prüft, ob ein String in ein Link-Objekt geparst werden kann; gibt true zurück, wenn ja, andernfalls false
    • value – (string) – der zu prüfende String
const formatter = gantt.ext.formatters.linkFormatter();
console.log(formatter.canParse("1FS + 1 day"));
// true
 
console.log(formatter.canParse("abc"));
// false
  • format (link): string – wandelt ein Link-Objekt in einen String um
    • link – (Link) – das zu konvertierende Link-Objekt
const formatter = gantt.ext.formatters.linkFormatter();
 
formatter.format({id:1, type:"1", source: 1, target: 2, lag: 5});
// Ausgabe: "1SS+5 days"
  • parse (value): object – parst einen String in ein Link-Objekt oder gibt ‘null’ zurück, falls das Parsen fehlschlägt. Beachten Sie, dass link.target im geparsten Objekt auf "null" gesetzt wird.
    • value – (string) – der zu parsende String
const formatter = gantt.ext.formatters.linkFormatter();
 
formatter.parse("1SS+5 days");
// Ausgabe: {id:1, type:"1", source: 1, target: null, lag: 5}

Formatinformationen

Der LinkFormatter arbeitet mit zwei Link-Formaten:

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} – Komplettformat
    • ${WBS}Aufgaben-WBS-Code
    • ${TYPE}Linktyp. Unterstützte Werte: 'FF', 'FS', 'SS', 'SF' oder wie in der labels-Konfiguration des LinkFormatter definiert.
    • ${LAG}Link-Lag. Dies kann positiv oder negativ sein, wie +1 day oder -1 day. Das unterstützte Format hängt vom durationFormatter-Parameter ab, der dem LinkFormatter-Konstruktor übergeben wird.
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-Links ohne Lag oder Lead werden im Kurzformat angezeigt, während andere Links das Komplettformat nutzen. Ebenso nimmt der Formatter beim parse-Aufruf mit nur einem Aufgaben-WBS-Code an, dass es sich um einen Finish-to-Start-Typ mit Lag 0 handelt.

Weitere Details zur Methode linkFormatter finden Sie im Artikel Inline-Bearbeitung im Grid.

Eigener Formatter

Das Gantt-Tool ermöglicht es, eigene Formatter auf Basis der integrierten Formatter zu erstellen. Sie können diese benutzerdefinierten Formatter dem Inline-Editor hinzufügen. Intern speichert Gantt die Daten im erwarteten Format, aber wenn ein Benutzer den Inline-Editor öffnet, wird der Wert im bevorzugten Format angezeigt.

Ein eigener Formatter ist ein Objekt mit zwei Funktionen: format() und parse().

Die format()-Funktion wandelt eine Zahl (für einen eigenen durationFormatter) oder einen Link (für einen eigenen linkFormatter) in den gewünschten Anzeige-Wert um. Die parse()-Funktion konvertiert diesen formatierten Wert wieder in eine Zahl oder ein Link-Objekt.

So sehen eigene Formatter typischerweise aus:

const customDurationFormatter = {
    format: function (duration) {
        let formattedDuration;
        // Code zur Umwandlung von Zahl in den gewünschten Wert
        return formattedDuration;
    },
    parse: function (formattedValue) {
        let duration;
        // Code zur Umwandlung vom gewünschten Wert in eine Zahl
        return duration;
    }
};
 
const customLinkFormatter = {
    format: function (link) {
        let formattedLink;
        // Code zur Umwandlung vom Link-Objekt in den gewünschten Wert
        return formattedLink;
    },
    parse: function (formattedValue) {
        let link;
        // Code zur Umwandlung vom gewünschten Wert in das `link`-Objekt
        return link
    }
};

Es ist möglich, bestehende Formatter in eigenen Formattern zu verwenden und deren Ausgaben nach Bedarf anzupassen.

Sie weisen eigene Formatter Inline-Editoren genauso zu wie die Standard-Formatter. Zum Beispiel:

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

Hier ein Beispiel für eigene Duration- und Link-Formatter:

Related sample:  Custom duration and link formatters

Eigene Regeln für Pluralformen

Der Standard-Duration Formatter ist darauf ausgelegt, englische Pluralformen zu verarbeiten, bei denen meist nur ein Suffix angehängt oder das Substantiv geringfügig geändert wird.

Andere Sprachen haben oft mehrere Pluralformen und unterschiedliche Regeln, wann welche Form verwendet wird. Um dies zu berücksichtigen, können Sie einen eigenen Formatter erstellen, der die korrekten Regeln für Ihre Sprache anwendet. Das folgende Beispiel zeigt, wie diese Regeln für Japanisch umgesetzt werden können:

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

Zurück nach oben