Задать вопрос
  • Вопросы по оформлению 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)
    }
  • Как передать большое количество текста через ajax в php?

    @ksnk
    А посылать dataType: 'JSON', обязательно? Если убрать в тестовом примере dataType вообще - не станет ли лучше ?
  • Как правильно сверстать такую границу у блока?

    @ksnk
    Danya Wyse, Хотя, возможно и с градиентами. Вот только резать нужно не отдельным слоем бякграунлда, а clip-rect. Ну и бякграунд будет отдельным дивом внутри. Сделано корявенько, но выглядит, вроде, как надо.
  • Как правильно сверстать такую границу у блока?

    @ksnk
    Danya Wyse, Спрашивай автора ответа, я просто вывел его вариант в более удобной для этого сайта форме.
    imho,
    Нет, в таком виде это невозможно. Тут бякграунд строится как 2 элемента, в нижнем
    на золотом фоне рисуется черная полоса, повернутая на 150%, в верхнем, поверх этой картинки рисуется черный прямоугольник с уменшеными на 5px габаритами. Так что прозрачность так не получить.
    Вероятно, можно svg нарисовать и поставить фоном, растянутым по всей картинке.
  • Как правильно сверстать такую границу у блока?

    @ksnk
    Лучше кодпен использовать вместо кодсандбох. Тут и поддержка его есть
  • Как решить задачу с использование цикла for?

    @ksnk
    Алексей Уколов, Возможно, цикл нужен, чтобы повторить ввод пароля в случае ошибки
  • Как проверить документ на оригинальность?

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

    @ksnk
    Если вам хочется, чтобы огонь залезал поверх верхней секции и верхняя секция оставалась кликабельной - есть свойство pointer-events:none; в стилях.
    В этом случае "огонь" - отдельный элемент с таким свойством и позиционированный с таким z-индексом как надо .