Wie wird ein Plugin ausgelesen
Plugins müssen immer unter bin/page/integrity/plugins/<NAME>
definiert werden.
Beim laden des Integritätsprüfers werden automatisch alle benötigten JS-Dateien eingebunden.
Die typische Hierarchie lautet wie folgt:
bin
page
integrity
plugins
<NAME>
plugin.js
plugin.js
Innerhalb der plugin.js
muss die main_window.integrity.addPlugin
aufgerufen werden. Diese Methode erwartet 3 Parameter:
- Der Name des Plugins. Dieser sollte mit dem Namen des Ordners auf Datei-Ebene übereinstimmen
- Die auszuführende Funktion
- Ob es sich um ein asynchrones Plugin handelt. Asynchrone Plugins führen normalerweise eine Server seitige Prüfung durch
main_window.integrity.addPlugin('alt', function() {}, false)
Synchrone Plugins
In der angegebenen Funktion muss mindestens eine Funktion mit dem Namen getErrorList
definiert werden. Diese Funktion wird vom Integritätsprüfer aufgerufen, wenn nach Fehlern gesucht wird.
Als erster Parameter wird das aktuelle HTML-Dokument übergeben.
main_window.integrity.addPlugin('alt', function() {
/**
* Prüft, ob alle Links auf der Seite erreichbar sind
*
* @param {HTMLDocument} document
*
* @returns {object[]}
*/
this.getErrorList = function(document) {
return []
}
}, false)
Als Rückgabewert wird ein Array mit Fehlern in folgender Form erwartet:
main_window.integrity.addPlugin('alt', function() {
/**
* Prüft, ob alle Links auf der Seite erreichbar sind
*
* @param {HTMLDocument} document
*
* @returns {object[]}
*/
this.getErrorList = function(document) {
return [{
severity: 'error',
nodes: [/* ... */],
selecors: [/* ... */],
summary: main_window.dialog.translate('Fehlender Alternativtext'),
msg: main_window.dialog.translate('Dieses Bild hat keinen Alternativtext.'),
code: 'alt_1'
}, {
severity: 'error',
nodes: [/* ... */],
selecors: [/* ... */],
summary: main_window.dialog.translate('Fehlender Alternativtext'),
msg: main_window.dialog.translate('Dieses Bild hat keinen Alternativtext.'),
code: 'alt_1'
}, {
severity: 'warning',
nodes: [/* ... */],
selecors: [/* ... */],
summary: main_window.dialog.translate('Leerer Alternativtext'),
msg: main_window.dialog.translate('Dieses Bild hat einen leeren Alternativtext.'),
code: 'alt_2'
}]
}
}, false)
- severity => Handelt es sich um einen Fehler, oder eine Warnung
- nodes => Ein Array oder eine NodeList mit den betroffenen HTML-Nodes
- selectors => Ein Array mit CSS-Selektoren für die betroffenen HTML-Nodes (Diese können per
main_window.integrity.createSelector(node)
erstellt werden) - summary => Ein kurze Beschreibung des Fehlers
- msg => Eine ausführliche Fehlermeldung
- code => Ein zur Fehlermeldung gehöriger Fehlercode (Normalerweise in der Form
<NAME>_<NUMMER_DES_FEHLERS>
)
Ignorierte Fehler sollten nicht zurückgegeben werden.
Ob ein Fehler aktuell ignoriert wird, kann mithilfe der Methode isIgnored
geprüft werden. Diese erwartet als ersten Parameter ein Array mit CSS-Selektoren, für die betroffenen HTML-Nodes und als zweiten Parameter den Fehlercode, des gefundenen Fehlers.
main_window.integrity.addPlugin('alt', function() {
/**
* Prüft, ob alle Links auf der Seite erreichbar sind
*
* @param {HTMLDocument} document
*
* @returns {object[]}
*/
this.getErrorList = function(document) {
let errors = []
if (!main_window.integrity.isIgnored([/* ... */], 'alt_1')) {
// Fehler wird icht ignoriert
errors.push([/* ... */])
}
return errors
}
}, false)
Asynchrone Plugins
Bei asynchronen Plugins wird der Funktion getErrorList
zusätzlich zum aktuellen HTML-Dokument eine Callback-Funktion übergeben. Diese sollte nach der asynchronen Prüfung mit einem Array aus Fehlern aufgerufen werden.
main_window.integrity.addPlugin('url', function() {
/**
* Prüft, ob alle Links auf der Seite erreichbar sind
*
* @param {HTMLDocument} document
* @para {function} callback
*
* @returns {void}
*/
this.getErrorList = function(document, callback) {
main_window.request('page/functions', '...', {/* ... */}, function(result) {
let errors
result.forEach(function(error) {/* ... */})
callback(errors)
})
}
}, true)