refactor: Remove frappe.upload.make

This commit is contained in:
Faris Ansari 2019-04-19 15:49:26 +05:30
parent 0290e1954d
commit 8cb95d1b84
2 changed files with 0 additions and 555 deletions

View file

@ -196,94 +196,3 @@ frappe.ui.form.Attachments = Class.extend({
this.refresh();
}
});
frappe.ui.get_upload_dialog = function(opts){
var dialog = new frappe.ui.Dialog({
title: __('Upload Attachment'),
no_focus: true,
fields: [
{
"fieldtype": "Section Break"
},
{
"fieldtype": "Link" ,
"fieldname": "file" ,
"label": __("Select uploaded file"),
"options": "File",
onchange: function() {
frappe.call({
'method': 'frappe.client.get_value',
'args': {
'doctype': 'File',
'fieldname': ['file_url','file_name','is_private'],
'filters': {
'name': dialog.get_value("file")
}
},
callback: function(r){
if(!r.message) {
dialog.$wrapper.find('[name="file_url"]').val("");
return;
}
dialog.$wrapper.find('[name="file_url"]').val(r.message.file_url);
dialog.$wrapper.find('.private-file input').prop('checked', r.message.is_private);
opts.args.filename = r.message.file_name;
opts.args.is_private = r.message.is_private;
}
});
}
},
{
"hidden": !opts.args.doctype || !frappe.boot.gsuite_enabled,
"fieldtype": "Section Break",
"label": __("GSuite Document"),
},
{
"fieldtype": "Link" ,
"fieldname": "gs_template" ,
"label": __("Select template"),
"options": "GSuite Templates",
"reqd" : false,
"filters": {
'related_doctype': opts.args.doctype
},
onchange: function(){
opts.args.gs_template = this.get_value();
}
},
],
});
var btn = dialog.set_primary_action(__("Attach"));
btn.removeClass("btn-primary").addClass("btn-default");
dialog.show();
var upload_area = $('<div></div>').prependTo(dialog.body);
frappe.upload.make({
parent: upload_area,
args: opts.args,
callback: function(attachment, r) {
dialog.hide();
if(opts.callback){
opts.callback(attachment, r);
}
},
on_select: function() {
btn.removeClass("btn-default").addClass("btn-primary");
},
onerror: function() {
dialog.hide();
},
btn: btn,
max_width: opts.max_width,
max_height: opts.max_height,
});
return dialog;
}

View file

@ -5,467 +5,3 @@ import FileUploader from './file_uploader';
frappe.provide('frappe.ui');
frappe.ui.FileUploader = FileUploader;
// parent, args, callback
frappe.upload = {
make: function(opts) {
if(!opts.args) opts.args = {};
if(opts.allow_multiple === undefined) {
opts.allow_multiple = 1
}
// whether to show public/private checkbox or not
opts.show_private = !("is_private" in opts);
// make private by default
if (!("options" in opts) || ("options" in opts &&
(opts.options && !opts.options.toLowerCase()=="public" && !opts.options.toLowerCase()=="image"))) {
opts.is_private = 1;
}
// form level attachments defined as public (for letter head, web page etc)
if (cur_frm && cur_frm.flag_public_attachments) {
opts.is_private = 0;
}
var d = null;
// create new dialog if no parent given
if(!opts.parent) {
d = new frappe.ui.Dialog({
title: __('Upload Attachment'),
primary_action_label: __('Attach'),
primary_action: function() {}
});
opts.parent = d.body;
opts.btn = d.get_primary_btn();
d.show();
}
var $upload = $(frappe.render_template("upload", {opts:opts})).appendTo(opts.parent);
var $file_input = $upload.find(".input-upload-file");
var $uploaded_files_wrapper = $upload.find('.uploaded-filename');
// bind pseudo browse button
$upload.find(".btn-browse").on("click",
function() { $file_input.click(); });
// restrict to images
if (opts.restrict_to_images) {
$file_input.prop('accept', 'image/*');
}
// dropzone upload
const $dropzone = $('<div style="padding: 20px 10px 0px 10px;"/>');
new frappe.ui.DropZone($dropzone, {
drop: function (files) {
$dropzone.hide();
opts.files = opts.files ? [...opts.files, ...files] : files;
$file_input.trigger('change');
}
});
// end dropzone
$upload.append($dropzone);
$file_input.on("change", function() {
if (this.files.length > 0 || opts.files) {
var fileobjs = null;
if (opts.files) {
// files added programmatically
fileobjs = opts.files;
delete opts.files;
} else {
// files from input type file
fileobjs = $upload.find(":file").get(0).files;
}
var file_array = $.makeArray(fileobjs);
$upload.find(".web-link-wrapper").addClass("hidden");
$upload.find(".btn-browse").removeClass("btn-primary").addClass("btn-default");
$uploaded_files_wrapper.removeClass('hidden').empty();
$uploaded_files_wrapper.css({ 'margin-bottom': '25px' });
file_array = file_array.map(
file => Object.assign(file, {is_private: opts.is_private ? 1 : 0})
)
$upload.data('attached_files', file_array);
// List of files in a grid
$uploaded_files_wrapper.append(`
<div class="list-item list-item--head">
<div class="list-item__content list-item__content--flex-2">
${__('Filename')}
</div>
${opts.show_private
? `<div class="list-item__content file-public-column">
${__('Public')}
</div>`
: ''}
<div class="list-item__content list-item__content--activity" style="flex: 0 0 32px">
</div>
</div>
`);
var file_pills = file_array.map(
file => frappe.upload.make_file_row(file, opts)
);
$uploaded_files_wrapper.append(file_pills);
} else {
frappe.upload.show_empty_state($upload);
}
});
if(opts.files && opts.files.length > 0) {
$file_input.trigger('change');
}
// events
$uploaded_files_wrapper.on('click', '.list-item-container', function (e) {
var $item = $(this);
var filename = $item.attr('data-filename');
var attached_files = $upload.data('attached_files');
var $target = $(e.target);
if ($target.is(':checkbox')) {
var is_private = !$target.is(':checked');
attached_files = attached_files.map(file => {
if (file.name === filename) {
file.is_private = is_private ? 1 : 0;
}
return file;
});
$uploaded_files_wrapper
.find(`.list-item-container[data-filename="${filename}"] .fa.fa-fw`)
.toggleClass('fa-lock fa-unlock-alt');
$upload.data('attached_files', attached_files);
}
else if ($target.is('.uploaded-file-remove, .fa-remove')) {
// remove file from attached_files object
attached_files = attached_files.filter(file => file.name !== filename);
$upload.data('attached_files', attached_files);
// remove row from dom
$uploaded_files_wrapper
.find(`.list-item-container[data-filename="${filename}"]`)
.remove();
if(attached_files.length === 0) {
frappe.upload.show_empty_state($upload);
}
}
});
if(!opts.btn) {
opts.btn = $('<button class="btn btn-default btn-sm attach-btn">' + __("Attach")
+ '</div>').appendTo($upload);
} else {
$(opts.btn).unbind("click");
}
// Primary button handler
opts.btn.click(function() {
// close created dialog
d && d.hide();
// convert functions to values
if(opts.get_params) {
opts.args.params = opts.get_params();
}
// Get file url if input is visible
var file_url = $upload.find('[name="file_url"]:visible');
file_url = file_url.length && file_url.get(0).value;
if(opts.args.gs_template) {
frappe.integration_service.gsuite.create_gsuite_file(opts.args,opts);
} else if(file_url) {
opts.args.file_url = file_url;
frappe.upload.upload_file(null, opts.args, opts);
} else {
var files = $upload.data('attached_files');
frappe.upload.upload_multiple_files(files, opts.args, opts);
}
});
},
make_file_row: function(file, { show_private } = {}) {
const safe_file_name = frappe.utils.xss_sanitise(file.name);
var template = `
<div class="list-item-container" data-filename="${safe_file_name}">
<div class="list-item">
<div class="list-item__content list-item__content--flex-2 ellipsis">
<span>${safe_file_name}</span>
<span style="margin-top: 1px; margin-left: 5px;"
class="fa fa-fw text-warning ${file.is_private ? 'fa-lock': 'fa-unlock-alt'}">
</span>
</div>
${show_private?
`<div class="list-item__content file-public-column ellipsis">
<input type="checkbox" ${!file.is_private ? 'checked' : ''}/></div>`
: ''}
<div class="list-item__content list-item__content--activity ellipsis" style="flex: 0 0 32px;">
<button class="btn btn-default btn-xs text-muted uploaded-file-remove">
<span class="fa fa-remove"></span>
</button>
</div>
</div>
</div>`;
return $(template);
},
show_empty_state: function($upload) {
$upload.find(".uploaded-filename").addClass("hidden");
$upload.find(".web-link-wrapper").removeClass("hidden");
$upload.find(".private-file").addClass("hidden");
$upload.find(".btn-browse").removeClass("btn-default").addClass("btn-primary");
},
upload_multiple_files: function(files /*FileData array*/, args, opts) {
var i = -1;
frappe.upload.total_files = files ? files.length : 0;
if (frappe.upload.total_files === 1) {
return frappe.upload.upload_file(files[0], args, opts);
}
// upload the first file
upload_next();
// subsequent files will be uploaded after
// upload_complete event is fired for the previous file
$(document).on('upload_complete', on_upload);
function upload_next() {
if(files) {
i += 1;
var file = files[i];
args.is_private = file.is_private;
if(!opts.progress) {
frappe.show_progress(__('Uploading'), i, files.length);
}
}
frappe.upload.upload_file(file, args, opts);
}
function on_upload(e, attachment) {
if (!files || i === files.length - 1) {
$(document).off('upload_complete', on_upload);
frappe.hide_progress();
return;
}
upload_next();
}
},
upload_file: function(fileobj, args, opts) {
if(!fileobj && !args.file_url) {
if(opts.on_no_attach) {
opts.on_no_attach();
} else {
frappe.msgprint(__("Please attach a file or set a URL"));
}
return;
}
if(fileobj) {
frappe.upload.read_file(fileobj, args, opts);
} else {
// with file_url
frappe.upload._upload_file(fileobj, args, opts);
}
},
_upload_file: function(fileobj, args, opts, dataurl) {
if (args.file_size) {
frappe.upload.validate_max_file_size(args.file_size);
}
if(opts.on_attach) {
opts.on_attach(args, dataurl)
} else {
if (opts.confirm_is_private) {
frappe.prompt({
label: __("Private"),
fieldname: "is_private",
fieldtype: "Check",
"default": 1
}, function(values) {
args["is_private"] = values.is_private;
frappe.upload.upload_to_server(fileobj, args, opts);
}, __("Private or Public?"));
} else {
if (!("is_private" in args) && "is_private" in opts) {
args["is_private"] = opts.is_private;
}
frappe.upload.upload_to_server(fileobj, args, opts);
}
}
},
read_file: function(fileobj, args, opts) {
args.filename = fileobj.name.split(' ').join('_');
args.file_url = null;
if(opts.options && opts.options.toLowerCase()=="image") {
if(!frappe.utils.is_image_file(args.filename)) {
frappe.msgprint(__("Only image extensions (.gif, .jpg, .jpeg, .tiff, .png, .svg) allowed"));
return;
}
}
let start_complete = frappe.cur_progress ? frappe.cur_progress.percent : 0;
var upload_with_filedata = function() {
let freader = new FileReader();
freader.onload = function() {
var dataurl = freader.result;
args.filedata = freader.result.split(",")[1];
args.file_size = fileobj.size;
frappe.upload._upload_file(fileobj, args, opts, dataurl);
};
freader.readAsDataURL(fileobj);
}
const file_not_big_enough = fileobj.size <= 24576;
if (!frappe.socketio || opts.no_socketio || frappe.flags.no_socketio || frappe.boot.disable_async || file_not_big_enough) {
upload_with_filedata();
return;
} else {
args.file_size = fileobj.size;
frappe.call({
method: 'frappe.core.doctype.file.file.validate_filename',
args: {"filename": args.filename},
callback: function(r) {
args.filename = r.message;
upload_through_socketio();
}
});
}
var upload_through_socketio = function() {
if (frappe.socketio.socket) {
frappe.socketio.uploader.start({
file: fileobj,
filename: args.filename,
is_private: args.is_private,
fallback: () => {
// if fails, use old filereader
upload_with_filedata();
},
callback: (data) => {
args.file_url = data.file_url;
frappe.upload._upload_file(fileobj, args, opts);
},
on_progress: (percent_complete) => {
let increment = (flt(percent_complete) / frappe.upload.total_files);
frappe.show_progress(__('Uploading'),
start_complete + increment);
}
});
}
}
},
upload_to_server: function(file, args, opts) {
if(opts.start) {
opts.start();
}
var ajax_args = {
"method": "uploadfile",
args: args,
callback: function(r) {
if(!r._server_messages) {
// msgbox.hide();
}
if(r.exc) {
// if no onerror, assume callback will handle errors
opts.onerror ? opts.onerror(r) : opts.callback(null, r);
frappe.hide_progress();
return;
}
var attachment = r.message;
opts.loopcallback && opts.loopcallback();
opts.callback && opts.callback(attachment, r, args);
$(document).trigger("upload_complete", attachment);
},
error: function(r) {
// if no onerror, assume callback will handle errors
opts.onerror ? opts.onerror(r) : opts.callback(null, null, r);
frappe.hide_progress();
return;
}
}
// copy handlers etc from opts
$.each(['queued', 'running', "progress", "always", "btn"], function(i, key) {
if(opts[key]) ajax_args[key] = opts[key];
});
return frappe.call(ajax_args);
},
get_string: function(dataURI) {
// remove filename
var parts = dataURI.split(',');
if(parts[0].indexOf(":")===-1) {
var a = parts[2];
} else {
var a = parts[1];
}
return decodeURIComponent(escape(atob(a)));
},
validate_max_file_size: function(file_size) {
var max_file_size = frappe.boot.max_file_size || 5242880;
if (file_size > max_file_size) {
// validate max file size
frappe.throw(__("File size exceeded the maximum allowed size of {0} MB", [max_file_size / 1048576]));
}
},
multifile_upload:function(fileobjs, args, opts={}) {
//loop through filenames and checkboxes then append to list
var fields = [];
for (var i =0,j = fileobjs.length;i<j;i++) {
var filename = fileobjs[i].name;
fields.push({'fieldname': 'label1', 'fieldtype': 'Heading', 'label': filename});
fields.push({'fieldname': filename+'_is_private', 'fieldtype': 'Check', 'label': 'Private', 'default': 1});
}
var d = new frappe.ui.Dialog({
'title': __('Make file(s) private or public?'),
'fields': fields,
primary_action: function(){
var i =0,j = fileobjs.length;
d.hide();
opts.loopcallback = function (){
if (i < j) {
args.is_private = d.fields_dict[fileobjs[i].name + "_is_private"].get_value();
frappe.upload.upload_file(fileobjs[i], args, opts);
i++;
}
};
opts.loopcallback();
}
});
d.show();
opts.confirm_is_private = 0;
},
create_gsuite_file: function(args, opts) {
return frappe.call({
type:'POST',
method: 'frappe.integrations.doctype.gsuite_templates.gsuite_templates.create_gsuite_doc',
args: args,
callback: function(r) {
var attachment = r.message;
opts.callback && opts.callback(attachment, r);
}
});
}
}