Handbuch:Erweiterung/Forms/Fortschrittsbalken: Unterschied zwischen den Versionen

Die Seite wurde neu angelegt: „Der Fortschrittsbalken zeigt einen berechneten Fortschrittswert basierend auf den ausgewählten Optionen in einem Formular an. In diesem Beispiel wird er für eine Checkliste verwendet, kann jedoch auch für andere Anwendungsfälle eingesetzt werden. == Hinzufügen eines Fortschrittsbalkens == Dieses Beispiel zeigt eine mögliche Implementierung eines Fortschrittsbalkens für eine Checkliste. File:Extension Forms Progress bar example.png|alt=Checklist…“
Markierung: Quelltext-Bearbeitung 2017
 
Keine Bearbeitungszusammenfassung
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 4: Zeile 4:
Dieses Beispiel zeigt eine mögliche Implementierung eines Fortschrittsbalkens für eine Checkliste.
Dieses Beispiel zeigt eine mögliche Implementierung eines Fortschrittsbalkens für eine Checkliste.


[[File:Extension Forms Progress bar example.png|alt=Checkliste mit zwei Gruppen von Kontrollkästchen für Onboarding-Aufgaben|center|thumb|550x550px|Beispiel eines Fortschrittsbalkens für Checklistenpunkte]]
[[Datei:Extension Forms Progress bar example.png|alt=Checkliste mit zwei Gruppen von Kontrollkästchen für Onboarding-Aufgaben|center|thumb|550x550px|Beispiel eines Fortschrittsbalkens für Checklistenpunkte]]


Um dieses Formular nachzubilden, werden folgende Komponenten benötigt:
Um dieses Formular nachzubilden, werden folgende Komponenten benötigt:


# '''Bereitstellen der JavaScript-Logik''' in ''MediaWiki:Common.js''
# '''Bereitstellen der JavaScript-Logik''' in ''MediaWiki:Common.js''
# '''Definieren''' der passenden Syntax für Kontrollkästchenfelder und deren '''Optionen'''
# '''Definition''' der passenden Syntax für Kontrollkästchenfelder und deren '''Optionen'''
# '''Hinzufügen eines Event-Listeners''' in den Formulareigenschaften
# '''Hinzufügen eines Event-Listeners''' in den Formulareigenschaften


=== Bereitstellen der Logik in ''MediaWiki:Common.js'' ===
=== Bereitstellen der Logik in ''MediaWiki:Common.js'' ===
Fügen Sie die folgende JavaScript-Funktion zu [https://en.wiki.bluespice.com/wiki/Manual:The_concept_of_namespaces#Namespace_.22MediaWiki.22 ''MediaWiki:Common.js''] hinzu:
Fügen Sie die folgende JavaScript-Funktion zu [https://de.wiki.bluespice.com/wiki/Handbuch:Das_Konzept_der_Namensr%C3%A4ume#Namensraum_.22MediaWiki.22 ''MediaWiki:Common.js''] hinzu:


<syntaxhighlight lang="javascript" line="1">
<syntaxhighlight lang="javascript" line="1">
Zeile 53: Zeile 53:
Das bedeutet, dass der Wert ''data'' Ihrer Kontrollkästchen mit ''check'' beginnen muss. Dies bezieht sich auf den ''data''-Wert, der in jeder Kontrollkästchenoption definiert wird:
Das bedeutet, dass der Wert ''data'' Ihrer Kontrollkästchen mit ''check'' beginnen muss. Dies bezieht sich auf den ''data''-Wert, der in jeder Kontrollkästchenoption definiert wird:


[[File:Manual:checkbox data value check.jpg|thumb|center|Datendefinition im Formular, hier beginnend mit „check-“]]
[[File:checkbox data value check.png|thumb|center|Datendefinition im Formular, hier beginnend mit „check-“]]


In Zeile 14 werden nur diejenigen Felder berücksichtigt, deren Name mit ''checkbox_multi'' beginnt:
In Zeile 14 werden nur diejenigen Felder berücksichtigt, deren Name mit ''checkbox_multi'' beginnt:
Zeile 76: Zeile 76:
{
{
"data": "check-equipment",
"data": "check-equipment",
"label": "Provide equipment (laptop, phone)"
"label": "Ausstattung bereitstellen (Laptop, Telefon)"
},
},
{
{
"data": "check-access",
"data": "check-access",
"label": "Grant access to required systems"
"label": "Zugriff auf erforderliche Systeme gewähren"
},
},
{
{
"data": "check-intro",
"data": "check-intro",
"label": "Meet the team"
"label": "Vorstellung im Team"
}
}
],
],
Zeile 95: Zeile 95:
Um Ihr Formular mit der JavaScript-Funktion zu verbinden, müssen Sie in den Formulareigenschaften den [https://en.wiki.bluespice.com/wiki/Manual:Extension/Forms/Form_elements_and_settings#Listeners Listener] anlegen:
Um Ihr Formular mit der JavaScript-Funktion zu verbinden, müssen Sie in den Formulareigenschaften den [https://en.wiki.bluespice.com/wiki/Manual:Extension/Forms/Form_elements_and_settings#Listeners Listener] anlegen:


[[File:Extension Forms Progress bar listener.png|center|thumb|650x650px|Hinzufügen des Listeners zu den Formulareigenschaften]]
[[Datei:Extension Forms Progress bar listener.png|center|thumb|650x650px|Hinzufügen des Listeners zu den Formulareigenschaften]]


So fügen Sie den Listener hinzu:
So fügen Sie den Listener hinzu:
Zeile 117: Zeile 117:
<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
"title": "Example Progress Bar",
"title": "Beispiel Fortschrittsbalken",
"showTitle": true,
"showTitle": true,
"showFormName": false,
"showFormName": false,
Zeile 133: Zeile 133:
"target": {
"target": {
"type": "json-on-wikipage",
"type": "json-on-wikipage",
"predefined_title": "ExampleChecklist/{{checklistname}}"
"predefined_title": "BeispielCheckliste/{{checklistname}}"
},
},
"show_target_afterAction": false,
"show_target_afterAction": false,
Zeile 143: Zeile 143:
{
{
"name": "checklistname",
"name": "checklistname",
"label": "Checklist name",
"label": "Checkliste Name",
"help": "",
"help": "",
"noLayout": false,
"noLayout": false,
Zeile 162: Zeile 162:
{
{
"name": "progress",
"name": "progress",
"label": "Progress",
"label": "Fortschritt",
"help": "",
"help": "",
"noLayout": true,
"noLayout": true,
Zeile 184: Zeile 184:
{
{
"name": "checkbox_multi-getting_started",
"name": "checkbox_multi-getting_started",
"label": "Getting started",
"label": "Loslegen",
"help": "",
"help": "",
"noLayout": false,
"noLayout": false,
Zeile 206: Zeile 206:
{
{
"data": "check-profile",
"data": "check-profile",
"label": "Provide personal and role information"
"label": "Persönliche Angaben und Rolleninformationen bereitstellen"
},
},
{
{
"data": "check-documents",
"data": "check-documents",
"label": "Submit required documents"
"label": "Erforderliche Dokumente einreichen"
},
},
{
{
"data": "check-intro",
"data": "check-intro",
"label": "Review introduction materials"
"label": "Einführungsmaterialien durchsehen"
}
}
],
],
Zeile 221: Zeile 221:
{
{
"name": "checkbox_multi-workplace_setup",
"name": "checkbox_multi-workplace_setup",
"label": "Workplace setup",
"label": "Einrichtung des Arbeitsplatzes",
"help": "",
"help": "",
"noLayout": false,
"noLayout": false,
Zeile 243: Zeile 243:
{
{
"data": "check-equipment",
"data": "check-equipment",
"label": "Provide equipment (laptop, phone)"
"label": "Ausstattung bereitstellen (Laptop, Telefon)"
},
},
{
{
"data": "check-access",
"data": "check-access",
"label": "Grant access to required systems"
"label": "Zugriff auf erforderliche Systeme gewähren"
},
},
{
{
"data": "check-intro",
"data": "check-intro",
"label": "Meet the team"
"label": "Vorstellung im Team"
}
}
],
],

Aktuelle Version vom 2. Juni 2026, 14:36 Uhr

Erweiterung/Forms
no subpages

Der Fortschrittsbalken zeigt einen berechneten Fortschrittswert basierend auf den ausgewählten Optionen in einem Formular an. In diesem Beispiel wird er für eine Checkliste verwendet, kann jedoch auch für andere Anwendungsfälle eingesetzt werden.

Hinzufügen eines Fortschrittsbalkens

Dieses Beispiel zeigt eine mögliche Implementierung eines Fortschrittsbalkens für eine Checkliste.

Checkliste mit zwei Gruppen von Kontrollkästchen für Onboarding-Aufgaben
Beispiel eines Fortschrittsbalkens für Checklistenpunkte

Um dieses Formular nachzubilden, werden folgende Komponenten benötigt:

  1. Bereitstellen der JavaScript-Logik in MediaWiki:Common.js
  2. Definition der passenden Syntax für Kontrollkästchenfelder und deren Optionen
  3. Hinzufügen eines Event-Listeners in den Formulareigenschaften

Bereitstellen der Logik in MediaWiki:Common.js

Fügen Sie die folgende JavaScript-Funktion zu MediaWiki:Common.js hinzu:

/*Extension:Forms - Add a progress bar for checkbox items */
function CalcProgress( data ) {
	var dfd = $.Deferred();
	var checked = 0;
	var ItemCheckboxes = this.$element.find( 'input[value^=check]' );
	var total = ItemCheckboxes.length;
	if ( total < 1 ) {
		dfd.resolve( data );
		return dfd.promise();
	}

	var items = this.getItems();
	for( var name in data ) {
		if ( !name.startsWith( 'checkbox_multi-' ) ) {
			continue;
		}
		var checkedCheckboxes = data[name];
		for ( var i = 0; i < checkedCheckboxes.length; i++ ) {
			checked++;	
		}
	}
	data.progress = ( 100 * checked ) / total;
	dfd.resolve( data );

	return dfd.promise();
}

In Zeile 5 wird das Präfix für jedes Kontrollkästchen definiert, das in die Fortschrittsberechnung einbezogen werden soll:

input[value^=check]

Das bedeutet, dass der Wert data Ihrer Kontrollkästchen mit check beginnen muss. Dies bezieht sich auf den data-Wert, der in jeder Kontrollkästchenoption definiert wird:

Datendefinition im Formular, hier beginnend mit „check-“

In Zeile 14 werden nur diejenigen Felder berücksichtigt, deren Name mit checkbox_multi beginnt:

	if ( !name.startsWith( 'checkbox_multi-' ) ) {

Basierend auf diesem Implementierungsbeispiel wird eine Kontrollkästchenoption nur dann in die Fortschrittsberechnung einbezogen, wenn der Feldname mit checkbox_multi- beginnt und der data-Wert der Option mit check anfängt.

Wenn Sie andere Präfixe für Feldnamen oder Optionswerte verwenden, müssen Sie den JavaScript-Code entsprechend anpassen.

Anwenden der Syntax auf die Checklistenpunkte

Das folgende Feld vom Typ checkbox_multiselect verwendet sowohl das korrekte Namenspräfix als auch das korrekte data-Präfix. Das Feld wird daher in die Berechnung einbezogen, und alle drei Optionen tragen zum Fortschrittswert bei:

	{
			"name": "checkbox_multi-workplace_setup",
			"label": "Workplace setup",
			...
			"options": [
				{
					"data": "check-equipment",
					"label": "Ausstattung bereitstellen (Laptop, Telefon)"
				},
				{
					"data": "check-access",
					"label": "Zugriff auf erforderliche Systeme gewähren"
				},
				{
					"data": "check-intro",
					"label": "Vorstellung im Team"
				}
			],
			"type": "checkbox_multiselect"
		}

Erstellen eines Event-Listeners in den Formulareigenschaften

Um Ihr Formular mit der JavaScript-Funktion zu verbinden, müssen Sie in den Formulareigenschaften den Listener anlegen:

Hinzufügen des Listeners zu den Formulareigenschaften

So fügen Sie den Listener hinzu:

  1. Öffnen Sie die Formulareigenschaften.
  2. Klicken Sie auf Listeners.
  3. Wählen Sie das Ereignis beforeSubmitData aus und geben Sie den Namen Ihrer JavaScript-Funktion ein. In unserem Beispiel lautet dieser CalcProgress.



Das Ereignis beforeSubmitData wird beim Speichern des Formulars ausgelöst. Änderungen an Kontrollkästchen-Auswahlen werden daher während der Bearbeitung nicht unmittelbar berücksichtigt. Der Fortschrittsbalken wird erst nach dem Speichern des Formulars aktualisiert.


Vollständiges Implementierungsbeispiel

Dieses Beispiel basiert auf der oben beschriebenen JavaScript-Logik (insbesondere den erforderlichen Namenskonventionen). Zusätzlich wird in der untenstehenden JSON-Konfiguration ein Schema für die Seitennamensgebung definiert. Jede Checkliste wird als eigene Wiki-Seite unter dem Präfix ExampleChecklist/ gespeichert, wobei der Name der Checkliste Bestandteil des Seitentitels ist.

Um dieses Beispiel zu verwenden, speichern Sie ein neues Formular (z. B. ExampleChecklist.form) und kopieren Sie die folgende Konfiguration in die Definitionsquelle:

{
	"title": "Beispiel Fortschrittsbalken",
	"showTitle": true,
	"showFormName": false,
	"buttonsFloat": false,
	"categories": [],
	"sealAfterCreation": false,
	"enableProgressSave": false,
	"enableEditSummary": false,
	"rlDependencies": [],
	"useFormRevs": false,
	"includable": false,
	"extends": "",
	"abstract": false,
	"partial": false,
	"target": {
		"type": "json-on-wikipage",
		"predefined_title": "BeispielCheckliste/{{checklistname}}"
	},
	"show_target_afterAction": false,
	"listeners": {
		"beforeSubmitData": "jscb:CalcProgress"
	},
	"lang": "json",
	"items": [
		{
			"name": "checklistname",
			"label": "Checkliste Name",
			"help": "",
			"noLayout": false,
			"showOn": [
				"create"
			],
			"editableOn": [
				"create"
			],
			"widget_classes": [],
			"style": "",
			"widgetCustomProps": [],
			"widget_listeners": [],
			"value": "",
			"required": false,
			"type": "text"
		},
		{
			"name": "progress",
			"label": "Fortschritt",
			"help": "",
			"noLayout": true,
			"showOn": [
				"create",
				"edit",
				"view"
			],
			"editableOn": [
				"create",
				"edit"
			],
			"widget_classes": [],
			"style": "margin:1em auto!important; max-width:100%",
			"widgetCustomProps": {
				"widget_progress": "0"
			},
			"widget_listeners": [],
			"type": "progress_bar"
		},
		{
			"name": "checkbox_multi-getting_started",
			"label": "Loslegen",
			"help": "",
			"noLayout": false,
			"showOn": [
				"create",
				"edit",
				"view"
			],
			"editableOn": [
				"create",
				"edit"
			],
			"widget_classes": [],
			"style": "",
			"widgetCustomProps": [],
			"widget_listeners": [],
			"value": "",
			"required": false,
			"horizontal": false,
			"options": [
				{
					"data": "check-profile",
					"label": "Persönliche Angaben und Rolleninformationen bereitstellen"
				},
				{
					"data": "check-documents",
					"label": "Erforderliche Dokumente einreichen"
				},
				{
					"data": "check-intro",
					"label": "Einführungsmaterialien durchsehen"
				}
			],
			"type": "checkbox_multiselect"
		},
		{
			"name": "checkbox_multi-workplace_setup",
			"label": "Einrichtung des Arbeitsplatzes",
			"help": "",
			"noLayout": false,
			"showOn": [
				"create",
				"edit",
				"view"
			],
			"editableOn": [
				"create",
				"edit"
			],
			"widget_classes": [],
			"style": "",
			"widgetCustomProps": [],
			"widget_listeners": [],
			"value": "",
			"required": false,
			"horizontal": false,
			"options": [
				{
					"data": "check-equipment",
					"label": "Ausstattung bereitstellen (Laptop, Telefon)"
				},
				{
					"data": "check-access",
					"label": "Zugriff auf erforderliche Systeme gewähren"
				},
				{
					"data": "check-intro",
					"label": "Vorstellung im Team"
				}
			],
			"type": "checkbox_multiselect"
		}
	]
}