|
|
## Allgemein
|
|
|
|
|
|
Interceptors sind Javascript Dateien welche im Service Manager kundenspezifisch hinterlegt werden können. Über Diese kann das Verhalten des PDF Editors dynamisch angepasst werden.
|
|
|
|
|
|
## Berechtigungssystem
|
|
|
|
|
|
Der Interceptor wird immer clientseitig ausgeführt und kann daher das bestehende Rechtesystem nicht umgehen.
|
|
|
|
|
|
## Funktionsweise
|
|
|
Die Interceptor Scripte werden standardmässig im Service Manager unter `data/ed/public/interceptors/BeliebigerName.js` hinterlegt.
|
|
|
|
|
|
Über die Methode ```window.ed.registerInterceptor();``` können beliebig viele Interceptors registriert werden. Diese können die folgenden Methoden implementieren:
|
|
|
|
|
|
### initEditorConfiguration
|
|
|
|
|
|
Wird beim starten des Dashlets einmalig ausgeführt und kann dafür verwendet werden, den PDFTron Editor grundsätzlich anzupassen
|
|
|
|
|
|
### updateEditorConfiguration
|
|
|
|
|
|
Wird bei jedem Dokument und Modus Wechsel ausgeführt und kann daher pro Objekt spezifische Anpassungen umsetzen.
|
|
|
|
|
|
### Beispiel
|
|
|
|
|
|
```js
|
|
|
var updateMetadataInterceptor = {
|
|
|
updateEditorConfiguration: async (instance, info, config) => {
|
|
|
const { documentViewer } = instance.Core;
|
|
|
const { textPopup } = instance.UI;
|
|
|
|
|
|
// Entferne eigene Funktionen falls diese bereits hinzugefügt sein sollten
|
|
|
const actions = textPopup.getItems().filter(
|
|
|
(a) => {
|
|
|
return !Object.keys(a).includes('id') || !a['id'].startsWith('ed-')
|
|
|
});
|
|
|
|
|
|
// Aktualisiere die Aktionen
|
|
|
textPopup.update(actions);
|
|
|
|
|
|
// Füge den neuen Knopf hinzu
|
|
|
actions.push({
|
|
|
type: 'actionButton',
|
|
|
img: '../../interceptors/wizard.svg',
|
|
|
id: 'ed-title',
|
|
|
|
|
|
onClick: async () => {
|
|
|
// Hole den aktuell selektierten Text
|
|
|
let text = documentViewer.getSelectedText(documentViewer.getCurrentPage());
|
|
|
|
|
|
// Tute nichts falls aktuell kein Text ausgewählt wurde
|
|
|
if(text == ""){
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// Kürze den Text falls dieser zu lange sein sollte
|
|
|
if(text.length > 150){
|
|
|
text = text.substring(0,149);
|
|
|
}
|
|
|
text = text.trim();
|
|
|
|
|
|
// Aktualisiere das Metadatenfeld Title mit dem Text per DMS Service
|
|
|
const body = {
|
|
|
"objects": [{
|
|
|
"properties": {
|
|
|
"Title": {
|
|
|
"value": text
|
|
|
}
|
|
|
}
|
|
|
}]
|
|
|
};
|
|
|
|
|
|
const rawResponse = await fetch(`/api/dms/objects/${info.id}`, {
|
|
|
method: 'PATCH',
|
|
|
headers: {
|
|
|
'Accept': 'application/json',
|
|
|
'Content-Type': 'application/json'
|
|
|
},
|
|
|
body: JSON.stringify(body)
|
|
|
});
|
|
|
const content = await rawResponse.json();
|
|
|
},
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// Registriere den Interceptor
|
|
|
window.ed.registerInterceptor(updateMetadataInterceptor);
|
|
|
```
|
|
|
|
|
|
Die genauen Features von PDFTron kann man hier genauer nachlesen: https://www.pdftron.com/api/web/index.html
|
|
|
|
|
|
|
|
|
|
|
|
|