From f3c445610ec61842266e8f52639e85f4997a0a50 Mon Sep 17 00:00:00 2001 From: mptr Date: Mon, 8 Feb 2021 00:58:21 +0100 Subject: [PATCH 1/2] PDF-Preview support with HTML-Object tag --- src/_h5ai/private/conf/options.json | 8 ++++ .../public/css/lib/ext/preview-embed.less | 11 +++++ src/_h5ai/public/js/lib/ext/preview/index.js | 1 + .../js/lib/ext/preview/preview-object.js | 41 +++++++++++++++++++ 4 files changed, 61 insertions(+) create mode 100644 src/_h5ai/public/css/lib/ext/preview-embed.less create mode 100644 src/_h5ai/public/js/lib/ext/preview/preview-object.js diff --git a/src/_h5ai/private/conf/options.json b/src/_h5ai/private/conf/options.json index a570da26..be7c879d 100644 --- a/src/_h5ai/private/conf/options.json +++ b/src/_h5ai/private/conf/options.json @@ -283,6 +283,14 @@ } }, + /* + Object-Tag for e.g. PDFs + */ + "preview-object": { + "enabled": true, + "types": ["x-pdf"] + }, + /* Play a video preview on click. diff --git a/src/_h5ai/public/css/lib/ext/preview-embed.less b/src/_h5ai/public/css/lib/ext/preview-embed.less new file mode 100644 index 00000000..9b2fce3c --- /dev/null +++ b/src/_h5ai/public/css/lib/ext/preview-embed.less @@ -0,0 +1,11 @@ +#pv-content-object { + padding: 0; + overflow: hidden; + object { + width: calc(100% - 230px); + height: 100%; + @media (max-aspect-ratio: ~"1/1") { /* escape to avoid convert to literal 1 */ + width: 100%; + } + } +} diff --git a/src/_h5ai/public/js/lib/ext/preview/index.js b/src/_h5ai/public/js/lib/ext/preview/index.js index 26c9f4e0..0c6e6b5e 100644 --- a/src/_h5ai/public/js/lib/ext/preview/index.js +++ b/src/_h5ai/public/js/lib/ext/preview/index.js @@ -1,5 +1,6 @@ require('./preview'); require('./preview-aud'); require('./preview-img'); +require('./preview-object'); require('./preview-txt'); require('./preview-vid'); diff --git a/src/_h5ai/public/js/lib/ext/preview/preview-object.js b/src/_h5ai/public/js/lib/ext/preview/preview-object.js new file mode 100644 index 00000000..baea2bc0 --- /dev/null +++ b/src/_h5ai/public/js/lib/ext/preview/preview-object.js @@ -0,0 +1,41 @@ +const {dom} = require('../../util'); +const allsettings = require('../../core/settings'); +const preview = require('./preview'); + +const settings = Object.assign({ + enabled: false, + types: [] +}, allsettings['preview-object']); +const tpl = '
'; + +const updateGui = () => { + const el = dom('#pv-content-object')[0]; + if (!el) { + return; + } + + const container = dom('#pv-container')[0]; + el.style.height = container.offsetHeight + 'px'; + + preview.setLabels([ + preview.item.label, + preview.item.size + ' bytes' + ]); +}; + +const load = item => { + console.log("loading"); + const $el = dom("

Your browser does not support in-frame PDF rendering. :/

") + .attr("data", item.absHref) + .attr("type", "application/pdf"); + return dom(tpl).app($el); +}; + +const init = () => { + if (settings.enabled) { + console.log("registered"); + preview.register(settings.types, load, updateGui); + } +}; + +init(); From da2e174f30bde32c25f604656e5a342979d32d6f Mon Sep 17 00:00:00 2001 From: mptr Date: Thu, 11 Feb 2021 00:30:52 +0100 Subject: [PATCH 2/2] filename fix --- .../css/lib/ext/{preview-embed.less => preview-object.less} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/_h5ai/public/css/lib/ext/{preview-embed.less => preview-object.less} (100%) diff --git a/src/_h5ai/public/css/lib/ext/preview-embed.less b/src/_h5ai/public/css/lib/ext/preview-object.less similarity index 100% rename from src/_h5ai/public/css/lib/ext/preview-embed.less rename to src/_h5ai/public/css/lib/ext/preview-object.less