diff options
author | Robin Appelman <robin@icewind.nl> | 2016-12-01 16:59:35 +0300 |
---|---|---|
committer | Robin Appelman <robin@icewind.nl> | 2016-12-02 01:27:09 +0300 |
commit | 2a8cde91fb3f3280e26aebf5f2dde68c3073656a (patch) | |
tree | b5384a8c487f264f59be2db1bffb32dbe61acbd6 | |
parent | e15b7e3c38a157cee51000c2d7b10592ed7b57db (diff) |
show pdf preview in the files sidebar
Signed-off-by: Robin Appelman <robin@icewind.nl>
-rw-r--r-- | controller/displaycontroller.php | 6 | ||||
-rw-r--r-- | css/minmode.css | 18 | ||||
-rw-r--r-- | js/previewplugin.js | 35 | ||||
-rw-r--r-- | templates/viewer.php | 3 | ||||
-rw-r--r-- | tests/unit/controller/displaycontrollertest.php | 3 |
5 files changed, 62 insertions, 3 deletions
diff --git a/controller/displaycontroller.php b/controller/displaycontroller.php index 30310cd..6d4da80 100644 --- a/controller/displaycontroller.php +++ b/controller/displaycontroller.php @@ -37,11 +37,13 @@ class DisplayController extends Controller { * @PublicPage * @NoCSRFRequired * + * @param bool $minmode * @return TemplateResponse */ - public function showPdfViewer() { + public function showPdfViewer($minmode = false) { $params = [ - 'urlGenerator' => $this->urlGenerator + 'urlGenerator' => $this->urlGenerator, + 'minmode' => $minmode ]; $response = new TemplateResponse($this->appName, 'viewer', $params, 'blank'); diff --git a/css/minmode.css b/css/minmode.css new file mode 100644 index 0000000..e821161 --- /dev/null +++ b/css/minmode.css @@ -0,0 +1,18 @@ +.toolbar { + display: none; +} + +#viewerContainer { + top: 0 !important; +} + +body { + background-color: #fff; + background-image: none; +} + +.pdfViewer .page { + margin: 10px auto; + border: 1px solid #ddd; + border-image: none; +} diff --git a/js/previewplugin.js b/js/previewplugin.js index 54ecb9e..3e6782b 100644 --- a/js/previewplugin.js +++ b/js/previewplugin.js @@ -146,3 +146,38 @@ $(document).ready(function(){ } } }); + +(function () { + + var SidebarPreview = function () { }; + + SidebarPreview.prototype = { + attach: function (manager) { + manager.addPreviewHandler('application/pdf', this.handlePreview.bind(this)); + }, + + handlePreview: function (model, $thumbnailDiv, $thumbnailContainer, fallback) { + var previewWidth = Math.floor($thumbnailContainer.parent().width() + 50); // 50px for negative margins + var previewHeight = Math.floor(previewWidth / (16 / 9)); + + var downloadUrl = Files.getDownloadUrl(model.get('name'), model.get('path')); + + var viewer = OC.generateUrl('/apps/files_pdfviewer/?minmode=true&file={file}', {file: downloadUrl}); + var $iframe = $('<iframe id="pdframe" style="width:100%;height:' + previewHeight + 'px;display:block;" src="' + viewer + '" sandbox="allow-scripts allow-same-origin allow-popups allow-modals" />'); + $thumbnailDiv.append($iframe); + + $iframe.on('load', function() { + $thumbnailDiv.removeClass('icon-loading icon-32'); + $thumbnailContainer.addClass('large'); + $thumbnailDiv.children('.stretcher').remove(); + $thumbnailContainer.css("max-height", previewHeight); + }); + }, + + getFileContent: function (path) { + return $.get(OC.linkToRemoteBase('files' + path)); + } + }; + + OC.Plugins.register('OCA.Files.SidebarPreviewManager', new SidebarPreview()); +})(); diff --git a/templates/viewer.php b/templates/viewer.php index 3e9c64e..76f1bdf 100644 --- a/templates/viewer.php +++ b/templates/viewer.php @@ -36,6 +36,9 @@ See https://github.com/adobe-type-tools/cmap-resources <link rel="stylesheet" href="<?php p($urlGenerator->linkTo('files_pdfviewer', 'vendor/pdfjs/web/viewer.css')) ?>?v=<?php p($version) ?>"/> <link rel="stylesheet" href="<?php p($urlGenerator->linkTo('files_pdfviewer', 'css/viewer.css')) ?>?v=<?php p($version) ?>"/> + <?php if($_['minmode']):?> + <link rel="stylesheet" href="<?php p($urlGenerator->linkTo('files_pdfviewer', 'css/minmode.css')) ?>?v=<?php p($version) ?>"/> + <?php endif;?> <script nonce="<?php p(\OC::$server->getContentSecurityPolicyNonceManager()->getNonce()) ?>" src="<?php p($urlGenerator->linkTo('files_pdfviewer', 'vendor/pdfjs/web/compatibility.js')) ?>?v=<?php p($version) ?>"></script> diff --git a/tests/unit/controller/displaycontrollertest.php b/tests/unit/controller/displaycontrollertest.php index 0f912e1..edcafd9 100644 --- a/tests/unit/controller/displaycontrollertest.php +++ b/tests/unit/controller/displaycontrollertest.php @@ -48,7 +48,8 @@ class DisplayControllerTest extends TestCase { public function testShowPdfViewer() { $params = [ - 'urlGenerator' => $this->urlGenerator + 'urlGenerator' => $this->urlGenerator, + 'minmode' => false ]; $expectedResponse = new TemplateResponse($this->appName, 'viewer', $params, 'blank'); $policy = new ContentSecurityPolicy(); |