scinote-web/app/assets/javascripts/sitewide/file_preview.js.erb
2018-12-31 18:10:12 +01:00

109 lines
3.5 KiB
Text

(function(global) {
'use strict';
global.initPreviewModal = function initPreviewModal() {
var name;
var url;
var downloadUrl;
$('.file-preview-link').off('click');
$('.file-preview-link').click(function(e) {
e.preventDefault();
name = $(this).find('p').text();
url = $(this).data('preview-url');
downloadUrl = $(this).attr('href');
openPreviewModal(name, url, downloadUrl);
});
}
function openPreviewModal(name, url, downloadUrl) {
var modal = $('#filePreviewModal');
$.ajax({
url: url,
type: 'GET',
dataType: 'json',
success: function(data) {
modal.find('.file-preview-container').empty();
modal.find('.file-wopi-controls').empty();
if (data.hasOwnProperty('wopi-controls')) {
modal.find('.file-wopi-controls').html(data['wopi-controls']);
}
var link = modal.find('.file-download-link');
link.attr('href', downloadUrl);
link.attr('data-no-turbolink', true);
link.attr('data-status', 'asset-present');
if (data['type'] === 'image') {
if(data['processing']) {
animateSpinner('.file-preview-container', true);
} else {
animateSpinner('.file-preview-container', false);
modal.find('.file-preview-container')
.append($('<img>')
.attr('src', data['large-preview-url'])
.attr('alt', name)
.click(function(ev) {
ev.stopPropagation();
})
);
}
} else {
modal.find('.file-preview-container').html(data['preview-icon']);
}
if(data['processing']) {
checkFileReady(url, modal);
}
modal.find('.file-name').text(name);
modal.find('.preview-close').click(function() {
modal.modal('hide');
});
modal.modal();
modal.find('a[disabled=disabled]').click(function(ev){
ev.preventDefault();
});
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
},
error: function(ev) {
// TODO
}
});
}
function checkFileReady(url, modal) {
$.get(url, function(data) {
if(data['processing']) {
$('.file-download-link')
.addClass('disabled-with-click-events')
.attr('title',
'<%= I18n.t('general.file.processing')%>')
.click(function(ev) {
ev.preventDefault();
ev.stopPropagation();
});
setTimeout(function() {
checkFileReady(url, modal);
}, 10000);
} else {
if(data['type'] === 'image') {
modal.find('.file-preview-container').empty();
modal.find('.file-preview-container')
.append($('<img>')
.attr('src', data['large-preview-url'])
.attr('alt', data['filename'])
.click(function(ev) {
ev.stopPropagation();
})
);
modal.find('.file-name').text(data['filename']);
modal.find('.modal-body').click(function() {
modal.modal('hide');
});
modal.modal();
$('.modal-backdrop').last().css('z-index', modal.css('z-index') - 1);
}
$('.file-download-link')
.removeClass('disabled-with-click-events')
.removeAttr('title')
.off();
}
})
}
})(window);