1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-16 23:29:49 +00:00
Files
seahub/seahub/templates/snippets/office_convert_js.html

223 lines
8.5 KiB
HTML

{% load i18n %}
/**
* @param {boolean} html_exists True if the html has already been converted.
* @param {number} page_num The number of pages of this document
* @param {string|undefined} outline The outline content of the converted html.
* If html_exists is true, then it is undefined since the outline is already rendered in the HTML.
*/
function load_document(html_exists, page_num, outline) {
$('#convert-loading').remove();
var base_page_url = "{% url 'office_convert_static' obj_id %}/",
page_urls = [];
for (var i = 1; i < page_num + 1; i++) {
page_urls.push(base_page_url + i + '.page');
}
if (!html_exists) {
$('#outline').html(outline);
}
var has_outline;
if (html_exists) {
outline_html = $.trim($('#outline').html());
has_outline = outline_html;
} else {
has_outline = $.trim(outline);
}
if (has_outline) {
var sidebar = $('#sidebar'),
page_container = $('#page-container'),
hide_outline, show_outline;
$('#outline .l').removeAttr('data-dest-detail'); // make the anchor links work
sidebar.removeClass('hide');
try {
if (highlight_kw) {
highlight_kw(sidebar[0]);
}
} catch (e) {
// cases: 'highlight_keyword' in file view is False, history file view
// there can be an ReferenceError 'highlight_kw is not defined'
}
$('#converted-html').append('<div id="pdf2html-toolbar-1"></div>');
var toolbar = $('#pdf2html-toolbar-1');
toolbar.append('<span class="icon-caret-left" title="{% trans "hide outline" %}" id="hide-outline"></span>');
toolbar.append('<span class="icon-caret-right hide" title="{% trans "show outline" %}" id="show-outline"></span>');
hide_outline = $('#hide-outline');
show_outline = $('#show-outline');
toolbar.css({'left':250, 'bottom': ($(window).height() + $(window).scrollTop() - $('#file-view').offset().top)/2 - toolbar.height()/2});
toolbar.click(function() {
if (show_outline.hasClass('hide')) {
sidebar.addClass('hide').removeClass('opened');
hide_outline.addClass('hide');
show_outline.removeClass('hide');
toolbar.css({'left':0});
} else {
sidebar.removeClass('hide').addClass('opened');
show_outline.addClass('hide');
hide_outline.removeClass('hide');
toolbar.css({'left':250});
}
});
}
new pdf2htmlEX.Viewer({
container_id : 'page-container',
sidebar_id : 'sidebar',
outline_id : 'outline',
page_urls : page_urls
});
// zoom in, zoom out
var scale_ratio = 1,
scale_ratio_offset = 0.1;
var scale = function(ele, ratio) {
ele.css({
'transform':'scale(' + ratio + ')',
'-webkit-transform':'scale(' + ratio + ')',
'-ms-transform':'scale(' + ratio + ')',
'transform-origin':'center 0%',
'-webkit-transform-origin':'center 0%',
'-ms-transform-origin':'center 0%'
});
};
$('#converted-html').append('<div id="pdf2html-toolbar-2" class="pdf2html-toolbar"></div>');
$('#pdf2html-toolbar-2').append('<span class="icon-zoom-out" id="zoom-out"></span><span class="icon-zoom-in" id="zoom-in"></span>').css({'left': $(window).width()/2 - $('#pdf2html-toolbar-2').outerWidth(true)/2});
var file_cont = $('#file-view'), //file container
orig_pg_total_h;
$('#zoom-in, #zoom-out').click(function() {
// get orig data before zoom in/out
var op = $(this).attr('id'),
pg_num = $('.pd').length,
orig_win_scrollTop = $(window).scrollTop(),
orig_pg_h, cur_pg, pg_h_offset;
if (!orig_pg_total_h && scale_ratio == 1) {
orig_pg_total_h = file_cont.height();
}
orig_pg_h = orig_pg_total_h*scale_ratio/pg_num;
cur_pg = (orig_win_scrollTop - $('#page-container').offset().top)/orig_pg_h;
// zoom in/out
if (op == 'zoom-in') {
scale_ratio += scale_ratio_offset;
} else {
scale_ratio -= scale_ratio_offset;
}
if (scale_ratio <= 0) {
return ;
}
scale($('#page-container'), scale_ratio);
// modify file container's height
file_cont.height(orig_pg_total_h*scale_ratio);
// scroll to the right cur page
pg_h_offset = (orig_pg_total_h * scale_ratio_offset)/pg_num;
if (op == 'zoom-in') {
$(window).scrollTop(orig_win_scrollTop + cur_pg*pg_h_offset);
} else {
$(window).scrollTop(orig_win_scrollTop - cur_pg*pg_h_offset);
}
});
}
// handle outline(fixed or not) when scroll
$(window).scroll(function() {
var outline = $('#outline');
if (!$.trim(outline.html())) {
return;
}
var toolbar1 = $('#pdf2html-toolbar-1');
if ($(window).scrollTop() > $('#page-container').offset().top) {
outline.addClass('fixed-outline').css({'height':$(window).height() - parseInt(outline.css('padding-top')) - parseInt(outline.css('padding-bottom'))});
toolbar1.css({'bottom':'50%'});
} else {
outline.removeClass('fixed-outline').removeAttr('style');
toolbar1.css({'bottom':($(window).height() + $(window).scrollTop() - $('#file-view').offset().top)/2 - toolbar1.height()/2});
}
});
{% if html_exists %}
load_document(true, {{ html_detail.page_num }});
{% else %}
var m_page_num;
function get_outline() {
$.ajax({
url: "{% url 'office_convert_static' obj_id %}/file.outline",
dataType: 'text'
}).done(function(outline) {
load_document(false, m_page_num, outline);
});
}
function get_file_css() {
var css_href = "{% url 'office_convert_static' obj_id %}/file.css";
$('head').append('<link rel="stylesheet" type="text/css" href="' + css_href + '" />');
}
function query_page_num() {
$.ajax({
url: "{% url 'office_convert_query_page_num' %}?file_id={{ obj_id }}",
cache: false,
dataType: 'json',
success: function(data) {
if (data['success']) {
m_page_num = data['count'];
get_file_css();
get_outline();
} else {
str = "{% trans "Document convertion failed." %}";
$('#file-view').html('<div id="file-view-tip"><p class="error">' + str + '</p></div>');
}
},
error: function(xhr, textStatus, errorThrown) {
var str;
if (xhr.responseText) {
str = "{% trans "Document convertion failed." %}";
} else {
str = "{% trans "Failed. Please check the network." %}";
}
$('#file-view').html('<div id="file-view-tip"><p class="error">' + str + '</p></div>');
}
});
}
function check_status () {
$.ajax({
url: "{% url 'office_convert_query_status' %}?file_id={{ obj_id }}",
cache: false,
dataType: 'json',
success: function(data) {
var status = data['status'];
if (status == 'QUEUED' || status == 'PROCESSING') {
setTimeout(check_status, 2000);
} else {
query_page_num();
}
},
error: function(xhr, textStatus, errorThrown) {
var str;
if (xhr.responseText) {
str = "{% trans "Document convertion failed." %}";
} else {
str = "{% trans "Failed. Please check the network." %}";
}
$('#file-view').html('<div id="file-view-tip"><p class="error">' + str + '</p></div>');
}
});
}
check_status();
{% endif %}