• Инструмент для генерации css-селекторов из файла html?

    @Flying
    Сделать это несложно на самом деле, достаточно использовать любой HTML парсер, их много. Другое дело что полученный результат придётся разбирать, отфильтровывая то что вам в реальности не нужно (причём вручную) и этот процесс почти наверняка займёт больше времени чем написание нужных вам селекторов вручную.

    Также не забывайте что:
    1. CSS селекторы - это далеко не только id и class name, они намного гибче, а самые интересные варианты вы таким образом не автоматизируете
    2. Современные IDE, к примеру те же продукты JetBrains хорошо умеют, понимая контекст, давать хороший автокомплит для CSS селекторов по структуре HTML, поэтому ваша задача там уже решена, только намного эффективнее
    Ответ написан
    3 комментария
  • Import в nodejs 10.11.0 - как заставить работать?

    @Flying
    Как указано в документации - ES6 imports работают только в файлах с расширением .mjs при включенном флаге --experimental-modules

    О причинах такого поведения хорошо написано в статье от одного из разработчиков node.js
    Ответ написан
    Комментировать
  • По какой причине composer не может разрешить зависимости?

    @Flying
    Могу предположить что причина проблемы в том что в разделе "repositories" основного composer.json у вас не указано где искать пакеты vendor/basis и vendor/common. Поскольку эти репозитории приватные и не находятся через публичный индекс пакетов - Composer должен получить информацию о том где они находятся (по аналогии с остальными приватными пакетами). Могу предположить что ради оптимизации Composer разбирает только основной описатель на предмет определения местонахождения пакетов.

    Также есть вариант того что пакеты vendor/basis и vendor/common нужно будет добавить напрямую в основной composer.json приложения. По крайней мере когда я последний раз сталкивался с такой ситуацией - помогло именно это.
    Ответ написан
    Комментировать
  • Как задать ширину изображения auto во flex?

    @Flying
    У элементов flexbox контейнера значение по-умолчанию для flex-grow равно 0, а для flex-shrink равно 1, соответственно элемент flexbox контейнера по-умолчанию сжимается, но не растягивается.

    Очевидным образом это "лечится" настройкой поведения элемента flexbox контейнера под ваши нужды, в данном случае видимо ожидается flex: 1 1 auto;
    Ответ написан
  • Какой плагин лучший? ACF, CMB2, Pods, MetaBox?

    @Flying
    Если приходится иметь дело с Wordpress - использую ACF в первую очередь из-за широкой поддержки его другими плагинами. Кроме того он из коробки поддерживается в Timber без которого лично меня от Wordpress'а воротит :)
    Ответ написан
    1 комментарий
  • Хорошая ли верстка моего сайта?

    @Flying
    Сразу отмечу что смотрел только главную страницу.

    HTML код в целом выглядит вполне чисто, PHPStorm ругается только на ul внутри menu что действительно не разрешено.

    Несколько смущает принудительная анимация на все элементы. Не думаю что браузеры, особенно мобильные, будут рады таким стилям. Кроме того она приводит как минимум к весьма странным прыжкам меню при переходе через 1200px.

    Меню для десктопа не выравнивается по вертикали т.к. для блоков меню и телефонов в заголовке используется "выравнивание" через margin-top, а не нормальное выравнивание через flexbox с align-items: center.

    Для блоков в разделе "Наши преимущества" не хватает как минимум горизонтальных padding'ов, из-за этого текст в блоках прилипает к границам контейнеров. В этом же блоке у основного заголовка и заголовков блоков потерян letter-spacing (не мерял, на глаз видно). При ширине меньше 980px блоки выезжают за экран, видимо не доделано.

    Блок "Переезд в Болгарию" полностью сломан на ширине 980..1200px, а ещё уже - часть элементов теряет центровку. У блока .move__how та же проблема с горизонтальным отступом что и в блоке выше.

    Блок про недвижимость - та же проблема с центровкой (кнопка), letter-spacing и горизонтальным padding'ом.

    Кстати, посмотрел подробнее - многие проблемы возникают из-за потерянных закрывающихся скобок для media запросов здесь и здесь.

    Блок отзывов: иконки навигации влево / вправо не соответствуют макету, очевидно взяты из font-awesome, хотя в макете они другие. То же, кстати, касается и иконки "fa-angle-down", она в макете тоже не из font awesome. Вертикальное положение иконок навигации не соответствует макету (не должен учитываться блок пагинатора). Отступы внутри блока и letter-spacing - похоже общая больная тема. Из-за того что 3 элемента заголовка отзыва не объединены в общий контейнер - есть проблема с выравниванием и без контейнера она лечится не совсем тривиально. Стрелка в "Москва -> София" не соответствует макету.

    Блок формы: состояние :focus не реализовано (в макете это E-mail), в размерах ниже 768px элементы формы прилипают к краям экрана без какого-либо отступа. Нижний затемняющий градиент блока утерян. Иконка со стрелкой вниз не соответствует макету (здесь и в других местах). Стиль кнопки отличается от макета (бордюр и стиль шрифта)

    Отдельное большое фи - графика и общее отношение к размерам ресурсов:
    • 4.5 мегабайта картинок в PNG, вы это серьёзно? Банальная оптимизация через optipng / pngout даёт почти 800кб. Две фоновые картинки занимают суммарно 3.5 мегабайта, хотя они же в JPEG при качестве в 85% и оптимизацией через guetzly дают 225кб, а можно ужать ещё больше. city.png - почти полностью прозрачная картинка, используемая исключительно на белом фоне - зачем она в PNG с альфа-каналом? JPEG + guetzly даёт 43кб против 376кб.
    • 4 шрифта, при этом размерами 100 и 900, хотя на странице есть ещё как минимум 400, по 700 глифов! Зачем они там если у вас на сайте русский и латиница? Subsetting в Font Squirrel уже отменили? При этом два шрифта italic хотя реально italic используется на данный момент только в тексте комментария (толщиной 100), зачем?
    • Во всех макетах используется суммарно 4 разных шрифтовых иконки (3 стрелки и "спасательный круг"), при этом стрелки, как написано выше, не соответствуют макету. И ради этого грузятся все 1145 (!) иконок font awesome суммарным объёмом (в лучшем случае) почти 100кб. Конечно интернет сегодня быстрый, но зачем вот так сразу-то?
    • На все страницы грузится весь Bootstrap 3.3.7 целиком (почти 120кб CSS) ради Bootstrap grid? Она там в лучшем случае 3-5кб занимает, а остальное не используется? При этом загрузка CSS - блокирующая операция т.е. рендер стоит пока грузится CSS.
    Ответ написан
    3 комментария
  • Придумать логику установки ошибок?

    @Flying
    Вообще подобный workflow обычно реализуется через конечные автоматы. Для PHP есть как минимум две популярные реализации: finite и компонент Symfony Workflow. В последнем точно поддерживаются event'ы.
    Ответ написан
    Комментировать
  • От чего возникает ошибка в PHP?

    @Flying
    Выключена настройка short_open_tag в php.ini, но в целом её использование сейчас считается плохой практикой, стоит использовать полноценный тег <?php
    Ответ написан
    Комментировать
  • У примитивных значений тоже есть методы?

    @Flying
    В JavaScript есть 6 примитивных типов данных, не имеющих методов: boolean, null, undefined, Number, String, Symbol. Тем не менее для примитивного типа String разрешается вызов методов объекта String, в этом случае просто создаётся временный объект String со значением примитивного типа.

    Вообще рекомендую JavaScript Guide на MDN, там много интересного.
    Ответ написан
    Комментировать
  • Gulp-sass в связке с node.js - долгая компиляция, и Node начал забивать всю свободную RAM. Что не так?

    @Flying
    Навскидку что можно попробовать:
    1. Убрать постоянную минификацию css, всё равно для разработки она не полезна, а только жрёт время и ухудшает читабельность результата. Сделать отдельную задачу, например "prod" куда вынести все задачи по оптимизации (кстати можно подключить ещё css-mqpacker, хорошо помогает)
    2. Попробовать отключить вызов browserSync, не факт что поможет, но для чистоты эксперимента - стоит попробовать.
    3. Попробовать альтернативные варианты библиотек:
    - gulp-connect вместо browsersync
    - gulp-csso вместо gulp-minify-css
    4. Попробовать сменить версию node.js, проще всего поэкспериментировать с этим через nvm или для windows - nvm-windows.
    5. Попробовать посмотреть на то что происходит через inspect режим работы node.js
    Ответ написан
    9 комментариев
  • Как сделать индикатор загрузки?

    @Flying
    Используйте Promise.all для двух промисов:
    • В первом будет загрузка (jQuery.ajax() возвращает jqXHR в котором есть метод always, в нём и будете вызывать resolve())
    • Во втором будет setTimeout() с убиранием надписи и вызовом resolve() с нужной вам задержкой
    Ответ написан
    Комментировать
  • Где symfony DI собирает все зависимости?

    @Flying
    Если говорить именно об аргументах контроллера, то они собираются в ArgumentResolver::getArguments() на основании метаданных (получаемых через reflection) из ArgumentMetadataFactory::createArgumentMetadata. Передача аргументов в action контроллера идёт при его вызове здесь.

    Если же речь идёт об общем случае то там схема существенно сложнее т.к. непосредственно инициализация сервисов очень сильно отличается в зависимости от настроек контейнера в отношении конкретного сервиса (вспоминаем про factories, абстрактные сервисы и т.п.), но в общем случае все варианты приводят к генерации соответствующего метода в контейнере.
    Ответ написан
    Комментировать
  • Как поменять стили у дочерних блоков при нажатии на основной при помощи CSS?

    @Flying
    Для того чтобы всё заработало - необходимо чтобы input стоял перед label, а не после. CSS селекторы работают только "вперёд", соответственно если хочется завязать изменение стилей на состояние checkbox - он должен располагаться в DOM раньше чем элементы к которым будут применяться стили, зависящие от состояния checkbox'а
    Ответ написан
    1 комментарий
  • Как обработать кириллические хештеги?

    @Flying
    Есть официальная библиотека от Twitter которая, в частности, предоставляет функциональность экстракции хэштегов (пример для JS).

    Если смотреть в код то там будет видно что реальный regexp формируется из кусков и его суммарный финальный размер весьма велик (думаю несколько кб). Кроме того есть ещё одна проблема, уже специфическая для PHP - библиотека PCRE, используемая как движок регулярных выражений для PHP не поддерживает Unicode Surrogates, выдавая для них ошибку Error 73 disallowed Unicode code point.

    Я в своё время для одного проекта конвертировал реализацию из библиотеки Twitter для PHP, если нужно - можно забрать здесь. Там правда есть небольшое отличие в обработке mentions т.к. нужно было учесть специфику Instagram, ну и то что касается специфики работы PCRE, см. выше.
    Ответ написан
    Комментировать
  • Как выровнять блоки ряда по высоте?

    @Flying
    .wrapper {
      display: flex;
      flex-direction: column;
    }
    .filter-items {
        flex: 1 1 auto;
    }

    ну и у вас .wrapper указан только для первого блока, а должен быть (он или какой-то другой класс) указан для всех.
    Ответ написан
    Комментировать
  • JS, что под капотом у конструкции async await?

    @Flying
    Да, под капотом там генераторы и промисы. Один из вариантов проверить это - транспилировать async/await код в ES5 с помощью Babel и посмотреть что получается. Я сделал небольшой gist с тестовым проектом, там можно увидеть результат. Babel использует regenerator для реализации генераторов.
    Ответ написан
    Комментировать
  • Как подружить Polylang с ACF?

    @Flying
    Можно использовать WP Multilang, он бесплатный и он из коробки поддерживает ACF.
    Ответ написан
    1 комментарий
  • Имеет ли смысл создание корневого класса с описанием магических свойств в PHP?

    @Flying
    Я полностью согласен с BoShurik - это действительно признак плохой архитектуры. Такой подход может быть оправдан в каком-то конкретном наборе классов, но он явно излишний в общем случае.

    Представьте что вы будете использовать какой-либо framework или внешнюю библиотеку - там не будет этих методов. Представьте что какой-то из ваших классов не требует подобного функционала - тогда наличие этих методов будет нарушением принципа SOLID.

    В целом подобный функционал обычно необходим только для классов используемых для хранения данных (value objects, entities, кастомные струкруры и т.п.). Для них можно создавать подобные базовые классы (хотя для entities, например в Doctrine, принято использовать getters / setters) либо же использовать traits. Для классов же отвечающих за логику приложения этот функционал просто не нужен.

    Подобный функционал также несколько сложнее чем кажется на первый взгляд. Например что вы будете делать в случае если вам потребуется сохранить не скалярное значение, а массив значений или, ещё лучше, массив объектов определённого типа? Как вы планируете реализовать обеспечение валидации данных при использовании подобных методов? Как планируете работать с библиотеками, опирающимися на метаданные (те же аннотации в Doctrine и ещё куче библиотек)?

    Также многие IDE (например PHPStorm) умеют генерировать getters / setters по описанию полей класса, это существенно экономит время на создание подобных классов. Кроме того они, при описании корректных PHPDocs позволяют писать намного более безопасный код беря на себя проверки совпадения типов и т.п.

    Я в своё время писал библиотечку для создания произвольных структур которая как раз реализовывала подобный функционал и, хотя она в целом получилась довольно удачной - практика показывает что у такого подхода есть масса ограничений.
    Ответ написан
    Комментировать