X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Fmisc%2Fmachine-name.js;h=d919351a6963c5b01bd9f6b54b00153a2ca679d1;hp=e76292e265ccb9585f8fb547c673789c6134a92f;hb=9917807b03b64faf00f6a1f29dcb6eafc454efa5;hpb=aea91e65e895364e460983b890e295aa5d5540a5 diff --git a/web/core/misc/machine-name.js b/web/core/misc/machine-name.js index e76292e26..d919351a6 100644 --- a/web/core/misc/machine-name.js +++ b/web/core/misc/machine-name.js @@ -1,48 +1,13 @@ /** - * @file - * Machine name functionality. - */ +* DO NOT EDIT THIS FILE. +* See the following change record for more information, +* https://www.drupal.org/node/2815083 +* @preserve +**/ (function ($, Drupal, drupalSettings) { - - 'use strict'; - - /** - * Attach the machine-readable name form element behavior. - * - * @type {Drupal~behavior} - * - * @prop {Drupal~behaviorAttach} attach - * Attaches machine-name behaviors. - */ Drupal.behaviors.machineName = { - - /** - * Attaches the behavior. - * - * @param {Element} context - * The context for attaching the behavior. - * @param {object} settings - * Settings object. - * @param {object} settings.machineName - * A list of elements to process, keyed by the HTML ID of the form - * element containing the human-readable value. Each element is an object - * defining the following properties: - * - target: The HTML ID of the machine name form element. - * - suffix: The HTML ID of a container to show the machine name preview - * in (usually a field suffix after the human-readable name - * form element). - * - label: The label to show for the machine name preview. - * - replace_pattern: A regular expression (without modifiers) matching - * disallowed characters in the machine name; e.g., '[^a-z0-9]+'. - * - replace: A character to replace disallowed characters with; e.g., - * '_' or '-'. - * - standalone: Whether the preview should stay in its own element - * rather than the suffix of the source element. - * - field_prefix: The #field_prefix of the form element. - * - field_suffix: The #field_suffix of the form element. - */ - attach: function (context, settings) { + attach: function attach(context, settings) { var self = this; var $context = $(context); var timeout = null; @@ -64,15 +29,11 @@ var rx = new RegExp(options.replace_pattern, 'g'); var expected = baseValue.toLowerCase().replace(rx, options.replace).substr(0, options.maxlength); - // Abort the last pending request because the label has changed and it - // is no longer valid. if (xhr && xhr.readystate !== 4) { xhr.abort(); xhr = null; } - // Wait 300 milliseconds for Ajax request since the last event to update - // the machine name i.e., after the user has stopped typing. if (timeout) { clearTimeout(timeout); timeout = null; @@ -83,43 +44,39 @@ self.showMachineName(machine.substr(0, options.maxlength), data); }); }, 300); - } - else { + } else { self.showMachineName(expected, data); } } Object.keys(settings.machineName).forEach(function (source_id) { var machine = ''; - var eventData; + var eventData = void 0; var options = settings.machineName[source_id]; var $source = $context.find(source_id).addClass('machine-name-source').once('machine-name'); var $target = $context.find(options.target).addClass('machine-name-target'); var $suffix = $context.find(options.suffix); var $wrapper = $target.closest('.js-form-item'); - // All elements have to exist. + if (!$source.length || !$target.length || !$suffix.length || !$wrapper.length) { return; } - // Skip processing upon a form validation error on the machine name. + if ($target.hasClass('error')) { return; } - // Figure out the maximum length for the machine name. + options.maxlength = $target.attr('maxlength'); - // Hide the form item container of the machine name form element. + $wrapper.addClass('visually-hidden'); - // Determine the initial machine name value. Unless the machine name - // form element is disabled or not empty, the initial default value is - // based on the human-readable form element value. + if ($target.is(':disabled') || $target.val() !== '') { machine = $target.val(); - } - else if ($source.val() !== '') { + } else if ($source.val() !== '') { machine = self.transliterate($source.val(), options); } - // Append the machine name preview to the source field. + var $preview = $('' + options.field_prefix + Drupal.checkPlain(machine) + options.field_suffix + ''); $suffix.empty(); if (options.label) { @@ -127,7 +84,6 @@ } $suffix.append($preview); - // If the machine name cannot be edited, stop further processing. if ($target.is(':disabled')) { return; } @@ -140,63 +96,33 @@ $preview: $preview, options: options }; - // If it is editable, append an edit link. + var $link = $('').on('click', eventData, clickEditHandler); $suffix.append($link); - // Preview the machine name in realtime when the human-readable name - // changes, but only if there is no machine name yet; i.e., only upon - // initial creation, not when editing. if ($target.val() === '') { - $source.on('formUpdated.machineName', eventData, machineNameHandler) - // Initialize machine name preview. - .trigger('formUpdated.machineName'); + $source.on('formUpdated.machineName', eventData, machineNameHandler).trigger('formUpdated.machineName'); } - // Add a listener for an invalid event on the machine name input - // to show its container and focus it. $target.on('invalid', eventData, clickEditHandler); }); }, - - showMachineName: function (machine, data) { + showMachineName: function showMachineName(machine, data) { var settings = data.options; - // Set the machine name to the transliterated value. + if (machine !== '') { if (machine !== settings.replace) { data.$target.val(machine); data.$preview.html(settings.field_prefix + Drupal.checkPlain(machine) + settings.field_suffix); } data.$suffix.show(); - } - else { + } else { data.$suffix.hide(); data.$target.val(machine); data.$preview.empty(); } }, - - /** - * Transliterate a human-readable name to a machine name. - * - * @param {string} source - * A string to transliterate. - * @param {object} settings - * The machine name settings for the corresponding field. - * @param {string} settings.replace_pattern - * A regular expression (without modifiers) matching disallowed characters - * in the machine name; e.g., '[^a-z0-9]+'. - * @param {string} settings.replace_token - * A token to validate the regular expression. - * @param {string} settings.replace - * A character to replace disallowed characters with; e.g., '_' or '-'. - * @param {number} settings.maxlength - * The maximum length of the machine name. - * - * @return {jQuery} - * The transliterated source string. - */ - transliterate: function (source, settings) { + transliterate: function transliterate(source, settings) { return $.get(Drupal.url('machine_name/transliterate'), { text: source, langcode: drupalSettings.langcode, @@ -207,5 +133,4 @@ }); } }; - -})(jQuery, Drupal, drupalSettings); +})(jQuery, Drupal, drupalSettings); \ No newline at end of file