diff --git a/cps/book_formats.py b/cps/book_formats.py index 5ed8d29c..36212732 100644 --- a/cps/book_formats.py +++ b/cps/book_formats.py @@ -101,7 +101,7 @@ def default_meta(tmp_file_path, original_file_name, original_file_extension): def pdf_meta(tmp_file_path, original_file_name, original_file_extension): if use_pdf_meta: - pdf = PdfFileReader(open(tmp_file_path, 'rb')) + pdf = PdfFileReader(open(tmp_file_path, 'rb'), strict=False) doc_info = pdf.getDocumentInfo() else: doc_info = None diff --git a/cps/helper.py b/cps/helper.py index e4f33956..ea9e035c 100644 --- a/cps/helper.py +++ b/cps/helper.py @@ -230,7 +230,10 @@ def get_valid_filename(value, replace_whitespace=True): value = value[:128] if not value: raise ValueError("Filename cannot be empty") - return value + if sys.version_info.major == 3: + return value + else: + return value.decode('utf-8') def get_sorted_author(value): diff --git a/cps/static/js/uploadprogress.js b/cps/static/js/uploadprogress.js index b28d17f3..23c3f931 100644 --- a/cps/static/js/uploadprogress.js +++ b/cps/static/js/uploadprogress.js @@ -6,41 +6,41 @@ * Version 1.0.0 * Licensed under the MIT license. */ -(function($){ +(function($) { "use strict"; $.support.xhrFileUpload = !!(window.FileReader && window.ProgressEvent); $.support.xhrFormData = !!window.FormData; - if(!$.support.xhrFileUpload || !$.support.xhrFormData){ + if (!$.support.xhrFileUpload || !$.support.xhrFormData) { // skip decorating form return; } - var template = ''; + var template = "
" + + "
" + + "
" + + "
" + + " " + + "

Uploading

" + + "
" + + "
" + + "
" + + "
" + + "
" + + " 0%" + + "
" + + "
" + + "
" + + "
" + + " " + + "
" + + "
" + + "
" + + "
"; - var UploadProgress = function(element, options){ + var UploadProgress = function(element, options) { this.options = options; this.$element = $(element); }; @@ -49,22 +49,25 @@ constructor: function() { this.$form = this.$element; - this.$form.on('submit', $.proxy(this.submit, this)); + this.$form.on("submit", $.proxy(this.submit, this)); this.$modal = $(this.options.template); - this.$modal_message = this.$modal.find('.modal-message'); - this.$modal_title = this.$modal.find('.modal-title'); - this.$modal_footer = this.$modal.find('.modal-footer'); - this.$modal_bar = this.$modal.find('.progress-bar'); + this.$modalTitle = this.$modal.find(".modal-title"); + this.$modalFooter = this.$modal.find(".modal-footer"); + this.$modalBar = this.$modal.find(".progress-bar"); - this.$modal.on('hidden.bs.modal', $.proxy(this.reset, this)); + // Translate texts + this.$modalTitle.text(this.options.modalTitle) + this.$modalFooter.children("button").text(this.options.modalFooter) + + this.$modal.on("hidden.bs.modal", $.proxy(this.reset, this)); }, - reset: function(){ - this.$modal_title = this.$modal_title.text('Uploading'); - this.$modal_footer.hide(); - this.$modal_bar.addClass('progress-bar-success'); - this.$modal_bar.removeClass('progress-bar-danger'); - if(this.xhr){ + reset: function() { + this.$modalTitle.text(this.options.modalTitle) + this.$modalFooter.hide(); + this.$modalBar.addClass("progress-bar-success"); + this.$modalBar.removeClass("progress-bar-danger"); + if (this.xhr) { this.xhr.abort(); } }, @@ -73,7 +76,7 @@ e.preventDefault(); this.$modal.modal({ - backdrop: 'static', + backdrop: "static", keyboard: false }); @@ -81,35 +84,33 @@ var xhr = new XMLHttpRequest(); this.xhr = xhr; - xhr.addEventListener('load', $.proxy(this.success, this, xhr)); - xhr.addEventListener('error', $.proxy(this.error, this, xhr)); - //xhr.addEventListener('abort', function(){}); + xhr.addEventListener("load", $.proxy(this.success, this, xhr)); + xhr.addEventListener("error", $.proxy(this.error, this, xhr)); - xhr.upload.addEventListener('progress', $.proxy(this.progress, this)); + xhr.upload.addEventListener("progress", $.proxy(this.progress, this)); var form = this.$form; - - xhr.open(form.attr('method'), form.attr("action")); - xhr.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest'); + + xhr.open(form.attr("method"), form.attr("action")); + xhr.setRequestHeader("X-REQUESTED-WITH", "XMLHttpRequest"); var data = new FormData(form.get(0)); xhr.send(data); }, success: function(xhr) { - if(xhr.status == 0 || xhr.status >= 400){ + if (xhr.status === 0 || xhr.status >= 400) { // HTTP 500 ends up here!?! return this.error(xhr); } this.set_progress(100); var url; - var content_type = xhr.getResponseHeader('Content-Type'); + var contentType = xhr.getResponseHeader("Content-Type"); // make it possible to return the redirect URL in // a JSON response - if(content_type.indexOf('application/json') !== -1){ + if (contentType.indexOf("application/json") !== -1) { var response = $.parseJSON(xhr.responseText); - console.log(response); url = response.location; } else{ @@ -120,39 +121,41 @@ // handle form error // we replace the form with the returned one - error: function(xhr){ - this.$modal_title.text('Upload failed'); + error: function(xhr) { + this.$modalTitle.text(this.options.modalTitleFailed); - this.$modal_bar.removeClass('progress-bar-success'); - this.$modal_bar.addClass('progress-bar-danger'); - this.$modal_footer.show(); - - var content_type = xhr.getResponseHeader('Content-Type'); + this.$modalBar.removeClass("progress-bar-success"); + this.$modalBar.addClass("progress-bar-danger"); + this.$modalFooter.show(); + var contentType = xhr.getResponseHeader("Content-Type"); // Replace the contents of the form, with the returned html - if(xhr.status === 422){ - var new_html = $.parseHTML(xhr.responseText); - this.replace_form(new_html); - this.$modal.modal('hide'); + if (xhr.status === 422) { + var newHtml = $.parseHTML(xhr.responseText); + this.replace_form(newHtml); + this.$modal.modal("hide"); } // Write the error response to the document. else{ - var response_text = xhr.responseText; - if(content_type.indexOf('text/plain') !== -1){ - response_text = '
' + response_text + '
'; + var responseText = xhr.responseText; + // Handle no response error + if (contentType) { + if (contentType.indexOf("text/plain") !== -1) { + responseText = "
" + responseText + "
"; + } + document.write(xhr.responseText); } - document.write(xhr.responseText); } }, set_progress: function(percent){ - var txt = percent + '%'; + var txt = percent + "%"; if (percent == 100) { - txt = this.options.uploaded_msg; + txt = this.options.uploadedMsg; } - this.$modal_bar.attr('aria-valuenow', percent); - this.$modal_bar.text(txt); - this.$modal_bar.css('width', percent + '%'); + this.$modalBar.attr("aria-valuenow", percent); + this.$modalBar.text(txt); + this.$modalBar.css("width", percent + "%"); }, progress: function(/*ProgressEvent*/e){ @@ -163,24 +166,23 @@ // replace_form replaces the contents of the current form // with the form in the html argument. // We use the id of the current form to find the new form in the html - replace_form: function(html){ - var new_form; - var form_id = this.$form.attr('id'); - if(form_id !== undefined){ - new_form = $(html).find('#' + form_id); + replace_form: function(html) { + var newForm; + var formId = this.$form.attr("id"); + if(formId !== undefined){ + newForm = $(html).find("#" + formId); } else{ - new_form = $(html).find('form'); + newForm = $(html).find("form"); } - // add the filestyle again - new_form.find(':file').filestyle({buttonBefore: true}); - this.$form.html(new_form.children()); + newForm.find(":file").filestyle({buttonBefore: true}); + this.$form.html(newForm.children()); } }; $.fn.uploadprogress = function(options, value){ - return this.each(function(){ + return this.each(function() { var _options = $.extend({}, $.fn.uploadprogress.defaults, options); var file_progress = new UploadProgress(this, _options); file_progress.constructor(); @@ -189,9 +191,11 @@ $.fn.uploadprogress.defaults = { template: template, - uploaded_msg: "Upload done, processing, please wait..." + uploadedMsg: "Upload done, processing, please wait...", + modalTitle: "Uploading", + modalFooter: "Close", + modalTitleFailed: "Upload failed" //redirect_url: ... - // need to customize stuff? Add here, and change code accordingly. }; diff --git a/cps/templates/layout.html b/cps/templates/layout.html index d5c13761..4819fd5f 100644 --- a/cps/templates/layout.html +++ b/cps/templates/layout.html @@ -250,7 +250,13 @@ {% endif %}