1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-06 09:21:54 +00:00

view pdf in flash for ie

This commit is contained in:
lins05
2012-09-21 17:16:07 +08:00
parent b080046b5c
commit 797b72e756
3 changed files with 44 additions and 13 deletions

View File

@@ -2,7 +2,11 @@
<script type="text/javascript" src="{{MEDIA_URL}}codemirror/codemirror.js"></script> <script type="text/javascript" src="{{MEDIA_URL}}codemirror/codemirror.js"></script>
{% endif %} {% endif %}
{% if filetype == 'PDF' %} {% if filetype == 'PDF' %}
<script type="text/javascript" src="{{MEDIA_URL}}js/pdf.js"></script> {% if pdf_use_flash %}
<script type="text/javascript" src="{{MEDIA_URL}}flexpaper/js/flexpaper_flash.js"></script>
{% else %}
<script type="text/javascript" src="{{MEDIA_URL}}js/pdf.js"></script>
{% endif %}
{% endif %} {% endif %}
{% if filetype == 'Document' %} {% if filetype == 'Document' %}
<script type="text/javascript" src="{{MEDIA_URL}}flexpaper/js/flexpaper_flash.js"></script> <script type="text/javascript" src="{{MEDIA_URL}}flexpaper/js/flexpaper_flash.js"></script>

View File

@@ -36,10 +36,8 @@
} }
{% endif %} {% endif %}
{% if filetype == 'PDF' %} {% if filetype == 'PDF' and not pdf_use_flash %}
if (!$.browser.mozilla && !$.browser.safari) { // Use pdf.js to view pdf in firefox/chrome
$('#file-view').html('<p>在线查看请使用firefox 或 chrome。</p>').addClass('file-view-tip');
} else {
PDFJS.workerSrc = '{{MEDIA_URL}}js/pdf.js'; PDFJS.workerSrc = '{{MEDIA_URL}}js/pdf.js';
$('#file-view').html('<div id="pdf"><img src="{{ MEDIA_URL }}pdf_full_view/images/loading-icon.gif" alt="加载中..." id="pdf-loading" style="margin-top:20px;" /><div id="pdf-op-bar" class="vh"><button id="prev">上一页</button><button id="next">下一页</button><span id="pdf-page"><label for="page-number"></label> <input type="number" id="page-number" value="1" min="1"></input> / <span id="page-nums"></span></span><button id="full-screen">全屏</button></div><canvas data="{{ raw_path }}" id="pdf-view" class="vh"></canvas></div>').css({'text-align':'center'}); $('#file-view').html('<div id="pdf"><img src="{{ MEDIA_URL }}pdf_full_view/images/loading-icon.gif" alt="加载中..." id="pdf-loading" style="margin-top:20px;" /><div id="pdf-op-bar" class="vh"><button id="prev">上一页</button><button id="next">下一页</button><span id="pdf-page"><label for="page-number"></label> <input type="number" id="page-number" value="1" min="1"></input> / <span id="page-nums"></span></span><button id="full-screen">全屏</button></div><canvas data="{{ raw_path }}" id="pdf-view" class="vh"></canvas></div>').css({'text-align':'center'});
$('#pdf-op-bar').append($('#file-op').html()); $('#pdf-op-bar').append($('#file-op').html());
@@ -89,7 +87,6 @@ if (!$.browser.mozilla && !$.browser.safari) {
window.open('{{ SITE_ROOT }}pdf_full_view/?repo_id={{ repo.id }}&obj_id={{obj_id}}&file_name=' + e('{{ file_name }}')); window.open('{{ SITE_ROOT }}pdf_full_view/?repo_id={{ repo.id }}&obj_id={{obj_id}}&file_name=' + e('{{ file_name }}'));
}); });
}); });
}
{% endif %} {% endif %}
{% if filetype == 'Markdown' %} {% if filetype == 'Markdown' %}
@@ -108,7 +105,7 @@ if (!$.browser.mozilla && !$.browser.safari) {
$('#file-view').html('<p>该类型文件无法在线查看。</p>').addClass('file-view-tip'); $('#file-view').html('<p>该类型文件无法在线查看。</p>').addClass('file-view-tip');
{% endif %} {% endif %}
{% if filetype == 'Document' %} {% if filetype == 'Document' or filetype == 'PDF' and pdf_use_flash %}
{% if err %} {% if err %}
$('#file-view').html('<p class="error">{{ err }}</p>').addClass('file-view-tip'); $('#file-view').html('<p class="error">{{ err }}</p>').addClass('file-view-tip');
{% else %} {% else %}
@@ -144,7 +141,7 @@ if (!$.browser.mozilla && !$.browser.safari) {
$('#file-view').children('object').prepend('<param name="wmode" value="opaque">'); //allow popup to show on top of the flash $('#file-view').children('object').prepend('<param name="wmode" value="opaque">'); //allow popup to show on top of the flash
} }
{% if document_swf_exists %} {% if swf_exists %}
load_flexpaper(); load_flexpaper();
{% else %} {% else %}
function check_status () { function check_status () {
@@ -176,7 +173,7 @@ if (!$.browser.mozilla && !$.browser.safari) {
}, },
error: function(xhr, ajaxOptions, thrownError) { error: function(xhr, ajaxOptions, thrownError) {
var jsonVal = jQuery.parseJSON(xhr.responseText); var jsonVal = jQuery.parseJSON(xhr.responseText);
$('#file-view').html('<p class="error">' + jsonVal[0]['error'] + '</p>'); $('#file-view').html('<p class="error">' + jsonVal['error'] + '</p>');
} }
}); });
} }

View File

@@ -1025,11 +1025,16 @@ def repo_view_file(request, repo_id):
# get file content # get file content
err = '' err = ''
file_content = '' file_content = ''
document_swf_exists = False swf_exists = False
pdf_use_flash = False
if filetype == 'Text' or filetype == 'Markdown': if filetype == 'Text' or filetype == 'Markdown':
err, file_content, encoding, newline_mode = repo_file_get(raw_path) err, file_content, encoding, newline_mode = repo_file_get(raw_path)
elif filetype == 'Document': elif filetype == 'Document':
err, document_swf_exists = document_prepare(raw_path, obj_id, fileext) err, swf_exists = flash_prepare(raw_path, obj_id, fileext)
elif filetype == 'PDF':
pdf_use_flash = use_flash_for_pdf(request)
if pdf_use_flash:
err, swf_exists = flash_prepare(raw_path, obj_id, 'pdf')
# file share link # file share link
l = FileShare.objects.filter(repo_id=repo_id).filter(\ l = FileShare.objects.filter(repo_id=repo_id).filter(\
@@ -1093,7 +1098,8 @@ def repo_view_file(request, repo_id):
'groups': groups, 'groups': groups,
'comments': comments, 'comments': comments,
'comment_open':comment_open, 'comment_open':comment_open,
'document_swf_exists': document_swf_exists, 'swf_exists': swf_exists,
'pdf_use_flash': pdf_use_flash,
'DOCUMENT_CONVERTOR_ROOT': DOCUMENT_CONVERTOR_ROOT, 'DOCUMENT_CONVERTOR_ROOT': DOCUMENT_CONVERTOR_ROOT,
'contributors': contributors, 'contributors': contributors,
'latest_contributor': latest_contributor, 'latest_contributor': latest_contributor,
@@ -2192,8 +2198,16 @@ def view_shared_file(request, token):
# get file content # get file content
err = '' err = ''
file_content = '' file_content = ''
swf_exists = False
pdf_use_flash = False
if filetype == 'Text' or filetype == 'Markdown': if filetype == 'Text' or filetype == 'Markdown':
err, file_content, encoding, newline_mode = repo_file_get(raw_path) err, file_content, encoding, newline_mode = repo_file_get(raw_path)
elif filetype == 'Document':
err, swf_exists = flash_prepare(raw_path, obj_id, fileext)
elif filetype == 'PDF':
pdf_use_flash = use_flash_for_pdf(request)
if pdf_use_flash:
err, swf_exists = flash_prepare(raw_path, obj_id, 'pdf')
# Increase file shared link view_cnt, this operation should be atomic # Increase file shared link view_cnt, this operation should be atomic
fileshare = FileShare.objects.get(token=token) fileshare = FileShare.objects.get(token=token)
@@ -2213,6 +2227,9 @@ def view_shared_file(request, token):
'username': username, 'username': username,
'err': err, 'err': err,
'file_content': file_content, 'file_content': file_content,
'swf_exists': swf_exists,
'pdf_use_flash': pdf_use_flash,
'DOCUMENT_CONVERTOR_ROOT': DOCUMENT_CONVERTOR_ROOT,
}, context_instance=RequestContext(request)) }, context_instance=RequestContext(request))
@login_required @login_required
@@ -2284,7 +2301,7 @@ def send_shared_link(request):
return HttpResponseBadRequest(json.dumps(form.errors), return HttpResponseBadRequest(json.dumps(form.errors),
content_type=content_type) content_type=content_type)
def document_prepare(raw_path, obj_id, doctype): def flash_prepare(raw_path, obj_id, doctype):
curl = DOCUMENT_CONVERTOR_ROOT + 'convert' curl = DOCUMENT_CONVERTOR_ROOT + 'convert'
data = {'doctype': doctype, data = {'doctype': doctype,
'file_id': obj_id, 'file_id': obj_id,
@@ -2300,3 +2317,16 @@ def document_prepare(raw_path, obj_id, doctype):
return ret_dict['error'], False return ret_dict['error'], False
else: else:
return None, ret_dict['exists'] return None, ret_dict['exists']
def use_flash_for_pdf(request):
"""Decide whether to use flash to view pdf file, according to the current
browser type and version.
"""
ua = request.META.get('HTTP_USER_AGENT', '')
if 'MSIE' in ua:
return True
else:
return False