Задать вопрос
  • Почему не стоит использовать for...in, for...of, for(airbnb linter)?

    profesor08
    @profesor08 Куратор тега JavaScript
    Потому что кто-то так решил и его голос имеет сильный вес. Ты всегда может отключить данное правило.

    Связано это с тем, что в некоторых браузерах все плохо с итераторами, а for..in итеррирует в добавок и свойства прототипа, что как-бы четко поясняется в документации, а полагаться на hasOwnProperty нельзя в некоторых случаях (не поясняется почему), наверно потому, что его могут переопределить для объекта, но его могут переопределить и для Object, и тогда все плохо. Либо недостаточная поддержка браузерами.

    Резюмируя, нефиг итеррировать по свойствам объекта, для итеррации есть массивы. А свойства на то и свойства, чтоб к ним обращаться напрямую.
    Ответ написан
    4 комментария
  • Как сделать, чтобы часть текста скрывалась, если в строке более 40 символов?

    profesor08
    @profesor08 Куратор тега JavaScript
    Зачем тут городить кучу кода. Обрезал, добавил и все.

    const str = "Можете подсказать, как сделать, если в строке более 40 символов часть текста скрывалась?";
    
    function short(str, len = 40) {
    	if (str.trim().length <= len) return str.trim();
    	
    	return str.trim().substr(0, len - 3).trim() + "...";
    }
    
    short(str); // строка до 40 символов, включая точки
    short(str, 80); // строка до 80 символов, включая точки


    P.S. По хорошему бы еще отсечь возможные символы в конце строки, точки, запятые, тире и тд.
    Ответ написан
  • Как изменить курсор при наведении в JavaScript?

    profesor08
    @profesor08 Куратор тега JavaScript
    Вешаешь на канвас addEventListener("mousemove ", e => {});, где e это объект события мыши, там есть координаты, по которым двигается курсор, проверяй попадают ли оно в площадь, занимаемую картинкой на канвасе или нет.
    Ответ написан
    Комментировать
  • Как создать зашифрованный хэш паролей для Drupal 7 на js?

    profesor08
    @profesor08 Куратор тега JavaScript
    Ну так раз пароль шифруется на клиенте в браузере, значит за это отвечает какой-то js код. Смотришь код страницы, находишь нужную форму и смотришь какие там id, классы и атрибуты у поля с паролем. Далее проводишь поиск по ним в js файлах, которые грузятся на странице. Если ты прошаренный пользователь, то в devtools посмотришь какие навешаны события на форму, на поле с паролем, на кнопку, по ним найдешь нужную область кода.

    А еще ты можешь забить на это и зашифровать пароль по своему, а на сайте его дешифровать.
    Ответ написан
  • Как разбить массив на части?

    profesor08
    @profesor08 Куратор тега JavaScript
    const data = [
      [1497052800, 100, 1597052800, 120, 1597052800, 120],
      [1497139200, 140, 1597052800, 80],
      [1497225600, 200, 1597052800, 222],
      [1497312000, 80, 1597052800, 100],
    ];
    
    function getItems(arr, from, to) {
      return arr.map(arr => arr.filter((e, id) => id >= from && id <= to));
    }
    
    // data - сам массив, 0,1 это диапазон индексов, с какого по какой делать выборку
    getItems(data, 0, 1); // первые два
    getItems(data, 2, 3); // вторые два


    Если у тебя там например [x1,y1,z1,x2,y2,z2], то
    getItems(data, 0, 2); 
    getItems(data, 3, 5);


    Если [x1,y1,x2,y2,x3,y3], то
    getItems(data, 0, 1); 
    getItems(data, 2, 3); 
    getItems(data, 4, 5);
    Ответ написан
    Комментировать
  • Как перевести не обязательные параметры с С на Delphi?

    profesor08
    @profesor08
    Задай необязательным значение по умолчанию. А по коду посмотри вызовы этой функции, чтоб понять как она работает и как обрабатывать эти параметры.
    procedure DoSomething(one : string; two: integer = 0; three: integer = 0);
    Ответ написан
    Комментировать
  • Как увеличить скорость в pagespeed для мобилки?

    profesor08
    @profesor08
    В анализе все написано, на что следует обратить внимание и что занижает скорость.
    Ответ написан
    Комментировать
  • Как скопировать анимацию элемента?

    profesor08
    @profesor08
    Тебе понадобится вот это: https://github.com/airbnb/lottie-web
    Иницализация и нужный конфиг есть в коде, они рядом.

    Более того, там сурсмапы есть, все исходники как на ладони.
    Ответ написан
    Комментировать
  • О чем пищит спикер?

    profesor08
    @profesor08
    Если пищит с нажатия кнопки питания, до того как начнет грузить винду, то остается только проц, мать, память, видео и бп. Перепроверь правильно ли воткнут спикер, может контактом ошибся.
    Ответ написан
  • Зачем нужен frontend, если всю начинку сайта или проекта можно реализовать с помощью backend'a?

    profesor08
    @profesor08
    Релизуй реактивность на php. Или давай чего попроще, отобрази в браузере красную кнопку на php без использования HTML и CSS, а изюминкой добавь чтоб при нажатии пользователю выскакивал алерт "Hello world", не используя JavaScript.
    Ответ написан
    5 комментариев
  • Как заставить WordPress дописывать путь к картинке?

    profesor08
    @profesor08
    В <head> укажи тег <base href="https://sitename.ru">, тогда все относительные ссылки будут работать относительно указанного адреса.

    А еще вот: https://codex.wordpress.org/Changing_The_Site_URL , но я не уверен что это именно то что нужно. Так как при таком подходе, для генерации ссылок, тебе надо использовать https://developer.wordpress.org/reference/function...
    Ответ написан
    Комментировать
  • Как сохранить в переменную путь к содержимому ассоциируемого массива(объекта)?

    profesor08
    @profesor08 Куратор тега JavaScript
    Что-то мне подсказывает, что ты не с того конца подходить к организации данных. Ты их плохо сформировал и теперь ломаешь логову над тем, как это чудо обработать. Допустим это у тебя список покупок, так вот пусть это и будет списком (массивом), в котором каждое звено это некий список товаров из некой категории товаров. Тем самым ты получишь удобную конструкцию, по которой будет удобно итеррировать, будет удобно фильтровать, удалять, добавлять, изменять. При условии, что у тебя все завязано на категориях.

    const cart = [
      {
        category: "Машины",
        subCategory: "Автомобиль",
        items: [0, 1],
      },
      {
        category: "машины",
        subCategory: "Техника",
        items: [2, 3],
      },
      {
        category: "Органика",
        subCategory: "Цветы",
        items: [4, 5],
      },
      {
        category: "Грибы",
        subCategory: "Автомобиль",
        items: [6, 7],
      },
    ];


    Ну, а чтоб совсем все хорошо было и независимо, то вот:
    const cart = [
      {
      	id: 0,
        category: "Машины",
        subCategory: "Автомобиль",
      },
      {
      	id: 1,
        category: "Машины",
        subCategory: "Автомобиль",
      },
      {
      	id: 2,
        category: "Машины",
        subCategory: "Техника",
      },
      {
      	id: 3,
        category: "Машины",
        subCategory: "Техника",
      },
      {
      	id: 4,
        category: "Органика",
        subCategory: "Цветы",
      },
      {
      	id: 5,
        category: "Органика",
        subCategory: "Цветы",
      },
      {
      	id: 6,
        category: "Органика",
        subCategory: "Грибы",
      },
      {
      	id: 7,
        category: "Органика",
        subCategory: "Грибы",
      },
    ];
    Ответ написан
    Комментировать
  • Как оптимизировать анимацию в SCSS?

    profesor08
    @profesor08 Куратор тега CSS
    Тут помогут циклы @for https://sass-lang.com/documentation/at-rules/contr...

    @for $i from 1 through 3 {
      @keyframes rotate-left-#{$i} {
        0% { transform: rotate(0deg); }
        50% { transform: rotate(#{$i * 60}deg); }
        100% { transform: rotate(#{$i * 60}deg); }
      }
    }
    
    // не забудь заменить на rotate-right-1,2,3
    @for $i from 1 through 3 {
      @keyframes rotate-right-#{$i} {
        0% { transform: rotate(0deg); }
        50% { transform: rotate(0deg); }
        100% { transform: rotate(#{$i * 60}deg); }
      }
    }


    Но можешь пойти дальше отказавшись от left/right
    @for $i from 1 through 6 {
      $stage_0: 0;
      $stage_1: 0;
      $stage_2: $i * 60;
      
      @if $i <= 3 {
        $stage_1: $i * 60;
      }
      @else {
        $stage_2: $stage_2 - 180;
      }
      
      @keyframes rotate-#{$i} {
        0% { transform: rotate(#{$stage_0}deg); }
        50% { transform: rotate(#{$stage_1}deg); }
        100% { transform: rotate(#{$stage_2}deg); }
      }
    }
    Ответ написан
    Комментировать
  • Что можно сделать чтобы сократить код?

    profesor08
    @profesor08 Куратор тега JavaScript
    Задача кода чтоб он выполнялся, и чтоб ты его понимал. Если тебе для понимания надо написать несколько if else, пиши так. Лично я бы раскидал все по массивам, объектам и вызывал бы нужные вещи оперируя структурами данных.
    Ответ написан
    Комментировать
  • Как понять, что стажировка по java плохая, и что с нее стоит уйти?

    profesor08
    @profesor08
    Вот я вижу тут возможность заниматься самообразованием. Тебе же самому не нравится сидеть и ничего не делать. При этом тебе не хватает времени после на самообразование. Совмещай, тебе еще за это деньги платят.
    Ответ написан
    Комментировать
  • Горячая клавиша для перемещения курсора?

    profesor08
    @profesor08
    Заполнил тег, нажал Ctrl + Enter, тебя перенесет на новую пустую строку. Добавь плагин для автозакрытия тега и получишь быстрое заполнение списка.

    Еще можешь зажать Ctrl + Alt + ↓ и сможешь выделить несколько строк, а значит одним нажатием вставить столько же значений.
    Ответ написан
  • Как сделать постраничную навигацию на своем сайте php?

    profesor08
    @profesor08 Куратор тега PHP
    Как-то так. Немного деления, сложения, вычитания и округления.

    $_GET["page"] = "12";
    
    $page = 0;
    $numRows = 122;
    $rowsPerPage = 5;
    $plus = 2;
    
    if (isset($_GET["page"]) && $_GET["page"] > 0) {
        $page = intval($_GET["page"]);
    }
    
    $maxPage = ceil($numRows / $rowsPerPage);
    
    if ($page - $plus > 0) {
        echo "< ";
    }
    
    for ($i = $page - $plus; $i <= $page + $plus; $i++) {
        if ($i < 0) continue;
        if ($i > $maxPage) break;
        echo $i . " ";
    }
    
    if ($page + $plus < $maxPage) {
        echo ">";
    }
    Ответ написан
    1 комментарий
  • Проблемы с кодировкой кириллицы при наложении текста на изображение?

    profesor08
    @profesor08 Куратор тега PHP
    Сам файл должен быть в utf-8, данные должны быть в utf-8. Брать букву вот так mb_substr($txt, $i, 1, "UTF-8"). Попутно открываешь для себя многобайтные кодировки и функции для работы с ними, с префиксом mb_. Длину строки получаешь вот так: mb_strlen($name, "UTF-8")

    $str = "привет бла бла бла";
    
    echo strlen($str); // 33 wrong
    echo mb_strlen($str); // 18 ok
    
    echo $str[0]; // wrong
    echo substr($str, 0, 1); // wrong
    echo mb_substr($str, 0, 1); // ok
    Ответ написан
    1 комментарий
  • Почему for(;;); вешает процесс?

    profesor08
    @profesor08 Куратор тега JavaScript
    Потому что результатом будет бесконечный цикл. У тебя нет условия выхода из цикла. В цикле for есть три зоны разделенные точкой с запятой, они не обязаны содержать операции. Это аналог while(true).
    Ответ написан
    2 комментария
  • Callback / Promises / await - что быстрее и экономичнее?

    profesor08
    @profesor08
    Твой код все равно будет трансплититься в понятный большинству браузеров. И независимо от того, как ты напишешь свой код, затык по производительности не исправится сам по себе. Тебе надо его выявить, а потом думать как исправить. Более чисты код тебе поможет. Вот у тебя есть вложенные асинхронные вызовы, если следующий не зависит от данных предыдущего, то их можно вызывать по отдельности, не дожидаясь пока завершится один, а уже где-то ниже по коду обрабатывать их результаты. Вот подобное делать с промисами самое то, async/await избавит от написания колбеков.

    // долго, так как сначала ждем а, потом б
    // если на выполнение каждого надо по 5 сек, итоговое время выполнения будет 10 сек
    async function sum(a, b) {
      const a = await getA();
      const b = await getB();
    
      return a + b;
    }
    
    // быстро, так как создали по промису, и они одновременно обрабатываются, потом только ждем их результатов.
    // если на выполнение каждого надо по 5 сек, итоговое время выполнения будет 5 сек
    async function sum(a, b) {
      const a = getA();
      const b = getB();
    
      return await a + await b;
    }
    Ответ написан