123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /**
- * @file
- * System behaviors.
- */
- (function($, Drupal, drupalSettings) {
- // Cache IDs in an array for ease of use.
- const ids = [];
- /**
- * Attaches field copy behavior from input fields to other input fields.
- *
- * When a field is filled out, apply its value to other fields that will
- * likely use the same value. In the installer this is used to populate the
- * administrator email address with the same value as the site email address.
- *
- * @type {Drupal~behavior}
- *
- * @prop {Drupal~behaviorAttach} attach
- * Attaches the field copy behavior to an input field.
- */
- Drupal.behaviors.copyFieldValue = {
- attach(context) {
- // List of fields IDs on which to bind the event listener.
- // Create an array of IDs to use with jQuery.
- Object.keys(drupalSettings.copyFieldValue || {}).forEach(element => {
- ids.push(element);
- });
- if (ids.length) {
- // Listen to value:copy events on all dependent fields.
- // We have to use body and not document because of the way jQuery events
- // bubble up the DOM tree.
- $('body')
- .once('copy-field-values')
- .on('value:copy', this.valueTargetCopyHandler);
- // Listen on all source elements.
- $(`#${ids.join(', #')}`)
- .once('copy-field-values')
- .on('blur', this.valueSourceBlurHandler);
- }
- },
- detach(context, settings, trigger) {
- if (trigger === 'unload' && ids.length) {
- $('body')
- .removeOnce('copy-field-values')
- .off('value:copy');
- $(`#${ids.join(', #')}`)
- .removeOnce('copy-field-values')
- .off('blur');
- }
- },
- /**
- * Event handler that fill the target element with the specified value.
- *
- * @param {jQuery.Event} e
- * Event object.
- * @param {string} value
- * Custom value from jQuery trigger.
- */
- valueTargetCopyHandler(e, value) {
- const $target = $(e.target);
- if ($target.val() === '') {
- $target.val(value);
- }
- },
- /**
- * Handler for a Blur event on a source field.
- *
- * This event handler will trigger a 'value:copy' event on all dependent
- * fields.
- *
- * @param {jQuery.Event} e
- * The event triggered.
- */
- valueSourceBlurHandler(e) {
- const value = $(e.target).val();
- const targetIds = drupalSettings.copyFieldValue[e.target.id];
- $(`#${targetIds.join(', #')}`).trigger('value:copy', value);
- },
- };
- })(jQuery, Drupal, drupalSettings);
|