• Как узнать сколько времени осталось?

    WblCHA
    @WblCHA
    Просто взять текущее время и отнять?
    Date.now() - 1602361668 * 1000
    Ответ написан
    Комментировать
  • Как лучше найти одинаковые поля в массивах и объектах?

    WblCHA
    @WblCHA
    const uniqIds = new Set();
    const result = exampleArray.filter(({ id }) => {
        if (uniqIds.has(id)) {
          return false;
        }
        uniqIds.add(id);
        return true;
      });
    Ответ написан
  • Необязательная передача props в реакт?

    WblCHA
    @WblCHA
    Тебе надо, чтобы в onChange был андефайнд.
    В функциональном компоненте такая проблема даже не возникает:
    const Input = ({ title, type, onNameChange }) => (
      <label>
        <p>{title}</p>
        <input onChange={onNameChange} type={type} />
      </label>
    )


    П.с.: надеюсь, ничего не напутал, а то реакт редко использую.
    Ответ написан
    Комментировать
  • Как создать одинаковые компоненты с разным содержанием?

    WblCHA
    @WblCHA
    Советую почитать документацию реакта. Желательно всю. Почти все вопросы отпадут сами собой.
    https://ru.reactjs.org/docs/components-and-props.html
    Ответ написан
    1 комментарий
  • Изменить исходный код страницы сайта?

    WblCHA
    @WblCHA
    К примеру: https://www.tampermonkey.net/
    Ответ написан
    Комментировать
  • Как отрезать нужную часть строки в математической строке?

    WblCHA
    @WblCHA
    С учётом того, что глубина может меняться в любом порядке в середине выражения (к примеру: 0>1>2>3>2>3>4>3>2>3>4>3>2>1>0), то чисто регулярными выражениями данную задачу не решить (во всяком случае я не знаю способа вести подсчёт в них).
    С использованием JS это решается довольно просто.
    Как вариант:
    const getLevel = (str, level) => {
      const breckets = [...str.matchAll(/[()]/g)];
      
      let currentLevel = 0;
      let startLevelIndex = 0;
      const results = [];
      
      breckets.forEach((b) => {
        if(b[0] === '(') {
          currentLevel++;
          if(currentLevel === level) {
            startLevelIndex = b.index + 1;
          }
          return;
        }
        if(currentLevel === level) {
          results.push(str.slice(startLevelIndex, b.index));
        }
        currentLevel--;
      });
      
      return results;
    }
    const testStr = '0 + (1 + 1 + (2 + (3 + 3 + (4 + 4) + 3) + 2 + (3 + (4 + 4 + 4) + (4 + (5 + 5) + 4) + 3) + 2) + 1) + 0 + (1 + 1)';
    getLevel(testStr, 4);
    Ответ написан
    Комментировать
  • Как сгенерировать PDF с использованием своих шрифтов?

    WblCHA
    @WblCHA Автор вопроса
    Проблему решил.

    Итак, вернулся я к html-pdf и проблема была в том, куда и как я указывал абсолютный путь и, что тоже важно, как я указывал путь до фонтов в пекедже styled-components с помощью createGlobalStyle.
    А именно при укзании абсолютного пути в html-pdf он обязан заканчиваться на "/" (прим.: "file:///mnt/c/Users/usrname/Documents/repository-f..."), а в createGlobalStyle путь должен начинаться с названия папки или файла (путь релативный, относительно указанной папки в html-pdf), а не с "/". В ином случае, даже если абсолютный будет без "/", а релативный с "/", шрифты не подгрузятся (да и не только шрифты, а всё, что из той папки берётся).

    Собственно, вот и всё, осталось только svg в пдф ещё запихнуть...

    Upd.
    Через какое-то время было принято решение перейти на puppeteer, поскольку html-pdf хоть и работает, в целом, как надо, но рендерит хтмл он не 1 в 1 как браузер и в итоге приходилось фиксить костылями те или иные графические баги. Более того, была проблема с некоторым несоответствием отображения ширины некоторых букв на пиксель, что вызывало очень заметное потолстение букв в пдфки на отдалении, а это решить так и не удалось.
    Так вот, запихнуть шрифты в пупитир у меня так и не получилось, поэтому я пошёл по другому пути: сделал 2 разных пути для загрузки и для отображения пдфки, в первом открывается страничка в пупитире и запрашивается "фронтовая" пдфка со всем, чем надо.
    Далее страничка конвертируется в пдфку с правильно отрендереным хтмл.

    Отдельно отмечу, что пришлось использовать пупитир 1.18.0, по моему (или около того), поскольку в более свежих версиях пупитир упорно возвращал пустой пдф.
    Ответ написан
    Комментировать
  • Обнаружение столкновений при вращение JS?

    WblCHA
    @WblCHA
    player.x < enemy.x + enemy.w && player.x + player.w > enemy.x
    && player.y < enemy.y + enemy.h && player.y + player.h > enemy.y

    У тебя здесь не учитывается поворот фигуры и фактически расчёт идёт относительно базового положения фигуры.
    Ответ написан