Replace library of programming language icons #1706
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #1685
Заменён иконочный шрифт Mfizz на предложенную в ишью Реакт-обёртку над иконкамии проекта Devicon.
API простой и удобный. Насколько удалось проверить в десктопных Chrome/Firefox и мобильном Safari, отображение иконок идентичное
Было/стало
БылоСтало
![Screenshot from 2023-12-29 22-59-25](https://private-user-images.githubusercontent.com/37400913/293419236-5047707b-369f-4440-8ccc-76d7b4195133.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTgzMjcxOTMsIm5iZiI6MTcxODMyNjg5MywicGF0aCI6Ii8zNzQwMDkxMy8yOTM0MTkyMzYtNTA0NzcwN2ItMzY5Zi00NDQwLThjY2MtNzZkN2I0MTk1MTMzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE0VDAxMDEzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc3YjdmYzhiOTMzZTllMTEwNjZkNTZkNGY5YTY3NGFkYmRjMTk0ZGVmNTRmNmZmMWIwNGQ1MDRiZTNjOGNkZDAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qCMeXoaeycL_OtChdl7AxJRKAqO5c2PCHXW3EyCqoNs)
Для 5 языков (Elixir, Kotlin, Php, Python, Ruby) пришлось создать собственные компоненты-иконки. Их использование напрямую из библиотеки
react-devicons
оказалось проблематичным. В них заливка элементов вSVG
разметке сделана не однородным цветом, а градиентом.Примерно так
Если на странице использовано несколько одинаковых иконок и при этом первая иконка оказывается в блоке, который скрыт применением к нему CSS правила
display: none
, то остальные иконки оказываются обесцвечены. На примененииdisplay: none
реализована работа, например, табов в Bootstrap. Если бы каждая из одинаковых иконок обладала уникальнымиid
для градиентов, то проблемы бы не было, но такой механизм не предусмотрен вreact-devicons
. Хорошо, что эта задача решается Babel-плагиномbabel-plugin-react-inline-svg-unique-id
Размеры иконок подобраны чтобы выглядели сбалансированно относительно друг-друга. За исходный размер приняты Ruby и Kotlin
Доработки:
улучшен компонент
UserName
, убрана избыточная "семантическая" разметкаулучшен компонент
ResultIcon
, его использование стало более "прямолинейным" без лишних пропсов. Возвращает только соответствующую результату иконку, без "пустой" иконки. Выравнивание контента для случая отсутствующей иконки результата - это ответственность вызывающего кода, теперь для этого достаточно отступа вместо громоздкой svg-разметкиБыло/стало
БылоСтало
![Screenshot from 2023-12-29 22-23-21](https://private-user-images.githubusercontent.com/37400913/293418309-1be7124d-6320-4c35-9ce5-41775b87cbca.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTgzMjcxOTMsIm5iZiI6MTcxODMyNjg5MywicGF0aCI6Ii8zNzQwMDkxMy8yOTM0MTgzMDktMWJlNzEyNGQtNjMyMC00YzM1LTljZTUtNDE3NzViODdjYmNhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA2MTQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNjE0VDAxMDEzM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ3NGFiYjRiMTU1NWY0N2UwYjU2OTY1ZmNhN2Q5YmIxODRmNzgzMjU4NzVkYmQyYTZmM2ZlNTg0MDViZDFhZjEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.ccJPrTN6aR3GmISASWFQ4rxcP1HR0eRJ4ucWLgp2gqg)