Skip to content
Snippets Groups Projects
Verified Commit adc4219e authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3428652 by nod_, jmaxant, alexpott, prashant.c, godotislate,...

Issue #3428652 by nod_, jmaxant, alexpott, prashant.c, godotislate, UserOne.se, smustgrave: Broken auto creation of machine name field

(cherry picked from commit 73ec2854)
parent 1d5a6d44
Branches
Tags
17 merge requests!10663Issue #3495778: Update phpdoc in FileSaveHtaccessLoggingTest,!10451Issue #3472458 by watergate, smustgrave: CKEditor 5 show blocks label is not translated,!103032838547 Fix punctuation rules for inline label suffix colon with CSS only,!10150Issue #3467294 by quietone, nod_, smustgrave, catch, longwave: Change string...,!10130Resolve #3480321 "Second level menu",!9936Issue #3483087: Check the module:// prefix in the translation server path and replace it with the actual module path,!9933Issue #3394728 by ankondrat4: Undefined array key "#prefix" and deprecated function: explode() in Drupal\file\Element\ManagedFile::uploadAjaxCallback(),!9914Issue #3451136 by quietone, gapple, ghost of drupal past: Improve...,!9882Draft: Issue #3481777 In bulk_form ensure the triggering element is the bulk_form button,!9839Issue #3445469 by pooja_sharma, smustgrave: Add additional test coverage for...,!9815Issue #3480025: There is no way to remove entity cache items,!9757Issue #3478869 Add "All" or overview links to parent links,!9752Issue #3439910 by pooja_sharma, vensires: Fix Toolbar tests that rely on UID1's super user behavior,!9749Issue #3439910 by pooja_sharma, vensires: Fix Toolbar tests that rely on UID1's super user behavior,!9678Issue #3465132 by catch, Spokje, nod_: Show test run time by class in run-tests.sh output,!9578Issue #3304746 by scott_euser, casey, smustgrave: BigPipe cannot handle (GET)...,!9449Issue #3344041: Allow textarea widgets to be used for text (formatted) fields
Pipeline #261228 passed
Pipeline: drupal

#261230

    ...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
    "once": true, "once": true,
    "CKEditor5": true, "CKEditor5": true,
    "tabbable": true, "tabbable": true,
    "slugify": true, "transliterate": true,
    "bodyScrollLock" : true, "bodyScrollLock" : true,
    "FloatingUIDOM": true "FloatingUIDOM": true
    }, },
    ......
    ...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
    * @internal * @internal
    */ */
    (function ($, Drupal, drupalSettings, slugify) { (function ($, Drupal, drupalSettings, transliterateLibrary) {
    /** /**
    * Trims string by a character. * Trims string by a character.
    * *
    ...@@ -294,21 +294,17 @@ ...@@ -294,21 +294,17 @@
    drupalSettings.transliteration_language_overrides[ drupalSettings.transliteration_language_overrides[
    drupalSettings.langcode drupalSettings.langcode
    ]; ];
    const normalizedLanguageOverrides = {}; const replace = {};
    if (languageOverrides) { if (languageOverrides) {
    Object.keys(languageOverrides).forEach((key) => { Object.keys(languageOverrides).forEach((key) => {
    // Updates the keys from hexadecimal to strings. // Updates the keys from hexadecimal to strings.
    normalizedLanguageOverrides[String.fromCharCode(key)] = replace[String.fromCharCode(key)] = languageOverrides[key];
    languageOverrides[key];
    }); });
    } }
    slugify.config({
    separator: settings.replace,
    allowedChars: settings.replace_pattern,
    replace: normalizedLanguageOverrides,
    });
    return prepareMachineName(slugify(source), settings); const transliteratedSource = transliterateLibrary(source, { replace });
    return prepareMachineName(transliteratedSource, settings);
    }, },
    }; };
    })(jQuery, Drupal, drupalSettings, slugify); })(jQuery, Drupal, drupalSettings, transliterate);
    ...@@ -61,8 +61,7 @@ public function testMachineNameTransliterations($langcode, $input, $output): voi ...@@ -61,8 +61,7 @@ public function testMachineNameTransliterations($langcode, $input, $output): voi
    $this->drupalGet("/admin/people/roles/add"); $this->drupalGet("/admin/people/roles/add");
    $page->find('css', '[data-drupal-selector="edit-label"]')->setValue($input); $page->find('css', '[data-drupal-selector="edit-label"]')->setValue($input);
    $this->assertSession()->pageTextContains($output); $this->assertSession()->elementTextEquals('css', 'span.machine-name-value', $output);
    } }
    /** /**
    ...@@ -78,13 +77,13 @@ public static function machineNameInputOutput(): array { ...@@ -78,13 +77,13 @@ public static function machineNameInputOutput(): array {
    ['de', 'Äwesome', 'aewesome'], ['de', 'Äwesome', 'aewesome'],
    ['da', 'äöüåøhello', 'aouaaoehello'], ['da', 'äöüåøhello', 'aouaaoehello'],
    ['fr', 'ц', 'c'], ['fr', 'ц', 'c'],
    // These tests are not working with chromedriver as ['fr', 'ᐑ', 'wii'],
    // 'ᐑ','𐌰𐌸' chars are not accepted. // This test is not working with chromedriver as '𐌰𐌸' chars are not
    // ['fr', 'ᐑ', 'wii'], // accepted.
    // ['en', '𐌰𐌸', '__'], // ['en', '𐌰𐌸', '__'],
    ['en', 'Ä Ö Ü Å Ø äöüåøhello', 'a_o_u_a_o_aouaohello'], ['en', 'Ä Ö Ü Å Ø äöüåøhello', 'a_o_u_a_o_aouaohello'],
    ['de', 'Ä Ö Ü Å Ø äöüåøhello', 'ae_oe_ue_a_o_aeoeueaohello'], ['de', 'Ä Ö Ü Å Ø äöüåøhello', 'ae_oe_ue_a_o_aeoeueaohello'],
    ['de', ']URY&m_G^;', ' ury_m_g'], ['de', ']URY&m_G^;', 'ury_m_g'],
    ['da', 'Ä Ö Ü Å Ø äöüåøhello', 'a_o_u_aa_oe_aouaaoehello'], ['da', 'Ä Ö Ü Å Ø äöüåøhello', 'a_o_u_aa_oe_aouaaoehello'],
    ['kg', 'ц', 'ts'], ['kg', 'ц', 'ts'],
    ['en', ' Hello Abventor! ', 'hello_abventor'], ['en', ' Hello Abventor! ', 'hello_abventor'],
    ......
    ...@@ -2,42 +2,42 @@ ...@@ -2,42 +2,42 @@
    const MachineNameTestArray = [ const MachineNameTestArray = [
    { {
    machineName: 'Bob', machineName: 'Bob',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'bob', expectedMachineName: 'bob',
    }, },
    { {
    machineName: 'Äwesome', machineName: 'Äwesome',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'awesome', expectedMachineName: 'awesome',
    }, },
    { {
    machineName: 'B?!"@\\/-ob@e', machineName: 'B?!"@\\/-ob@e',
    replacePattern: 'a-zA-Z0-9_.~', replacePattern: '[^a-zA-Z0-9_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'b_ob_e', expectedMachineName: 'b_ob_e',
    }, },
    { {
    machineName: 'Bob@e\\0', machineName: 'Bob@e\\0',
    replacePattern: 'a-zA-Z0-9_.~@', replacePattern: '[^a-zA-Z0-9_.~@]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'bob@e_0', expectedMachineName: 'bob@e_0',
    }, },
    { {
    machineName: 'Bobby', machineName: 'Bobby',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'bobby', expectedMachineName: 'bobby',
    }, },
    { {
    machineName: 'ǍǎǏ', machineName: 'ǍǎǏ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'aai', expectedMachineName: 'aai',
    ...@@ -46,140 +46,140 @@ const MachineNameTestArray = [ ...@@ -46,140 +46,140 @@ const MachineNameTestArray = [
    // the removeDiacritics() function present in PhpTranliteration.php. // the removeDiacritics() function present in PhpTranliteration.php.
    { {
    machineName: 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ', machineName: 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'aaaaaaaeceeeeiiii', expectedMachineName: 'aaaaaaaeceeeeiiii',
    }, },
    { {
    machineName: 'ÐÑÒÓÔÕÖרÙÚÛÜÝÞß', machineName: 'ÐÑÒÓÔÕÖרÙÚÛÜÝÞß',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'dnoooooxouuuuuthss', expectedMachineName: 'dnoooooxouuuuuthss',
    }, },
    { {
    machineName: 'àáâãäåæçèéêëìíîï', machineName: 'àáâãäåæçèéêëìíîï',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'aaaaaaaeceeeeiiii', expectedMachineName: 'aaaaaaaeceeeeiiii',
    }, },
    { {
    machineName: 'ðñòóôõö÷øùúûüýþÿ', machineName: 'ðñòóôõö÷øùúûüýþÿ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'dnooooo_ouuuuythy', expectedMachineName: 'dnooooo_ouuuuythy',
    }, },
    { {
    machineName: 'ĀāĂ㥹ĆćĈĉĊċČčĎď', machineName: 'ĀāĂ㥹ĆćĈĉĊċČčĎď',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'aaaaaaccccccccdd', expectedMachineName: 'aaaaaaccccccccdd',
    }, },
    { {
    machineName: 'ĐđĒēĔĕĖėĘęĚěĜĝĞğ', machineName: 'ĐđĒēĔĕĖėĘęĚěĜĝĞğ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'ddeeeeeeeeeegggg', expectedMachineName: 'ddeeeeeeeeeegggg',
    }, },
    { {
    machineName: 'ĠġĢģĤĥĦħĨĩĪīĬĭĮį', machineName: 'ĠġĢģĤĥĦħĨĩĪīĬĭĮį',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'gggghhhhiiiiiiii', expectedMachineName: 'gggghhhhiiiiiiii',
    }, },
    { {
    machineName: 'İıIJijĴĵĶķĸĹĺĻļĽľĿ', machineName: 'İıIJijĴĵĶķĸĹĺĻļĽľĿ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'iiijijjjkkklllllll', expectedMachineName: 'iiijijjjkkklllllll',
    }, },
    { {
    machineName: 'ŀŁłŃńŅņŇňʼnŊŋŌōŎŏ', machineName: 'ŀŁłŃńŅņŇňʼnŊŋŌōŎŏ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'lllnnnnnn_nngngoooo', expectedMachineName: 'lllnnnnnn_nngngoooo',
    }, },
    { {
    machineName: 'ŐőŒœŔŕŖŗŘřŚśŜŝŞş', machineName: 'ŐőŒœŔŕŖŗŘřŚśŜŝŞş',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'oooeoerrrrrrssssss', expectedMachineName: 'oooeoerrrrrrssssss',
    }, },
    { {
    machineName: 'ŠšŢţŤťŦŧŨũŪūŬŭŮů', machineName: 'ŠšŢţŤťŦŧŨũŪūŬŭŮů',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'ssttttttuuuuuuuu', expectedMachineName: 'ssttttttuuuuuuuu',
    }, },
    { {
    machineName: 'ŰűŲųŴŵŶŷŸŹźŻżŽž', machineName: 'ŰűŲųŴŵŶŷŸŹźŻżŽž',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'uuuuwwyyyzzzzzz', expectedMachineName: 'uuuuwwyyyzzzzzz',
    }, },
    { {
    machineName: 'ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ', machineName: 'ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'ioouuuuuuuuuu_aa', expectedMachineName: 'ioouuuuuuuuuu_aa',
    }, },
    { {
    machineName: 'ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ', machineName: 'ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'aaaeaeggggkkoooozhzh', expectedMachineName: 'aaaeaeggggkkoooozhzh',
    }, },
    { {
    machineName: 'ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ', machineName: 'ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'jdzddzgghvwnnaaaeaeoo', expectedMachineName: 'jdzddzgghvwnnaaaeaeoo',
    }, },
    { {
    machineName: 'ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ', machineName: 'ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'aaaaeeeeiiiioooo', expectedMachineName: 'aaaaeeeeiiiioooo',
    }, },
    { {
    machineName: 'ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ', machineName: 'ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'rrrruuuussttyyhh', expectedMachineName: 'rrrruuuussttyyhh',
    }, },
    { {
    machineName: 'ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ', machineName: 'ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'ndououzzaaeeoooooo', expectedMachineName: 'ndououzzaaeeoooooo',
    }, },
    { {
    machineName: 'ȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ', machineName: 'ȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'ooyylntjdbqpacclts', expectedMachineName: 'ooyylntjdbqpacclts',
    }, },
    { {
    machineName: 'ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ', machineName: 'ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'z_buveejjqqrryy', expectedMachineName: 'z_buveejjqqrryy',
    ...@@ -187,25 +187,39 @@ const MachineNameTestArray = [ ...@@ -187,25 +187,39 @@ const MachineNameTestArray = [
    // Test for maximum length of machine-name // Test for maximum length of machine-name
    { {
    machineName: 'This is the test for max length', machineName: 'This is the test for max length',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 20, maxlength: 20,
    expectedMachineName: 'this_is_the_test_for', expectedMachineName: 'this_is_the_test_for',
    }, },
    { {
    machineName: 'Ma@Chi!~', machineName: 'Ma@Chi!~',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '_', replaceChar: '_',
    maxlength: 5, maxlength: 5,
    expectedMachineName: 'ma_ch', expectedMachineName: 'ma_ch',
    }, },
    { {
    machineName: 'Test for custom replace character', machineName: 'Test for custom replace character',
    replacePattern: 'a-zA-Z0-9-_.~', replacePattern: '[^a-zA-Z0-9-_.~]+',
    replaceChar: '-', replaceChar: '-',
    maxlength: 64, maxlength: 64,
    expectedMachineName: 'test-for-custom-replace-character', expectedMachineName: 'test-for-custom-replace-character',
    }, },
    {
    machineName: 'Test for unusual replace pattern',
    replacePattern: '([^a-z0-9_]+)|(^custom$)',
    replaceChar: '_',
    maxlength: 64,
    expectedMachineName: 'test_for_unusual_replace_pattern',
    },
    {
    machineName: 'custom',
    replacePattern: '([^a-z0-9_]+)|(^custom$)',
    replaceChar: '_',
    maxlength: 64,
    expectedMachineName: '_',
    },
    // cSpell:enable // cSpell:enable
    ]; ];
    module.exports = { module.exports = {
    ......
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Please register or to comment