• Как использовать worker_threads с .ts/.tsx?

    muscimolus
    @muscimolus Автор вопроса
    Kentavr16, извиняюсь.

    import { Worker } from 'worker_threads'
    
    const worker = new Worker('./worker.tsx', {
        execArgv: [
            '--env-file=.env',
            '--conditions=react-server'
        ]
    })


    Нода выбрасывает ошибку о неизвестном/неподдерживаемом расширении файла, говорит, что можно только js/(и cjs/mjs, вроде как). Для ts/tsx использую эту библиотеку: tsx.
    Просто если пилить воркера в формате js - зачем мне вобще тогда ts? Если в формате js - значит без jsx/tsx. Если без ts/tsx - значит без типизации. Если без jsx/tsx и без типизации - зачем мне вообще какие-то реакты, например, или типизация в целом?
    Просто я не понимаю логики разработчиков и хочу понять, как это всё переиграть с минимальной костылезацией.
    Написано
  • Как сделать, чтобы встроенный обработчик события убрал сам себя?

    muscimolus
    @muscimolus
    Hidden Fronter, во первых - вопрос задал ты не совсем правильно, перефразируй ps'ом в главном посте, что конкретно ты хочешь увидеть.
    Во первых, если доступен тач - клик и тач при тапе/клике сработают вместе, если доступен тач. Если недоступен тач - срабатывает только клик (pointer).
    Во вторых, тач вообще не может по логике сработать, когда его нет (если ты прокручиваешь страницу колесом мыши и попробуешь задержать клик и повести вверх - она листнётся?).
    Исходя из выше мной написанного - предлагаю тебе прочитать ещё раз всё вдумчиво и нормально изложить всю суть проблемы.

    P.S. Не увидел предыдущие комментарии, видимо проблему точно решил.
    Написано
  • Как правильно определить компонент как клиентский (RSC)?

    muscimolus
    @muscimolus Автор вопроса
    P.S. Это был тупой вопрос. Окружение Deno никак не подходит для RSC, без патчей, которые нежелательны. Просьба удалить вопрос.
    Написано
  • Как сделать чтобы при наведении на блок не скроллило?

    muscimolus
    @muscimolus
    thesirvlad, ну в твоём коде выше и нет блока с классом swiper, поэтому ничего и не работает.
    Написано
  • Как сделать чтобы при наведении на блок не скроллило?

    muscimolus
    @muscimolus
    imko, если ты о смартфонах, то на тачскрины этот подход и не распространяется. Вопрос то про скролл был, а не про свайп.
    Написано
  • Хранение временных объектов на стороне клиента?

    muscimolus
    @muscimolus
    firstmixon, ну вообще, если я правильно понял, у тебя есть, например, 10 блоков на странице, допустим в какой-то форме. При клике на эти блоки меняется массив данных, исходя из того, что это за блок, так? Затем, например, если эта форма отправляется - этот массив пуляется на сервер и там что-то происходит, но при этом ты хочешь обойтись без проверок этого массива данных на бэке и сделать эту форму иммутабельной, так?
    Написано
  • Хранение временных объектов на стороне клиента?

    muscimolus
    @muscimolus
    Защиту ключевых данных от изменения


    Защиту таких данных фронтенд не обеспечит. Любые данные которые ты сможешь записать в какое-либо хранилище (куки, localStorage, IDB и т.д.) браузера пользователя - этот же пользователь их может изменить/добавить/удалить через панель разработчика:

    ?
    660d44c0eb0fa200616998.jpeg


    Поэтому для хранения данных или чего-то что не должно меняться пользователем самостоятельно - используют внешние БД, логику работы с которой обеспечивает бэкенд.

    И не совсем понятна эта часть вопроса:

    ... связь условного объекта(пусть json) и разметкой HTML
    Написано
  • IntersectionObserver и slot?

    muscimolus
    @muscimolus Автор вопроса
    Антон Шаманов, если нужны сурсы для полного понимания, то:

    // client.tsx
    import { hydrate as hydrateElement } from 'preact'
    
    const observer = new IntersectionObserver((entries: IntersectionObserverEntry[]) => (
        entries.forEach(({ target, isIntersecting }) => {
            if(isIntersecting){
                console.log(isIntersecting)
                if(target.localName === 'slot'){
                    const slotName = target.getAttribute('name')
                    if(slotName){
                        import(`/dist/islands/island.${ slotName }.js`).then((exports) => {
                            const Island = slotName in exports ? exports[slotName] : null
                            if(Island){
                                hydrateElement(
                                    <Island/>, target
                                )
                            }
                        }).catch(error => console.warn(error))
                    }
                    observer.unobserve(target)
                }
            }
        })
    ), {
        root: document.querySelector('#root')
    })
    
    document.querySelectorAll('slot[name]').forEach((slot: Element) => {
        observer.observe(slot)
    })


    // Island.tsx
    export const Island = ({ name, children, ...props } : { name: string, children: any, props?: any }) => {
        const slotStyle = { display: 'initial' }
        return (
            <slot name={ name } style={ slotStyle } { ...props }>
                { children }
            </slot>
        )
    }
    Написано
  • IntersectionObserver и slot?

    muscimolus
    @muscimolus Автор вопроса
    Антон Шаманов, я не буду отвечать на этот вопрос. Суть моего вопроса была в том, что почему один и тот-же элемент, валидный, вроде как, по спецификации - при дефолтном свойстве видимости не виден обсерверу, а при кастомном свойстве стиля - виден он и все ему подобные, которые даже не видны обсерверу.
    Написано
  • IntersectionObserver и slot?

    muscimolus
    @muscimolus Автор вопроса
    Ну вопрос был не в том, для чего они используются по спецификации. Я сразу сказал, что да, вместо них можно использовать любой другой элемент. Вопрос был в том, почему при инъекции их в DOM - они не имеют изначально видимости, но когда ты устанавливаешь им свойство видимости (display) отличное от того, которое устанавливает им браузер (в моём случает chrome/canary) - они ВСЕ интерпритируются как видимые, даже когда они не попадают в обозначенную зону видимости обсервером.
    Написано
  • Как сделать карусель категорий типа Ютуба?

    muscimolus
    @muscimolus
    Не совсем понятно в чём конкретно вопрос. Как это сделать - тебе сейчас напишут минимум 2-3 человека, которым твой вопрос покажется интересным.

    Расписывай конкретно в чём у тебя проблема и прилагай код, который выполняется. По-другому - никто твой вопрос не поймёт и даже разбираться не будет.

    P.S. Да и вообще, вопрос "как написать" - это не вопрос, а уже как просьба. Если бы был вопрос "почему не работает карусель, вот код: ..." - это другое, это реальный вопрос, в котором тебе бы помогли, а так - ну Хабр не фабрика скриптов, и никто тебе не будет (наверное) писать за тебя то что ты хочешь.
    Написано
  • IntersectionObserver и slot?

    muscimolus
    @muscimolus Автор вопроса
    Написано
  • Как отключить срабатывание dragover при перетаскивании выделенного текста?

    muscimolus
    @muscimolus
    Ну дак и сделай проверку типа ноды или имени (element.nodeType === 3 || element.nodeName ==='#text') элемента. Если это текстовая нода, то не делай ничего, если это нужная тебе нода - делай то что нужно.
    Написано
  • Как администрировать Link url наиболее удобно?

    muscimolus
    @muscimolus
    1. Создаёшь глобальный контекст.
    2. Используешь контекст при рендере, например:

    <Link ... to={ context.authToken ? '/profile' : '/login' }/>
    Написано
  • Как в bitrix:catalog.search сделать поиск по нескольким разделам?

    muscimolus
    @muscimolus
    junior_www, значит у элементов нет этого свойства, всё просто. Попробуй заменить SECTION_CODE в массиве фильтра на IBLOCK_SECTION_ID или SECTION_ID и передать идентификаторы разделов, а не символьные коды.
    Написано
  • Как в bitrix:catalog.search сделать поиск по нескольким разделам?

    muscimolus
    @muscimolus
    junior_www, что передаётся в cat_url1? Полная ссылка или частичная ссылка на раздел, или именно символьный код раздела?
    Написано
  • Как в bitrix:catalog.search сделать поиск по нескольким разделам?

    muscimolus
    @muscimolus
    По нескольким - это от двух, до всех, включая дочерние. Если поиск в текущем разделе и надо искать по дочерним разделам - так и пиши. Если это общий компонент поиска по сайту - там всё так и должно работать. Если установлено какое-то решение, типа "аспро" и т.д. - тоже пиши. Если ты не опишешь максимально что тебе нужно и что за решение ты используешь - тут никто даже вникать особо не станет.
    Написано
  • Как правильно обращаться к элементам при добавление класса?

    muscimolus
    @muscimolus
    Дмитрий Ярощук, можно так:

    .catalog__info:has(.catalog-filter.active) > .catalog__wrapper {
        margin-bottom: 50px;
    }
    
    .catalog__info:has(.catalog-filter.active) > .catalog__wrapper > .catalog__btn {
        display: none;
    }
    
    .catalog__info:has(.catalog-filter.active) > .catalog__wrapper > .catalog__btn-close {
        display: block;
    }
    Написано
  • Как перезагружать страницу при появлении определённого элемента?

    muscimolus
    @muscimolus
    ReSpawner, если начнёт бесконечно перезагружаться - значит у тебя этот поп-ап уже создан на странице, предположительно, и если оно так - то тебе не создание элемента надо отслеживать, а изменение аттрибутов, как ранее уже предположили.
    Написано
  • Как перезагружать страницу при появлении определённого элемента?

    muscimolus
    @muscimolus
    ReSpawner, ну дак вот этот кусок убери:

    setTimeout(() => {
        document.body.appendChild(
            document.createElement('div')
        ).classList.add('taskblackout')
    }, 5000)


    А вот здесь:
    mutationObserver.observe(
        document.querySelector('body'), {
            childList: true
        }
    )


    Замени "document.querySelector('body')" на "document.querySelector('#content')"
    Написано