- Mock-Button auf der rechten Seite hinzugefügt, um ein Padding auf die rechte Seite zu setzen - Mock-Aktion zur Abmelde-Schaltfläche hinzugefügt
188 lines
7.6 KiB
JavaScript
188 lines
7.6 KiB
JavaScript
class UI {
|
|
static allowedToolbarItems = [
|
|
'sidebar-thumbnails',
|
|
'sidebar-document-ouline',
|
|
'sidebar-bookmarks',
|
|
'pager',
|
|
'pan',
|
|
'zoom-out',
|
|
'zoom-in',
|
|
'zoom-mode',
|
|
'spacer',
|
|
'search',
|
|
'export-pdf'
|
|
]
|
|
|
|
// Load the PSPDFKit UI by setting a target element as the container to render in
|
|
// and a arraybuffer which represents the document that should be displayed.
|
|
static Instance
|
|
static loadPSPDFKit(arrayBuffer, container, licenseKey, locale) {
|
|
UI.Instance = PSPDFKit.load({
|
|
inlineWorkers: false,
|
|
locale: locale,
|
|
licenseKey: licenseKey,
|
|
styleSheets: ['/css/site.css'],
|
|
container: container,
|
|
document: arrayBuffer,
|
|
annotationPresets: UI.getPresets(),
|
|
electronicSignatures: {
|
|
creationModes: ['DRAW', 'TYPE', 'IMAGE'],
|
|
},
|
|
initialViewState: new PSPDFKit.ViewState({
|
|
sidebarMode: PSPDFKit.SidebarMode.THUMBNAILS,
|
|
}),
|
|
isEditableAnnotation: function (annotation) {
|
|
// Check if the annotation is a signature
|
|
// This will allow new signatures, but not allow edits.
|
|
if (annotation.isSignature || annotation.description == 'FRAME') {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
|
|
//return !annotation.isSignature;
|
|
},
|
|
customRenderers: {
|
|
Annotation: UI.annotationRenderer,
|
|
},
|
|
})
|
|
|
|
return UI.Instance;
|
|
}
|
|
|
|
static addToolbarItems(instance, handler) {
|
|
var toolbarItems = instance.toolbarItems.filter((item) => UI.allowedToolbarItems.includes(item.type));
|
|
|
|
if (IS_READONLY)
|
|
toolbarItems = toolbarItems.concat(UI.getReadOnlyItems(handler));
|
|
else
|
|
toolbarItems = toolbarItems.concat(UI.getWritableItems(handler));
|
|
|
|
if (!IS_DESKTOP_SIZE && !IS_READONLY)
|
|
toolbarItems = toolbarItems.concat(UI.getMobileWritableItems(handler));
|
|
|
|
instance.setToolbarItems(toolbarItems)
|
|
}
|
|
|
|
static annotationRenderer(data) {
|
|
// leave everything as is
|
|
return null
|
|
}
|
|
|
|
static createElementFromHTML(html) {
|
|
const el = document.createElement('div')
|
|
el.innerHTML = html.trim()
|
|
|
|
return el.firstChild
|
|
}
|
|
|
|
static getWritableItems = function (callback) {
|
|
return [
|
|
{
|
|
type: 'custom',
|
|
id: 'button-share',
|
|
className: 'button-share',
|
|
title: 'Teilen',
|
|
onPress() {
|
|
callback('SHARE')
|
|
},
|
|
icon: `<svg width="30" height="30" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<path d="M20 13V17.5C20 20.5577 16 20.5 12 20.5C8 20.5 4 20.5577 4 17.5V13M12 3L12 15M12 3L16 7M12 3L8 7" stroke="#000000" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
|
</svg>`,
|
|
},
|
|
{
|
|
type: 'custom',
|
|
id: 'button-logout',
|
|
className: 'button-logout',
|
|
title: 'logout',
|
|
onPress() {
|
|
callback('LOGOUT')
|
|
},
|
|
icon: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-box-arrow-left" viewBox="0 0 16 16">
|
|
<path fill-rule="evenodd" d="M6 12.5a.5.5 0 0 0 .5.5h8a.5.5 0 0 0 .5-.5v-9a.5.5 0 0 0-.5-.5h-8a.5.5 0 0 0-.5.5v2a.5.5 0 0 1-1 0v-2A1.5 1.5 0 0 1 6.5 2h8A1.5 1.5 0 0 1 16 3.5v9a1.5 1.5 0 0 1-1.5 1.5h-8A1.5 1.5 0 0 1 5 12.5v-2a.5.5 0 0 1 1 0z"/>
|
|
<path fill-rule="evenodd" d="M.146 8.354a.5.5 0 0 1 0-.708l3-3a.5.5 0 1 1 .708.708L1.707 7.5H10.5a.5.5 0 0 1 0 1H1.707l2.147 2.146a.5.5 0 0 1-.708.708z"/>
|
|
</svg>`
|
|
},
|
|
{
|
|
type: 'custom',
|
|
id: 'mock',
|
|
className: 'mock',
|
|
title: 'Mock',
|
|
icon: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="currentColor" class="bi bi-box-arrow-left" viewBox="0 0 16 16"></svg>`
|
|
}
|
|
];
|
|
}
|
|
|
|
static getReadOnlyItems = function (callback) {
|
|
return [
|
|
{
|
|
type: 'custom',
|
|
id: 'button-copy-url',
|
|
className: 'button-copy-url',
|
|
title: 'Teilen',
|
|
onPress() {
|
|
callback('COPY_URL')
|
|
},
|
|
icon: `<svg viewBox="4 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
<path d="M15 3H9C6.79086 3 5 4.79086 5 7V15" stroke="#222222"/>
|
|
<path d="M8.5 11.5C8.5 10.3156 8.50074 9.46912 8.57435 8.81625C8.64681 8.17346 8.78457 7.78051 9.01662 7.4781C9.14962 7.30477 9.30477 7.14962 9.4781 7.01662C9.78051 6.78457 10.1735 6.64681 10.8163 6.57435C11.4691 6.50074 12.3156 6.5 13.5 6.5C14.6844 6.5 15.5309 6.50074 16.1837 6.57435C16.8265 6.64681 17.2195 6.78457 17.5219 7.01662C17.6952 7.14962 17.8504 7.30477 17.9834 7.4781C18.2154 7.78051 18.3532 8.17346 18.4257 8.81625C18.4993 9.46912 18.5 10.3156 18.5 11.5V15.5C18.5 16.6844 18.4993 17.5309 18.4257 18.1837C18.3532 18.8265 18.2154 19.2195 17.9834 19.5219C17.8504 19.6952 17.6952 19.8504 17.5219 19.9834C17.2195 20.2154 16.8265 20.3532 16.1837 20.4257C15.5309 20.4993 14.6844 20.5 13.5 20.5C12.3156 20.5 11.4691 20.4993 10.8163 20.4257C10.1735 20.3532 9.78051 20.2154 9.4781 19.9834C9.30477 19.8504 9.14962 19.6952 9.01662 19.5219C8.78457 19.2195 8.64681 18.8265 8.57435 18.1837C8.50074 17.5309 8.5 16.6844 8.5 15.5V11.5Z" stroke="#222222"/>
|
|
</svg>`,
|
|
}
|
|
];
|
|
}
|
|
|
|
static getMobileWritableItems = function (callback) {
|
|
return [
|
|
{
|
|
type: 'custom',
|
|
id: 'button-finish',
|
|
className: 'button-finish',
|
|
onPress() {
|
|
callback('FINISH')
|
|
},
|
|
icon: `<svg class="icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="-4 -4 26 26">
|
|
<path d="m10.036 8.278 9.258-7.79A1.979 1.979 0 0 0 18 0H2A1.987 1.987 0 0 0 .641.541l9.395 7.737Z" />
|
|
<path d="M11.241 9.817c-.36.275-.801.425-1.255.427-.428 0-.845-.138-1.187-.395L0 2.6V14a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V2.5l-8.759 7.317Z" />
|
|
</svg>`
|
|
},
|
|
{
|
|
type: 'custom',
|
|
id: 'button-reject',
|
|
className: 'button-reject',
|
|
title: 'Ablehnen',
|
|
onPress() {
|
|
callback('REJECT')
|
|
},
|
|
icon: `<svg width="25px" height="25px" viewBox="43.5 43.5 512 512" version="1.1" fill="currentColor" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
<path class="st0" d="M263.24,43.5c-117.36,0-212.5,95.14-212.5,212.5s95.14,212.5,212.5,212.5s212.5-95.14,212.5-212.5 S380.6,43.5,263.24,43.5z M367.83,298.36c17.18,17.18,17.18,45.04,0,62.23v0c-17.18,17.18-45.04,17.18-62.23,0l-42.36-42.36 l-42.36,42.36c-17.18,17.18-45.04,17.18-62.23,0v0c-17.18-17.18-17.18-45.04,0-62.23L201.01,256l-42.36-42.36 c-17.18-17.18-17.18-45.04,0-62.23v0c17.18-17.18,45.04-17.18,62.23,0l42.36,42.36l42.36-42.36c17.18-17.18,45.04-17.18,62.23,0v0 c17.18,17.18,17.18,45.04,0,62.23L325.46,256L367.83,298.36z" />
|
|
</svg>`,
|
|
},
|
|
{
|
|
type: 'custom',
|
|
id: 'button-reset',
|
|
className: 'button-reset',
|
|
title: 'Zurücksetzen',
|
|
onPress() {
|
|
callback('RESET')
|
|
},
|
|
icon: `<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" class="bi bi-arrow-counterclockwise" viewBox="-1 -1 16 16">
|
|
<path fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z"/>
|
|
<path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z"/>
|
|
</svg>`,
|
|
}
|
|
];
|
|
}
|
|
|
|
static getPresets() {
|
|
const annotationPresets = PSPDFKit.defaultAnnotationPresets
|
|
annotationPresets.ink = {
|
|
lineWidth: 10,
|
|
}
|
|
|
|
annotationPresets.widget = {
|
|
readOnly: true,
|
|
}
|
|
|
|
return annotationPresets
|
|
}
|
|
} |