• Как узнать положение курсора в div'e с contentEditable="true"?

    midnightcoder-pro
    @midnightcoder-pro
    Full stack разработчик
    Знаю, поздно
    function getCursorPosition(parent) {
    	let selection = document.getSelection()
    	let range = new Range
    	range.setStart(parent, 0)
    	range.setEnd(selection.anchorNode, selection.anchorOffset)
    	return range.toString().length
    }
    
    function setCursorPosition(parent, position) {
    	let child = parent.firstChild
    	while(position > 0) {
    		let length = child.textContent.length
    		if(position > length) {
    			position -= length
    			child = child.nextSibling
    		}
    		else {
    			if(child.nodeType == 3) return document.getSelection().collapse(child, position)
    			child = child.firstChild
    		}
    	}
    }
    Ответ написан
    2 комментария
  • Как отключить автопрефиксер в phpStorm?

    @KononovD Автор вопроса
    file > settings > editor > emmet > css > "auto insert css vendor prefixes"

    спасибо, Сергей delphinpro
    Ответ написан
    Комментировать
  • Как при переходе по якорю на форму, разместить форму посреди экрана?

    ettaluni
    @ettaluni
    ERROR MEME
    Ну тут нужно высоту формы знать и высоту клинского разрешения. То есть top = top + ($(window).height() - $(id).height()) / 2
    Ответ написан
    8 комментариев
  • Какое свойство в css запретит переноса строки в column-count?

    @soledar10
    html css3 js jquery
    overflow: hidden; /* Fix for firefox and IE 10-11  */
    -webkit-column-break-inside: avoid; /* Chrome, Safari, Opera */
    page-break-inside: avoid; /* Firefox */
    break-inside: avoid; /* IE 10+ */
    break-inside: avoid-column;
    Ответ написан
    2 комментария
  • Почему не работает gulp-combine-media-queries?

    Он поломался с новой нодой и что-то не чинится.
    Попробуйте https://www.npmjs.com/package/gulp-group-css-media...
    Ответ написан
    3 комментария
  • Какой смысл от for of когда есть for in?

    evgeniy8705
    @evgeniy8705
    Повелитель вселенной
    // Новый синтаксис добавлен для перебора итерируемых коллекций. Можете написать свою коллекцию с реализацией итератора и использовать for..of для ее перебора.
    
    let arr = [`a`, `b`, `c`, `d`, `e`];
    
    for (elem in arr) {
    	console.log(elem); // 0 1 2 3 4
    }
    
    for (elem of arr) {
    	console.log(elem); // a b c d e
    }
    
    for (let iter = arr[Symbol.iterator]; iter.done;) {
    	console.log(iter.next()); // a b c d e
    }
    Ответ написан
    Комментировать
  • Что означает (jQuery) после (function( $ )?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    (function( ) {
    })();

    Вот эта конструкция называется "анонимная самовызываемая функция".

    То есть, тут два действия:
    Объявление анонимной функции
    function( ) {
    }

    и сразу ее вызов
    ()()
    Первые скобки это синтаксический приём для вызова анонимной функции. Есть и другие методы. Например
    +function(){}()
    Вторые скобки - это собственно вызов функции и при необходимости передача параметра (обычный вызов же)

    ()(jQuery) — в параметре передается jQuery

    function($){} — а тут этот параметр объявлен и используется

    (function($){})(jQuery) — итого, объявили анонимную функцию, и вызвали ее, передав параметром объект jQuery

    Например, доллар у вас используется другой библиотекой, пусть MooTools.
    Тогда вы запускаете jQuery в безконфликтном режиме

    jQuery.noConflict();

    Это значит, что доллар использоваться не будет, и объект будет доступен только по ссылке jQuery.

    Но для удобства вы можете использовать анонимную функцию и безопасно использовать внутри неё переменную доллара

    (function($){
      $('.slider').slick();
    })(jQuery);


    Чтобы стало совсем понятно, конструкцию можно переписать без анонимной функции

    var myFunc = function($){
     // some code
    }
    
    myFunc(jQuery);
    Ответ написан
    Комментировать
  • Почему не работает SSH для GitHub?

    Скорей всего у вас origin ведет на https, такое может быть, если вы проект клонили через
    git clone https://github.com/somerepo
    а не через
    git clone git@github.com:somerepo
    Проверьте через
    git remote -v
    Сменить можно через
    git remote set-url origin git@github.com:somerepo
    Ответ написан
    7 комментариев
  • Как добавить 0 перед месяцем и днём?

    miraage
    @miraage
    Старый прогер
    А дальше сами

    function twoDigits(num) {
      return ('0' + num).slice(-2);
    }
    Ответ написан
    1 комментарий
  • Как реализовать быстрый поиск в массиве объектов по значению свойства?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Не сваливать все в объект, а сразу писать в IndexedDB, а необходимые для оперативной обработки данные, например выборку по городу, брать средствами работы с IndexedDB.

    Для браузеров не умеющих работать с IndexedDB есть библиотека PouchDB, менее шустрая, чем нативные встроенные в браузер реализации (UPD: если их нет, в противном случае - используются нативные), но даже на старых браузерах (IE7,8) будет выигрыш, как по удобству манипуляции данными, так и по скорости.

    UPD: обращение к IndexedDB НЕ блокирует интерфейс и может использоваться в воркерах (см. issues на странице).

    UPD: кстати, PouchDB :
    • сам использует IndexedDB, когда она доступна, в старых WebKit, в т.ч. на Android использует WebSQL, когда совсем плохо (старые IE) - тоже чего-нибудь придумывает, как минимум - localStorage;
    • дает возможность работать с серверными данными, как c локальными, когда они доступны, идеальное решение для снижения заморочек с созданием "оффлайн" приложения или одностраничника с "миллионом записей", проводя "репликацию";
    • все танцы с бубном вокруг индексов - фоновая, абсолютно прозрачная задача.
    • если поставить на сервере CouchDB или эмулировать ее Rest api - можно забирать всех "Вась из Омска" прямо с сервера одним вызовом
    UPD: И когда, наконец, народ научиться подбирать подходящий инструмент для работы, а не валить лес пилкой для ногтей и не вскапывать грядки карьерным самосвалом?
    Ответ написан
    1 комментарий
  • Есть ли селектор для выбора элемента если за ним идёт определённый другой?

    @Floatname
    Если правильно вас понял, то вы хотите применять стили для всех, кроме последнего, т.к. после него уже нет таких же элементов, верно? Если да то вам поможет :last-of-type
    Что-то такое
    .menu__item:not(:last-of-type) {
        // ваши стили
    }
    Ответ написан
    1 комментарий
  • Периодически не срабатывает setTimeout - в чём может быть проблема?

    lazalu68
    @lazalu68
    Salmon
    Если действительно сам алгоритм правильный, и всё ломается из-за каких-то сторонних эффектов, то всё уже сложнее. Если например вы считаете, что сторонние скрипты сбрасывают таймауты, то можно попробовать декорировать clear* и посмотреть действительно ли какой-то скрипт их вызывает для массового сброса:

    (() => {
        [ 'clearInterval', 'clearTimeout' ].forEach(method_name => {
            const original_method = window[ method_name ];
            window[ method_name ] = function() {
                console.log(`method ${ method_name } is called with arguments:`, arguments)
                return original_method.apply(this, arguments)
            }
        })
    })()
    Ответ написан
    1 комментарий
  • Насколько защищена представленная конструкция php?

    @MadridianFox
    Web-программист, многостаночник
    Уязвимость - это когда злоумышленник использует такие варианты параметров, обработку которых разработчик не предусмотрел.
    Варианты обработки параметров - это не только когда мы явно сравниваем переменную с чем-то. Например печально известная функция printf() в языке Си принимает шаблон и значения, которые в него надо ставить, если шаблон может ввести пользователь, то он может подобрать такой шаблон, который выдаст больше чем планировал разработчик.
    printf - потенциально уязвимая функция.
    К потенциально уязвимым функциям можно отнести интерпретирующие функции. Например запрос к БД. Например через одну лишь функцию mysql_query() можно в теории сделать с БД что угодно.
    Это "что угодно" ограничивается тем какой запрос передаётся в функцию. Однако если запрос хоть как-то зависит от того что ввёл пользователь, то разработчику надо предусмотреть любые варианты ввода пользователя так, чтобы запрос продолжал делать то что нужно разработчику, а не пользователю.
    Но не только лишь божественные интерпретирующие функции кроют в себе опасность. Например сохранение некоторой строки в БД и последующий вывод этой строки на страницу тоже может быть опасным, хотя при записи в БД эта строка безопасна. Я говорю о подстановке js кода в страницу, которая будет показана другому человеку.
    Т.е. варианты использования введёного пользователем параметра не ограничиваются той функцией которая непосредственно обрабатывает введённый параметр, но и накапливаются дальше за всё время использования данных, которые когда-то ввёл пользователь.

    К чему я это всё?
    К тому, что для того чтобысказать уязвим ли этот код, нужно оценить как на него повлияют разные варианты введённого логина и пароля или других параметров, которые возможно есть в этом скрипте.
    Я не вижу в этом коде божественных функций, не вижу никакого другого использования введённых параметров кроме их сравнения с литералом. На основании этого могу сказать, что код вполне надёжен.
    Конечно, всегда есть опасность того, что, допустим по историческим причинам оператор === для строк имеет особое поведение, когда в строке есть символ 0xFFAA.
    Ответ написан
    2 комментария
  • Насколько защищена представленная конструкция php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Пароль никогда не следует хранить в открытом виде.
    Сгенерировать его через password_hash, вписать в скрипт и проверять через password_verify.
    Помимо прочего это еще и затруднит подбор перебором.

    Также код можно сильно сократить. Уже сто лет как в РНР есть сокращенный вариант проверки на isset, плюс можно сразу прервать выполнение, и не делать лишнюю вложенность
    <?php
    
    $login = $_POST['login'] ?? '';
    $password = $_POST['password'] ?? '';
    $hash = '$2y$10$e6RRGG8zFvsE6Bl7at/Vx./igFslOmnLo6poA6N1QoNWrgrkedHqO';
    
    if ($login !== 'login' || !password_verify($password, $hash)) {
        die('Неверный логин');
    }
    echo 'рендер кода страницы с формами для создания новых файлов на сервере';


    Закрывающий тег тоже не нужен
    Ответ написан
    Комментировать
  • Что учить зная базу HTML, CSS?

    @LexCode
    JavaScript конечно. Дальше практика, ещё дальше сборщики, типа webpack, а вместе с ним и css препроцессоры, вроде sass. Дальше фреймворки, типа vue, react...
    Ответ написан
    Комментировать
  • Как в Owl Carousel 2 сделать, чтобы картинка не растягивалась по высоте?

    @seftomsk Автор вопроса
    Первую проблему решил заданием стилей для
    .owl-carousel .owl-item img {
    width: auto;
    margin: 0 auto;
    }
    А вторую https://owlcarousel2.github.io/OwlCarousel2/demos/...
    Ответ написан
    Комментировать
  • Как исправить конфликт при подключении bootstrap стилей?

    Alexanevsky
    @Alexanevsky
    Любительская web-разработка
    А для чего конкретно бутстрап используется? Можно скачать парочку определённых компонентов, которые используются, тогда конфликтов будет меньше.

    На будущее: почему бы сразу не подключить бутстрап при вёрстке темы?

    И в третьих, моё скромное ИМХО: в топку бутстрап. Его необходимо использовать только для абсолютно шаблонных сайтов.
    Ответ написан
    3 комментария
  • Почему сайт отображается некорректно на iPhone?

    @kikki Автор вопроса
    Всем спасибо! Большинство косяков почти исправил.
    1) Во-первых, подключил normalize.css
    2) Добавил все необходимые префиксы с помощью Autoprefixer
    3) Установил виртуальную машину MacOS на VirtualBox и попробовал поменять различные стили в веб-инспекторе Safari. В итоге, методом тыка выяснил, что текст внутри тегов <a>, а также в некоторых других местах не отображался из-за шрифта FT40. Поменял шрифт и текст появился!
    Ответ написан
    5 комментариев
  • Как ВКонтакте узнает о поисковых запросах, по которым я искал в Яндексе?

    neluzhin
    @neluzhin
    Яндекс является рекламным партнером ВКонтакте и проталкивает в таргетинговую рекламу (которая под левым меню) собственные баннеры. Что примечательно, такие баннеры имеют другие и более мягкие ограничения по количеству символов в описании и названии, нежели те, что накладывает на вас ВКонтакте при создании объявления, а также подобные баннеры могут даже нарушать сами правила ВК. Например, ВКонтакте запрещает обращаться к пользователям в таргетинговой рекламе на "ты", но баннеры Яндекса этот момент частенько игнорируют. Таким образом нельзя исключать, что Яндекс имеет какие-то внутренние алгоритмы или договоренности с ВК, которые позволяют ему на основе одних лишь поисковых запросов составлять группу ретаргетинга.

    Собственно, подробнее о группе ретаргетинга. Владельцы сайтов устанавливают в разметке страницы "пиксели" (картинка размером 1 на 1 пиксель) в теге <img>, которые хостятся на серверах ВКонтакте. Когда юзер загружает эту картинку, то ВКонтакте с помощью cookies определяет ID пользователя и добавляет его в группу ретаргетинга. Затем этой группе можно будет показывать объявления.

    Нередко владельцы сайтов продают места для пикселей другим компаниям, чтобы те могли показывать более релевантные баннеры. Допустим, вы - владелец форума о пылесосах. Какая-нибудь торговая сеть, например МВидео или Юлмарт, может арендовать у вас размещение своего пикселя, который будет собирать для них базу ретаргетинга. И затем они будут показывать вашей аудитории рекламу своих товаров (пылесосов) во ВКонтакте.
    Ответ написан
    1 комментарий