• Почему после сохранения SVG в фигме он искажается?

    mixail_fet
    @mixail_fet
    Дизайнер веб-интерфейсов
    1. Все текстовые слои должны быть превращены в кривые:
    Скриншот
    5e0e0e752a020953746517.jpeg


    2. Все обводки, должны быть превращены в векторные объекты:
    Скриншот
    5e0e0e6f1478b423860862.jpeg


    3. Все векторные линии, должны иметь окончательную связь:
    Плохо
    5e0e0f31b5290729029904.jpeg

    Хорошо
    5e0e0f416653a858996484.jpeg


    К слову, это особенность любых векторных объектов, и фигма тут не причём.
    Ответ написан
    4 комментария
  • Как изменить строку с датой\временем?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    let date = '2020-04-17T03:00:00.811000Z'
    date.replace(/\.\d+Z$/g,'Z').replace(/[^\w\d]/g, '')


    "20200417T030000Z"
    Ответ написан
    Комментировать
  • Как узнать, в каком div была нажата кнопка?

    0xD34F
    @0xD34F Куратор тега JavaScript
    document.addEventListener('click', e => {
      const div = e.target.closest('button')?.closest('div');
      if (div) {
        console.log(div.id);
      }
    });

    или

    document.querySelectorAll('div button').forEach(function(n) {
      n.addEventListener('click', this);
    }, e => console.log(e.currentTarget.closest('div').id));
    Ответ написан
    3 комментария
  • Как убедить клиента что пора переделать проект?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    Давайте по порядку.
    1. Про «делать проще» или «закладывать архитектуру». Вы пошли по первому пути вполне закономерно, потому как зачем клиенту платить больше для решения своей задачи, если можно заплатить меньше? Для него это противоречит здравому смыслу. Поделюсь опытом, мы например работаем так всегда, но с небольшой (на самом деле ключевой) поправкой — мы планируем, как проект будет развиваться дальше и обязательно вместе с клиентом. Когда есть этот план работа строится итеративно, сначала выкатывается минимальная работоспособная версия (mvp), которая покрывает критический контур системы (то, без чего этот продукт точно не будет работать), затем v0, v1 и так далее. Мысль в том, что это нормальная практика. На счет «закладывать архитектуру», а откуда вы знаете какая она должна быть? Хватит пальцев одной руки чтобы посчитать сколько я видел клиентов, которые четко знают, что им нужно и в конце проекта что-нибудь не менялось. Зная это, как можно просчитать архитектуру или хотя бы даже желаемый функционал? Лучше идти итеративно и постепенно достраивать систему.

    2. Теперь про постоянные фичи, костыли и прочее. Тут упираемся в бизнес-аналитику и сбор требований. Нельзя работать в режиме Клиент сказал сделать фичу — Сделали фичу. Да ещё и по нескольку раз в день. Важно моделировать бизнес-процессы и встраивать их в существующую систему, вы-то, видно, это понимаете, но клиент-то — нет. Чтобы он понял это, с ним нужно общаться на его языке и строить работу от бизнеса. Задайте на брифинге вопросы «Какую цель вы преследуете, внедряя эту фичу? Как ещё можно достигнуть этой цели, может есть решение, которое вообще не потребует внедрения никаких фич, может это можно сделать бесплатно? Например у нас есть бизнес-аналитик, который, занимается только этим — задаёт нужные вопросы, объясняет последствия тех или иных решений, затем сам формулирует задачи, переведя их с языка бизнеса на язык разработки и начинается работа.

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

    4. Про, собственно, сам вопрос, как быть и как попробовать объяснить, что накопился огромный техдолг и его нужно рефакторить. Возвращаемся к тому же вопросу, с бизнесом нужно говорить на их языке. Сделайте презентацию, позовите клиента на вечерний чай (или чего покрепче) и покажите как сейчас и как могло бы быть. Покажите, что костыли и плохая архитектура замедляют разработку новых фич, что они УЖЕ переплатили вот *столько-то* и дальше будут переплачивать *вот столько-то* каждый месяц (ну хотябы приблизительно посчитайте). Покажите, что качество продукта неуклонно снижается, что в итоге всё работает медленно и из за этого они теряют клиентов вот в таких-то местах. Объясните, что да, сейчас всё работает и держится на ваших офигенно качественных костылях, но может произойти реальный крах вот *в такой-то момент*. Покажите, где для них наоборот есть точки роста, если сделать как вы говорите.

    Клиент должен быть разрабу друг и партнёр, а не мудак :)

    Надеюсь помог и вы что-то извлечёте из этого текста для себя, вообще чтобы более предметно говорить про это нужно больше конкретики :)

    P.S. Картинки — ТОП орал долго, спасибо)

    Павел Паленин
    Head of design in Athanor
    Ответ написан
    1 комментарий
  • Что это за ошибка в консоли?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    ну переведите, простой же перевод. Тег poligon ожидает атрибут points с числовыми значениями, а у вас туда передалось undefinend undefined. Значит, ваша переменная points имеет в себе ошибку, исправляйте
    Ответ написан
    Комментировать
  • Почему не работает fetch?

    rockon404
    @rockon404
    Frontend Developer
    1. Fetch работает. Ошибка на стороне сервера. Проверяйте сервер и учитесь работать с вкладкой network в панели разработчика.
    2. В варианте с Fetch в body, вашем случае, надо передавать URLSearchParams
    const body = new URLSearchParams();
    
    body.set('key', 'value');
    
    fetch(url, {
      method: 'POST',
      headers: {
        'Accept': 'application/x-www-form-urlencoded;charset=UTF-8'
      },
      body,
    }).then(...);

    3. Лучше используйте для запросов что-нибудь вроде axios.
    4. SPA, по-хорошему, должно взаимодействовать с сервером по REST API, а данные передаваться в формате JSON. Никаких 'x-www-form-urlencoded' быть не должно.

    и ещё вопрос, в jquery есть свойство crossdomain, подскажите плеаз как оно работает

    Забудьте JQuery. Почитайте про CORS
    Ответ написан
    Комментировать
  • Как исправить ошибку TS2339: Property 'myFormName' does not exist on type 'HTMLCollectionOf '?

    fomenkogregory
    @fomenkogregory
    Юниор софтварный инженер
    const form: HTMLFormElement = (document.forms as HTMLCollectionOf<HTMLFormElement>).myFormName

    попробуй так
    Ответ написан
    2 комментария
  • Как исправить ошибку TS2339: Property 'myFormName' does not exist on type 'HTMLCollectionOf '?

    @StockholmSyndrome
    const form = document.forms.namedItem('myFormName');
    Ответ написан
    Комментировать
  • Почему jetBrains не русифицирует свои продукты?

    gadfi
    @gadfi
    https://gamega.org
    Ага.
    Пусть еще тему по мотивам хохломы сделают, с медведями и балалайками.

    с хохломой в следующем релизе )
    post-3-13143552679398.jpg

    А если серьезно, то это прост никому не нужно.
    Ответ написан
    4 комментария
  • Ошибка на сервере "Отключите использование HOSTS". Как это сделать?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    все проще

    выходишь из опенсервера, не гасишь, а именно выходишь

    правой кнопкой по иконке

    "запуск от Администратора" - запускаешь
    Ответ написан
    7 комментариев
  • Как не сохранять картинку в кэш?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    1. Что плохого в том что картинки сохраняются в кеш?
    2. Размер кеша определен пользователем в настройках браузера. Вы не заполните ими весь диск. В чем опасение?
    3. Кто мешает юзать:
    <meta http-equiv="Cache-Control" content="max-age=3600, must-revalidate">
    Ответ написан
    Комментировать
  • Как при адаптиве совместить 2 стобца таблицы?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега CSS
    Руководитель frontend направления, предприниматель
    Изменять поведение ячеек и строк.

    К слову, запрос в поисковике так и называется «адаптивные таблицы».
    Ответ написан
    2 комментария
  • Можно ли несколько подряд стоящих одинаковых букв, заменить на одну?

    0xD34F
    @0xD34F
    re.sub(r'(.)\1+', r'\1', name)
    Ответ написан
    Комментировать
  • Какие грубые ошибки бросаются в глаза?

    RAX7
    @RAX7
    1. Почему не используются нормальные ES6 классы или хотя бы классы на прототипах ES5?
    2. Адская помесь jquery и ванили
    3. Объявление функций в цикле (checkAttributeName, printErrorMessage, etc)
    4. WTF?
      if(0 < 1){
      let div = document.createElement('div');
      div.innerHTML="";

      if(reg.test(value) == false) {
      if(..){
          var nextTab = resultNumberActiveTab + 1;
      }
      else if(...){
          var nextTab = resultNumberActiveTab - 1;
      }


    Ответ написан
    1 комментарий
  • Как расположить блок в строке таблицы?

    @strelok011
    Ну, на самом деле это всё можно решить довольно просто, без разрушения связности строк в таблице. Но для этого необходимо добавить разметки в структуру таблицы
    https://codepen.io/Strelok011/pen/wvKZadJ

    Иными словами:
    1. чтобы сделать тень вокруг строки - вам нужно завернуть каждую строку в tbody, для раскрытого элемента добавлять ей класс с тенью
    2. добавляете в tbody еще строку tr>td(colspan=число колонок), внутри верстаете в диве весть выпадающий контент.
    Ответ написан
    Комментировать
  • Как расположить блок в строке таблицы?

    ArsenyMatytsyn
    @ArsenyMatytsyn Куратор тега CSS
    Руководитель frontend направления, предприниматель
    1. Дополнительные строки в таблице (которые открывать по клику), геморрно и тебе придется считать на JS размер 3х строк, чтобы под них кинуть плашку с тенью.
    2. 8-й TD с обтеканием. И принудительным отображением не как ячейка таблицы (старый добрый хак для адаптивных таблиц). Очень давно не применял, поэтому могу ошибаться на счет исполнения, гугл поможет.
    3. Не использовать таблицы.
    Ответ написан
    Комментировать
  • Почему не работает addEventListener?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    function hid() {
        alert('hello');
    }
    
    document.addEventListener("DOMContentLoaded", function() {
        var one = document.getElementById('one');
        one.addEventListener('click', hid, false);
    });
    Ответ написан
    Комментировать