• Как рисовать такие svg в react и не только?

    @goshaLoonny
    Использовать целую библиотеку ради одной линии это конечно сильно : )
    Используйте Rete.js если не хотите заморачиваться ради одной линии.
    Но ничего сложного нету на самом деле. Нужно просто нарисовать необходимую линию на канвасе, наложить его сверху на ваши элементы и установить ему pointer-events: none. Вот и все.
    Ответ написан
    1 комментарий
  • Почему не работает миксин :before?

    cannibal_corpse
    @cannibal_corpse
    Верстальщик руками
    1. Зачем миксин для псевдо?
    2. При абсолютном позиционировании указание display: block избыточно (см. computed styles)
    3. Ты неправильно используешь миксин.
    Ответ написан
    1 комментарий
  • Не работают gulp-autoprefixer?

    delphinpro
    @delphinpro Куратор тега Gulp.js
    frontend developer
    Включу телепата и предположу, что вы оставили настройки автопрефиксера по умолчанию и сейчас не видите на выходе префиксов для свойств, которым они уже давно не нужны. Например -webkit-border-radius.
    Это не значит, что автопрефиксер не работает. Он на то и авто, что добавляет только актуальные префиксы, а ненужные удаляет.
    Ответ написан
    3 комментария
  • Как подключить базу данных в Heroku?

    @MaxKozlov
    вместо
    postsFile = open('posts.txt','r+') # Открываем файл на чтение и запись
    posts = postsFile.read().splitlines() # Читаем файл и помещаем строки в список posts
    у вас будет подключение к базе данных, создание таблицы, если надо
    и чтение из неё данных
    а вместо
    postsFile.writelines(url+'\n') # И ссылку записываем в файл posts.txt

    запись в базу данных

    первый же пример работы из гугла по запросу "python postgresql"
    https://pythonru.com/biblioteki/vvedenie-v-postgre...

    по совету Александр, ссылка на аддон Heroku Postgres
    https://elements.heroku.com/addons/heroku-postgresql

    он понадобится чтобы подключить, собственно БД от heroku
    Ответ написан
    1 комментарий
  • Почему живучий режим аккумулятора это 60%?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    Аккумуляторов напридумано множество типов. на базе разных электрохимических процессов и веществ. Но всем им свойственен циклический принцип работы, когда вещество возле электродов переходит в другое состояние и потом возвращается в исходное. Количество таких циклов не бесконечно, поскольку в любой электрохимии (кроме, может быть, газовых) в процессе перехода накапливаются непредусмотренные отходы.
    Для литиевых экспериментально установлено, что если держать заряд около 60%, то это накопление будет наиболее медленным.
    А что касается ресурса, то тут зависит от того, как его считать. Если считать в количестве циклов, то опять-таки - каких циклов. Считается, главный цикл - это заряд 0->100%, а разряд 100%->0, и тогда новый аккум до его полного износа даст примерно 1000 циклов. Где-то писали, что облегчённый цикл с неполным зарядом и неполным разрядом (20% - 80%) даст увеличение количества циклов в 2...3 раза, но эти циклы будут сильно меньше по отдаваемой энергии. Лично я это утверждение не проверял. Зато не раз проверено, что всякого рода ускоренные зарядки сильно снижают ресурс (до 500 циклов, а то и меньше). Собственно, и с мобильниками так же.
    Ответ написан
    2 комментария
  • Как полностью скопировать директорию в Gulp?

    black1277
    @black1277
    Вольный стрелок
    Вот рабочий gulpfile.js под вашу структуру проекта:
    "use strict";
    
    const {src, dest} = require("gulp");
    const gulp = require("gulp");
    const gulpCopy = require('gulp-copy');
    const outputPath = "dist/";
    
    var path = {
      build: {
        html: "dist/",
        images: "dist/"
      },
      src: {
        html: "src/*.html",
        images: ['src/img/**/*.*']
      }
    }
    
    function images() {
      return src(path.src.images)
        .pipe(gulpCopy(outputPath, {prefix: 1}))
        .pipe(dest(path.build.images));
    }
    
    const build = gulp.series(images);
    
    exports.images = images;
    exports.default = build;

    проверял у себя - копирует с сохранением структуры папок
    Ответ написан
    2 комментария
  • Правда ли что SSR постоянно отваливается?

    SeaInside
    @SeaInside
    15 лет пилю все эти штуки
    Нет, неправда.

    Не бывает так, что один и тот же код в одинаковом окружении иногда "отваливается", а иногда "не отваливается".
    Я вот за что очень люблю программирование - у всего всегда есть причина.
    Чаще всего причиной являются кривые руки. :)
    Ответ написан
    Комментировать
  • Как обосновать выбор стека технологий?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    У меня чистый JS и PHP с фреймворком Laravel.
    Во первых - неизвестно сколько кода и какой функционал у вас в проекте. Естественно инструмент выбирают под задачу, а не наоборот.

    Если у вас на фронтенде нет огромного функционала по манипулированию ДОМ, это не СПА и нет смысла тянуть еще 10 библиотек ради 200 строчек кода - чистый жс лучший выбор. Плюсы - хорошо поддерживается, любой специалист среднего уровня может поддерживать, нет необходимости в дополнительных библиотеках, которые ведут к дополнительной зависимости от чужой кодовой базы, нет необходимости следить за последними изменениями в чужой библиотеке, не тянутся лишние файлы.

    На бэкенде - ларавел неплохо покрывает 90% типовых задач "искаропки", широкий выбор достаточно качественных модулей на любой чих, хорошее покрытие тестами, обширное комьюнити и качественная документация. Качество кода однозначно будет выше по сравнению с начинающим кодером, если использовать уже кем-то написанный и многократно протестированный код. Кроме того - имеет кодестайл, приучает к (относительно) качественному подходу в разработке...

    Что из этого применимо в вашем случае - хз, так как это больше общие слова, хотя и хорошо отражающие действительность.
    Ответ написан
    4 комментария
  • Кто поможет решить задачу по JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    узнать, есть ли атрибут у элемента: element.hasAttribute('maxlength')

    установить атрибут: element.setAttribute('maxlength', 20)

    выбрать все: document.querySelectorAll('input[type=password]')

    План:
    1. выбрать все с типом password;
    2. пройти по ним циклом forEach()
    3. внутри смотреть, есть ли уже атрибут maxlength;
    4. если нет, добавить атрибут
    5. выполнить alert() в любом случае
    Ответ написан
    Комментировать
  • Как общаться между вкладками браузера js?

    profesor08
    @profesor08 Куратор тега JavaScript
    https://developer.mozilla.org/ru/docs/Web/API/Wind...

    Получаешь токен, пихаешь в localStorage, при этом все остальные вкладки получают событие storage. А значит, просто слушая этот ивент, ты сможешь обновить токен где тебе надо, на всех вкладках.
    Ответ написан
    7 комментариев
  • Как указать типы данных в импортируемом json файле?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    https://www.typescriptlang.org/tsconfig#resolveJso...

    Ну или создайте рядом с db.json файл db.json.d.ts со следующим содержимым:
    declare const JSON: {
        id: number;
    }[];
    export default JSON;
    Ответ написан
    Комментировать
  • Как указать типы данных в импортируемом json файле?

    wapster92
    @wapster92
    const create = (user: IUser) => {
        (db as IUser[]).push(user)
    }
    Ответ написан
    Комментировать
  • Зачем нужны знак впороса при получении данных?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    (data?.data?.stats)
    то же, что и
    (data && data.data && data.data.stats)

    То есть просто более короткая и более красивая запись.
    Ответ написан
    Комментировать
  • Почему может не работать радиокнопка, стилизованная через Jquery?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А зачем нужен такой изврат? Чекбоксы и радио прекрасно работают сами по себе, безо всякого JS/jQuery
    Ответ написан
    Комментировать
  • Как задать тип для массива из объектов?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    type T = {
      id: number;
      quantity: number;
    }[];
    Ответ написан
    Комментировать
  • [SASS] почему переменные breakpoints не срабатывают в media-queries?

    delphinpro
    @delphinpro Куратор тега CSS
    frontend developer
    Custom properies не работают в выражениях медиазапросов. Да и в любых других.
    Их можно использовать только в качестве значения свойства элемента (селектора).

    К размышлению. Как должен был бы повести себя следующий код:

    :root {
      --small-screen: 500px;
    }
    .sidebar { background: red; }
    
    @media (max-width: var(--small-screen)) {
      :root {
        --small-screen: 1000px;
      }
      .sidebar { background: green; }
    }
    Ответ написан
    Комментировать
  • Как перезапустить контейнер в докере с новыми параметрами?

    @Akela_wolf
    Extreme Programmer
    Это криво, но можно сделать docker commit, который запишет состояние контейнера в новый образ: https://docs.docker.com/engine/reference/commandli...

    Конкретно сейчас это вашу проблему решит, но вообще такая ситуация что после перезапуска контейнера данные пропадают - это использование контейнеров не по назначению. Контейнеры созданы чтобы быть stateless, то есть умирать и запускаться в любой момент (допустим оркестратор, такой как кубер, может запускать новые и останавливать существующие контейнеры в любой момент времени, в зависимости от множества условий). Поэтому лучше переделайте контейнер по фен-шую.
    Ответ написан
    Комментировать
  • Как лучше сделать экспорт класса, чтобы вызывать его как функцию?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    Вам лень писать new? Имхо, это перебор. Не отвалятся у вас руки три лишних символа написать, и это будет куда нагляднее чем непонятные излишние функции.

    Но рас так хочется, то тип для твоей функции таков:
    function exportConstruct<P extends any[], T>(classFromExport: { new (...args: P): T; }): 
    (...args: P) => T {
      return (...args) => new classFromExport(...args);
    }

    Но так ты теряешь например возможность использовать статические методы класса.

    Если можешь использовать Proxy то можно просто сделать класс вызываемым:
    function exportCallable<T extends { new (...args: any[]): any; }>(classFromExport: T) {
      return new Proxy(classFromExport, {
        apply(ctor, _, args) {
          return new ctor(...args);
        }
      }) as T & ((...args: ConstructorParameters<T>) => InstanceType<T>);
    }
    
    const Lol = exportCallable(class Lol extends BaseLol {
      constructor(public name: string) {
        super();
        this.name = name.toUpperCase();
      }
    });
    
    Lol('qwe');


    Либо ты можешь просто добавть статический метод, который будет делать то же самое:
    abstract class Newable {
      static new<P extends any[], T>(this: { new (...args: P): T; }, ...args: P): T { 
        return (new this(...args)) as T
      }
    }
    
    class BaseLol extends Newable {  /* ... */ }
    
    class Lol extends BaseLol {
      constructor(public name: string) {
        super();
        this.name = name.toUpperCase();
      }
    }
    
    Lol.new('qwe');
    Ответ написан
  • Как при заполнении 4 input выполнить функцию js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const inputs = [...document.querySelectorAll('.input')];
    inputs.forEach(n => n.addEventListener('input', onInput));
    
    function onInput({ target: t }) {
      if (t.value.length === t.maxLength) {
        t.nextElementSibling?.focus();
      }
    
      if (inputs.every(n => n.value.length === n.maxLength)) {
        // здесь дёргаете свою функцию
      }
    }
    Ответ написан
    2 комментария
  • React. Как удалить созданый элемент из state родителя в дочернем элементе?

    0xD34F
    @0xD34F Куратор тега React
    const Property = ({ data, onDelete }) => (
      <div>
        #{data.id}
        <button onClick={onDelete}>Del</button>
      </div>
    );
    
    const ConstructorPage = () => {
      const [ properties, setProperties ] = useState([]);
      const delProperty = property => setProperties(properties.filter(n => n !== property));
      const addProperty = () => setProperties([
        ...properties,
        {
          id: 1 + Math.max(0, ...properties.map(n => n.id)),
        },
      ]);
      
      return (
        <> 
          <button onClick={addProperty}>Add</button>
          {properties.map(n => (
            <Property
              key={n.id}
              data={n}
              onDelete={() => delProperty(n)}
            />
          ))}
        </>
      );
    };
    Ответ написан
    Комментировать