• Почему после сборки проекта не появляется папка dist в Gulp 4?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    в общем проблема похоже в методе task()
    Его сигнатура изменилась
    task([taskName], taskFunction)

    Здесь нет третьего параметра, как было в третьей версии.
    Соответственно объявленные анонимные функции не запускаются (этот параметр игнорится)

    Старый подход к объявлению задач с предварительным запуском других не работает.
    Нужно отдельно описывать все задачи и запускать через series/parallel, или анонимными функциями в том же series

    Было:

    gulp.task(
      'sometask',      // название задачи
      ['anothertask'], // выполнить перед задачей
      function(){}     // сама задача
    )


    Стало:

    gulp.task(
      'sometask',     // название задачи
      gulp.series(    // последовательно выполнить
        'anothertask',  // другие задачи
         function(){}   // и саму задачу
      )
    )


    Добавлю неправильный вариант, который может ввести в заблуждение:

    gulp.task(
      'sometask',     // название задачи
      gulp.series('anothertask'),  // выполнить другие задачи
      function(){}   // и саму задачу
    )
    Ответ написан
    8 комментариев
  • Как сделать scrolltop в vh?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    if ($(this).scrollTop() >= window.clientHeight * 0.03) {
    
    }

    if ($(this).scrollTop() >= document.documentElement.clientHeight * 0.03) {
    
    }
    // или 
    if ($(this).scrollTop() >= window.innerHeight * 0.03) {
    
    }

    разница между этими двумя вариантами есть, но она небольшая, и в данном случае значения вообще не имеет.
    Ответ написан
    2 комментария
  • Почему не запускается таск «clean» во время сборки?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    просто вызовите коллбек, сообщив этим, что задача завершена.

    gulp.task('build', gulp.parallel('clean', 'nunjucks', 'sass', 'scripts', 'css-libs', 'img'), function(cb) {
      var buildHtml = gulp.src('app/*.html')
      .pipe(gulp.dest('dist'))
      .on('end', function(){
        cb();// сигналим о завершении
      })


    gulp.task('clean', function(cb) {
      del('dist').then( (paths) => {
        cb(); // сигналим о завершении
      }); 
    });


    Очистку не нужно запускать параллельно с другими задачами. Сначала очистить, потом создавать. т.е.

    gulp.series(
      'clean',
       gulp.parallel(все остальное)
    )
    Ответ написан
  • Событие "Колесико вверх/вниз" у vue?

    delphinpro
    @delphinpro
    frontend developer
    Рекомендую законсолить это событие и посмотреть — там есть параметр wheelDelta, который либо положительный, либо отрицательный в зависимости от направления прокрутки.

    update: https://developer.mozilla.org/en-US/docs/Web/Event...
    Ответ написан
  • Как указать фиксировано-адаптивную высоту блока?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Метод, предложенный SmthTo, хорош, когда все слайды одинаковые.
    Если слайды с разным кол-вом высоты и автоподстройкой высоты при смене слайда, он не подойдёт.

    Добавлю еще один, который использую я.

    Он примитивен: просто прописываем высоту обертке для не инициализированного слайдера:

    .myslider:not(.owl-loaded) {
      height: 300px;
      overflow-y: scroll;
    }


    Разщумеется, таким образом не получиться точно указать нужную высоту (или придется сильно заморочиться), но этого в общем-то и не нужно. Когда высота меняется всего на несколько пикселей после инициализации, это практически не заметно.
    Ответ написан
  • Bitrix core.js не обрабатывает программно созданное событие?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    .trigger("change");

    Это jquery.

    Генерируйте нативное событие.
    Ответ написан
  • Кто сможет объяснить мистическое поведение phpMyAdmin?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    поле с типом timestamp хранит метку времени, 4 байта. всегда в utc, таймзона корректируется автоматом при сохранении/чтении.
    Для добавления записи используйте NOW() для сохранения метки текущего момента времени. При чтении, если вам нужно получить unix time, приводите читаему метку к нужному виду:

    SELECT UNIX_TIMESTAMP(date_review) AS ts_date_review FROM …


    в результатах будет поле ts_date_review с unix time
    Ответ написан
    1 комментарий
  • Как на vue.js написать код для fullpage добавление css классов?

    delphinpro
    @delphinpro
    frontend developer
    data(){
      return {
        classDir: '',
      }
    }
    onLeave(i, ni, dir){
      this.classDir = dir;
    }
    <div :class="{up: classDir}">
    Ответ написан
    6 комментариев
  • Как решить проблему с отрицательными значениями viewBox у svg?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Я всегда svg иконки предварительно подготавливаю в люстре — привожу к единому размеру (viewBox), обычно 128 или 256 и выравниваю иконку внутри области, а также по дробным пикселям. Потом сохраняю в svg, которые прекрасно и без глюков хаваются галпом.
    Ответ написан
    Комментировать
  • Актуален ли HAML?

    delphinpro
    @delphinpro Куратор тега HTML
    frontend developer
    Ответ написан
    Комментировать
  • Как восстановить профиль пользователя windows 10?

    delphinpro
    @delphinpro
    frontend developer
    Просто из-под админа смените владельца папок того пользователя, включая вложенные. Это правый клик по папке, вкладка Безопасность - Дополнительно - Владелец - Изменить.
    Смените на существующего админа и дайте ему полный доступ
    Ответ написан
    1 комментарий
  • Почему jquery replaceWith работает только с одним div?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Потому что нужно знать основы.
    Да нет, в принципе и основы знать не нужно.
    Просто включить голову в режим логики

    id - идентификатор

    Смотрим википедию:

    Идентифика́тор, ID (англ. data name, identifier — опознаватель) — уникальный признак объекта, позволяющий отличать его от других объектов, т.е. идентифицировать. Примеры: лексический токен, который определяет сущность.


    уникальный признак

    Теперь идем на викисловарь и узнаем значение слова уникальный:


    единственный в своём роде, неповторимый, существующий в одном экземпляре


    Теперь уже, в принципе, должно стать понятно, в чем проблема.
    Но я скажу на всякий случай: id не должны повторяться!
    Ответ написан
    1 комментарий
  • Как менять $primary в 4-ом бутстрапе в зависимости от id страницы?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    Делаете несколько файлов: main-default.scss, main-red.scss и т.п.

    В каждом пишете примерно следующее

    $primary: red;
    @import 'vars.scss';
    …


    Дальше дело техники — на каждой странице подключаете свой файл.

    Очевидный недостаток — слишком много дублирующихся стилей на выходе. Но с другой стороны подключается только один из main файлов, и это самое простое решение, не требующее вмешательства в исходники бутстрапа.

    Другой вариант — выдрать все стили, влияющие на цветовую схему и подключать main.css + цветовую схему. Тут возможны под-варианты — отдельные файлы для тем, один файл через корневой селектор. В любом случае тут уже придется вмешиваться в исходники или дублировать часть исходников в своих темах.

    Если у вас будет не очень много тем, лучше пойти по первому пути. Если количество цветовых решений не ограничено, то вытащить часть стилей и инлайнить их прямо в страницу (готовым css).
    Ответ написан
  • Как найти среднее квадратическое по формуле на php?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Задача: Сложить квадраты всех чисел, разделить на количество чисел и извлечь квадратный корень.

    Решение.

    Пусть числа заданы массивом:

    $numbers = [1, 2, 3];

    Получаем сумму квадратов:

    $sum = array_reduce($numbers, function($prev, $item){
        return $prev + pow($item, 2);
    }, 0);


    Делим на количество чисел:

    $tmp = $sum / count($numbers);

    Извлекаем квадратный корень:

    $value = sqrt($tmp);

    Весь код целиком:

    $numbers = [1, 2, 3];
    
    $value = sqrt(array_reduce($numbers, function($prev, $item){
        return $prev + pow($item, 2);
    }, 0) / count($numbers));
    
    var_dump($value);
    Ответ написан
    6 комментариев
  • Как в одном запросе gulp переместить сразу два файла, по разным папкам?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    Создавайте одну задачу, внутри нее два раза вызывайте галп.
    Можно прямо так и оставить.
    Если нужно сигналить об окончании задачи, то оберните вызовы в промисы, и воспользуйтесь методом Promise.all для получения сигнала об окончании всех (в данном случае двух) процессов.

    gulp.task('mytask', function(done){
      let pipes = [];
      pipes.push(new Promise((resolve, reject) => {
        gulp.src(...)
          .pipe()
           …  
          .on('error', (err) => reject(err))
          .on('end', () => resolve())
      }));
      //... повторить нужное кол-во раз
    
      Promise.all(pipes).then((ok) => done(), (err) => done())
    })
    Ответ написан
    Комментировать
  • Почему всегда не используют vw для размера шрифта в css?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Но почему бы не использовать vw всегда

    Всегда. Всегда. ВСЕГДА!!!

    Вы всегда используете гвоздь 70мм? Нет, блин! Для каждой конкретной задачи вы используете подходящий гвоздь.
    Абсолютно то же самое с единицами измерения. Вы используете те, которые наиболее подходят в конкретной ситуации. Иногда и ch очень выручает, хотя могу поспорить многие о нем и не знают.
    Ответ написан
    Комментировать
  • В чем моя ошибка не как не могу понять где я поставил отступ и как ее убрать?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Alex ALex,
    Для общего понимания что происходит рекомендую книжку "Инлайновый контекст форматирования". Она бесплатная, распространяется в электронном виде на сайте css-live.ru

    Для быстрого фикса проблемы задайте своим inline-block элементам правило vertical-align: top;

    А вообще завязывайте и инлайн-блоками. Используйте флексы. Это не так страшно, как может показаться на первый взгляд.
    Ответ написан
  • Стоит ли использовать препроцессор отличный от SCSS?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    О, мой любимый холиварчик! =))

    Начнем с indent vs brackets. Код с отступами лаконичен, по-своему красив, но обладает фатальным недостатком — его нельзя просто так взять и скопипастить из одного места в другое. Отступы обязательно нарушатся, IDE не поймёт и всё развалится. Нужно вручную поправлять, чтобы все встало на свои места. Также в процессе рефакторинга нарушаются отступы и появляется геморр. Второй серьёзный недостаток — это несовместимость с native css. Нельзя взять кусок css кода из интернетов и вставить в свой файл, его нужно вручную (или онлайн конвертером) переформатировать под нужный синтаксис. Всё это лишние телодвижения, лишние сложности, трата времени. Поэтому только скобки. Благо скобочный синтаксис поддерживается во всех трех препроцессорах.

    В пункте 3 вы ерунду написали. Никто в серьезном проекте не будет подключать браузерный компилятор стилей. Даже при использовании less стили все равно обрабатываются заранее и на продакшн выкладывается готовый css файл.
    Так что это преимущество less не стоит брать во внимание от слова "вообще".

    [Написанное в следующем абзаце, исключительно моё мнение, а не общепризнанные факты]
    Почему же sass выигрывает? Во-первых, это достаточно мощный препроцессор, с огромным количеством возможностей. Во-вторых, и я думаю, это главное, он единственный, компилятор которого написан на "С" -> скорость работы. Другие два написаны на javascript. И в-третьих, исторически так сложилось. Стайлус крутой препроцессор, но он появился много позже остальных и возможно, еще не успел набрать популярность.

    В свою очередь у scss есть свои серьёзные недостатки.
    Первый — невозможно в scss/sass файл импортировать обычный css, он не будет включен файл, а будет заменен css-импортом. В других препроцессорах имеются специальные синтаксические конструкции для этого.
    Второй — отсутствие резолвинга путей, что другими так же предоставляется "из коробки". Приходится извращаться с прописыванием путей к картинкам. Проблема нивелируется при использовании вэбпака, но ведь не всегда он используется.

    Что касается меня, то я готов мирится с этими двумя недостатками sass. Остальные возможности их с лихвой перекрывают.
    На чем вам остановиться,я советовать не буду. Я свободно работаю со всеми тремя инструментами, но новые проекты всегда начинаю с использованием scss.
    Ответ написан
    4 комментария