Plugin erstellen

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:

  1. Der Name des Plugins. Dieser sollte mit dem Namen des Ordners auf Datei-Ebene übereinstimmen
  2. Die auszuführende Funktion
  3. 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)