• Как авторизовация в webSocket через Bearer token?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Штатный метод WebSocket в JS не позволяет добавлять заголовки (кроме Sec-WebSocket-Protocol).
    Аутентификация возможна только после установления соединения, обычными сообщениями WS.
    Ответ написан
    2 комментария
  • Как массив объектов собрать в один объект, объединив одноимённые свойства в массивы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Получаем все возможные ключи; под каждый создаём пустой массив; при обработке объекта из исходного массива бежим по массиву ключей, добавляем в соответствующий массив значение из объекта или дефолтное - в зависимости от наличия ключа в объекте:

    function groupValues(arr, defaultValue = null) {
      const keys = [...new Set(arr.flatMap(Object.keys))];
      return arr.reduce((acc, n) => {
        keys.forEach(k => acc[k].push(Object.hasOwn(n, k) ? n[k] : defaultValue));
        return acc;
      }, Object.fromEntries(keys.map(k => [ k, [] ])));
    }
    
    
    const result = groupValues(arr);

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

    const groupValues = (arr, defaultValue = null) =>
      arr.reduce((acc, n, i, a) => (
        Object
          .keys(n)
          .forEach(k => (acc[k] ??= Array(a.length).fill(defaultValue))[i] = n[k]),
        acc
      ), {});
    Ответ написан
    Комментировать
  • Как сделать таймер для карточек товара?

    Stalker_RED
    @Stalker_RED
    Если нашел этот код в интернетах - выбрось без сожаления, и возьми нормальный.
    Если написал сам, то можно доработать:
    1. вместо document.querySelectorAll('.time-count__days...
    можно найти нужный контейнер со счетчиком, а потом искать разметку таймера уже в нем
    const card = document.querySelector('#селектор_карточки_товара');
    const days = card.querySelector('.time-count__days');
    Причем можно это делать один раз при инициализации скрипта, и не дергать DOM много раз каждую секунду.

    2. прописывать в каждой карточке разметку для секунд и минут - так себе идея. Можно вставлять ее скриптом. Заодно и не нужно будет ее искать.

    3. пропишите в CSS жестко размеры для элементов таймера, чтобы браузер не пытался делать reflow при изменении текста в них. Если нужна резиновость - можно привязать размеры к vh vw или пересчитывать их по событию resize.

    4. setInterval(foo, 1000) - плохо.
    setInterval не обещает, что код в следующий раз запустится через 1000ms, он обещает что он запустится НЕ РАНЬШЕ, чем через 1000ms. То есть при наличии на странице каких-то тяжелых скриптов таймер может пропускать тики. Хорошо хоть вычсление t у вас не просто счетом, а сравнением с new Date()
    Можно обновлять по requestAnimationFrame. Естественно не каждый кадр, а только когда изменились секунды.
    Ответ написан
    Комментировать
  • BotFather поломался?

    @nozzy
    Symfony, Laravel, SQL
    Нужно пробовать еще больше разных устройств для создания бота и еще больше аккаунтов - только в этом случае в конце концов бот начинает работать, тут главное не отчаиваться и не останавливаться...
    Ответ написан
    6 комментариев
  • Как нарисовать график (интересует мат. формула)?

    Alexandroppolus
    @Alexandroppolus
    кодир
    y(x) = x < 2 ? 0 : (x-2) ** 2 / 16

    это навскидку, и из предположения, что отметки на шкале Y такой же длины, как на Х
    Ответ написан
    1 комментарий
  • Какой подход к CSS использовать в 2023 году?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    CSS-IN-JS, CSS-modules

    Но я бы выбрал CSS-modules, т.к:
    1. Производительность клиента, а SSR не всегда возможен.
    2. Отсутствие смешивания CSS и JS.
    3. Отсутствие дополнительного обучения для использования CSS-IN-JS.
    Ответ написан
    2 комментария
  • Почему псевдоэлемент after перекрывает собой родителя?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Ответ написан
    Комментировать
  • Как написать цикличный таймер?

    Stalker_RED
    @Stalker_RED
    Напишите список ваших задач, или периодов, или как их там. В них храните либо длительность, либо время начала и окончания, как вам удобнее.

    Напишите ОДИН setInterval, который сравнивает текущее время со временем старта или конца ваших периодов.

    Конструкции типа time-- идут лесом.
    Потому что и setInterval и setTimeout не гарантируют время срабатывания. Они работают "не раньше чем", а позже - запросто. Только хардкор: const now = new Date() на каждом тике таймера.

    Всякие циферки для отображения вычисляются из разницы между now и start или end, математика простейшая.
    Ответ написан
    Комментировать
  • Замыкания не существует?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Функция one() определяет переменную oneVar. Затем в ней определяется функция two(), в лексическое окружение которой попадает oneVar. В конце своей работы функция one() возвращает в качестве результата функцию two().
    В переменную three записывается результат работы one(), то есть функция two(). Несмотря на то, что one() уже закончила работу, переменная oneVar сохраняется в лексическом окружении функции two().
    При вызове three() фактически вызывается two(), в которой переменная oneVar доступна для использования.
    Ответ написан
  • Где хранить токены авторизации в браузере?

    Maksclub
    @Maksclub Куратор тега Веб-разработка
    maksfedorov.ru
    Комментировать
  • Как разрешить копировать картинку с сайта?

    meusov11
    @meusov11
    * {
      user-select: none;
    }


    Вот это =)
    Ответ написан
    Комментировать
  • Как сделать так чтобы окно предупреждение о cookie после соглашения больше не показывалось?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    window.onload = () => {
    
      const popUp = document.getElementById('cookiePopup');
    
      function showPopup() {
        popUp.classList.add('show');
        popUp.classList.remove('hide');
      }
    
      function hidePopup() {
        popUp.classList.add('hide');
        popUp.classList.remove('show');
      }
    
      document.getElementById('acceptCookie').addEventListener('click', () => {
        localStorage.setItem('cookieAccepted', '1');
        hidePopup();
      });
    
      if (localStorage.getItem('cookieAccepted') === '1') {
        hidePopup();
      } else {
        showPopup();
      }
    
    };
    Ответ написан
    Комментировать
  • Как правильней будет сверстать такой каталог?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Как сверстать такой каталог?

    Таблицей, и не парится.
    Либо гриды. Флексы здесь вообще плохо вписываются.

    Ответ написан
    2 комментария
  • Почему не работает nodemailer?

    vool
    @vool
    Разработчик
    Можно ещё таким способом отправлять:
    (Пример отправки кода подтверждения)
    const nodemailer = require('nodemailer');
    const directTransport = require('nodemailer-direct-transport');
    const fromHost = `mysite.com`;
    const from = 'site' + '@' + "gmail.com";
    
    console.log('Email will be sent from:');
    console.log(from, '\n');
    
    // Ask for email address
    const to = prompt('Enter your email address ').trim();
    
    // Генерируем код
    const trueVerificationCode = Math.round(Math.random() * (10e5 - 1)).toString();
    
    const transport = nodemailer.createTransport(directTransport({
      name: fromHost
    }));
    let y = trueVerificationCode;
    // Отправляем письмо
    transport.sendMail({
      from, to,
      subject: 'Verify your email address',
      html: `
             <div style="width:100%;display:flex;flex-direction:column;justify-content:center;
             align-items:center;background:lightblue;padding:50px;box-sizing:border-box;">
             <h1>Verify your email address</h1>
             <p>Site has tried to verify your email address "${to}".
             If this wasn't you, ignore and delete this email. Otherwise, the verification code is bellow:</p>
             <div style="padding:50px;background:lightgray;border-radius:10px;font-size:30px;
             font-family:monospace;">${trueVerificationCode}</div></div>
            `
    }, (err, data) => {
      if (err) {
        console.error('There was an error:', err);
      } else {
        console.log('\nVerification email sent, check your inbox\n');
        const userVerificationCode = prompt('Enter your verification code ');
        if (userVerificationCode == trueVerificationCode) {
          console.log('Email address verified');
        } else {
          console.log('Code incorrect');
        }
      }
    });
    Ответ написан
    6 комментариев
  • Z-index головоломка - как расположить фигуры внахлест одну за другой?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Как вариант:
    Ответ написан
    Комментировать
  • Dot notation в композиции компонентов React?

    В документации всего один абзац посвящён этой возможности:
    You can also refer to a React component using dot-notation from within JSX. This is convenient if you have a single module that exports many React components. For example, if MyComponents.DatePicker is a component, you can use it directly from JSX with:
    import React from 'react';
    
    const MyComponents = {
      DatePicker: function DatePicker(props) {
        return <div>Imagine a {props.color} datepicker here.</div>;
      }
    }
    
    function BlueDatePicker() {
      return <MyComponents.DatePicker color="blue" />;
    }


    Вроде бы всё просто: если модуль экспортирует много компонентов, как вариант, удобно использовать запись через точку, чтобы не писать длиннющий импорт.

    Интересует мнение
    Собирать мнения и проводить опросы тут нельзя. Правила. Лучше задавать вопрос, на который можно дать однозначный проверяемый воспроизводимый ответ.
    Ответ написан
    Комментировать
  • Куда лучше поместить модалку?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    Поместить можно в цело куда угодно, все зависит от того, как удобнее с этим будет работать:
    • если в модалке один и тот же контент, то можно вынести куда-то в корень и управлять через некое общее состояние приложения (например, как справедливо отметили в комментариях, store)
    • если там контент может быть разный, то возможно есть смысл вызывать её в конкретном компоненте (как в вашем случае) или же так же определить глобально, но в этом случае нужно будет все пропсы передавать туда и события нужные оттуда же перехватывать, что в целом может усложнить код без какой-то надобности


    В данном случае уместно будет также использовать порталы.
    Ответ написан
    Комментировать
  • Оператор с символом @ невозможно использовать для ссылки, как исправить?

    delphinpro
    @delphinpro
    frontend developer
    NPM не выдает тексты на русском языке.
    Выбрасывайте свою поделку и ставьте через нормальную консоль
    63aa8aab1df83467894036.png
    Ответ написан
    2 комментария