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