• Visual Studio Code extension for Arduino как исправить кодировку в окне вывода?

    @Planer83
    Просто откройте Arduino IDE и в настройках переведите его на английский!! Используйте программерский софт всегда на английском, если хотите быть программистом!
    Ответ написан
    Комментировать
  • Как проверить, что экран сенсорный и не используется мышь?

    Проверить что страница открыта на мобильном устройстве - довольно просто:

    isMobile = {
            Android: function() {
                return navigator.userAgent.match(/Android/i);
            },
            BlackBerry: function() {
                return navigator.userAgent.match(/BlackBerry/i);
            },
            iOS: function() {
                return navigator.userAgent.match(/iPhone|iPad|iPod/i);
            },
            Opera: function() {
                return navigator.userAgent.match(/Opera Mini/i);
            },
            Windows: function() {
                return navigator.userAgent.match(/IEMobile/i);
            },
            any: function() {
                return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
            }
        };


    usage:
    if (isMobile.any()) {
        alert('is mobile !');
    }


    Проверить есть ли поддержка touch евентов тоже не сложно:
    function is_touch_device() {
      return !!('ontouchstart' in window);
    }
    Ответ написан
    1 комментарий
  • Как распарсить URL из JS?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    var path = location.pathname.split('/');
    var path = path[path.length-1];


    PROFIT!
    Ответ написан
    Комментировать
  • Как правильно организовать связи на Mongoose?

    @amatory10
    Эта статья я думаю должна помочь: https://alexanderzeitler.com/articles/mongoose-ref...
    Ответ написан
    Комментировать
  • Как реализуется SPA-приложение, на примере Vue.js?

    @game802 Автор вопроса
    Дали ответ на другом ресурсе, может быть кому пригодится:
    1. Да, на нем пишут как простые штуки таки и полноценные SPA, навигация работает без презагрузки.
    2. Nuxt js это сборка (VueJS + VueRouter и т.д.) которая делает Рендеринг SPA приложения на стороне сервера. Зачем он это делает? - все очень просто. SPA приложения неиндексируются поисковыми ботами из-за своей асинхронности и JS, NuxtJS решает эту проблему, делая рендер на стороне сервера (выполняет все асинхронные действия например запрос к бекенду по REST, и возвращает отрендеренный HTML)
    3. SSR (серверный рендеринг), генерирует ту страницу которую запросил пользователь например: example.ru/item/12, в данном случае SSR спросит у бэкенда Item с id = 12 , и затем сгенерирует и вернет клиенту HTML. В конце HTML документа всегда подключен файл вашего SPA приложения, который исполнится и включит реактивность. Т.е. Получается что первый запрос к сереверу это отрендеренный SSR, а все остальные переходы по приложению это уже SPA
    4. Да, просто ставите NuxtJS и наслаждаетесь разработкой.
    5. Взаимодействует через REST, делая GET|POST запросы на ваш бекенд. Либо через socket. Используйте laravel 5 как бэкенд
    6. Vuex это централизованное хранилище данных. предназначено для того чтобы жёстко отделять данные от view. Все данные хранятся в едином экземпляре, и если происходит set (мутация) для какого-либо значения в хранилище, то во всех местах где был get этого значения, произойдёт обновление.
    Этим обеспечивается реактивность, сайт перестаёт быть просто страницей. Он если хотите "обретает душу"

    Иногда в простых админках я создаю всего один основной action который делает т.н. getAllState, т.е. Берет все состояние относительно пользователя у бекенда. Например берет объекты user, comments, posts. Billing, messages и пишет это в хранилище.
    И когда мне надо обновить данные, я опять вызываю getAllState который обновит хранилище, в это время автоматически вызовется цепочка геттеров/сеттеров и вот тут сработает магия vue. Он сравнит текущий отрендеренный DOM с Новым Virtual DOM. И если где то будут различия он перерендерит этот кусок.

    Очень сложно объяснять это. Надеюсь я смог донести хоть частичку всей концепции.
    Думаю про доки говорить не стоит. Ведь все что сказано выше там написано в более подробной форме)

    Автор: Евгений Рюмин
    Ответ написан
    4 комментария
  • Какие http коды ошибок возвращать?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Есть 2 точки зрения.
    Классический REST говорит что надо отдавать ошибки в http кодах сервера.
    На практике занимались разработкой api под мобильные приложения несколько лет и столкнулись с тем, что многие библиотеки используемые для работы с апи на мобильных приложениях:
    а) хреново работают с любым заголовком отличным от 200
    b) хреново работают с любыми методами отличными от GET/POST

    В итоге пришли к следующему решению (кусок из внутренней документации):
    84e91208aadc415ea342aa6f822275ea.png
    где code 400 говорит о том что серверу не нравятся какие то данные в запросе, error_code говорит о том что именно не нравится (почта, пароль итд - список свой в каждом методе api)
    Ответ написан
    Комментировать
  • Курсы для фронтендера\дизайнера по завершению которых выдают сертификат (удаленно)?

    HoHsi
    @HoHsi
    Что-бы резюме выглядело солидно, не занимайтесь дро***ом с сертификатами.
    1) Заведите GitHub аккаунт и начните писать открытые библиотечки / сайты. (пусть и корявые, но со временем...)
    2) На том же гите работайте над чужими проектами. Форкайте, пытайтесь запилить свой мердж.
    3) Перестаньте уже заниматься х***ней с сертификатами / тренингами / блицами. Работайте, блеять. Портфолио будет лучше смотреться от реальных работ, а не от макулатуры.
    4) Запилите блог (!!! когда уже сами будете понимать в своей области). Пишите в него статьи, переводы, гайды. Это не столько для окружающих, сколько для вас самих. Ведь как известно ни что так не закрепляет знания. как обучение ими окружающих.

    Ваш кэп.
    Ответ написан
    Комментировать
  • Как закрывать выпадающее меню при клике вне его самого?

    @everdimension
    Использовать e.stopPropagation() — плохая идея. Читайте

    Правильный способ — проверять, является ли target сделанного клика элементом меню или чем-то другим. Если это не меню — закрывать меню.

    Появляется правильный вопрос, что делать, если кликнутый элемент — дочерний элемент меню? Для этого есть офигенный метод node.contains()

    Собственно, вся требуемая проверка получается совсем несложная — gist
    var el = document.getElementById('el');
    
    document.addEventListener('click', outsideEvtListener);
    
    function outsideEvtListener(evt) {
        if (evt.target === el || el.contains(evt.target)) {
            // клик внутри
            return;
        }
        // код для закрытия меню, например el.classList.add('hidden')
       
        // не забыть убрать слушатель событий (не для каждой имплементации требуется)
        document.removeEventListener(outsideEvtListener);
    }
    Ответ написан
    2 комментария
  • Как закрывать выпадающее меню при клике вне его самого?

    erniesto77
    @erniesto77
    oop, rb, py, php, js
    function clickOutside (el) {
    	$(document).on('click', function(event) {
    		event.stopPropagation();
    		if ($(event.target).is(el)) return;
    
    		console.log('Клик мимо меня');
    	});
    }
    
    upd:
    
    function clickOutside (selector) {
    	document.addEventListener('click', function (event) {
    		event.stopPropagation();
    		var el = document.querySelector(selector);
    		if (event.target === el) return;
    
    		console.log('Не попал =)');
    	});
    }
    
    upd:
    
    function findParentBySelector(elm, selector) {
        var all = document.querySelectorAll(selector);
        var cur = elm.parentNode;
        while(cur && !collectionHas(all, cur)) {
            cur = cur.parentNode;
        }
        return cur;
    }
    
    function clickOutside (selector) {
    	document.addEventListener('click', function (event) {
    		event.stopPropagation();
    		var el = document.querySelector(selector);
    		if (event.target == el) return;
    
        // Проверка на то что это дочерний элемент
        if (event.target == findParentBySelector(selector)) return;
    
    		console.log('Не попал =)');
    	});
    }
    Ответ написан
    8 комментариев