Улучшение юзабилити плагина в Figma.

Создание плагина Figma: часть 6 из 6



** Код этого раздела находится здесь. **

Хорошо, мы проделали большую работу, но наш плагин по-прежнему выглядит как 🔥 hot trash ™ и ему не хватает реактивности.

🖼 Дизайн

К счастью для нас, у нас есть дизайн, который мы хотим создать:

Глядя на окончательный дизайн, мы видим, что есть несколько вещей, которые нам нужно будет делать каждый раз, когда выбор изменяется:

  • Измените цвета элементов.
  • Измените текстовые значения.

♻️ Изменение значений текста

Итак, мы собираемся начать с написания некоторых функций в ui.html, которые предотвратят частое повторение этого. Внутри <script/> напишите следующее:

Он принимает два параметра: id, чтобы найти нужный элемент html, и text, которым мы хотим его заменить. Таким образом, мы можем использовать его для замены текстового содержимого следующим образом:

Красиво и чисто.

♻️ Изменение цвета элементов

Теперь мы можем сделать то же самое для изменения цвета элемента, но с некоторыми отличиями.
Во-первых, поскольку мы хотим изменить более одного элемента за раз, мы будем использовать classes, а не ids.
Во-вторых, поскольку мы изменяем элементы p и div, нам нужно проверить, что это за элемент, прежде чем менять цвет:

Мы получаем список всех элементов с определенным именем класса и просматриваем этот список, проверяя тип каждого элемента. Если это div, мы используем background-color: вместо color:, чтобы предотвратить неправильное изменение.

Обратите внимание, как мы используем цикл for для перебора elements? Это потому, что getElementsByClassName() не возвращает array, а вместо этого возвращает «похожий на массив» список, в котором нет таких методов массива, как .map().

Используйте такую ​​функцию changeColor(), чтобы легко изменить цвет сразу нескольких элементов:

Если все пойдет хорошо, мы должны увидеть что-то подобное:

💯 Обновление результатов

С оценками сложно, потому что, когда мы обновляем их, нам нужно изменить и их цвет, и их текстовое содержимое, и мы должны делать это одновременно в двух местах. Мы собираемся написать несколько классов CSS для обработки цвета различных оценок. Мы можем просто написать их внутри <style/> вот так:

Затем с помощью специальной функции мы можем обрабатывать изменение их className и текстового содержимого одновременно:

Прежде чем мы его протестируем, перейдите к code.js и измените вызов figma.showUI() так, чтобы он порождал окно большего размера:

figma.showUI(__html__, { width: 340, height: 405 })

И теперь мы должны это увидеть при тестировании плагина:

Это практически все, что нам было нужно 🎉.

Да, это по-прежнему похоже на 🔥 горячий мусор ™ ️. Если вы хотите стилизовать пользовательский интерфейс самостоятельно, вы можете сделать это здесь. Если вы хотите просто скопировать мои html и css, вы можете найти их здесь. В своей версии я добавил еще несколько изменяющихся элементов, таких как цветные блоки с шестнадцатеричными значениями:

Я не собираюсь тратить время на то, чтобы заставить его выглядеть красиво, но я хочу пройти некоторые дополнительные улучшения, которые я сделал.

Если хотите, можете спокойно здесь остановиться. Код для последнего плагина здесь.

🌯 Связка с Webpack

Если вы скопировали HTML и CSS из ui.html на этом этапе, вы увидите, что у нас все в одном файле из 200+ строк. Весь наш CSS находится в <style/>, весь наш JS находится в <script/>, и все наши SVG встроены в HTML. Это затрудняет чтение, и если бы наш плагин был немного сложнее, это было бы настоящей проблемой.

Облом заключается в том, что если мы захотим разделить вещи на отдельные файлы, это не будет просто работать ™. Что нам нужно сделать, так это использовать нечто, называемое сборщиком пакетов. Все, что для этого нужно, - это взять все наши отдельные файлы, code.js, ui.html, ui.css, и объединить их в один JS-файл и один HTML-файл, которые Figma может читать. Таким образом, мы можем разделить наш код так, как захотим в процессе разработки.

В документации Figma есть пошаговое руководство для этого, поэтому, если вы хотите разделить вещи, я рекомендую следовать ему.

💎 Сглаживание грубых краев

Было несколько случаев, когда плагин не очень понравился.

  • Без выбора плагин будет пустым.
  • Если пользователь выбирает меньше двух слоев, плагин не отвечает. Это не имеет большого значения, но я думаю, что это немного не работает, поэтому я хотел справиться с этим, выполнив проверку контраста с белым в данном случае.
  • Если в выбранных слоях нет заливок, плагин выдает ошибку. Я хочу поймать эту ошибку и представить более полезное сообщение.

Чтобы плагин не был пустым, когда пользователь запускает его, я решил присвоить нашим глобальным переменным некоторые значения по умолчанию, а затем вызвать calculateAndSendContrast() при запуске плагина:

Таким образом, плагин запускается с белым фоном и черным фоном.

Чтобы обрабатывать только один выбранный слой, я извлек фильтрацию, которую мы выполняем для выбранных слоев, в его собственную функцию и добавил событие уведомления, если оно ничего не возвращает:

И затем, когда выбор изменяется, я только проверяю, есть ли на самом деле какие-либо заливки в выделении:

Если есть только одна заливка, я сравниваю с предыдущим значением backgroundColor, которое изначально было белым.

Думаю, на этом все. 🎉

Как всегда, код этого плагина здесь разделен на шаги, поэтому ему легче следовать. Если вы заметили какие-либо проблемы, создайте вопрос по репо или еще лучше сделайте PR 😎

🙏 Кредиты:

  • 🙌 Большая часть кода для проверки цветового контраста пришла из блестящего репо для Contratio.com.
  • 👊 Таня Херст сделала классную иллюстрацию зебры. Вы можете посмотреть ее дриблинг здесь.
  • 😍 Команда Figma и их блестящий инструмент и их блестящие документы. Многие объяснения были украдены с их сайта документации.
  • ❤️ Все, кто пользуется плагином Figma. Очень помог поиск прошлых проблем.