• Какие есть способы голосового управления сайтом?

    @ksnk
    Схема - ставишь на сайт
    <input type="file" accept="audio/*" capture="user">
    Имеются противопоказания - не только лишь все броузеры такое любят и поддерживают.

    при изменении засылаешь на сайт получившийся файл, он распознается сайтом в текст, дальше поиск по тексту с пониманием что вообще хочет этот юзер, кроме как выругаться. И делаешь, если юзер сумел сказать что-то вразумительное. Сам распознаватель - Тынц. Сам код на ноде, с использованием сервисов фейсбука. Для 18 года - норм, а вот как оно сейчас будет работать - не сильно уверен...
    Написано
  • Не получаю ответ на HTTP запрос запущенный в php скрипте через curl но получаю ответ в браузере, как исправить?

    @ksnk
    Может второй строчки не хватает ?
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

    В броузере редиректов в сетевой консоли не видно ?
    Написано
  • Что делает (или позволяет делать) файл auth.php в битре?

    @ksnk
    Этот файл позволяет авторизоваться как админ.
    Разумнее всего обновиться на новую версию битрикса, так как в старых довольно много дыр, которые заткнуты только в последних версиях ядра. Заодно и на 8-ку переехать. Правда достаточно сложный сайт потребует серьезной работы по переезду.
    Для иллюстрации как все непросто в этой системе - https://habr.com/ru/companies/cyberok/articles/765660/
    https://xakep.ru/2023/12/07/1c-bitrix-flaw/
    Написано
  • Как сделать кастомную кнопку телеграм авторизации на сайте?

    @ksnk
    WhiteHat, Тоже не нашел вменяемого способа кастомизировать кнопку входа через телегу. В качестве грязного варианта можно что-то такое предложить -
    <div style="width:240px;height:40px;display:inline-block;position:relative;">
    <script async ...></script>
    <div style="pointer-events:none;position:absolute;top:0;left:0;width:100%;height:100%;z-index:100;background:gray;"
    </div>

    Обрамить телеграмный фрейм своим с размещенным поверх него элементом с pointer-events:none;. Вот туда уже можно рисовать в бякграунде что угодно.
    Если по размеру не подходит - можно даже и clip использовать...
    Когда-то, когда деревья были большими, таким нехитрым образом нажималась кнопка загрузки файлов
    Написано
  • Как сделать кастомную кнопку телеграм авторизации на сайте?

    @ksnk
    А если заменить в строке на if (isset($_GET['logout'])) {
    ?
    Пример рабочий, если на глюки довольно старого кода не обращать внимания

    К примеру нужен бот, у которого настроен домен. Имя бота в коде должно быть указано без @
    Написано
  • Как сделать кастомную кнопку телеграм авторизации на сайте?

    @ksnk
    Там в конце твоей ссылочки на телегу - пример на PHP - чем не подошел ?
    Написано
  • Вопросы по оформлению drag'n'drop ??

    @ksnk
    Тоесть основной совет - берешь родной драг & дроп и отменяешь его к фигам ? ))) Не, я тоже примерно в том направлении делаю, но сам совет выглядит как-то нетехнологично, согласись, где-то гуглхром что-то делает не то...
    Написано
  • Как сделать анимацию для блока?

    @ksnk
    Этот блок откуда изначально взялся? Это просто проект в тильде? (Или где это нарисовано ?)
    Как он будет отображатся на сайте - единая картинка, в которой нужно еще разбираться кто куда какой линией ведет, или набор спозиционированных элементов, про которых все и так понятно ?
    Очевидно, что у дизайнера неплохо бы поинтересоваться - что он понимает под словом "анимировано", пусть пример нарисует. В зависимости от его видения , возможно , ему придется дополнительным слоем рисовать анимированные линии.
    Написано
  • Как сделать валидацию полей формы на ajax?

    @ksnk
    Переставить c клика на событие submit
    По клику тригерить submit на форме.
    если валидация расставлена правильно - она сама будет ставиться
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    Когда ты окружаешь строку кавычками - все внутренние кавычки нужно заслешить - для этого у меня используется конструкция addcslashes.
    Если последней конструкцией в массиве будет echo строковое - закрывающая кавычка не будет поставлена.
    Тут можно поставить последним элементом массива пустую строку, тогда все закроется само.
    Ну, если все равботает - то и хорошо :)
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    inQuotes == true - это значит там изображение строки, а ==false - это языковая конструкция ?
    Каждый квотированный элемент отдельно квотируем с помощью addcslashes(..., "\\'")
    Дальше примерно вот так
    <?php
    
    $data = [
        (object)array(
            'string' => '
    CHECK
    
    ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '1 + 3 . \'-\'. 4 . \'=\' . 0',
            'inQuotes' => false,
        ),
        (object)array(
            'string' => '
    
    ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '<h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => 'Olololo',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '</h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '
    
    ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '<h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => 'Number is, ',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => 'count()',
            'inQuotes' => false,
        ),
        (object)array(
            'string' => '</h2>',
            'inQuotes' => true,
        ),
        (object)array(
            'string' => '
    
    ',
            'inQuotes' => true,
        ),
        '
    if (rand(0,1)){',
        (object)array(
            'string' => '
        lol
    ',
            'inQuotes' => true,
        ),
        '
    }',
    ];
    
    $printecho = function($d=null){
        static $parameters=[];
        if(!is_null($d)){
            if($d->inQuotes){
                $val="'".addcslashes($d->string,'\\\'')."'";
            } else {
                $val = $d->string;
            }
            // пытаемся склеить крайние строковые значения
            $count=0;
            if(count($parameters)>0) {
                $x = $parameters[count($parameters) - 1];
                $x = preg_replace('~^(.{' . (strlen($x) - 1) . '})\'\'~s', '\1', $x . $val, -1, $count);
            }
            if($count>0){
                $parameters[count($parameters)-1]=$x;
            } else {
                $parameters[] = $val;
            }
        } else if(!empty($parameters)){
            echo 'echo '.implode(', ',$parameters).';';
            $parameters=[];
        }
    };
    
    foreach($data as $d){
        if(is_object($d)){
            $printecho($d);
        } else {
            $printecho();
            echo $d;
        }
    }
    $printecho();

    Я там регулярку влепил, потому что мне страшно вычислять последний символ последнего элемента массива.
    echo '
    CHECK
    
    ', 1 + 3 . '-'. 4 . '=' . 0, '
    
    <h2>Olololo</h2>
    
    <h2>Number is, ', count(), '</h2>
    
    ';
    if (rand(0,1)){echo '
        lol
    ';
    }
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    Пост плагин получается довольно сложным, нужно выковыривать и оптимизировать все найденные эхи с учетом корректности кода. В добавок надо было бы разбираться с комментариями и пробельными символами между конструкциями. А если второй просмотр делать - все будет уже распарещно как надо. Останется только склеить соседние эхи. Как это технически будет выглядеть - объектами или колбяками - тут уже на любителя, как будет удобнее.
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    kelvin57, Тоесть, ты хочешь чистить код после собcтвенного шаблонизатора ? :)
    Возникает вопрос - а зачем ? Для эффективности это особо не нужно. Для эстетичности - код порождаемый шаблонизатором и перегенерируемый при изменении шаблона тоже без разницы как выглядит. Хотя, почему бы и не да.

    Для оптимизации конструкций можно было бы выдавать из твоей функции compile не строки, а массив из строк и объектов echo с вложенным массивом параметров. Потом, при склейке получившегося кода, все рядом стоящие объекты echo склеиваются в один, просто склеивая параметры.
    Это должно быть проще, чем оптимизировать кем-то написанный код
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    В общем случае, нужно писать вполне себе сложный парсер и раскладывать весь код в синтаксическое дерево. Простым жонглированием токенами можно справится только с простыми случаями, типа все такие echo расположены в самом внешнем уровне скобок, и не содержат слишком уж вычурных конструкций внутри, а не во вложенных функциях или условных блоках. Так что должен быть предел сложности и универсальности. Я попробовал впихнуть мои 3 анонимные функции в класс, но чтобы стать чуть более универсальным - получается почти полный парсер с объемом кода, кратно больше того, что есть.
    Написано
  • Как трансформировать код из 1 вида в другой?

    @ksnk
    Поменял пример. Так, возможно, будет работать лучше. Хотя вряд ли все случаи уитываются...
    Написано
  • Как провести валидацию пустых полей?

    @ksnk
    Тут нужно разделить поля по правилам валидации.
    const n = new FormData(this);
    // зачем тут был нужен t ? 
    // правила - имя поля: ['правило', параметры...]
    const rules={
      '_': ['nempy'], // по умолчанию будем проверять на непустое значение
      'frominternet': ['or','fromcomputer','frominternet'], // здесь имена полей, в которых обязано быть хотя бы одно непустое значение
      'fromcomputer': ['or','fromcomputer','frominternet']
    }
    for (let [e, a] of n.entries()) {
        let rule=rules[e]||rules['_'];
        if(rule[0]==='nempty'){
            if (n.get(e) === ""){
                anim(e);
            }
        } else if (rule[0]==='or') {
            let found=false;
            for(let i=1;i<rule.length;i++){
                if (n.get(rule[i]) !== "") found=true;
            }
            if(!found){
                anim(e);
            }
        }
    }

    Ну и на сервере все равно нужно валидировать. Даже если броузер что-то там провалидировал.

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

    @ksnk
    Форму посылаешь на сервер и там средствами сервера отправляешь. Это самое простое.
    Написано
  • Как считать координату где останавливается колесо?

    @ksnk
    Попробуй так поменять. Но лучше бы настоящие исходники нарыть, или самому написать. Код то не особо сложный.
    P = ()=>{
        const t = Math.floor(((a+180)%360) / p);
        g[t].classList.add(y)
    }
    Написано