[fixes] file upload and added uploading via drag and drop
This commit is contained in:
parent
052d211cbc
commit
2343b15b5d
5 changed files with 100 additions and 35 deletions
|
|
@ -141,7 +141,7 @@ class File(NestedSet):
|
|||
|
||||
def check_folder_is_empty(self):
|
||||
"""Throw exception if folder is not empty"""
|
||||
if frappe.get_all("File", {"folder": self.name}):
|
||||
if self.is_folder and frappe.get_all("File", filters={"folder": self.name}):
|
||||
frappe.throw(_("Folder {0} is not empty").format(self.name))
|
||||
|
||||
def check_reference_doc_permission(self):
|
||||
|
|
|
|||
|
|
@ -31,7 +31,11 @@ frappe.listview_settings['File'] = {
|
|||
doclist.breadcrumb = $('<ol class="breadcrumb for-file-list"></ol>')
|
||||
.insertBefore(doclist.filter_area);
|
||||
|
||||
doclist.page.add_menu_item(__("Create Folder"), function() {
|
||||
doclist.listview.settings.setup_new_folder(doclist);
|
||||
doclist.listview.settings.setup_dragdrop(doclist);
|
||||
},
|
||||
setup_new_folder: function(doclist) {
|
||||
doclist.page.add_menu_item(__("New Folder"), function() {
|
||||
var d = frappe.prompt(__("Name"), function(values) {
|
||||
if((values.value.indexOf("/") > -1)){
|
||||
frappe.throw("Folder name should not include / !!!")
|
||||
|
|
@ -39,17 +43,31 @@ frappe.listview_settings['File'] = {
|
|||
}
|
||||
var data = {
|
||||
"file_name": values.value,
|
||||
"folder":doclist.current_folder
|
||||
"folder": doclist.current_folder
|
||||
};
|
||||
frappe.call({
|
||||
method:"frappe.core.doctype.file.file.create_new_folder",
|
||||
args: data,
|
||||
callback:function(r){
|
||||
}
|
||||
method: "frappe.core.doctype.file.file.create_new_folder",
|
||||
args: data,
|
||||
callback: function(r) { }
|
||||
})
|
||||
}, __('Enter folder name'), __("Create"));
|
||||
});
|
||||
},
|
||||
setup_dragdrop: function(doclist) {
|
||||
$(doclist.$page).on('dragenter dragover', false)
|
||||
.on('drop', function (e) {
|
||||
var dataTransfer = e.originalEvent.dataTransfer;
|
||||
if (!(dataTransfer && dataTransfer.files && dataTransfer.files.length > 0)) {
|
||||
return;
|
||||
}
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
frappe.upload.upload_file(dataTransfer.files[0], {
|
||||
"folder": doclist.current_folder,
|
||||
"from_form": 1
|
||||
}, {});
|
||||
});
|
||||
},
|
||||
before_run: function(doclist) {
|
||||
var name_filter = doclist.filter_list.get_filter("file_name");
|
||||
if(name_filter) {
|
||||
|
|
@ -88,13 +106,18 @@ frappe.listview_settings['File'] = {
|
|||
frappe.utils.set_title(doclist.current_folder_name);
|
||||
},
|
||||
set_primary_action:function(doclist){
|
||||
|
||||
doclist.page.clear_primary_action();
|
||||
doclist.page.set_primary_action(__("New"), function() {
|
||||
dialog = frappe.ui.get_upload_dialog({
|
||||
"data":{"folder": doclist.current_folder, "from_form": 1}
|
||||
})
|
||||
|
||||
"args": {
|
||||
"folder": doclist.current_folder,
|
||||
"from_form": 1
|
||||
},
|
||||
callback: function() {
|
||||
console.log('here')
|
||||
doclist.refresh();
|
||||
}
|
||||
});
|
||||
}, "octicon octicon-plus");
|
||||
},
|
||||
post_render_item: function(list, row, data) {
|
||||
|
|
|
|||
|
|
@ -146,10 +146,12 @@ frappe.ui.form.Attachments = Class.extend({
|
|||
new_attachment: function(fieldname) {
|
||||
var me = this;
|
||||
if(!this.dialog){
|
||||
this.dialog = frappe.ui.get_upload_dialog({"data": me.get_args(),
|
||||
"callback": me.attachment_uploaded, "curr": me,
|
||||
"max_width": me.frm.cscript ? me.frm.cscript.attachment_max_width : null,
|
||||
"max_height": me.frm.cscript ? me.frm.cscript.attachment_max_height : null});
|
||||
this.dialog = frappe.ui.get_upload_dialog({
|
||||
"args": me.get_args(),
|
||||
"callback": me.attachment_uploaded, "curr": me,
|
||||
"max_width": me.frm.cscript ? me.frm.cscript.attachment_max_width : null,
|
||||
"max_height": me.frm.cscript ? me.frm.cscript.attachment_max_height : null
|
||||
});
|
||||
}
|
||||
},
|
||||
get_args: function() {
|
||||
|
|
@ -203,25 +205,29 @@ frappe.ui.get_upload_dialog = function(opts){
|
|||
title: __('Upload Attachment'),
|
||||
});
|
||||
|
||||
var btn = dialog.set_primary_action(__("Attach"));
|
||||
btn.removeClass("btn-primary").addClass("btn-default");
|
||||
|
||||
dialog.show();
|
||||
|
||||
$(dialog.body).empty();
|
||||
|
||||
frappe.upload.make({
|
||||
parent: dialog.body,
|
||||
args: opts.data,
|
||||
args: opts.args,
|
||||
callback: function(attachment, r) {
|
||||
dialog.hide();
|
||||
if(opts.callback){
|
||||
opts.callback.call(opts.curr, attachment, r);
|
||||
}
|
||||
else{
|
||||
dialog.hide();
|
||||
opts.callback(attachment, r);
|
||||
}
|
||||
},
|
||||
on_select: function() {
|
||||
btn.removeClass("btn-default").addClass("btn-primary");
|
||||
},
|
||||
onerror: function() {
|
||||
dialog.hide();
|
||||
},
|
||||
btn: dialog.set_primary_action(__("Attach")),
|
||||
btn: btn,
|
||||
max_width: opts.max_width,
|
||||
max_height: opts.max_height,
|
||||
});
|
||||
|
|
|
|||
|
|
@ -48,13 +48,18 @@ $(document).on("save", function(event, doc) {
|
|||
frappe.views.set_list_as_dirty = function(doctype) {
|
||||
var list_page = "List/" + doctype;
|
||||
if(frappe.pages[list_page]) {
|
||||
if(frappe.pages[list_page].doclistview)
|
||||
if(frappe.pages[list_page].doclistview) {
|
||||
if(frappe.pages[list_page].doclistview.dirty) {
|
||||
// already refreshing...
|
||||
return;
|
||||
}
|
||||
frappe.pages[list_page].doclistview.dirty = true;
|
||||
}
|
||||
}
|
||||
var route = frappe.get_route();
|
||||
if(route[0]==="List" && route[1]===doctype) {
|
||||
setTimeout(function() {
|
||||
frappe.pages[list_page].doclistview.run();
|
||||
frappe.pages[list_page].doclistview.refresh();
|
||||
}, 100);
|
||||
}
|
||||
}
|
||||
|
|
@ -158,7 +163,9 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
added = true;
|
||||
}
|
||||
});
|
||||
added && me.run();
|
||||
if(added) {
|
||||
me.refresh(true);
|
||||
}
|
||||
});
|
||||
this.$page.find(".result-list").on("click", ".list-row-left", function(e) {
|
||||
// don't open in case of checkbox, star, filterable
|
||||
|
|
@ -231,8 +238,11 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
this.refresh();
|
||||
},
|
||||
|
||||
refresh: function() {
|
||||
var me = this;
|
||||
refresh: function(dirty) {
|
||||
if(window.ttt) throw "here";
|
||||
|
||||
|
||||
if(dirty!==undefined) this.dirty = dirty;
|
||||
this.init_stats();
|
||||
|
||||
if(this.listview.settings.refresh) {
|
||||
|
|
@ -240,14 +250,14 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
}
|
||||
|
||||
if(frappe.route_options) {
|
||||
me.set_route_options();
|
||||
me.run();
|
||||
} else if(me.dirty) {
|
||||
me.run();
|
||||
this.set_route_options();
|
||||
this.run();
|
||||
} else if(this.dirty) {
|
||||
this.run();
|
||||
} else {
|
||||
if(new Date() - (me.last_updated_on || 0) > 30000) {
|
||||
if(new Date() - (this.last_updated_on || 0) > 30000) {
|
||||
// older than 5 mins, refresh
|
||||
me.run();
|
||||
this.run();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -275,6 +285,12 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
|
||||
run: function(more) {
|
||||
// set filter from route
|
||||
var me = this;
|
||||
|
||||
if(this.fresh && !more) {
|
||||
return;
|
||||
}
|
||||
|
||||
if(this.listview.settings.before_run) {
|
||||
this.listview.settings.before_run(this);
|
||||
}
|
||||
|
|
@ -294,6 +310,20 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
|
||||
this.last_updated_on = new Date();
|
||||
this.dirty = false;
|
||||
|
||||
// set a fresh so that multiple refreshes do not happen
|
||||
// at the same time. This is true when deleting.
|
||||
// AJAX response will try to refresh and list_update notification
|
||||
// via async will also try to update.
|
||||
// It is not possible to guess which will reach first
|
||||
// (most probably async will) but this is a forced way
|
||||
// to prevent instant refreshes on mutilple triggers
|
||||
// in a loosly coupled way.
|
||||
this.fresh = true;
|
||||
setTimeout(function() {
|
||||
me.fresh = false;
|
||||
}, 1000);
|
||||
|
||||
this._super(more);
|
||||
|
||||
if(this.listview.settings.post_render) {
|
||||
|
|
@ -351,12 +381,14 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
this.$page.on("click", ".list-tag-preview", function() { me.toggle_tags(); });
|
||||
|
||||
this.page.set_secondary_action(__("Refresh"), function() {
|
||||
me.run();
|
||||
me.dirty = true;
|
||||
me.refresh();
|
||||
}, "octicon octicon-sync");
|
||||
|
||||
this.page.btn_secondary.addClass("hidden-xs");
|
||||
this.page.add_menu_item(__("Refresh"), function() {
|
||||
me.run();
|
||||
me.dirty = true;
|
||||
me.refresh();
|
||||
}, "octicon octicon-sync").addClass("visible-xs");
|
||||
|
||||
if(frappe.model.can_import(this.doctype)) {
|
||||
|
|
@ -541,7 +573,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
|
|||
callback: function(r) {
|
||||
if(!r.exc) {
|
||||
me.list_header.find(".list-select-all").prop("checked", false);
|
||||
me.run();
|
||||
me.refresh();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -34,6 +34,10 @@ frappe.upload = {
|
|||
$file_input.trigger("change");
|
||||
});
|
||||
|
||||
if(opts.on_select) {
|
||||
opts.on_select();
|
||||
}
|
||||
|
||||
} else {
|
||||
$upload.find(".uploaded-filename").addClass("hidden")
|
||||
$upload.find(".web-link-wrapper").removeClass("hidden");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue