• Как сделать чтобы нельзя было переназначить socket.on в socketio?

    @StiflerProger
    Покажу на примере console.log

    const original = console.log;
    console.log = function (template, callback) {
        if (template === "message") throw new Error('Forbidden action');
    
        return original.call(template, callback);
    }


    у тебя вместо console.log будет socket.on
    Ответ написан
    Комментировать
  • Как выполнить код последовательно?

    @StiflerProger
    async function SubmitData(data) {
      let captchaToken;
    
      // Проверка включена ли grecaptcha в настройках
      if ($('#grecaptcha').length > 0) {
        captchaToken = await getCaptchaToken({action: '123'});
      }
      
      console.log(captchaToken);
    
      const response = await postForm(address, formId);
    
      console.log(response);
    }
    
    function postForm(sendTo, formId) {
      return new Promise(res => {
        $.ajax({
          type: "POST",
          url: sendTo,
          data: $(formId).serialize(),
          contentType: "application/x-www-form-urlencoded",
          dataType: "text",
          success: (data) => {
            return res(data);
          }
        });
      })
    
    }
    
    function getCaptchaToken(opts) {
      const SITE_KEY = 'SITEKEY';
    
      return new Promise((res) => {
        $.getScript('https://www.google.com/recaptcha/api.js?render=' + SITE_KEY, () => {
          grecaptcha
            .ready(() => {
              grecaptcha
                .execute(SITE_KEY, opts)
                .then((token) => {
                  return res(token);
                });
            });
        });
      })
    }
    Ответ написан
    Комментировать
  • Как сделать «впуклую» границу?

    @StiflerProger
    Попробовать реализовать свою задумку что в комментарии написал. Вот что вышло, вроде не плохо, но опыта в верстке у меня не много) Не могу сказать насколько качественно



    <div class="card">
      Card Content
      <div class="card__link">
        <div class="card__arrow">
          <div class="card__arrow__link">
            <a href="#">></a>
          </div>
        </div>
      </div>
    </div>


    .card {
      --card--bg-color: rgb(227, 232, 239);
      position: relative;
      width: 400px;
      height: 500px;
      background-color: var(--card--bg-color);
      border-radius: 30px 30px 30px 0;
      
      .card__link {
        position: absolute;
        bottom: 0;
        left: 0;
        transform: translateY(100%);
        width: 320px;
        height: 80px;
        background-color: var(--card--bg-color);
        border-radius: 0 0 30px 30px;
        
        .card__arrow {
          position: absolute;
          top: 0;
          right: 0;
          width: 100px;
          height: 100px;
          transform: translateX(100%);
          
          &:before {
            content: '';
            display: block;
            width: 50%;
            height: 50%;
            background-color: var(--card--bg-color);
          }
          
          .card__arrow__link {
            width: 100%;
            height: 100%;
            background-color: white;
            position: absolute;
            top: 0;
            border-radius: 100%;
            display: flex;
            justify-content: center;
            align-items: center;
          }
          
          a {
            display: flex;
            justify-content: center;
            align-items: center;
            color: white;
            width: 70%;
            height: 70%;
            text-decoration: none;
            background-color: rgb(0, 78, 235);
            border-radius: 100%;
          }
        }
      }
    }
    Ответ написан
  • Можно ли управлять кодом через компьютер когда он на сервере?

    @StiflerProger
    Программы которые подключаются к серверу позволяют менять файлы локально.
    Putty, Tabby, FileZilla и тп. Но это такой геморрой, работать по файлику за раз, каждый раз перезаливая их.

    Добавь свой проект в git репозиторий, и настрой на сервере ssh доступ.
    Куда проще и удобней будет работать. Сделал изменения у себя на компьютере, закомитил их в git, и просто на сервере написал git pull и всё, все изменения уже там.

    не нужно изучать досконально как работать с гитом. Просто скачай GitHub Desktop и работай с гитом через интерфейс.

    Самое муторное для тебя, это будет настроить гит на сервере..интсртукция
    Ответ написан
    Комментировать
  • Как типизировать числа с точкой и тире?

    @StiflerProger
    Вот такой вариант playground

    type Coord =`${number}.${number}`;
    type Zipcode =`${number}-${number}`;
    
    let a: Coord = '-3.3' // ok
    let b: Coord  = "-81." // error
    let c: Coord  = "123.00" // ok
    
    let d: Zipcode = '4565' // error
    let e: Zipcode = '4565-' // error
    let f: Zipcode = '4565-2' // ok
    let g: Zipcode = '4565-2-2' // error
    Ответ написан
    7 комментариев
  • Как правильно вставить переменную в document.querySelector?

    @StiflerProger
    document.querySelector(`input[name=${fruits[i]}]`).value

    document.querySelector('input[name=' + fruits[i] + ']').value
    Ответ написан
    2 комментария
  • Как накинуть условие на длину массива в типе?

    @StiflerProger
    export interface ContextMenuListProps {
        title?: string;
        items: [ContextItemsProps, ...ContextItemsProps[]];
    }


    playground
    Ответ написан
    3 комментария
  • Как в javascript расшифровать зашифрованный (aes-128-ecb) текст в php?

    @StiflerProger
    function decrypt(encryptedText, key) {
      var decryptedBytes = CryptoJS.AES.decrypt(
        {
          ciphertext: CryptoJS.enc.Base64.parse(encryptedText)
        },
        CryptoJS.enc.Utf8.parse(key),
        { mode: CryptoJS.mode.ECB }
      );
      
      var plaintext = decryptedBytes.toString(CryptoJS.enc.Utf8);
      return plaintext;
    }
    
    var encryptedText = "P6WsUEHMRTa620LtYJ3Nqu9yKhGev0ZL4Ps+z61kWN4="; // Замените на свой зашифрованный текст
    var key = "mysecretpassword"; // Замените на свой ключ
    
    var decryptedText = decrypt(encryptedText, key);
    console.log("Decrypted Text:", decryptedText);
    Ответ написан
    Комментировать
  • Как правильно прописать вызов функции на событие, например, нажатие кнопки «Оплатить»?

    @StiflerProger
    ну потому-что тебе в html нужно просто добавить
    var payments = new cp.CloudPayments({
        language: "ru-RU",
        email: "",
        applePaySupport: false,
        googlePaySupport: true,
        yandexPaySupport: true,
        tinkoffInstallmentSupport: true,
    });


    а второй участок кода, уже запихнуть в функцию, и вызывать её по клику.
    А сейчас у тебя как только загружается страница выполняется метод payments.pay(...> который открывает форму оплаты

    upd:
    --<a href = "#pay" class="btn btn-success d-block btn-lg ajax-modal"><?php echo html_svg_icon('solid', 'shopping-cart'); ?> Купить</a>
    ++<a href = "#pay" onclick="checkout" class="btn btn-success d-block btn-lg ajax-modal"><?php echo html_svg_icon('solid', 'shopping-cart'); ?> Купить</a>


    в после body добавить это
    <script>
    var payments = new cp.CloudPayments({
        language: "ru-RU",
        email: "",
        applePaySupport: false,
        googlePaySupport: true,
        yandexPaySupport: true,
        tinkoffInstallmentSupport: true,
    });
    
    function checkout() {
      payments.pay("charge", {
        publicId: "ВАШ_ID",
        description: "Тестовая оплата",
        amount: 100,
        currency: "RUB",
        invoiceId: "",
        accountId: "",
        email: "",
        skin: "classic",
        requireEmail: true,
      });
    }
    </script>
    Ответ написан
  • Почему не работает код jquery?

    @StiflerProger
    -let thumbnail = event.target.closest('#single_image');
    +let thumbnail = $(this).find('#single_image');

    и замени id на классы
    Ответ написан
  • Как парсить товары?

    @StiflerProger
    предполагаю что у тебя $('.index-root-KVurS')это враппер всех машин, и поэтому у тебя цикл each выполняется только один раз, и в $(elem).find('div.iva-item-titleStep-pdebR > a') попадают сразу все названия и цены.
    --$('.index-root-KVurS').each(
    ++$('.index-root-KVurS > div').each(

    попробуй что-то типо этого, а лучше > div заменить уже на какой-то класс, который присущ каждой модели машины
    Ответ написан
    Комментировать
  • Как найти минимальное значение в строках матрицы?

    @StiflerProger
    Решение писать не буду, но направлю твоё мышление, потому-что у тебя сейчас код написан просто "от балды", и не делает вообще ничего

    Первым дело ты определил что размер матрицы (i x j), где i - высота матрицы (строки), j - ширина (столбцы)
    По заданию, нужно найти минимальное значение в каждой строке матрицы, соответственно перебираем строки
    for (let i = 0, i < mass.length, i++) {
      // mass[i] это строка массива в каждой итерации цикла
    }

    до этого момента у тебя всё правильно, а теперь начинаются ошибки. По логике, чтобы найти минимальное значение в строке, нужно пройтись по каждому элементу в текущей строке mass[i], соответственно количество итераций, во втором цикле, должно быть равно mass[i].length, а не mass.length, как у тебя сейчас
    for (let j = 0, j < mass[i].length, j++) {
      // mass[i][j] это каждый столбец в строке 
    }

    теперь, остаётся только сравнивать каждый элемент mass[i][j], и найти минимальный, для этого перед началом цикла, тебе нужно создать переменную, в которую ты запоминаешь минимальное значение. Ты пытался это сделать, но присваиваешь s = 0, хотя лучше занести сюда первое значение в массиве let min = mass[i][0] (задаю название переменной так, чтобы было понятно что она означает)
    И перебирая элементы в цикле, ты должен сравнивать значение текущего минимального (min) и значение текущего элемента (mass[i][j]), если элемент текущий получился меньше, то присваиваешь его значение в минимальному
    // вариант 1.
    if (min > mass[i][j]) min = mass[i][j];
    
    // вариант 2.
    min = Math.min(min, mass[i][j]);


    по окончанию цикла, у тебя в переменной min, будет минимальное значение в строке матрицы
    for (let i = 0, i < mass.length, i++) {
      // mass[i] это строка массива в каждой итерации цикла
      // тут создавай переменную min
      for (let j = 0, j < mass[i].length, j++) {
        // mass[i][j] это каждый столбец в строке 
        
        // тут сравнивай текущее значение с минимальным
      }
      // тут у тебя min будет минимальным в строке
    }
    Ответ написан
  • Как добавить элементам массива свойства в зависимости от условия?

    @StiflerProger
    const arr = [
      { name: "А" },
      { code: 1, name: "Адыгея, Респ.", capital: "Майкоп" },
      { code: 104, name: "Азербайджан", capital: "" },
      { name: "Б" },
      { code: 2, name: "Башкортостан, Респ.", capital: "Уфа" },
      { code: 3, name: "Таганрог", capital: "" },
      { code: 5, name: "Сочи", capital: "" },
      { code: 105, name: "Беларусь", capital: "" },
      { name: "В" },
      { code: 33, name: "Владимирская обл.", capital: "Владимир" },
      { code: 34, name: "Волгоградская обл.", capital: "Волгоград" },
      { code: 35, name: "Вологодская обл.", capital: "Вологда" }
    ];
    
    for (let i = 0; i < arr.length; i++) {
      if (!arr[i].code) continue;
    
      if (!arr[i - 1].code) {
        arr[i].position = "top";
      } else if (i + 1 === arr.length || !arr[i + 1].code) {
        arr[i].position = "bottom";
      } else {
        arr[i].position = "center";
      }
    }
    
    console.log(arr);
    Ответ написан
    Комментировать
  • Переход на новую страницу, как сделать?

    @StiflerProger
    window.location = 'https://google.com'
    Ответ написан
    Комментировать
  • Почему не работает фильтрация?

    @StiflerProger
    const props = {
      purpose: "Здоровье марсиан",
      medications: [
        {
          Article: "Первое",
          Purposes: [
            {
              Purpose: "Мужское здоровье"
            },
            {
              Purpose: "Женское здоровье"
            }
          ]
        },
        {
          Article: "Второе",
          Purposes: [
            {
              Purpose: "Детское здоровье"
            }
          ]
        },
        {
          Article: "Третье",
          Purposes: [
            {
              Purpose: "Здоровье марсиан"
            },
            {
              Purpose: "Мужское здоровье"
            }
          ]
        }
      ]
    };
    
    console.log(
      props.medications.filter(
        (f) => !props.purpose || f.Purposes.find((e) => e.Purpose === props.purpose)
      )
    );

    Ответ написан
    Комментировать
  • Грамотно ли написан код?

    @StiflerProger
    В вашем коде от цикла нет смысла, если без цикла просто
    document.write(week.slice(0,-2).join(',') + ',' + week.slice(-2).join(',').bold());

    то код хороший
    в цикле надо перебирать по одному дню и выводить
    const week = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье'];
    
    for (let i = 0; i < week.length; i++) {
      if (week[i] === 'Суббота' || week[i] === 'Воскресенье') {
        document.write(week[i].bold());
      } else {
        document.write(week[i]);
      }
    }

    чтобы не сравнивать выходные по названию, можно вместо строк использовать объекты
    const week = [{title: 'Понедельник', weekend: false}, ... {title: 'Воскресенье', weekend: true}];
    
    for (let i = 0; i < week.length; i++) {
      document.write(week[i].weekend ? week[i].title.bold() : week[i].title);
    }
    Ответ написан
    3 комментария
  • Как выводить весь текст из textarea что бы найденное слово было подсвеченным красным?

    @StiflerProger
    Немного поправил твой код ещё, newArr и newArr_lengh глаза резали)

    function myPoisk() {
      var outPut = document.getElementById("output");
      var slovo = document.getElementById("input_poisk").value;
      var text = document.getElementById("text_area").value;
      var slova = text.split(' '); // массив исходных слов
      var dopVar = 0;
      slovo = slovo.trim();
    
      if (slovo == '') {
        alert('Введите слово!')
      } else {
        var i = 0;
        var letterIndex = 0; // индекс текущего символа
        for (i; i < slova.length; i++) {
          if (slovo.toLowerCase() == slova[i].toLowerCase()) {
            //outPut.innerHTML = 'Ваше слово найдено!' + '<br>' + '<br>' + `<span>${newArr[i]}</span>`;
            finish(text, letterIndex, slova[i].length);
            dopVar = 1;
            return false;
          }
          letterIndex += slova[i].length + 1; // +1, потому-что нужно учитывать пробелы
        }
        if (dopVar != 1) {
          alert("Такого слова нет!");
        }
      }
    }
    
    // Функция принимает координаты, которые нужно подсветить,
    // и выводит в #output
    function finish(text, from, size) {
    
      const answer = text.substr(from, size);
      const _text = text.replace(answer, `<span>${answer}</span>`);
    
      document.getElementById("output").innerHTML = _text;
    
    }


    Ответ написан
    4 комментария
  • Как вывести 2 числа?

    @StiflerProger
    Вариант №1
    const additional = createTableWithContent(`${randInt()} ${randInt()}`, "two");


    Вариант №2
    const additional = createTableWithContent(genInts(), "two");
    
    // =====
    function genInts(min = 1, max = 10) {
      return `${randInt(min, max)} ${randInt(min, max)}`;
    }
    Ответ написан
  • Скопировать текст?

    @StiflerProger
    Я как-то давно писал метод для копирования. Года 2 назад это было, поэтому не скажу что и почему сделал так xD
    но работает
    function copyToClipboard(text) {
        let span = document.createElement('span');
    
        span.style.position = 'absolute';
        span.style.top = 0;
        span.style.zIndex = -999;
        span.style.opacity = 0;
        span.style.color = 'initial';
        span.style.fontSize = 'initial';
        span.style.whiteSpace = 'pre';
    
        span.appendChild(
          document.createTextNode(text)
        );
    
        document.body.appendChild(span);
    
        let range = document.createRange();
        let selection = window.getSelection();
    
        selection.removeAllRanges();
        range.selectNode(span);
        selection.addRange(range);
    
        let success;
    
        try {
          success = document.execCommand('copy');
        } catch(e) {
          success = false;
        }
    
        selection.removeAllRanges();
    
        document.body.removeChild(span);
    
        return success;
      }
    Ответ написан
    Комментировать