Skip to content

Commit ffb2541

Browse files
committed
Issue #3428652 by nod_, jmaxant, alexpott, prashant.c, godotislate, UserOne.se, smustgrave: Broken auto creation of machine name field
1 parent 5d80761 commit ffb2541

File tree

4 files changed

+56
-47
lines changed

4 files changed

+56
-47
lines changed

.eslintrc.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"once": true,
2828
"CKEditor5": true,
2929
"tabbable": true,
30-
"slugify": true,
30+
"transliterate": true,
3131
"bodyScrollLock" : true,
3232
"FloatingUIDOM": true
3333
},

misc/machine-name.js

+7-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* @internal
66
*/
77

8-
(function ($, Drupal, drupalSettings, slugify) {
8+
(function ($, Drupal, drupalSettings, transliterateLibrary) {
99
/**
1010
* Trims string by a character.
1111
*
@@ -294,21 +294,17 @@
294294
drupalSettings.transliteration_language_overrides[
295295
drupalSettings.langcode
296296
];
297-
const normalizedLanguageOverrides = {};
297+
const replace = {};
298298
if (languageOverrides) {
299299
Object.keys(languageOverrides).forEach((key) => {
300300
// Updates the keys from hexadecimal to strings.
301-
normalizedLanguageOverrides[String.fromCharCode(key)] =
302-
languageOverrides[key];
301+
replace[String.fromCharCode(key)] = languageOverrides[key];
303302
});
304303
}
305-
slugify.config({
306-
separator: settings.replace,
307-
allowedChars: settings.replace_pattern,
308-
replace: normalizedLanguageOverrides,
309-
});
310304

311-
return prepareMachineName(slugify(source), settings);
305+
const transliteratedSource = transliterateLibrary(source, { replace });
306+
307+
return prepareMachineName(transliteratedSource, settings);
312308
},
313309
};
314-
})(jQuery, Drupal, drupalSettings, slugify);
310+
})(jQuery, Drupal, drupalSettings, transliterate);

tests/Drupal/FunctionalJavascriptTests/MachineName/MachineNameTransliterationTest.php

+5-6
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,7 @@ public function testMachineNameTransliterations($langcode, $input, $output): voi
6161

6262
$this->drupalGet("/admin/people/roles/add");
6363
$page->find('css', '[data-drupal-selector="edit-label"]')->setValue($input);
64-
$this->assertSession()->pageTextContains($output);
65-
64+
$this->assertSession()->elementTextEquals('css', 'span.machine-name-value', $output);
6665
}
6766

6867
/**
@@ -78,13 +77,13 @@ public static function machineNameInputOutput(): array {
7877
['de', 'Äwesome', 'aewesome'],
7978
['da', 'äöüåøhello', 'aouaaoehello'],
8079
['fr', 'ц', 'c'],
81-
// These tests are not working with chromedriver as
82-
// 'ᐑ','𐌰𐌸' chars are not accepted.
83-
// ['fr', 'ᐑ', 'wii'],
80+
['fr', '', 'wii'],
81+
// This test is not working with chromedriver as '𐌰𐌸' chars are not
82+
// accepted.
8483
// ['en', '𐌰𐌸', '__'],
8584
['en', 'Ä Ö Ü Å Ø äöüåøhello', 'a_o_u_a_o_aouaohello'],
8685
['de', 'Ä Ö Ü Å Ø äöüåøhello', 'ae_oe_ue_a_o_aeoeueaohello'],
87-
['de', ']URY&m_G^;', ' ury_m_g'],
86+
['de', ']URY&m_G^;', 'ury_m_g'],
8887
['da', 'Ä Ö Ü Å Ø äöüåøhello', 'a_o_u_aa_oe_aouaaoehello'],
8988
['kg', 'ц', 'ts'],
9089
['en', ' Hello Abventor! ', 'hello_abventor'],

tests/Drupal/Nightwatch/Tests/machineNameTransliterationTest.js

+43-29
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,42 @@
22
const MachineNameTestArray = [
33
{
44
machineName: 'Bob',
5-
replacePattern: 'a-zA-Z0-9-_.~',
5+
replacePattern: '[^a-zA-Z0-9-_.~]+',
66
replaceChar: '_',
77
maxlength: 64,
88
expectedMachineName: 'bob',
99
},
1010
{
1111
machineName: 'Äwesome',
12-
replacePattern: 'a-zA-Z0-9-_.~',
12+
replacePattern: '[^a-zA-Z0-9-_.~]+',
1313
replaceChar: '_',
1414
maxlength: 64,
1515
expectedMachineName: 'awesome',
1616
},
1717
{
1818
machineName: 'B?!"@\\/-ob@e',
19-
replacePattern: 'a-zA-Z0-9_.~',
19+
replacePattern: '[^a-zA-Z0-9_.~]+',
2020
replaceChar: '_',
2121
maxlength: 64,
2222
expectedMachineName: 'b_ob_e',
2323
},
2424
{
2525
machineName: 'Bob@e\\0',
26-
replacePattern: 'a-zA-Z0-9_.~@',
26+
replacePattern: '[^a-zA-Z0-9_.~@]+',
2727
replaceChar: '_',
2828
maxlength: 64,
2929
expectedMachineName: 'bob@e_0',
3030
},
3131
{
3232
machineName: 'Bobby',
33-
replacePattern: 'a-zA-Z0-9-_.~',
33+
replacePattern: '[^a-zA-Z0-9-_.~]+',
3434
replaceChar: '_',
3535
maxlength: 64,
3636
expectedMachineName: 'bobby',
3737
},
3838
{
3939
machineName: 'ǍǎǏ',
40-
replacePattern: 'a-zA-Z0-9-_.~',
40+
replacePattern: '[^a-zA-Z0-9-_.~]+',
4141
replaceChar: '_',
4242
maxlength: 64,
4343
expectedMachineName: 'aai',
@@ -46,166 +46,180 @@ const MachineNameTestArray = [
4646
// the removeDiacritics() function present in PhpTranliteration.php.
4747
{
4848
machineName: 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ',
49-
replacePattern: 'a-zA-Z0-9-_.~',
49+
replacePattern: '[^a-zA-Z0-9-_.~]+',
5050
replaceChar: '_',
5151
maxlength: 64,
5252
expectedMachineName: 'aaaaaaaeceeeeiiii',
5353
},
5454
{
5555
machineName: 'ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß',
56-
replacePattern: 'a-zA-Z0-9-_.~',
56+
replacePattern: '[^a-zA-Z0-9-_.~]+',
5757
replaceChar: '_',
5858
maxlength: 64,
5959
expectedMachineName: 'dnoooooxouuuuuthss',
6060
},
6161
{
6262
machineName: 'àáâãäåæçèéêëìíîï',
63-
replacePattern: 'a-zA-Z0-9-_.~',
63+
replacePattern: '[^a-zA-Z0-9-_.~]+',
6464
replaceChar: '_',
6565
maxlength: 64,
6666
expectedMachineName: 'aaaaaaaeceeeeiiii',
6767
},
6868
{
6969
machineName: 'ðñòóôõö÷øùúûüýþÿ',
70-
replacePattern: 'a-zA-Z0-9-_.~',
70+
replacePattern: '[^a-zA-Z0-9-_.~]+',
7171
replaceChar: '_',
7272
maxlength: 64,
7373
expectedMachineName: 'dnooooo_ouuuuythy',
7474
},
7575
{
7676
machineName: 'ĀāĂ㥹ĆćĈĉĊċČčĎď',
77-
replacePattern: 'a-zA-Z0-9-_.~',
77+
replacePattern: '[^a-zA-Z0-9-_.~]+',
7878
replaceChar: '_',
7979
maxlength: 64,
8080
expectedMachineName: 'aaaaaaccccccccdd',
8181
},
8282
{
8383
machineName: 'ĐđĒēĔĕĖėĘęĚěĜĝĞğ',
84-
replacePattern: 'a-zA-Z0-9-_.~',
84+
replacePattern: '[^a-zA-Z0-9-_.~]+',
8585
replaceChar: '_',
8686
maxlength: 64,
8787
expectedMachineName: 'ddeeeeeeeeeegggg',
8888
},
8989
{
9090
machineName: 'ĠġĢģĤĥĦħĨĩĪīĬĭĮį',
91-
replacePattern: 'a-zA-Z0-9-_.~',
91+
replacePattern: '[^a-zA-Z0-9-_.~]+',
9292
replaceChar: '_',
9393
maxlength: 64,
9494
expectedMachineName: 'gggghhhhiiiiiiii',
9595
},
9696
{
9797
machineName: 'İıIJijĴĵĶķĸĹĺĻļĽľĿ',
98-
replacePattern: 'a-zA-Z0-9-_.~',
98+
replacePattern: '[^a-zA-Z0-9-_.~]+',
9999
replaceChar: '_',
100100
maxlength: 64,
101101
expectedMachineName: 'iiijijjjkkklllllll',
102102
},
103103
{
104104
machineName: 'ŀŁłŃńŅņŇňʼnŊŋŌōŎŏ',
105-
replacePattern: 'a-zA-Z0-9-_.~',
105+
replacePattern: '[^a-zA-Z0-9-_.~]+',
106106
replaceChar: '_',
107107
maxlength: 64,
108108
expectedMachineName: 'lllnnnnnn_nngngoooo',
109109
},
110110
{
111111
machineName: 'ŐőŒœŔŕŖŗŘřŚśŜŝŞş',
112-
replacePattern: 'a-zA-Z0-9-_.~',
112+
replacePattern: '[^a-zA-Z0-9-_.~]+',
113113
replaceChar: '_',
114114
maxlength: 64,
115115
expectedMachineName: 'oooeoerrrrrrssssss',
116116
},
117117
{
118118
machineName: 'ŠšŢţŤťŦŧŨũŪūŬŭŮů',
119-
replacePattern: 'a-zA-Z0-9-_.~',
119+
replacePattern: '[^a-zA-Z0-9-_.~]+',
120120
replaceChar: '_',
121121
maxlength: 64,
122122
expectedMachineName: 'ssttttttuuuuuuuu',
123123
},
124124
{
125125
machineName: 'ŰűŲųŴŵŶŷŸŹźŻżŽž',
126-
replacePattern: 'a-zA-Z0-9-_.~',
126+
replacePattern: '[^a-zA-Z0-9-_.~]+',
127127
replaceChar: '_',
128128
maxlength: 64,
129129
expectedMachineName: 'uuuuwwyyyzzzzzz',
130130
},
131131
{
132132
machineName: 'ǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟ',
133-
replacePattern: 'a-zA-Z0-9-_.~',
133+
replacePattern: '[^a-zA-Z0-9-_.~]+',
134134
replaceChar: '_',
135135
maxlength: 64,
136136
expectedMachineName: 'ioouuuuuuuuuu_aa',
137137
},
138138
{
139139
machineName: 'ǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯ',
140-
replacePattern: 'a-zA-Z0-9-_.~',
140+
replacePattern: '[^a-zA-Z0-9-_.~]+',
141141
replaceChar: '_',
142142
maxlength: 64,
143143
expectedMachineName: 'aaaeaeggggkkoooozhzh',
144144
},
145145
{
146146
machineName: 'ǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿ',
147-
replacePattern: 'a-zA-Z0-9-_.~',
147+
replacePattern: '[^a-zA-Z0-9-_.~]+',
148148
replaceChar: '_',
149149
maxlength: 64,
150150
expectedMachineName: 'jdzddzgghvwnnaaaeaeoo',
151151
},
152152
{
153153
machineName: 'ȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏ',
154-
replacePattern: 'a-zA-Z0-9-_.~',
154+
replacePattern: '[^a-zA-Z0-9-_.~]+',
155155
replaceChar: '_',
156156
maxlength: 64,
157157
expectedMachineName: 'aaaaeeeeiiiioooo',
158158
},
159159
{
160160
machineName: 'ȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟ',
161-
replacePattern: 'a-zA-Z0-9-_.~',
161+
replacePattern: '[^a-zA-Z0-9-_.~]+',
162162
replaceChar: '_',
163163
maxlength: 64,
164164
expectedMachineName: 'rrrruuuussttyyhh',
165165
},
166166
{
167167
machineName: 'ȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯ',
168-
replacePattern: 'a-zA-Z0-9-_.~',
168+
replacePattern: '[^a-zA-Z0-9-_.~]+',
169169
replaceChar: '_',
170170
maxlength: 64,
171171
expectedMachineName: 'ndououzzaaeeoooooo',
172172
},
173173
{
174174
machineName: 'ȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿ',
175-
replacePattern: 'a-zA-Z0-9-_.~',
175+
replacePattern: '[^a-zA-Z0-9-_.~]+',
176176
replaceChar: '_',
177177
maxlength: 64,
178178
expectedMachineName: 'ooyylntjdbqpacclts',
179179
},
180180
{
181181
machineName: 'ɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ',
182-
replacePattern: 'a-zA-Z0-9-_.~',
182+
replacePattern: '[^a-zA-Z0-9-_.~]+',
183183
replaceChar: '_',
184184
maxlength: 64,
185185
expectedMachineName: 'z_buveejjqqrryy',
186186
},
187187
// Test for maximum length of machine-name
188188
{
189189
machineName: 'This is the test for max length',
190-
replacePattern: 'a-zA-Z0-9-_.~',
190+
replacePattern: '[^a-zA-Z0-9-_.~]+',
191191
replaceChar: '_',
192192
maxlength: 20,
193193
expectedMachineName: 'this_is_the_test_for',
194194
},
195195
{
196196
machineName: 'Ma@Chi!~',
197-
replacePattern: 'a-zA-Z0-9-_.~',
197+
replacePattern: '[^a-zA-Z0-9-_.~]+',
198198
replaceChar: '_',
199199
maxlength: 5,
200200
expectedMachineName: 'ma_ch',
201201
},
202202
{
203203
machineName: 'Test for custom replace character',
204-
replacePattern: 'a-zA-Z0-9-_.~',
204+
replacePattern: '[^a-zA-Z0-9-_.~]+',
205205
replaceChar: '-',
206206
maxlength: 64,
207207
expectedMachineName: 'test-for-custom-replace-character',
208208
},
209+
{
210+
machineName: 'Test for unusual replace pattern',
211+
replacePattern: '([^a-z0-9_]+)|(^custom$)',
212+
replaceChar: '_',
213+
maxlength: 64,
214+
expectedMachineName: 'test_for_unusual_replace_pattern',
215+
},
216+
{
217+
machineName: 'custom',
218+
replacePattern: '([^a-z0-9_]+)|(^custom$)',
219+
replaceChar: '_',
220+
maxlength: 64,
221+
expectedMachineName: '_',
222+
},
209223
// cSpell:enable
210224
];
211225
module.exports = {

0 commit comments

Comments
 (0)