• Как автоматически улучшать стиль CSS перед коммитом?

    Rushelex
    @Rushelex
    Frontend engineer
    У меня в проектах это так сделано:
    "husky": {
            "hooks": {
                "pre-commit": "lint-staged"
            }
        },
        "lint-staged": {
            "!(_*).scss": [
                "csscomb --tty-mode",
                "stylelint --fix --color --config ./.stylelintrc",
                "git add"
            ],
            "*.js": [
                "eslint --fix --color",
                "prettier --write",
                "git add"
            ]
        },

    И все отлично работает. Файлы с префиксом _, например _filename.scss, csscomb пропускает.

    P.S. можно по-порядку указать, какие инструменты использовать перед коммитом, т.к. это просто cli-интерфейс, как будто командная строка.
    Ответ написан
    1 комментарий
  • Как автоматически улучшать стиль CSS перед коммитом?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Prettier не умеет расставлять порядок свойств. Это вообще очень простой инструмент, который заботится только о базовом форматировании.

    То, что вам нужно, реализуется средствами stylelint и его плагина stylelint-order.
    Вот очень толковая статья, после прочтения которой вопросов не должно остаться.
    Ответ написан
    7 комментариев
  • Почему не получается симулировать событие в Enzyme?

    alexiusp
    @alexiusp
    senior frontend developer
    Судя по тексту ошибки, Enzyme не нашёл компонент, на котором вы хотите симулировать коллбэк. Причин может быть две: либо вы опечатались в селекторе, либо имя компонента при рендеринге выглядит не так, как вы думаете. Чтобы найти ошибку, попробуйте вывести в консоль wrapper.debug() и посмотреть как выглядит рендер, возможно найдёте что-то интересное. Ну и в любом случае попробуйте задать компоненту id и искать по нему, это обычно срабатывает.
    Ответ написан
    2 комментария
  • Как ко времени например "10:30" прибавить 10 минут в php?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    $oldTime = strtotime('10:30');
    $newTime = date("H:i", strtotime('+10 minutes', $oldTime));


    php sandbox
    Ответ написан
    Комментировать
  • Как вывести массив ссылок, добавив заголовки?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Сначала группируете данные:

    const grouped = list.reduce((acc, n) => (
      (acc[n.part] = acc[n.part] || []).push(n.title),
      acc
    ), {});

    А потом можно и html собрать:

    const html = Object
      .entries(grouped)
      .map(([ k, v ]) => `<div>${k}</div>${v.map(n => `<div>${n}</div>`).join('')}`)
      .join('');
    Ответ написан
    4 комментария
  • Как вывести массив ссылок, добавив заголовки?

    @StockholmSyndrome
    const data = list.reduce((acc, {title, part}) => {
      acc[part] = acc[part] || [];
      acc[part].push(title); 
      return acc;
    }, {});
    
    
    Object.entries(data).forEach(([part, titles]) => {
      [part, ...titles].forEach((item) => {
        const div = document.createElement('div'); 
        div.textContent = item; 
        document.body.appendChild(div);
      });
    });
    Ответ написан
    Комментировать
  • Как лучше организовать стейт каталога с раскрывающимися списками?

    @dimoff66
    Кратко о себе: Я есть
    1. Жестокий хардкодинг.

    subtopicList1: false,
    subtopicList2: false,


    Что там в пропущенных частях кода даже сложно представить. JSX тоже похоже выводится для каждой темы отдельно. Лучше все повторяющиеся части делать в цикле

    2. Вместо
    data-subtopic-list="subtopicList1"
     onClick={handleTopicClick}


    лучше просто написать
    onClick={e => { e.preventDefault(); handleTopicClick('subtopicList1'); }}

    и
    const handleTopicClick = subtopicList => {
      setSubtopicLists({
        ...subtopicLists,
        ...{ [subTopicList]: !subtopicLists[subTopicList] }
      });
    };
    Ответ написан
    7 комментариев
  • Как лучше вынести логику счётчика: отдельным компонентом или кастомным хуком?

    @abberati
    frontend-разработчик
    Первый вариант однозначно лучше, так как родитель теперь не знает про имплементацию детей. Но почему бы вам не инкапсулировать логику внутри Counter в кастомный хук? Он будет использоваться только компонентом Counter, так код будет ещё чище — родитель не знает про имплементацию детей, компонент Counter прост, а внутренняя логика этого компонента описана внутри кастомного хука.

    По поводу «сделать лучше»: сделайте две переменных стейта внутри app и передавайте каждому счётчику свои [countN, setCountN] — зачем счётчикам знать про другие счётчики? Тогда внутри счетчика будет меньше кода — нужно обрабатывать данные для конкретно этого счетчика, без необходимости делать setValues({ ...values, })
    Ответ написан
    2 комментария
  • Как проверить переменную "лежит" там строка или число?

    prompt() - всегда возвращает строку. Но это может быть строка с символом числа: "3" например.
    Надо попытаться перевести ее в строку: Number(n) - получим либо число, либо NuN. Например Number("2") даст 2, а Number("a") даст NaN
    Чтобы проверить, что в переменной NaN надо вызвать Number.isNaN. Number.isNaN(2) даст false, Number.isNaN(NaN)
    В итоге получаем
    var n=prompt();
    if(Number.isNaN(Number(n)))
    alert('Это строка');
    Ответ написан
    3 комментария
  • Можно ли склонировать git репозиторий по sha1(хэшу коммита)?

    agent10
    @agent10 Автор вопроса
    Software Engineer
    Вроде кое-что нашёл. Нельзя это делать по причине безопасности.
    Подробнее тут:
    git.661346.n2.nabble.com/Fetch-by-SHA-missing-td56...
    и тут:
    thread.gmane.org/gmane.comp.version-control.git/73...
    Ответ написан
    Комментировать
  • Margin установлен в значении 0. Но есть отступ над div. Как исправить?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    Писать
    * {
      margin: 0;
      padding: 0;
    }

    - плохая практика.
    Рано или поздно Вы столкнетесь с другими проблемами, связанными с разным отображением тегов.
    В наше время есть более адекватная и полная замена сему: гуглите reset css
    Например: habrahabr.ru/post/45296
    В статье заодно прочитайте для чего это нужно, чтобы просто втупую не копипастить, так как судя по Вашей активности Вы все же хотите учиться.
    Однако, и это уже считается плохой практикой, и вместо сбрасывания стилей рекомендуют нормализовать стили, гуглите normalize css
    Например: www.kobzarev.com/makeup/normalization-of-css-with-...
    Там же написано чем это лучше, чем сбрасывание стилей.
    Несмотря на то, что тут много текста, для Вас все это значит, что в начале страницы Вы подключаете или reset.css, или normalize.css - то есть для Вас это даже меньше работы.
    Ответ написан
    Комментировать
  • Почему срабатывает стиль для наименьшего разрешения (styled-components)?

    RazerVG
    @RazerVG Автор вопроса
    FrontEnd
    Для решения проблемы необходимо понять порядок правил и параметров в компоненте
    import React from 'react';
    import styled from 'styled-components';
    
    const Column = styled.div`
        position: relative;
        width: 100%;
        padding-right: 15px;
        padding-left: 15px;
    `;
    
    const columnCount = 12;
    
    const ColumnStyled = styled(Column)`    
                
        ${props => props.xs ?
            `
            @media (min-width: 576px) {
                flex: 0 0 ${(100 / columnCount) * props.xs}%;
                max-width: ${(100 / columnCount) * props.xs}%;
            }
            `
            :
            ''
        }
        
        ${props => props.sm ?
        `
            @media (min-width: 768px) {
                flex: 0 0 ${(100 / columnCount) * props.sm}%;
                max-width: ${(100 / columnCount) * props.sm}%;
            }
            ` 
            :
            ''
        }
        
        ${props => props.md ?
        `
            @media (min-width: 992px) {
                flex: 0 0 ${(100 / columnCount) * props.md}%;
                max-width: ${(100 / columnCount) * props.md}%;
            }
            ` 
            :
            ''
        }
        
        ${props => props.lg ?
            `
            @media (min-width: 1200px) {
                flex: 0 0 ${(100 / columnCount) * props.lg}%;
                max-width: ${(100 / columnCount) * props.lg}%;
            }
            ` 
            :
            ''
        }
    `;
    
    export default (props) => {
        return (
            <ColumnStyled lg={8} md={4} sm={4} xs={4}>
                { props.children }
            </ColumnStyled>
        )
    }
    Ответ написан
    Комментировать
  • Как распарсить каталог книг?

    hzzzzl
    @hzzzzl
    вот прям всегда такой формат? тогда можно тупо в лоб в цикле

    s = 'Arthur Conan Doyle – The Adventures of Sherlock Holmes, George Newnes 1892'
    author = s.split('–')[0].trim()
    by = s.split('–')[1].trim()
    last = by.lastIndexOf(' ')
    book = by.slice(0, l).trim()
    year = by.slice(l).trim()


    UPD
    ах, это про php вопрос, в нем я не силен :) ну как-то так же можно по любому тоже
    Ответ написан
    Комментировать
  • Как распарсить каталог книг?

    @Kutuzov_ska
    Я уверен, что здесь обязательно помогут регуляркой. Будет что-то вроде preg_match('/(.*)-(.*),(.*)/', .... $kek)
    $kek[0] - Автор и т.д.
    А попробуйте максимально крутой метод для гордости:) Если есть и будет возможность.
    Используйте библиотеку FANN
    https://www.php.net/manual/ru/book.fann.php

    И вот туториал https://phpnick.ru/posts/category/php/48
    Сделать по аналогии небольшой датасет

    И вот у вас искусственный интеллект который парсит книги:)
    Ответ написан
    Комментировать
  • Какой веб-сервер использовать на Маке?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Я начинал с MAMP, но мне быстро его перестать хватать и все поставил сам через brew
    Ответ написан
    2 комментария
  • Какой веб-сервер использовать на Маке?

    Surzhikov
    @Surzhikov
    Разработчик
    Установить vagrant с Linux (в вашем случае лучше всего ubuntu/debian),
    поставить apache2/nginx и все остальное через apt (несколько простых команд).
    И пользоваться этой связкой.

    Причина: когда дело дойдет до продакшена будет проще, так как базовые знания линукс уже будут.
    Ответ написан
    2 комментария
  • Какой веб-сервер использовать на Маке?

    @MadridianFox
    Web-программист, многостаночник
    Mamp, xampp и прочие это не веб-серверы, а наборы программ с панелью управления. Все они содержат в себе веб-сервер Apache, СУБД MySQL и интерпретатор PHP.
    Поэтому вообще не важно какую именно сборку вы выберете. На начальном этапе между ними нет никакой разницы - включил и работает. Дальше либо придётся копать глубже и вы полюбому будете пробовать разное и даже научитесь работать напрямую с программами. Либо глубже копать не придётся и тогда тем более не важно что вы поставите.
    Ответ написан
    Комментировать
  • Как используя addEventListener передать параметр в функцию?

    @alexeyproject
    // Вариант 1. Привязываем контекст и первые по порядку параметры
    function someFunk(a, b, event) {
    	console.log(a, b, event);
    }
    element.addEventListener('click', someFunk.bind(null, 1, 2));
    
    // Вариант 2. Используем интерфейс EventListener
    function someFunk(event) {
    	console.log(this.a, this.b, event);
    }
    element.addEventListener('click', {handleEvent: someFunk, a: 1, b: 2});
    Ответ написан
    5 комментариев
  • Как в PHP узнать последний понедельник месяца, 2 среду месяца и т.п?

    Mayzer
    @Mayzer
    Yes it is!
    Может будет полезно:

    print date('d.m.Y', strtotime("last Monday")); // 25.12.2006
    print "\n";
    print date('d.m.Y', strtotime("Monday")); // 01.01.2007
    print "\n";
    print date('d.m.Y', strtotime("next Monday")); // 08.01.2007
    Ответ написан
    Комментировать
  • В какой последовательности читать книги по JS?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    За всю свою практику продолжительностью более 20 лет я прочитал только одну книжку по программированию, это был Фигурнов про программирование на паскале под ДОС, и это было в середине девяностых... С тех пор читаю только документацию и то по мере необходимости.

    Обычно всегда ситуация так складывалась, что приходилось сначала ввязываться в бой, а по ходу уже разбираться что к чему, как, зачем и почему. В результате в начале было катастрофически сложно, зато сразу изучаешь только актуальные вещи. К тому же вырабатывается привычка постоянно искать и находить, осмыслять, переиначивать и использовать.

    В первые годы любой начинающий программист должен бессовестно красть чужой код и препарировать его, пытаясь понять ход мысли более опытных товарищей. Это гораздо лучше, чем витать в облаках, считая что прочитал умную книжку и все в порядке.

    В общем критерий истины - практика и никак иначе.

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

    Поэтому выбери себе проект, и начинай делать. Сначала будет все плохо, непонятно и вообще адский адов ад. И только если тебе хватит упорства и настойчивости, усидчивости, концентрации и везения, то, постепенно, все начнет меняться.

    Короче говоря ключевое слово тут ДЕЛАТЬ, а все остальное - лишь вспомогательные элементы.

    ЗЫ: Я встречал немало народу, почитавших книжек, прошедших курсов, знающих команды, но не умеющих их использовать, в результате не способных программировать. Для того, чтобы программировать, т.е. транслировать машине свою волю, на понятном ей языке, необходимо иметь эту самую волю для начала, а остальное уже приложится по ходу дела.
    Ответ написан
    3 комментария