Задать вопрос
  • Как записать файл в папку контейнера во время запуска docker-compose?

    black1277
    @black1277
    Вольный стрелок
    Есть способ сделать как вам нужно. Создайте файл user.txt с таким содержимым:
    username ALL = NOPASSWD: /usr/bin/tee
    вместо username подставьте имя пользователя из вашего контейнера. Для этого выполните в консоли контейнера команду whoami - получите ваш username.
    В вашем docker-compose файле добавьте к нужному сервису:
    volumes:
        - ./user.txt:/etc/sudoers.d/username

    Теперь, при запуске docker-compose будет монтироваться файл c правами sudo на использование команды tee. И у вас получится записать свой файл в нужную папку.
    Ответ написан
    1 комментарий
  • Как сделать возможность посадить элемент при Drag'n'Drop на определенное место?

    black1277
    @black1277
    Вольный стрелок
    Примерно, вот так:

    const deleteButton = document.querySelectorAll('.column__card-button');
    const addButton = document.querySelector('.add_card')
    const cardContent = document.querySelector('.column__card-content_add')
    const columns = document.querySelectorAll('.column')
    const columnTitle = document.querySelector('.column_title')
    const mainContainer = document.querySelector('.main_container')
    const toDoContainer = document.querySelector('.todo_container')
    let actualCard = null;
    const tasks = document.querySelectorAll('.column__card')
    const areatxt = document.getElementById('textareaid')
    
    addButton.addEventListener('click', function() {
      let columnCardText = areatxt.value;
      areatxt.value = ''
      const newColumnCard = `<div class="column__card" draggable="true"><div
      class="column__card-content">${columnCardText}</div><button class="column__card-button"></button></div>`
      columnTitle.insertAdjacentHTML("afterEnd", newColumnCard);
      //updateLocalStorage()
    });
    
    mainContainer.addEventListener('click', function(event) {
      if (event.target.classList.contains('column__card-button')) {
        const card = event.target.closest('.column__card');
        if (card) {
          card.remove();
        }
      }
      //updateLocalStorage()
    });
    
    function dragStart(e) {
      actualCard = e.target
      e.target.classList.add("is-dragging");
    };
    
    function dragEnd(e) {
      this.classList.remove('hovered');
    };
    
    function dragEnter(e) {
      e.preventDefault();
      this.classList.add('hovered');
    };
    
    function dragLeave() {
      this.classList.remove('hovered');
    };
    
    function dragOver(e) {
      e.preventDefault();
      const activeElement = mainContainer.querySelector(`.is-dragging`);
      const currentElement = e.target;
      
      const isMoveable = activeElement !== currentElement && currentElement.classList.contains(`column__card`);
    
      if (!isMoveable) {
        if (e.target.classList.contains("column") && !this.contains(actualCard)) {
          this.appendChild(actualCard);
        }    
        return;
      }
      // e.clientY — вертикальная координата курсора в момент,
      // когда сработало событие
      const nextElement = getNextElement(e.clientY, currentElement);
    
      // Проверяем, нужно ли менять элементы местами
      if (
        nextElement &&
        activeElement === nextElement.previousElementSibling ||
        activeElement === nextElement
      ) {
        return;
      }
    
      this.insertBefore(activeElement, nextElement);  
    };
    const getNextElement = (cursorPosition, currentElement) => {
      // Получаем объект с размерами и координатами
      const currentElementCoord = currentElement.getBoundingClientRect();
      // Находим вертикальную координату центра текущего элемента
      const currentElementCenter = currentElementCoord.y + currentElementCoord.height / 2;
    
      // Если курсор выше центра элемента, возвращаем текущий элемент
      // В ином случае — следующий DOM-элемент
      const nextElement = (cursorPosition < currentElementCenter) ?
          currentElement :
          currentElement.nextElementSibling;
    
      return nextElement;
    };
    for (const column of columns) {
      column.addEventListener('dragenter', dragEnter);
      column.addEventListener('dragleave', dragLeave);
      column.addEventListener('dragover', dragOver);
      column.addEventListener('drop', drop);
      column.addEventListener('dragstart', dragStart);
      column.addEventListener('dragend', dragEnd);
    }
    
    function drop(e) {
      e.preventDefault();
      actualCard.classList.remove("is-dragging");
      actualCard = null;
      this.classList.remove('hovered');
      //updateLocalStorage();
    };


    Запоминалку на LocalStorage рипнул только.
    Ответ написан
    Комментировать
  • Как сделать деплой React-приложения на Netlify с json-server?

    @qwazimord
    Интроверт
    Перепиши на Next.js (тот же реакт только с SSR) и можешь выкатить его на https://vercel.com/
    Ответ написан
    5 комментариев
  • Как исправить скрипт, чтобы заработал в 23 версии Cinema4D?

    black1277
    @black1277
    Вольный стрелок
    В шести местах замените xrange на range. Эту строку замените:
    if self.cells.has_key(i) and self.cells[i].has_key(j) and self.cells[i][j].has_key(k):

    на эту:
    if i in self.cells and j in self.cells[i] and k in self.cells[i][j]:

    и должно заработать. Еще в старых скриптах часто бывает print без скобок, но тут вроде бы нету.
    Ответ написан
    1 комментарий
  • Как в созданном материале сделать каналы активными?

    black1277
    @black1277
    Вольный стрелок
    Да, скорее всего баг. У меня ваш пример тоже криво срабатывает. Но помимо установки свойств через объект контейнера, можно в некоторых случаях обращаться напрямую к свойствам объекта вот так:
    material[c4d.MATERIAL_USE_COLOR] = True
    material[c4d.MATERIAL_USE_DIFFUSION] = True
    material[c4d.MATERIAL_DIFFUSION_BRIGHTNESS] = 0.25
    material[c4d.MATERIAL_USE_LUMINANCE] = True
    material[c4d.MATERIAL_USE_REFLECTION] = True
    material[c4d.MATERIAL_USE_NORMAL] = True
    Ответ написан
    2 комментария
  • Как сделать анимацию с кнопками?

    mizutsune
    @mizutsune
    I will live forever in the flame of your eyes.
    Как вариант можете попробовать такой плагин Vanilla-JS-Magic-Line-Navigation.

    Можно конечно и на CSS сделать, но функционал будет сильно урезан и вообще, сама реализация скорее всего будет не слишком норм.
    Ответ написан
    1 комментарий
  • Что должен знать Front-end разработчик о серверной части?

    black1277
    @black1277
    Вольный стрелок
    Кто же его знает, что там у него на уме... Но исходя из уточнения, я думаю он хотел услышать про REST API, и особенно про Идемпотентность
    Ответ написан
    1 комментарий
  • В чем отличие EventLoop в браузере от EventLoop в Node.js?

    black1277
    @black1277
    Вольный стрелок
    Вы немного запутались. Начиная с 11-й версии Node.js, разница в поведении приведенного вами кода в браузере и ноде - была устранена. Касаемо 6 этапов или фаз, они происходят внутри движка libuv(libuv - это многоплатформенная библиотека C, которая обеспечивает поддержку асинхронного ввода-вывода на основе циклов событий).
    Разница в том, что в Node.js мы можем не дожидаться окончания всех этих фаз, а вклиниться на определенных этапах для исполнения микрозадач (при помощи setImmediate и process.nextTick), а в браузере идет взаимодействие с Web API’s (браузерные или веб API), из которого могут поступать новые события (клики, движения мыши и др.), добавляющие в очередь новые макрозадачи(если установлены обработчики этих событий). Кроме того, в браузере есть рендеринг, который не может быть выполнен пока идет выполнение задачи движком(из этого следует, что необходимо разбивать тяжелые и длительные задачи на части).
    Как я не пытался изложить точнее и короче, к моим словам можно придраться буквально к каждой фразе. Поэтому, лучше самому изучить первоисточник и пару статей на русском:
    What is the Event Loop?
    Объяснение работы EventLoop в JavaScript
    Игра по правилам: Event loop Node.js
    Как устроены цикл событий и стек вызовов в JavaScript
    Ответ написан
    1 комментарий
  • Gulp + scss + alias, как настроить webstorm чтобы понимал alias?

    delphinpro
    @delphinpro Куратор тега Sass
    frontend developer
    Можно написать файл конфига, но не использовать.
    /*
     * Этот файл НЕ используется в сборке.
     * Он нужен только для корректного автокомплита в IDE phpStorm.
     * Эта IDE почему-то не работает как следует, при указании реально использующегося
     * файла концигурации, расположенного не в корне проекта (node_modules/laravel-mix/setup/webpack.config.js)
     */
    
    const path = require('path');
    
    module.exports = {
      resolve: {
        extensions: ['*', '.wasm', '.mjs', '.js', '.jsx', '.json', '.vue'],
        alias: {
          '@': path.join(__dirname, 'resources/js'),
        },
      },
    };

    И указать его в настройках программы
    62b8860ae733c846679738.png

    У меня иногда только такой способ работает.
    Ответ написан
    3 комментария
  • Какая нижняя планка для изучения React?

    black1277
    @black1277
    Вольный стрелок
    Нужны желание и мотивация. Изучайте прямо сейчас. Делайте много маленьких и простых приложений, чтобы усвоить основы и понять концепции этого фреймворка. Опыт будет накапливаться, в том числе и на чистом js. Если всё время откладывать и чего-то ждать - не заметите как "поезд уедет".
    Ответ написан
    1 комментарий
  • Что лучше выбрать для оптимизации сайта, тег img или font awesome?

    Fragster
    @Fragster
    помогло? отметь решением!
    с точки зрения оптимизации - (inline опционально) svg sprite
    Ответ написан
    Комментировать
  • Gulp-typescript не работает?

    @qwazimord
    Интроверт
    outFile: 'app.js', надо задавать через точку outFile: './dist/app.js',
    если задана опция outFile, то опция outDir будет проигнорирована!
    Ответ написан
    Комментировать
  • Как повторить такое в SCSS?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    $lg: 720px;
    
    @mixin _lg {
      @media (min-width: $lg) {
        @content;
      }
    }
    
    .tt {
    color: red;
    @include _lg {
          color: green;
        }
    }
    Ответ написан
    4 комментария
  • Как исправить ошибку "Cannot read properties of undefined"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    как можно адекватно решить такую проблему

    Нормально передавать параметры в функцию, а не надеяться на то, что её вызовут в нужной области видимости.
    function changeRangeWidth(sliderLeft, sliderRight, sliderRange) {
    Ответ написан
    1 комментарий
  • Как в input type='range’ сделать прокрутку видео?

    Okujava-script
    @Okujava-script
    Веб-программист с абсолютным слухом и композитор
    Если сразу после объявления элемента видео пытаться прочитать продолжительность видео, то браузер не успевает извлечь из видеофайла эту информацию. Чтобы обойти эту ситуацию, достаточно чтение video.duration обернуть функцией onloadeddata или onloadedmetadata. Т. е., строку
    range.setAttribute('max', video.duration);
    переписать так:
    video.onloadeddata = () => range.setAttribute('max', video.duration);
    Ответ написан
    Комментировать
  • Как правильно работать с Promise?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Вопрос если разница в таких записях?

    Только в передаваемом значении:
    • resolve(script) передаст дальше по цепочке этот script (который никому не нужен, похоже).
    • script.onload = resolve передаст по цепочке объект события (тоже всем по барабану)

    почему такой ее вызов дает ошибку script.onload = resolve(script);
    потому, что нужна функция, которую вызовут позже, а не мгновенный результат её выполнения.
    Ответ написан
    Комментировать
  • Как передать переменную в формируемый массив JSON в Javascript?

    Seasle
    @Seasle Куратор тега JavaScript
    Object.fromEntries(new FormData(document.querySelector('form')).entries());
    Ответ написан
    6 комментариев