X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Ffile%2Ffile.js;fp=web%2Fcore%2Fmodules%2Ffile%2Ffile.js;h=4d51bb0fa01e57a4af47f267f5167b75f2ccb214;hp=8ed377eec3d8731580a28e77b269860a7bc6c241;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/modules/file/file.js b/web/core/modules/file/file.js index 8ed377eec..4d51bb0fa 100644 --- a/web/core/modules/file/file.js +++ b/web/core/modules/file/file.js @@ -1,35 +1,18 @@ /** - * @file - * Provides JavaScript additions to the managed file field type. - * - * This file provides progress bar support (if available), popup windows for - * file previews, and disabling of other file fields during Ajax uploads (which - * prevents separate file fields from accidentally uploading files). - */ +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ (function ($, Drupal) { - - 'use strict'; - - /** - * Attach behaviors to the file fields passed in the settings. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches validation for file extensions. - * @prop {Drupal~behaviorDetach} detach - * Detaches validation for file extensions. - */ Drupal.behaviors.fileValidateAutoAttach = { - attach: function (context, settings) { + attach: function attach(context, settings) { var $context = $(context); - var elements; + var elements = void 0; function initFileValidation(selector) { - $context.find(selector) - .once('fileValidate') - .on('change.fileValidate', {extensions: elements[selector]}, Drupal.file.validateExtension); + $context.find(selector).once('fileValidate').on('change.fileValidate', { extensions: elements[selector] }, Drupal.file.validateExtension); } if (settings.file && settings.file.elements) { @@ -37,14 +20,12 @@ Object.keys(elements).forEach(initFileValidation); } }, - detach: function (context, settings, trigger) { + detach: function detach(context, settings, trigger) { var $context = $(context); - var elements; + var elements = void 0; function removeFileValidation(selector) { - $context.find(selector) - .removeOnce('fileValidate') - .off('change.fileValidate', Drupal.file.validateExtension); + $context.find(selector).removeOnce('fileValidate').off('change.fileValidate', Drupal.file.validateExtension); } if (trigger === 'unload' && settings.file && settings.file.elements) { @@ -54,204 +35,102 @@ } }; - /** - * Attach behaviors to file element auto upload. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches triggers for the upload button. - * @prop {Drupal~behaviorDetach} detach - * Detaches auto file upload trigger. - */ Drupal.behaviors.fileAutoUpload = { - attach: function (context) { + attach: function attach(context) { $(context).find('input[type="file"]').once('auto-file-upload').on('change.autoFileUpload', Drupal.file.triggerUploadButton); }, - detach: function (context, setting, trigger) { + detach: function detach(context, setting, trigger) { if (trigger === 'unload') { $(context).find('input[type="file"]').removeOnce('auto-file-upload').off('.autoFileUpload'); } } }; - /** - * Attach behaviors to the file upload and remove buttons. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches form submit events. - * @prop {Drupal~behaviorDetach} detach - * Detaches form submit events. - */ Drupal.behaviors.fileButtons = { - attach: function (context) { + attach: function attach(context) { var $context = $(context); $context.find('.js-form-submit').on('mousedown', Drupal.file.disableFields); $context.find('.js-form-managed-file .js-form-submit').on('mousedown', Drupal.file.progressBar); }, - detach: function (context) { + detach: function detach(context) { var $context = $(context); $context.find('.js-form-submit').off('mousedown', Drupal.file.disableFields); $context.find('.js-form-managed-file .js-form-submit').off('mousedown', Drupal.file.progressBar); } }; - /** - * Attach behaviors to links within managed file elements for preview windows. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches triggers. - * @prop {Drupal~behaviorDetach} detach - * Detaches triggers. - */ Drupal.behaviors.filePreviewLinks = { - attach: function (context) { + attach: function attach(context) { $(context).find('div.js-form-managed-file .file a').on('click', Drupal.file.openInNewWindow); }, - detach: function (context) { + detach: function detach(context) { $(context).find('div.js-form-managed-file .file a').off('click', Drupal.file.openInNewWindow); } }; - /** - * File upload utility functions. - * - * @namespace - */ Drupal.file = Drupal.file || { - - /** - * Client-side file input validation of file extensions. - * - * @name Drupal.file.validateExtension - * - * @param {jQuery.Event} event - * The event triggered. For example `change.fileValidate`. - */ - validateExtension: function (event) { + validateExtension: function validateExtension(event) { event.preventDefault(); - // Remove any previous errors. + $('.file-upload-js-error').remove(); - // Add client side validation for the input[type=file]. var extensionPattern = event.data.extensions.replace(/,\s*/g, '|'); if (extensionPattern.length > 1 && this.value.length > 0) { var acceptableMatch = new RegExp('\\.(' + extensionPattern + ')$', 'gi'); if (!acceptableMatch.test(this.value)) { var error = Drupal.t('The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.', { - // According to the specifications of HTML5, a file upload control - // should not reveal the real local path to the file that a user - // has selected. Some web browsers implement this restriction by - // replacing the local path with "C:\fakepath\", which can cause - // confusion by leaving the user thinking perhaps Drupal could not - // find the file because it messed up the file path. To avoid this - // confusion, therefore, we strip out the bogus fakepath string. '%filename': this.value.replace('C:\\fakepath\\', ''), '%extensions': extensionPattern.replace(/\|/g, ', ') }); $(this).closest('div.js-form-managed-file').prepend('
' + error + '
'); this.value = ''; - // Cancel all other change event handlers. + event.stopImmediatePropagation(); } } }, - - /** - * Trigger the upload_button mouse event to auto-upload as a managed file. - * - * @name Drupal.file.triggerUploadButton - * - * @param {jQuery.Event} event - * The event triggered. For example `change.autoFileUpload`. - */ - triggerUploadButton: function (event) { + triggerUploadButton: function triggerUploadButton(event) { $(event.target).closest('.js-form-managed-file').find('.js-form-submit').trigger('mousedown'); }, - - /** - * Prevent file uploads when using buttons not intended to upload. - * - * @name Drupal.file.disableFields - * - * @param {jQuery.Event} event - * The event triggered, most likely a `mousedown` event. - */ - disableFields: function (event) { + disableFields: function disableFields(event) { var $clickedButton = $(this).findOnce('ajax'); - // Only disable upload fields for Ajax buttons. if (!$clickedButton.length) { return; } - // Check if we're working with an "Upload" button. var $enabledFields = []; if ($clickedButton.closest('div.js-form-managed-file').length > 0) { $enabledFields = $clickedButton.closest('div.js-form-managed-file').find('input.js-form-file'); } - // Temporarily disable upload fields other than the one we're currently - // working with. Filter out fields that are already disabled so that they - // do not get enabled when we re-enable these fields at the end of - // behavior processing. Re-enable in a setTimeout set to a relatively - // short amount of time (1 second). All the other mousedown handlers - // (like Drupal's Ajax behaviors) are executed before any timeout - // functions are called, so we don't have to worry about the fields being - // re-enabled too soon. @todo If the previous sentence is true, why not - // set the timeout to 0? var $fieldsToTemporarilyDisable = $('div.js-form-managed-file input.js-form-file').not($enabledFields).not(':disabled'); $fieldsToTemporarilyDisable.prop('disabled', true); setTimeout(function () { $fieldsToTemporarilyDisable.prop('disabled', false); }, 1000); }, - - /** - * Add progress bar support if possible. - * - * @name Drupal.file.progressBar - * - * @param {jQuery.Event} event - * The event triggered, most likely a `mousedown` event. - */ - progressBar: function (event) { + progressBar: function progressBar(event) { var $clickedButton = $(this); var $progressId = $clickedButton.closest('div.js-form-managed-file').find('input.file-progress'); if ($progressId.length) { var originalName = $progressId.attr('name'); - // Replace the name with the required identifier. $progressId.attr('name', originalName.match(/APC_UPLOAD_PROGRESS|UPLOAD_IDENTIFIER/)[0]); - // Restore the original name after the upload begins. setTimeout(function () { $progressId.attr('name', originalName); }, 1000); } - // Show the progress bar if the upload takes longer than half a second. + setTimeout(function () { $clickedButton.closest('div.js-form-managed-file').find('div.ajax-progress-bar').slideDown(); }, 500); }, - - /** - * Open links to files within forms in a new window. - * - * @name Drupal.file.openInNewWindow - * - * @param {jQuery.Event} event - * The event triggered, most likely a `click` event. - */ - openInNewWindow: function (event) { + openInNewWindow: function openInNewWindow(event) { event.preventDefault(); $(this).attr('target', '_blank'); window.open(this.href, 'filePreview', 'toolbar=0,scrollbars=1,location=1,statusbar=1,menubar=0,resizable=1,width=500,height=550'); } }; - -})(jQuery, Drupal); +})(jQuery, Drupal); \ No newline at end of file