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 = "" +
+ "
" +
+ "
" +
+ " " +
+ "
" +
+ "
" +
+ "
" +
+ "
" +
+ " 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 %}