diff --git a/templates/snippets/file_view_js.html b/templates/snippets/file_view_js.html index 5fb97052f8..c57589bd43 100644 --- a/templates/snippets/file_view_js.html +++ b/templates/snippets/file_view_js.html @@ -2,7 +2,11 @@ {% endif %} {% if filetype == 'PDF' %} - + {% if pdf_use_flash %} + + {% else %} + + {% endif %} {% endif %} {% if filetype == 'Document' %} diff --git a/templates/snippets/repo_file_get.html b/templates/snippets/repo_file_get.html index d2fae69f4a..e4ec261b99 100644 --- a/templates/snippets/repo_file_get.html +++ b/templates/snippets/repo_file_get.html @@ -36,10 +36,8 @@ } {% endif %} -{% if filetype == 'PDF' %} -if (!$.browser.mozilla && !$.browser.safari) { - $('#file-view').html('

在线查看:请使用firefox 或 chrome。

').addClass('file-view-tip'); -} else { +{% if filetype == 'PDF' and not pdf_use_flash %} + // Use pdf.js to view pdf in firefox/chrome PDFJS.workerSrc = '{{MEDIA_URL}}js/pdf.js'; $('#file-view').html('
加载中...
/
').css({'text-align':'center'}); $('#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 }}')); }); }); -} {% endif %} {% if filetype == 'Markdown' %} @@ -108,7 +105,7 @@ if (!$.browser.mozilla && !$.browser.safari) { $('#file-view').html('

该类型文件无法在线查看。

').addClass('file-view-tip'); {% endif %} -{% if filetype == 'Document' %} +{% if filetype == 'Document' or filetype == 'PDF' and pdf_use_flash %} {% if err %} $('#file-view').html('

{{ err }}

').addClass('file-view-tip'); {% else %} @@ -144,7 +141,7 @@ if (!$.browser.mozilla && !$.browser.safari) { $('#file-view').children('object').prepend(''); //allow popup to show on top of the flash } - {% if document_swf_exists %} + {% if swf_exists %} load_flexpaper(); {% else %} function check_status () { @@ -176,7 +173,7 @@ if (!$.browser.mozilla && !$.browser.safari) { }, error: function(xhr, ajaxOptions, thrownError) { var jsonVal = jQuery.parseJSON(xhr.responseText); - $('#file-view').html('

' + jsonVal[0]['error'] + '

'); + $('#file-view').html('

' + jsonVal['error'] + '

'); } }); } diff --git a/views.py b/views.py index 61d3c67529..d916e9ba85 100644 --- a/views.py +++ b/views.py @@ -1025,11 +1025,16 @@ def repo_view_file(request, repo_id): # get file content err = '' file_content = '' - document_swf_exists = False + swf_exists = False + pdf_use_flash = False if filetype == 'Text' or filetype == 'Markdown': err, file_content, encoding, newline_mode = repo_file_get(raw_path) 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 l = FileShare.objects.filter(repo_id=repo_id).filter(\ @@ -1093,7 +1098,8 @@ def repo_view_file(request, repo_id): 'groups': groups, 'comments': comments, '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, 'contributors': contributors, 'latest_contributor': latest_contributor, @@ -2192,8 +2198,16 @@ def view_shared_file(request, token): # get file content err = '' file_content = '' + swf_exists = False + pdf_use_flash = False if filetype == 'Text' or filetype == 'Markdown': 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 fileshare = FileShare.objects.get(token=token) @@ -2213,6 +2227,9 @@ def view_shared_file(request, token): 'username': username, 'err': err, 'file_content': file_content, + 'swf_exists': swf_exists, + 'pdf_use_flash': pdf_use_flash, + 'DOCUMENT_CONVERTOR_ROOT': DOCUMENT_CONVERTOR_ROOT, }, context_instance=RequestContext(request)) @login_required @@ -2284,7 +2301,7 @@ def send_shared_link(request): return HttpResponseBadRequest(json.dumps(form.errors), 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' data = {'doctype': doctype, 'file_id': obj_id, @@ -2300,3 +2317,16 @@ def document_prepare(raw_path, obj_id, doctype): return ret_dict['error'], False else: 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 + +