Задать вопрос
  • Как настроить выборочные маршруты через VPN для Netflix?

    Aetae
    @Aetae
    Очевидный вариант - он лезет куда-то ещё кроме заданных тобой ip за проверкой.
    Переключи всё на vpn отключи всё левое, запусти сниффер и открой нетфликс. После чего проверь все ip\адреса куда он лез.

    По поводу ручного мучительно добавления:
    1. Если есть возможность - поставь себе https://www.asuswrt-merlin.net/ , это не убогий openwrt, так что с основной задачей роутера проблем не добавит, зато возожностей больше.
    2. Иначе - постав себе autohotkey и\или tampermonkey и заскирптуй заполнение.:)
    Написано
  • Почему после переустановки винды мусорная корзина полная?

    Aetae
    @Aetae
    ну наверное отформатировал ты один диск, а корзина с другого
    Написано
  • Как отключить обработку события без сброса имени события?

    Aetae
    @Aetae Куратор тега JavaScript
    Старую функцию можно сохранить в переменную, если вопрос с этом:
    OldChamge = document.querySelector("select").onchange;
    document.querySelector("select").onchange = null;
    
    // спустя какое-то время
    
    document.querySelector("select").onchange = OldChamge
    Написано
  • Как для возвращаемого типа функции задать типы входных параметров Function[]?

    Aetae
    @Aetae Куратор тега TypeScript
    Alexandroppolus, ну а коли они все без аргументов, то зачем data обязательна?)

    Вообще функция спецефическая, на самом деле, в общем случае проще на месте мапить как надо.:)
    Написано
  • Как для возвращаемого типа функции задать типы входных параметров Function[]?

    Aetae
    @Aetae Куратор тега TypeScript
    freshlemon, чуть поправил, отвязал от 5 версии.
    Написано
  • Как для возвращаемого типа функции задать типы входных параметров Function[]?

    Aetae
    @Aetae Куратор тега TypeScript
    Тыкаешь с ctrl в Promise.all и смотришь как там сделано, добавляешь функции с дженериком.¯\_(ツ)_/¯

    Хрень:
    1. async await у fetchPromiseAll бесполезны(не делают никакой полезной работы).
    2. У map второй параметр - индекс в массиве, тебе не нужен этот ужас с findIndex.
    3. У then аргумент не обязателен, если не передан - он сам пробросит результат.
    4. Promise.all сам вызовет then если вдруг там не промис, а thennable, так что и сам then не нужен.
    Написано
  • Можно ли узнать, какой именно хост блокирует пакет?

    Aetae
    @Aetae
    Да известно какой хост - железка роскомнадзора. Дело раскрыто, убийца - дворецкий.
    Написано
  • Rxjs как кэшировать switchMap только если новый не запущен?

    Aetae
    @Aetae Автор вопроса, куратор тега JavaScript
    Антон Горецкий, обновил коммент(и вопрос чутка для наглядности).
    Написано
  • Rxjs как кэшировать switchMap только если новый не запущен?

    Aetae
    @Aetae Автор вопроса, куратор тега JavaScript
    Антон Горецкий, что-то не сильно красивее.:)
    Да и не работает, у тебя в итоге лог такой:
    "heavyRequest triggered"
    "subscribe 1" "first"
    "subscribe 2" "first"
    "heavyRequest triggered"
    "subscribe 3" "first"
    "subscribe 1" "second"
    "subscribe 2" "second"
    "subscribe 3" "second"

    Т.е. subscribe 3 всё равно получает first, а не должен.
    Написано
  • Как написать универсальную функцию?

    Aetae
    @Aetae Куратор тега JavaScript
    Александр, ну firefox ua норм подставляет.
    Написано
  • Почему querySelector возвращает null, хотя DOM загружен?

    Aetae
    @Aetae Куратор тега JavaScript
    Observer не может начать наблюдение за элементом которого неть. Надо заставить его наблюдать за родителем(или вообще всем деревом), а уже внутри ловить появление элемента.

    Также хочу заметить:
    Название класса всегда одинаковое при перезагрузке страницы

    Это не так. Название всегда одинаковое ровно до тех пор, как хозяева сайта не выпустят следующую версию приложения, а это, в зависимости от их активности , хоть каждый день может происходить.
    Потому в таких случаях лучше использовать селекторы не завязанные на явно сгенерированную часть, например [class^="items_"].

    P.S. Я у себя использую вспомогательные функции примерно такого вида:
    // всякое 
    const EMPTY_NODE_LIST = Object.freeze(document.createElement('button').labels);
    
    function getConstructorName(value) {
      return Object.prototype.toString.call(value).replace(/^\[object (.*)\]$/, '$1');
    }
    
    function isPlainObject(value) {
      return !!value && getConstructorName(value) === 'Object';
    }
    
    function isElement(value) {
      return !!value && value.nodeType === 1 && getConstructorName(value).endsWith('Element');
    }
    
    // наблюдатель - важно что он отписывает себя на время колбэка, чтоб не поучилось вечного цикла
    function tm_observe(callback, root, immediate = true) {
      if(isPlainObject(root)) {
        var options;
        ({root = document.body || document.documentElement, immediate = true, ...options} = root);
      } else if (!isElement(root)) {
        immediate = root === undefined ? true : root;
        root = document.body || document.documentElement;
      }
    
      let stop = false;
      const observer = new MutationObserver((mutationsList, observer) => {
        disconnect();
    
        stop = callback(mutationsList, observer) === true;
    
        observe();
      })
    
      if(immediate) {
        stop = callback([Object.setPrototypeOf({
          type: 'childList',
          target: root,
          addedNodes: root.querySelectorAll(':scope > *'),
          removedNodes: EMPTY_NODE_LIST,
          previousSibling: null,
          nextSibling: null,
          attributeName: null,
          attributeNamespace: null,
          oldValue: null,
        }, MutationRecord.prototype)], observer) === true;
      }
    
      const observe = () => !stop && observer.observe(root, {
        childList: true,
        subtree: true,
        ...options
      });
    
      const disconnect = () => observer.disconnect();
    
      observe();
    };
    
    // ожидание по селектору с помощью наблюдателя 
    function waitSelector(root, selector) {
      if (!selector) [selector, root] = [root, document];
    
      return new Promise(resolve => tm_observe(() => {
        const node = root.querySelector(selector);
        if (!node) return;
       
        resolve(node);
    
        return true;
      }));
    }
    
    await waitSelector('[class^="items_"]')
    Написано
  • Как сверстать такой прогрессбар с подписью?

    Aetae
    @Aetae
    Для начала пусть дизайнер предоставит чистый элемент, причём в исходнике. А то непонянто что тут сам элемент, а что мутный фон.

    - Сам прогрессбар делается легко: берём див, скругляем углы, в него before такой-же но светлее, где ширина - нужный процент и собсно сам текст процента.
    - Чёрточку под текстом - hr block radial-gradient.
    - Подсветки\тени - без исходника не понятно, но либо radial-gradent, либо svg из исходника, либо даже тупо полупрозрачная png из исходника.
    - Размытие подложки - backdrop-filter: blur, но лучше отговорить использовать это, т.к. сильно тормозит на слабых машинах. В простых случаях можно заменить растянутой маленькой размытой картинкой.
    Написано
  • Почему значение input[type="radio"] меняется, но событие change не вызывается?

    Aetae
    @Aetae Куратор тега JavaScript
    Ну видать значение там ставят программно. При программной установке никаких событий нет(если их не вызвали вручную).

    Вот так можно кастомный слушатель сделать попатчив сам input:
    const {set, ...rest} = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'checked');
    Object.defineProperty(HTMLInputElement.prototype, 'checked', {
      set(value) {
        value = !!value;
        
        if(!this.dispatchEvent(new CustomEvent('before-checked', {
          cancellable: true,
          detail: value
        }))) return false;
        
        const res = set.call(this, value);
        
        this.dispatchEvent(new CustomEvent('after-checked', {
          detail: value
        }));
        
        return res;
      }, 
      ...rest
    })
    
    input.addEventListener('after-checked', (event) => {
      console.log('after-checked', event.target.checked, event.detail)
    });

    Само собой не обязательно патчить глобально все инпуты, можно только нужные:
    Object.defineProperty(HTMLInputElement.prototype, 'checked', { ...
    ->
    Object.defineProperty(input, 'checked', { ...
    Написано
  • Почему появляется белый прямоугольник у кнопки google на заднем фоне при использовании темной темы от bootstrap?

    Aetae
    @Aetae
    Ну открой инспектор и посмотри. Ты ожидаешь, что кто-то сделает это за тебя?
    Написано
  • Почему не собирается проект из за PrismaAdapter?

    Aetae
    @Aetae Куратор тега TypeScript
    PonomarevAleksandr, короче, я смог воспроизвести проблему.
    Похоже ты где-то импортируешь что-то из next-auth/src, вместо самого next-auth, чего делать нельзя: src там чисто для справки. Это тянет за собой всё муть. Сделай поиск по проекту и исправь импорты.
    Если явных кривых импортов нет - остаётся один путь: скопируй проект и удали из него нафиг всё, кроме первого файла. Если проблема исчезнет - очевидно проблема в других файлах. Дальше удаляй по пол-проекта, пока не найдёшь виновника.:)
    Написано
  • Почему не собирается проект из за PrismaAdapter?

    Aetae
    @Aetae Куратор тега TypeScript
    PonomarevAleksandr, тащем я добавил в dependencies ещё:
    "@next-auth/prisma-adapter": "^1.0.7",
        "@prisma/client": "^5.18.0",
        "prisma": "*",

    И спокойно без ошибок сбилдил(чистым tsc) такой файл:
    import bcrypt from 'bcrypt';
    import NextAuth, { NextAuthOptions } from 'next-auth'
    import CredentialsProvider from 'next-auth/providers/credentials';
    import GoogleProvider from 'next-auth/providers/google';
    import { PrismaAdapter } from '@next-auth/prisma-adapter';
    
    
    import { PrismaClient } from "@prisma/client"
    const prisma = new PrismaClient()
    
    export const authOptions: NextAuthOptions = {
      adapter: PrismaAdapter(prisma),
      providers: [
        GoogleProvider({
          clientId: '',
          clientSecret: ''
        })
      ]
    };


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

    Aetae
    @Aetae Куратор тега TypeScript
    PonomarevAleksandr, это что ещё за шляпа
    "postin  \"@next-auth/prisma-adapter\": \"^1.0.7\",\n    \"@prisma/client\": \"^5.18.0\",stall": "prisma"

    0_o
    Написано
  • Почему ошибка при js import в битриксе?

    Aetae
    @Aetae Куратор тега JavaScript
    denis-heise, права битрикс юзера ещё нужны. Если ты от рута эти файлы создал битрикс их трогать не может.:)
    Написано
  • Почему не собирается проект из за PrismaAdapter?

    Aetae
    @Aetae Куратор тега TypeScript
    PonomarevAleksandr, ну вот хз. Попробуй 3.3 вдруг заработает:)
    А если нет, то скипай и хрен с ним.
    Написано
  • Почему не собирается проект из за PrismaAdapter?

    Aetae
    @Aetae Куратор тега TypeScript
    PonomarevAleksandr,"причиной может быть что ты используешь слишком старую версию typecript". Версия какая? У auth 5.3.3. Если у тебя другая...
    Написано