Skip to content
Snippets Groups Projects

Rerolled patch from DO-2833968-74 for 11.x.

Files
5
+ 32
0
@@ -549,6 +549,9 @@
ajax.ajaxing = true;
return ajax.beforeSend(xmlhttprequest, options);
},
uploadProgress(event, position, total, percentComplete) {
return ajax.uploadProgress(event, position, total, percentComplete);
},
success(response, status, xmlhttprequest) {
ajax.preCommandsFocusedElementSelector =
document.activeElement.getAttribute('data-drupal-selector');
@@ -961,6 +964,35 @@
Drupal.theme.ajaxProgressMessage = (message) =>
`<div class="message">${message}</div>`;
/**
* Processes file upload progress if needed.
* @param event
* @param position
* @param total
* @param percentComplete
*/
function bytesToSize(bytes, separator = '') {
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
if (bytes === 0) return '0 Bytes';
const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)), 10);
if (i === 0) return `${bytes}${separator}${sizes[i]}`;
return `${(bytes / 1024 ** i).toFixed(1)}${separator}${sizes[i]}`;
}
Drupal.Ajax.prototype.uploadProgress = function (
event,
position,
total,
percentComplete,
) {
if (this.progress.type === 'bar') {
const message = Drupal.t('Uploading... (@current of @total)', {
'@current': bytesToSize(position),
'@total': bytesToSize(total),
});
this.progress.object.setProgress(percentComplete, message);
}
};
/**
* Provide a wrapper for the AJAX progress bar element.
*
Loading