diff --git a/__tests__/feature/editing/editingLiteral.test.js b/__tests__/feature/editing/editingLiteral.test.js index 4e84b5490..f71389391 100644 --- a/__tests__/feature/editing/editingLiteral.test.js +++ b/__tests__/feature/editing/editingLiteral.test.js @@ -101,23 +101,23 @@ describe('editing a literal property', () => { expect(input).toHaveValue('Fo') // Click diacritic button - expect(screen.queryAllByText('Latin Extended')).toHaveLength(0) + expect(screen.queryAllByText('Latin')).toHaveLength(0) const diacriticBtn = screen.getByTestId('Select diacritics for Uber template1, property4') fireEvent.click(diacriticBtn) // Click a diacritic - await screen.findByText('Latin Extended') - fireEvent.change(screen.getByTestId('Select vocabulary'), { target: { value: 'latinextended' } }) + await screen.findByText('Latin') + fireEvent.change(screen.getByTestId('Select vocabulary'), { target: { value: 'latin' } }) fireEvent.click(await screen.findByText('ọ')) expect(input).toHaveValue('Foọ') // press backspace while the focus is on the diacritic panel and make sure we are still on the edit page fireEvent.keyDown(await screen.findByText('ọ'), { key: 'Backspace', code: 8, charCode: 8 }) - expect(screen.queryAllByText('Latin Extended')).toHaveLength(1) + expect(screen.queryAllByText('Latin')).toHaveLength(1) // Close it fireEvent.click(diacriticBtn) - expect(screen.queryAllByText('Latin Extended')).toHaveLength(0) + expect(screen.queryAllByText('Latin')).toHaveLength(0) }, 15000) it('allows selecting a language', async () => { diff --git a/__tests__/feature/editing/editingLookup.test.js b/__tests__/feature/editing/editingLookup.test.js index 1342cab16..e08078e07 100644 --- a/__tests__/feature/editing/editingLookup.test.js +++ b/__tests__/feature/editing/editingLookup.test.js @@ -263,23 +263,23 @@ describe('selecting a value from lookup', () => { expect(input).toHaveValue('Fo') // Click diacritic button - expect(screen.queryAllByText('Latin Extended')).toHaveLength(0) + expect(screen.queryAllByText('Latin')).toHaveLength(0) const diacriticBtn = screen.getByTestId('Select diacritics for Instance of (lookup)') fireEvent.click(diacriticBtn) // Click a diacritic - await screen.findByText('Latin Extended') - fireEvent.change(screen.getByTestId('Select vocabulary'), { target: { value: 'latinextended' } }) + await screen.findByText('Latin') + fireEvent.change(screen.getByTestId('Select vocabulary'), { target: { value: 'latin' } }) fireEvent.click(await screen.findByText('ọ')) expect(input).toHaveValue('Foọ') // press backspace while the focus is on the diacritic panel and make sure we are still on the edit page fireEvent.keyDown(await screen.findByText('ọ'), { key: 'Backspace', code: 8, charCode: 8 }) - expect(screen.queryAllByText('Latin Extended')).toHaveLength(1) + expect(screen.queryAllByText('Latin')).toHaveLength(1) // Close it fireEvent.click(diacriticBtn) - expect(screen.queryAllByText('Latin Extended')).toHaveLength(0) + expect(screen.queryAllByText('Latin')).toHaveLength(0) }) it('allows paging', async () => { diff --git a/src/components/editor/diacritics/CharacterButton.jsx b/src/components/editor/diacritics/CharacterButton.jsx index 578bed42f..1f3fd7422 100644 --- a/src/components/editor/diacritics/CharacterButton.jsx +++ b/src/components/editor/diacritics/CharacterButton.jsx @@ -6,12 +6,17 @@ import PropTypes from 'prop-types' const CharacterButton = (props) => { const cleanCharacter = () => { // For some reason, some combining characters are precombined with ◌ (U+25CC) + let cleanChars = '' if (props.character.length > 1) { for (let i = 0; i < props.character.length; i++) { - if (props.character.codePointAt(i) !== 9676) return props.character[i] + if (props.character.codePointAt(i) !== 9676) { + cleanChars += props.character[i] + } } + } else { + cleanChars = props.character } - return props.character + return cleanChars } const handleClick = (event) => { diff --git a/static/specialcharacters.json b/static/specialcharacters.json index 0c6d17495..40efedc1c 100644 --- a/static/specialcharacters.json +++ b/static/specialcharacters.json @@ -1,13 +1,17 @@ { "latin": { - "characters": ["Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ã", "ã", "Ǎ", "ǎ", "Ā", "ā", "Ă", "ă", "Ą", "ą", "Å", "å", "Ć", "ć", "Ĉ", "ĉ", "Ç", "ç", "Č", "č", "Ċ", "ċ", "Đ", "đ", "Ď", "ď", "É", "é", "È", "è", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ē", "ē", "Ĕ", "ĕ", "Ė", "ė", "Ę", "ę", "Ĝ", "ĝ", "Ģ", "ģ", "Ğ", "ğ", "Ġ", "ġ", "Ĥ", "ĥ", "Ħ", "ħ", "Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ĩ", "ĩ", "Ǐ", "ǐ", "Ī", "ī", "Ĭ", "ĭ", "İ", "ı", "Į", "į", "Ĵ", "ĵ", "Ķ", "ķ", "Ĺ", "ĺ", "Ļ", "ļ", "Ľ", "ľ", "Ł", "ł", "Ń", "ń", "Ñ", "ñ", "Ņ", "ņ", "Ň", "ň", "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Õ", "õ", "Ǒ", "ǒ", "Ō", "ō", "Ŏ", "ŏ", "Ǫ", "ǫ", "Ő", "ő", "Ŕ", "ŕ", "Ŗ", "ŗ", "Ř", "ř", "Ś", "ś", "Ŝ", "ŝ", "Ş", "ş", "Š", "š", "Ș", "ș", "Ț", "ț", "Ť", "ť", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ũ", "ũ", "Ů", "ů", "Ǔ", "ǔ", "Ū", "ū", "ǖ", "ǘ", "ǚ", "ǜ", "Ŭ", "ŭ", "Ų", "ų", "Ű", "ű", "Ŵ", "ŵ", "Ý", "ý", "Ŷ", "ŷ", "Ÿ", "ÿ", "Ȳ", "ȳ", "Ź", "ź", "Ž", "ž", "Ż", "ż", "Æ", "æ", "Ǣ", "ǣ", "Ø", "ø", "Œ", "œ", "ß", "Ð", "ð", "Þ", "þ", "Ə", "ə"], + "characters": ["Á", "á", "À", "à", "Â", "â", "Ä", "ä", "Ã", "ã", "Ǎ", "ǎ", "Ā", "ā", "Ă", "ă", "Ą", "ą", "Å", "å", "Ḁ", "ḁ", "ẚ", "Ạ", "ạ", "Ả", "ả", "Ấ", "ấ", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ậ", "ậ", "Ắ", "ắ", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ặ", "ặ", + "Ḃ", "ḃ", "Ḅ", "ḅ", "Ḇ", "ḇ","Ć", "ć", "Ĉ", "ĉ", "Ç", "ç", "Č", "č", "Ċ", "ċ", "Ḉ", "ḉ", "Đ", "đ", "Ď", "ď", "Ḋ", "ḋ", "Ḍ", "ḍ", "Ḏ", "ḏ", "Ḑ", "ḑ", "Ḓ", "ḓ", "É", "é", "È", "è", "Ê", "ê", "Ë", "ë", "Ě", "ě", "Ē", "ē", "Ĕ", "ĕ", "Ė", "ė", "Ę", "ę", + "Ḕ", "ḕ", "Ḗ", "ḗ", "Ḙ", "ḙ", "Ḛ", "ḛ", "Ḝ", "ḝ", "Ẹ", "ẹ", "Ẻ", "ẻ", "Ẽ", "ẽ", "Ế", "ế", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ệ", "ệ","Ḟ", "ḟ","Ĝ", "ĝ", "Ģ", "ģ", "Ğ", "ğ", "Ġ", "ġ", "Ḡ", "ḡ", + "Ĥ", "ĥ", "Ħ", "ħ", "Ḣ", "ḣ", "Ḥ", "ḥ", "Ḧ", "ḧ", "Ḩ", "ḩ", "Ḫ", "ḫ", "ẖ","Í", "í", "Ì", "ì", "Î", "î", "Ï", "ï", "Ĩ", "ĩ", "Ǐ", "ǐ", "Ī", "ī", "Ĭ", "ĭ", "İ", "ı", "Ḭ", "ḭ", "Ḯ", "ḯ", "Ỉ", "ỉ", "Ị", "ị", "Į", "į", "Ĵ", "ĵ", "Ķ", "ķ", "Ḱ", "ḱ", "Ḳ", "ḳ", "Ḵ", "ḵ", "ĸ", + "Ĺ", "ĺ", "Ļ", "ļ", "Ľ", "ľ", "Ł", "ł", "Ḷ", "ḷ", "Ḹ", "ḹ", "Ḻ", "ḻ", "Ḽ", "ḽ", "Ỻ", "ỻ","Ḿ", "ḿ", "Ṁ", "ṁ", "Ṃ", "ṃ","Ń", "ń", "Ñ", "ñ", "Ņ", "ņ", "Ň", "ň", "Ṅ", "ṅ", "Ṇ", "ṇ", "Ṉ", "ṉ", "Ṋ", "ṋ", + "Ó", "ó", "Ò", "ò", "Ô", "ô", "Ö", "ö", "Õ", "õ", "Ǒ", "ǒ", "Ō", "ō", "Ŏ", "ŏ", "Ṍ", "ṍ", "Ṏ", "ṏ", "Ṑ", "ṑ", "Ṓ", "ṓ", "Ọ", "ọ", "Ỏ", "ỏ", "Ố", "ố", "Ồ", "ồ", "Ổ", "ổ", "Ỗ", "ỗ", "Ộ", "ộ", "Ớ", "ớ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ợ", "ợ", "Ǿ", "ǿ", "Ơ", "ơ", + "Ṕ", "ṕ", "Ṗ", "ṗ", "Ǫ", "ǫ", "Ő", "ő", "Ŕ", "ŕ", "Ŗ", "ŗ", "Ř", "ř", "Ṙ", "ṙ", "Ṛ", "ṛ", "Ṝ", "ṝ", "Ṟ", "ṟ", "Ś", "ś", "Ŝ", "ŝ", "Ş", "ş", "Š", "š", "Ș", "ș", "Ṡ", "ṡ", "ẛ", "Ṣ", "ṣ", "Ṥ", "ṥ", "Ṧ", "ṧ", "Ṩ", "ṩ", "ẜ", "ẝ", + "Ț", "ț", "Ť", "ť", "Ṫ", "ṫ", "Ṭ", "ṭ", "Ṯ", "ṯ", "Ṱ", "ṱ", "ẗ", "Ú", "ú", "Ù", "ù", "Û", "û", "Ü", "ü", "Ũ", "ũ", "Ů", "ů", "Ǔ", "ǔ", "Ū", "ū", "ǖ", "ǘ", "ǚ", "ǜ", "Ŭ", "ŭ", "Ų", "ų", "Ű", "ű", "Ṳ", "ṳ", "Ṵ", "ṵ", "Ṷ", "ṷ", "Ṹ", "ṹ", "Ṻ", "ṻ", "Ụ", "ụ", "Ủ", "ủ", "Ứ", "ứ", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ự", "ự", "Ư", "ư", "Ǖ", "Ǘ", "Ǚ", "Ǜ", + "Ṽ", "ṽ", "Ṿ", "ṿ", "Ỽ", "ỽ","Ŵ", "ŵ", "Ẁ", "ẁ", "Ẃ", "ẃ", "Ẅ", "ẅ", "Ẇ", "ẇ", "Ẉ", "ẉ", "ẘ","Ẋ", "ẋ", "Ẍ", "ẍ","Ý", "ý", "Ŷ", "ŷ", "Ÿ", "ÿ", "Ȳ", "ȳ", "Ẏ", "ẏ", "ẙ", "Ỳ", "ỳ", "Ỵ", "ỵ", "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỿ", "ỿ", + "Ź", "ź", "Ž", "ž", "Ż", "ż", "Ẑ", "ẑ", "Ẓ", "ẓ", "Ẕ", "ẕ", "Æ", "æ", "Ǣ", "Ǽ", "ǽ", "ǣ", "Ø", "ø", "Œ", "œ", "ß", "ẞ", "ẟ", "Ð", "ð", "Þ", "þ", "Ə", "ə","D͡Z", "G͡H", "I͡A", "I͡E", "I͡G", "I͡N", "I͡O", "I͡Q", "I͡U", "K͡H", "K͡S", "N͡G", "O͡T", "P͡S", "T͡H", "T͡S", "Z͡H", + "d͡z", "g͡h", "i͡a", "i͡e", "i͡g", "i͡n", "i͡o", "i͡q", "i͡u", "j͡n", "k͡h", "k͡s", "n͡g", "o͡t", "p͡s", "t͡h", "t͡s", "z͡h"], "label": "Latin" - }, - "latinextended": { - "characters": [ - "Ḁ", "ḁ", "ẚ", "Ạ", "ạ", "Ả", "ả", "Ấ", "ấ", "Ầ", "ầ", "Ẩ", "ẩ", "Ẫ", "ẫ", "Ậ", "ậ", "Ắ", "ắ", "Ằ", "ằ", "Ẳ", "ẳ", "Ẵ", "ẵ", "Ặ", "ặ", "Ḃ", "ḃ", "Ḅ", "ḅ", "Ḇ", "ḇ", "Ḉ", "ḉ", "Ḋ", "ḋ", "Ḍ", "ḍ", "Ḏ", "ḏ", "Ḑ", "ḑ", "Ḓ", "ḓ", "Ḕ", "ḕ", "Ḗ", "ḗ", "Ḙ", "ḙ", "Ḛ", "ḛ", "Ḝ", "ḝ", "Ẹ", "ẹ", "Ẻ", "ẻ", "Ẽ", "ẽ", "Ế", "ế", "Ề", "ề", "Ể", "ể", "Ễ", "ễ", "Ệ", "ệ", "Ḟ", "ḟ", "Ḡ", "ḡ", "Ḣ", "ḣ", "Ḥ", "ḥ", "Ḧ", "ḧ", "Ḩ", "ḩ", "Ḫ", "ḫ", "ẖ", "Ḭ", "ḭ", "Ḯ", "ḯ", "Ỉ", "ỉ", "Ị", "ị", "Ḱ", "ḱ", "Ḳ", "ḳ", "Ḵ", "ḵ", "ĸ", "Ḷ", "ḷ", "Ḹ", "ḹ", "Ḻ", "ḻ", "Ḽ", "ḽ", "Ỻ", "ỻ", "Ḿ", "ḿ", "Ṁ", "ṁ", "Ṃ", "ṃ", "Ṅ", "ṅ", "Ṇ", "ṇ", "Ṉ", "ṉ", "Ṋ", "ṋ", "Ṍ", "ṍ", "Ṏ", "ṏ", "Ṑ", "ṑ", "Ṓ", "ṓ", "Ọ", "ọ", "Ỏ", "ỏ", "Ố", "ố", "Ồ", "ồ", "Ổ", "ổ", "Ỗ", "ỗ", "Ộ", "ộ", "Ớ", "ớ", "Ờ", "ờ", "Ở", "ở", "Ỡ", "ỡ", "Ợ", "ợ", "Ǿ", "ǿ", "Ơ", "ơ", "Ṕ", "ṕ", "Ṗ", "ṗ", "Ṙ", "ṙ", "Ṛ", "ṛ", "Ṝ", "ṝ", "Ṟ", "ṟ", "Ṡ", "ṡ", "ẛ", "Ṣ", "ṣ", "Ṥ", "ṥ", "Ṧ", "ṧ", "Ṩ", "ṩ", "ẜ", "ẝ", "Ṫ", "ṫ", "Ṭ", "ṭ", "Ṯ", "ṯ", "Ṱ", "ṱ", "ẗ", "Ṳ", "ṳ", "Ṵ", "ṵ", "Ṷ", "ṷ", "Ṹ", "ṹ", "Ṻ", "ṻ", "Ụ", "ụ", "Ủ", "ủ", "Ứ", "ứ", "Ừ", "ừ", "Ử", "ử", "Ữ", "ữ", "Ự", "ự", "Ư", "ư", "Ǖ", "Ǘ", "Ǚ", "Ǜ", "Ṽ", "ṽ", "Ṿ", "ṿ", "Ỽ", "ỽ", "Ẁ", "ẁ", "Ẃ", "ẃ", "Ẅ", "ẅ", "Ẇ", "ẇ", "Ẉ", "ẉ", "ẘ", "Ẋ", "ẋ", "Ẍ", "ẍ", "Ẏ", "ẏ", "ẙ", "Ỳ", "ỳ", "Ỵ", "ỵ", "Ỷ", "ỷ", "Ỹ", "ỹ", "Ỿ", "ỿ", "Ẑ", "ẑ", "Ẓ", "ẓ", "Ẕ", "ẕ", "Ǽ", "ǽ", "ẞ", "ẟ" - ], - "label": "Latin Extended" }, "ipa": { "characters": [