• Как получить api у персонажа из character ai?

    @Everything_is_bad
    не разбераюсь в прогромировании
    вот сначала надо и устранить этот дефект
    Ответ написан
    Комментировать
  • Почему окно браузера двигается вверх при открытии попапа?

    Sanasol
    @Sanasol Куратор тега JavaScript
    нельзя просто так взять и загуглить ошибку
    попап стоит на ссылке с href="#"?

    Если да, то не хватает e.preventDefault() в обработчике клика на кнопку открывающую popup

    Это полное вангование без кода конечно.
    Ответ написан
    Комментировать
  • Vite как включить строгую типизацию для Typescript?

    Lynn
    @Lynn
    nginx, js, css
    TypeScript не требует указания типа если он может сам его вывести и в общем случае лучше ему не мешать.

    Но если очень хочется, то вам надо настроить правило @typescript-eslint/typedef в ESLint.

    Ещё раз повторюсь, даже авторы правила для ESLint считают что это плохая идея.
    Ответ написан
    9 комментариев
  • Как записать файл в папку контейнера во время запуска docker-compose?

    black1277
    @black1277
    Вольный стрелок
    Есть способ сделать как вам нужно. Создайте файл user.txt с таким содержимым:
    username ALL = NOPASSWD: /usr/bin/tee
    вместо username подставьте имя пользователя из вашего контейнера. Для этого выполните в консоли контейнера команду whoami - получите ваш username.
    В вашем docker-compose файле добавьте к нужному сервису:
    volumes:
        - ./user.txt:/etc/sudoers.d/username

    Теперь, при запуске docker-compose будет монтироваться файл c правами sudo на использование команды tee. И у вас получится записать свой файл в нужную папку.
    Ответ написан
    1 комментарий
  • Как сделать деплой React-приложения на Netlify с json-server?

    @qwazimord
    Интроверт
    Перепиши на Next.js (тот же реакт только с SSR) и можешь выкатить его на https://vercel.com/
    Ответ написан
    5 комментариев
  • Почему не у всех есть вход по почте в Telegram?

    @Refguser
    Делаю ИМ и другие решения
    Для забаненых в гуглояндексах

    Пользователи, которые часто выходят из приложения Telegram и снова авторизуются, теперь смогут получать авторизационные коды не в СМС, а на электронную почту — или использовать функцию «Войти с помощью Apple» или «Войти с помощью Google».
    Ответ написан
    Комментировать
  • Как получить письма из папки на кирилице?

    @maksam07
    <?php
    $folder = "Название папки на кириллице";
    $encodedFolder = mb_convert_encoding($folder, "UTF7-IMAP", "UTF-8");
    $imapStream = imap_open("{imap.example.com}" . $encodedFolder, $login, $password);
    
    if ($imapStream === false) {
        echo "Ошибка: " . imap_last_error();
        exit;
    }


    или
    $encodedFolder = imap_utf7_encode($folder);
    Ответ написан
    Комментировать
  • Как сделать возможность посадить элемент при Drag'n'Drop на определенное место?

    black1277
    @black1277
    Вольный стрелок
    Примерно, вот так:

    const deleteButton = document.querySelectorAll('.column__card-button');
    const addButton = document.querySelector('.add_card')
    const cardContent = document.querySelector('.column__card-content_add')
    const columns = document.querySelectorAll('.column')
    const columnTitle = document.querySelector('.column_title')
    const mainContainer = document.querySelector('.main_container')
    const toDoContainer = document.querySelector('.todo_container')
    let actualCard = null;
    const tasks = document.querySelectorAll('.column__card')
    const areatxt = document.getElementById('textareaid')
    
    addButton.addEventListener('click', function() {
      let columnCardText = areatxt.value;
      areatxt.value = ''
      const newColumnCard = `<div class="column__card" draggable="true"><div
      class="column__card-content">${columnCardText}</div><button class="column__card-button"></button></div>`
      columnTitle.insertAdjacentHTML("afterEnd", newColumnCard);
      //updateLocalStorage()
    });
    
    mainContainer.addEventListener('click', function(event) {
      if (event.target.classList.contains('column__card-button')) {
        const card = event.target.closest('.column__card');
        if (card) {
          card.remove();
        }
      }
      //updateLocalStorage()
    });
    
    function dragStart(e) {
      actualCard = e.target
      e.target.classList.add("is-dragging");
    };
    
    function dragEnd(e) {
      this.classList.remove('hovered');
    };
    
    function dragEnter(e) {
      e.preventDefault();
      this.classList.add('hovered');
    };
    
    function dragLeave() {
      this.classList.remove('hovered');
    };
    
    function dragOver(e) {
      e.preventDefault();
      const activeElement = mainContainer.querySelector(`.is-dragging`);
      const currentElement = e.target;
      
      const isMoveable = activeElement !== currentElement && currentElement.classList.contains(`column__card`);
    
      if (!isMoveable) {
        if (e.target.classList.contains("column") && !this.contains(actualCard)) {
          this.appendChild(actualCard);
        }    
        return;
      }
      // e.clientY — вертикальная координата курсора в момент,
      // когда сработало событие
      const nextElement = getNextElement(e.clientY, currentElement);
    
      // Проверяем, нужно ли менять элементы местами
      if (
        nextElement &&
        activeElement === nextElement.previousElementSibling ||
        activeElement === nextElement
      ) {
        return;
      }
    
      this.insertBefore(activeElement, nextElement);  
    };
    const getNextElement = (cursorPosition, currentElement) => {
      // Получаем объект с размерами и координатами
      const currentElementCoord = currentElement.getBoundingClientRect();
      // Находим вертикальную координату центра текущего элемента
      const currentElementCenter = currentElementCoord.y + currentElementCoord.height / 2;
    
      // Если курсор выше центра элемента, возвращаем текущий элемент
      // В ином случае — следующий DOM-элемент
      const nextElement = (cursorPosition < currentElementCenter) ?
          currentElement :
          currentElement.nextElementSibling;
    
      return nextElement;
    };
    for (const column of columns) {
      column.addEventListener('dragenter', dragEnter);
      column.addEventListener('dragleave', dragLeave);
      column.addEventListener('dragover', dragOver);
      column.addEventListener('drop', drop);
      column.addEventListener('dragstart', dragStart);
      column.addEventListener('dragend', dragEnd);
    }
    
    function drop(e) {
      e.preventDefault();
      actualCard.classList.remove("is-dragging");
      actualCard = null;
      this.classList.remove('hovered');
      //updateLocalStorage();
    };


    Запоминалку на LocalStorage рипнул только.
    Ответ написан
    Комментировать
  • Как правильно обновлять файлы SVG в кэше браузера?

    smilingcheater
    @smilingcheater
    Что у вас в $url.icon? ссылка-на-svg#название-иконки? тогда, дописывая в конец этой строки ?{сгенерированный код} вы просто ломаете название иконки из svg-файла. Надо писать:
    ссылка-на-svg?{сгенерированный код}#название-иконки
    Ответ написан
    2 комментария
  • Почему selenium не видит элеманта captcha?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Капча расположена в iframe, это другой контекст, на который вначале необходимо переключиться, выполнить действия внутри этого контекста, затем переключиться (вернуться) на дефолтный контекст:
    import time
    from fake_useragent import UserAgent
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    option = webdriver.ChromeOptions()
    ua = UserAgent()
    option.add_argument(f'user-agent={ua.random}')
    option.add_argument("--disable-infobars")
    
    s = Service(executable_path=r"C:\Python Scripts\валид\Steam Number\chromedriver.exe")
    
    driver = webdriver.Chrome(options=option, service=s)
    driver.maximize_window()
    driver.get('https://help.steampowered.com/en/wizard/HelpWithLoginInfo?issueid=406')
    
    # iframe
    iframe = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '/html/body/div[1]/div[7]/div[2]/div[2]/div/div[2]/div[1]/div[3]/form/div[3]/div[1]/div/div/div/iframe'))
    )
    
    # switch to iframe context
    driver.switch_to.frame(iframe)
    
    element_to_click = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, '/html/body/div[2]/div[3]'))
    )
    
    element_to_click.click()
    
    # switch to default context
    driver.switch_to.default_content()
    
    time.sleep(10)
    driver.quit()

    6672812eb9ca8801428501.png

    66728135eeb06375772906.png
    Ответ написан
    7 комментариев
  • Как сверстать такой radiobutton?

    IvanU7n
    @IvanU7n
    какой, нафиг, плагин, да ещё и к jQuery? это же элементарная конструкция
    <label><input type="radio"><span>1</span></label>
    плюс что-то типа
    label > input {
      position: absolute;
      width: 0;
      height: 0;
      overflow: hidden;
    }
    label > span {
      display: flex;
      align-items: center;
    }
    label > span::before {
      content: '';
      width: 2em;
      height: 2em;
      border-radius: 50%;
      border: 2px solid #888;
      background: content-box #FFF0;
      padding: 2px;
    }
    label > input:checked + span {
      background-color: #00F;
      border-color: #00F;
    }

    допиленное по вкусу и необходимости
    Ответ написан
    2 комментария
  • Какую книгу выбрать?

    @alexalexes
    Читай все, но книжек мало.
    Чем меньше технологий в названии, тем меньше будет галопом по Европам в содержании.
    Ищите книжки отдельно по PHP (второй уровень прокачки - фреймворки: Laravel, Yii, Symphony и т.д.), отдельно JS (второй уровень прокачки: VueJS, React и т.д.), отдельно CSS (второй уровень - препроцессоры), MySQL (второй уровень Postgres, СУБД из кровавого интерпрайза). В дополнение всякие Memcached, Redis, Rest, TreeQL. Книги по шаблонам проектированиям, MVC модели и т.д., системы управления версиями, типа Git, контейнеризация, типа Docker и т.д., администрирование Linux/MS.
    https://roadmap.sh/full-stack
    https://roadmap.sh/frontend
    Ответ написан
    9 комментариев
  • Как в VS Code в Emmet добавлять / у одиночных теггов?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    Пропишите это в settings.json
    "emmet.syntaxProfiles": {
            "html": {
                "self_closing_tag" : true
            }
    }


    Ну и в целом, прикладываю: https://docs.emmet.io/customization/syntax-profiles/
    Ответ написан
    1 комментарий
  • Почему transition не создает плавной анимации?

    divside
    @divside
    Chupapi Munyanyo
    transitiob: 250ms;

    А надо N. И ставить его надо в оба класса, чтобы при уводе мышки, плавность была и назад
    Ответ написан
    5 комментариев
  • Faker JS Node JS в чем ошибка?

    @fakerjs/faker !== @faker-js/faker
    В том, который вы установили, нет никакого datatype.
    Ответ написан
    2 комментария
  • Как изменить переменную BootStrap, которая есть?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    =))

    Ну давай попробую еще раз.

    Самая вредная переменная в желтой рамке. Ее надо убить первой.


    Вы ее уже "убили".
    Вы задали значение "none".
    У вас получилось после обработки браузером
    background-color: none !important
    Кстати, для background-color это не валидное значение. Оно может принимать только цвет.
    Но хрен с ним – невалидное значение будет проигнорировано. А значит цвет станет по умолчанию назначенным браузером. Како1 цвет у окна, когда не заданы вообще никакие стили? Правильно- белый.

    Теперь идем к сути проблемы. А именно смотрим на это:

    66696e238e184969345989.png

    Здесь примененные стили отображаются каскадно снизу вверх. Наиболее приоритетные вверху.
    Я специально вырезал скриншот без объявления переменной чуть выше. Не имеет отношения.

    Сначала браузер применяет стиль background-color: #DC143C; который прописан в index.html
    А потом применяет стиль background-color: var(--bs-body-bg);, который находится в bootstrap.scss

    Cами вы не догадываетесь почему. А все просто. Стили объявленные или подключенные ниже имеют больший приоритет.

    Обязательно почитайте что такое CSS-каскад. Оно, кстати, так и расшифровывается Cascade style sheets - каскадные таблицы стилей.

    На этом моменте, я надеюсь вы уже догадываетесь, что вам следует перенести style в index.html ниже подключения bootstrap.css

    66697009ad72b667145238.png

    Либо добавить там (в index.html) !important для стиля фона.

    Или самое простое и правильное - поменять значение переменной, а не пытаться ее "убить" =))

    6669702f6ec9d517413330.png

    Основная просьба: не трогать


    А почему? Цвет страницы задается скриптами и может меняться? Ну тогда этот цвет можно просто указывать в теге body и опять не заморачиваться с переопределениями и "убийствами" =)

    <body style="--bs-body-bg: red">
    Ответ написан
    9 комментариев
  • Карта изучения Selenium, есть у вас источники и книги для изучения?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Посоветуйте ресурсы

    - Write your first Selenium script.
    - Selenium Tutorial For Beginners Step by Step With ...
    мне бы хотелось максимально узнать как водить курсором с помощью этой бибилиотеки как человек

    - Кривые Bezier.
    - Алгоритм Джиттера.
    - Полиномиальные интерполяции.
    - Временные профили скорости (velocity profiles).
    Ответ написан
    3 комментария
  • Как наиболее грамотно запустить sql файл с инициализацией бд в Docker?

    black1277
    @black1277
    Вольный стрелок
    Проще всего сделать так:
    1 создаете папку initDatabase1 рядом с docker-compose-файлом
    2 в эту папку скопируйте все SQL-файлы, которые должны выполнится после старта БД
    3 в docker-compose в секции с db1 добавьте:
    volumes:
          - ./initDatabase1:/docker-entrypoint-initdb.d

    Для второй БД создайте папку initDatabase2 и поместите туда соответствующие SQL-файлы, а в секцию с db2:
    volumes:
          - ./initDatabase2:/docker-entrypoint-initdb.d
    Ответ написан
    1 комментарий