mirror of
https://github.com/codex-team/editor.js
synced 2024-06-27 01:40:22 +02:00
510764a3cd
* Attaches plugin * Ignore server dir * Progress bar added * Styles upd * Fix * refactoring * core.ajax fix * Upd * Upd * update styles * remove tmp return * styles updated * file title now 'title' * Current upload check * update attaches and image plugin
136 lines
3 KiB
JavaScript
136 lines
3 KiB
JavaScript
/**
|
|
*
|
|
* Codex.Editor Transport Module
|
|
*
|
|
* @copyright 2017 Codex-Team
|
|
* @version 1.2.0
|
|
*/
|
|
|
|
module.exports = (function (transport) {
|
|
|
|
let editor = codex.editor;
|
|
|
|
|
|
/**
|
|
* @private {Object} current XmlHttpRequest instance
|
|
*/
|
|
var currentRequest = null;
|
|
|
|
|
|
/**
|
|
* @type {null} | {DOMElement} input - keeps input element in memory
|
|
*/
|
|
transport.input = null;
|
|
|
|
/**
|
|
* @property {Object} arguments - keep plugin settings and defined callbacks
|
|
*/
|
|
transport.arguments = null;
|
|
|
|
/**
|
|
* Prepares input element where will be files
|
|
*/
|
|
transport.prepare = function () {
|
|
|
|
let input = editor.draw.node( 'INPUT', '', { type : 'file' } );
|
|
|
|
editor.listeners.add(input, 'change', editor.transport.fileSelected);
|
|
editor.transport.input = input;
|
|
|
|
};
|
|
|
|
/** Clear input when files is uploaded */
|
|
transport.clearInput = function () {
|
|
|
|
/** Remove old input */
|
|
transport.input = null;
|
|
|
|
/** Prepare new one */
|
|
transport.prepare();
|
|
|
|
};
|
|
|
|
/**
|
|
* Callback for file selection
|
|
* @param {Event} event
|
|
*/
|
|
transport.fileSelected = function () {
|
|
|
|
var input = this,
|
|
i,
|
|
files = input.files,
|
|
formData = new FormData();
|
|
|
|
if (editor.transport.arguments.multiple === true) {
|
|
|
|
for ( i = 0; i < files.length; i++) {
|
|
|
|
formData.append('files[]', files[i], files[i].name);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
formData.append('files', files[0], files[0].name);
|
|
|
|
}
|
|
|
|
currentRequest = editor.core.ajax({
|
|
type : 'POST',
|
|
data : formData,
|
|
url : editor.transport.arguments.url,
|
|
beforeSend : editor.transport.arguments.beforeSend,
|
|
success : editor.transport.arguments.success,
|
|
error : editor.transport.arguments.error,
|
|
progress : editor.transport.arguments.progress
|
|
});
|
|
|
|
/** Clear input */
|
|
transport.clearInput();
|
|
|
|
};
|
|
|
|
/**
|
|
* Use plugin callbacks
|
|
* @protected
|
|
*
|
|
* @param {Object} args - can have :
|
|
* @param {String} args.url - fetch URL
|
|
* @param {Function} args.beforeSend - function calls before sending ajax
|
|
* @param {Function} args.success - success callback
|
|
* @param {Function} args.error - on error handler
|
|
* @param {Function} args.progress - xhr onprogress handler
|
|
* @param {Boolean} args.multiple - allow select several files
|
|
* @param {String} args.accept - adds accept attribute
|
|
*/
|
|
transport.selectAndUpload = function (args) {
|
|
|
|
transport.arguments = args;
|
|
|
|
if ( args.multiple === true) {
|
|
|
|
transport.input.setAttribute('multiple', 'multiple');
|
|
|
|
}
|
|
|
|
if ( args.accept ) {
|
|
|
|
transport.input.setAttribute('accept', args.accept);
|
|
|
|
}
|
|
|
|
transport.input.click();
|
|
|
|
};
|
|
|
|
transport.abort = function () {
|
|
|
|
currentRequest.abort();
|
|
|
|
currentRequest = null;
|
|
|
|
};
|
|
|
|
return transport;
|
|
|
|
})({}); |