You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
5.9 KiB
202 lines
5.9 KiB
/* |
|
* Copyright (c) 2013-2014 Lukas Reschke <lukas@owncloud.com> |
|
* |
|
* This file is licensed under the Affero General Public License version 3 |
|
* or later. |
|
* |
|
* See the COPYING-README file. |
|
* |
|
*/ |
|
|
|
var isSecureViewerAvailable = function () { |
|
return $('#hideDownload').val() === 'true' && typeof OCA.RichDocuments !== 'undefined'; |
|
}; |
|
|
|
(function(OCA) { |
|
|
|
OCA.FilesPdfViewer = OCA.FilesPdfViewer || {}; |
|
|
|
/** |
|
* @namespace OCA.FilesPdfViewer.PreviewPlugin |
|
*/ |
|
OCA.FilesPdfViewer.PreviewPlugin = { |
|
|
|
/** |
|
* @param fileList |
|
*/ |
|
attach: function(fileList) { |
|
this._extendFileActions(fileList.fileActions); |
|
}, |
|
|
|
hide: function() { |
|
$('#pdframe').remove(); |
|
if ($('#isPublic').val() && $('#filesApp').val()){ |
|
$('#controls').removeClass('hidden'); |
|
$('#content').removeClass('full-height'); |
|
$('footer').removeClass('hidden'); |
|
} |
|
|
|
if (typeof FileList !== 'undefined') { |
|
FileList.setViewerMode(false); |
|
} |
|
|
|
// replace the controls with our own |
|
$('#app-content #controls').removeClass('hidden'); |
|
}, |
|
|
|
/** |
|
* @param downloadUrl |
|
* @param param |
|
* @param isFileList |
|
*/ |
|
show: function(downloadUrl, param, isFileList) { |
|
var self = this; |
|
var shown = true; |
|
var $iframe; |
|
var viewer = OC.generateUrl('/apps/files_pdfviewer/?file={file}', {file: downloadUrl}); |
|
$iframe = $('<iframe id="pdframe" style="width:100%;height:100%;display:block;position:absolute;top:0;z-index:1041;left:0;" src="'+viewer+param+'" sandbox="allow-scripts allow-same-origin allow-popups allow-modals allow-top-navigation" allowfullscreen="true"/>'); |
|
|
|
if(isFileList === true) { |
|
FileList.setViewerMode(true); |
|
} |
|
|
|
if ($('#isPublic').val()) { |
|
// force the preview to adjust its height |
|
$('#preview').append($iframe).css({height: '100%'}); |
|
$('body').css({height: '100%'}); |
|
$('#content').addClass('full-height'); |
|
$('footer').addClass('hidden'); |
|
$('#imgframe').addClass('hidden'); |
|
$('.directLink').addClass('hidden'); |
|
$('.directDownload').addClass('hidden'); |
|
$('#controls').addClass('hidden'); |
|
} else { |
|
$('#app-content').after($iframe); |
|
} |
|
|
|
$("#pageWidthOption").attr("selected","selected"); |
|
// replace the controls with our own |
|
$('#app-content #controls').addClass('hidden'); |
|
|
|
// if a filelist is present, the PDF viewer can be closed to go back there |
|
$('#pdframe').load(function(){ |
|
var iframe = $('#pdframe').contents(); |
|
if ($('#hideDownload').val() === 'true') { |
|
iframe.find('.toolbarButton.download').hide() |
|
iframe.find('.toolbarButton.print').hide() |
|
} |
|
if ($('#fileList').length) |
|
{ |
|
iframe.find('#secondaryToolbarClose').click(function() { |
|
self.hide(); |
|
}); |
|
|
|
// Go back on ESC |
|
$(document).keyup(function(e) { |
|
if (shown && e.keyCode == 27) { |
|
shown = false; |
|
self.hide(); |
|
} |
|
}); |
|
} else { |
|
iframe.find("#secondaryToolbarClose").addClass('hidden'); |
|
} |
|
|
|
var hideDownload = $('#hideDownload').val(); |
|
if (hideDownload === 'true') { |
|
iframe.find('.download').addClass('hidden'); |
|
} |
|
}); |
|
|
|
if(!$('html').hasClass('ie8')) { |
|
history.pushState({}, '', '#pdfviewer'); |
|
} |
|
|
|
if(!$('html').hasClass('ie8')) { |
|
$(window).one('popstate', function (e) { |
|
self.hide(); |
|
}); |
|
} |
|
}, |
|
|
|
/** |
|
* @param fileActions |
|
* @private |
|
*/ |
|
_extendFileActions: function(fileActions) { |
|
var self = this; |
|
if (isSecureViewerAvailable()) { |
|
return; |
|
} |
|
fileActions.registerAction({ |
|
name: 'view', |
|
displayName: 'Favorite', |
|
mime: 'application/pdf', |
|
permissions: OC.PERMISSION_READ, |
|
actionHandler: function(fileName, context) { |
|
var downloadUrl = context.fileList.getDownloadUrl(fileName, context.dir); |
|
if (downloadUrl && downloadUrl !== '#') { |
|
self.show(downloadUrl, '', true); |
|
} |
|
} |
|
}); |
|
fileActions.setDefault('application/pdf', 'view'); |
|
} |
|
}; |
|
|
|
})(OCA); |
|
|
|
OC.Plugins.register('OCA.Files.FileList', OCA.FilesPdfViewer.PreviewPlugin); |
|
|
|
// FIXME: Hack for single public file view since it is not attached to the fileslist |
|
$(document).ready(function(){ |
|
if ($('#isPublic').val() && $('#mimetype').val() === 'application/pdf' && !isSecureViewerAvailable()) { |
|
$.urlParam = function(name){ |
|
var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); |
|
if (results == null) { |
|
return 0; |
|
} |
|
return results[1] || 0; |
|
}; |
|
var sharingToken = $('#sharingToken').val(); |
|
var page = '#page='+$.urlParam('page'); |
|
var downloadUrl = OC.generateUrl('/s/{token}/download', {token: sharingToken}); |
|
var viewer = OCA.FilesPdfViewer.PreviewPlugin; |
|
viewer.show(downloadUrl, page, false); |
|
} |
|
}); |
|
|
|
(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-sidebar" 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()); |
|
})();
|
|
|