<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Max Sapunov</title><generator>teletype.in</generator><description><![CDATA[Max Sapunov]]></description><image><url>https://teletype.in/files/9c/05/9c05ea95-0061-44cd-98fd-257701d93c0a.png</url><title>Max Sapunov</title><link>https://teletype.in/@webjourn</link></image><link>https://teletype.in/@webjourn?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/webjourn?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/webjourn?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 05 Apr 2026 12:19:12 GMT</pubDate><lastBuildDate>Sun, 05 Apr 2026 12:19:12 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@webjourn/maskedinputjs</guid><link>https://teletype.in/@webjourn/maskedinputjs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn</link><comments>https://teletype.in/@webjourn/maskedinputjs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn#comments</comments><dc:creator>webjourn</dc:creator><title>Маски для input на JS</title><pubDate>Wed, 07 Oct 2020 14:43:09 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/55/1e/551e113f-3bd8-42aa-8fe1-8ba497cfa439.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/fe/d3/fed32d0f-90d8-445c-b996-7d1a70d544f6.png"></img>Сегодня познакомлю с интересной библиотекой maskedinput.js. Если посмотреть на гите, то можно заметить - библиотека не из свежих, но достойных альтернатив маловато. Сам файл плагина весит всего 4кб, а зато сколько всего умеет. Сейчас все расскажу.]]></description><content:encoded><![CDATA[
  <p>Сегодня познакомлю с интересной библиотекой <strong>maskedinput.js</strong>. Если посмотреть на <a href="https://github.com/digitalBush/jquery.maskedinput" target="_blank">гите</a>, то можно заметить - библиотека не из свежих, но достойных альтернатив маловато. Сам файл плагина весит всего 4кб, а зато сколько всего умеет. Сейчас все расскажу.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/fe/d3/fed32d0f-90d8-445c-b996-7d1a70d544f6.png" width="1920" />
  </figure>
  <h2>Устанавливаем</h2>
  <p>📎Качаем модуль с <a href="https://drive.google.com/file/d/1vS9onLqNrPglkvLi6yLVFYYbYL8xHXtF/view?usp=sharing" target="_blank">Гугл диска</a> или с <a href="https://github.com/digitalBush/jquery.maskedinput" target="_blank">GitHub</a>.</p>
  <p>🪓Подрубаем его перед <code>&lt;/body&gt;</code> :</p>
  <pre>&lt;script src=&quot;js/jquery.maskedinput.min.js&quot;&gt;&lt;/script&gt;</pre>
  <p>Не забудьте подключить jQuery!</p>
  <h2>Используем</h2>
  <p>🪓Вставляем в файл скриптов, либо в HTML сайта через <code>&lt;script&gt;...&lt;/script&gt;</code> эту кодулю:</p>
  <pre>$(document).ready(function () {
$(&quot;.phonemask&quot;).mask(&quot;+7 (999) 999 99-99&quot;);
});</pre>
  <p>Здесь мы указали: <strong>класс поля</strong> <code>.phonemask</code>, к которому будем прикручивать маску для телефона, и собственно <strong>саму маску</strong> <code>+7 (999) 999 99-99</code> которая любую вводимую в поле информацию будет приводить к этому виду.</p>
  <p>🪓И дописываем этот класс к нашему полю:</p>
  <pre>&lt;input type=&quot;text&quot; name=&quot;phone&quot; class=&quot;phonemask&quot;&gt;</pre>
  <figure class="m_retina">
    <img src="https://teletype.in/files/0b/5b/0b5b2f44-7819-49ca-9f75-be32cb59ef29.png" width="450" />
    <figcaption>И не соврал - работает!</figcaption>
  </figure>
  <h2>Другие маски</h2>
  <p>Помимо масок для номеров телефона, плагин позволяет сделать маски:</p>
  <p>🗓Для даты</p>
  <pre>$(&quot;.datemask&quot;).mask(&quot;99/99/9999&quot;);</pre>
  <p>💳Для номера карты</p>
  <pre>$(&quot;.cardmask&quot;).mask(&quot;9999-9999-9999-9999&quot;);</pre>
  <p>🔢И даже для обычных чисел</p>
  <pre>$(&quot;.numbermask&quot;).mask(&quot;0.9?9&quot;);</pre>
  <p><a href="https://t.me/wjourn" target="_blank">Подписаться на @wjourn</a> 🔥</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webjourn/fancy</guid><link>https://teletype.in/@webjourn/fancy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn</link><comments>https://teletype.in/@webjourn/fancy?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn#comments</comments><dc:creator>webjourn</dc:creator><title>Модальные окна fancybox</title><pubDate>Fri, 02 Oct 2020 08:23:37 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/2d/91/2d91f377-b101-4084-9f14-8bffea50b5ad.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/2d/91/2d91f377-b101-4084-9f14-8bffea50b5ad.png"></img>Исторически сложилось, что разные люди называют эти самые всплывашки абсолютно по-разному. Pop-up, модальные окна и до кучи AJAX-окна.

Но, предлагаю определится. То что мы сейчас будем делать - называется модальное окно. Pop-up - история про другое, это больше в сторону порно-баннеров. Если разобраться, то и AJAX вообще не про это, аякс вообще отдельно живущая технология, которая не имеет никакого отношения к нашим всплывашкам (практически никакого).]]></description><content:encoded><![CDATA[
  <p>Исторически сложилось, что разные люди называют эти самые всплывашки абсолютно по-разному. Pop-up, модальные окна и до кучи AJAX-окна.<br /><br />Но, предлагаю определится. То что мы сейчас будем делать - называется <strong>модальное окно</strong>. Pop-up - история про другое, это больше в сторону порно-баннеров. Если разобраться, то и AJAX вообще не про это, аякс вообще отдельно живущая технология, которая не имеет никакого отношения к нашим всплывашкам (практически никакого).</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/2d/91/2d91f377-b101-4084-9f14-8bffea50b5ad.png" width="1091" />
  </figure>
  <p>Так вот, как и со слайдерами, для создания модальных окон есть дохрена различных JS-библиотек. Можно делать их и вообще без JS, можно  по-быстрому написать свою. Но нам же нужна современная, отлаженная, быстрая и легкая реализация модальных окон, верно? Да конечно верно, о чем разговор. </p>
  <h2>Установка fancybox 3</h2>
  <p>1. Качаем сам плагин отсюда: <a href="https://fancyapps.com/fancybox/3/" target="_blank">https://fancyapps.com/fancybox/3/</a> (кнопка <strong>Download</strong>)</p>
  <p>2. У нас появится архив с кучей всего непонятного. Без паники, нам нужны в папке <strong>dist</strong> всего 2 файла:</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/90/27/902778cd-a07f-4499-b4bb-0940707f3fa1.png" width="1558" />
    <figcaption>Выбираем эти 2 файла и закидываем в свой проект</figcaption>
  </figure>
  <p>3. После того как закинули файлы, самое время их подключить, на нужных страницах перед <code>&lt;/body&gt;</code> вставляем:</p>
  <pre>&lt;link rel=&#x27;stylesheet prefetch&#x27; href=&#x27;/css/jquery.fancybox.min.css&#x27;&gt;
&lt;script src=&#x27;/js/jquery.fancybox.min.js&#x27;&gt;&lt;/script&gt;</pre>
  <p><u>Убедите также что подключена библиотека jQuery!</u> Кстати, подключить по-быстрому ее можно так:</p>
  <pre>&lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&gt;&lt;/script&gt;</pre>
  <p>4. Да впринципе все, можем пользоваться 🙌</p>
  <h2>Делаем модальное окно на fancybox 3</h2>
  <pre>&lt;a data-fancybox data-src=&quot;#modal&quot; href=&quot;javascript:;&quot;&gt;Открыть окно&lt;/a&gt;
 
&lt;div style=&quot;display: none;&quot; id=&quot;modal&quot;&gt;
  &lt;p&gt;Здарова отец&lt;/p&gt;
&lt;/div&gt;</pre>
  <p>Собственно что мы тут видим. В <code>&lt;a&gt;</code> у нас ссылочка при клике на которую будем открывать модальное окно с id <code>#modal</code> . И ниже - само <strong>модальное окно</strong>.<br /><br />Также его можно вызывать из функции JS и генерировать контент прямо в скрипте:</p>
  <pre>$.fancybox.open(&#x27;&lt;div class=&quot;message&quot;&gt;&lt;h2&gt;Здарова&lt;/h2&gt;&lt;p&gt;Отец&lt;/p&gt;&lt;/div&gt;&#x27;);</pre>
  <h2>Делаем увеличение картинки через fancybox 3</h2>
  <pre>&lt;a href=&quot;image_1.jpg&quot; data-fancybox=&quot;gallery&quot; data-caption=&quot;Подпись к картинке&quot;&gt;
    &lt;img src=&quot;thumbnail_1.jpg&quot; alt=&quot;&quot; /&gt;
&lt;/a&gt;</pre>
  <p>В <code>href=&quot;&quot;</code>  указываем ссылку на ту картинку, которая будет открывать при клике. В <code>data-fancybox</code> можно указать название галереи, что бы оно сгруппировалось в слайдшоу. И внутри всей ссылки у нас лежит картинка, можно и нужно там указывать уменьшенный вариант изображения.</p>
  <h2>Загружаем окно по AJAX</h2>
  <p>Вот тут есть небольшое пересечение с AJAX. Fancybox может загружать контент окна по ajax запросу, делается это так:</p>
  <pre>&lt;a data-fancybox data-type=&quot;ajax&quot; data-src=&quot;/ajax/ajax.php&quot; data-filter=&quot;#two&quot; href=&quot;javascript:;&quot;&gt;
    AJAX content
&lt;/a&gt;</pre>
  <p>Теперь при клике на кнопку, мы будем забирать ответ из файла ajax.php.</p>
  <p>Можно также круто работать с фреймами и с видео. Больше настроек и опций <a href="https://fancyapps.com/fancybox/3/docs/#options" target="_blank">тут.</a></p>
  <p></p>
  <p><a href="https://t.me/wjourn" target="_blank">Подписаться на @wjourn</a> 🦩</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webjourn/owl_slider</guid><link>https://teletype.in/@webjourn/owl_slider?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn</link><comments>https://teletype.in/@webjourn/owl_slider?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn#comments</comments><dc:creator>webjourn</dc:creator><title>Слайдер OWL Carousel 2.0 для ваших проектов</title><pubDate>Tue, 29 Sep 2020 14:32:55 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/d8/e0/d8e095e9-7083-4f5a-9db5-8e9df6cf5afb.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/d8/e0/d8e095e9-7083-4f5a-9db5-8e9df6cf5afb.png"></img>Как часто приходится использоваться листалки картинок? Да почти в каждом проекте 🙀 Даже самый скучный лендос из одной секции тоже хочет быть со слайдером.]]></description><content:encoded><![CDATA[
  <p>Как часто приходится использоваться листалки картинок? Да почти в каждом проекте 🙀 Даже самый скучный лендос из одной секции тоже хочет быть со слайдером.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/d8/e0/d8e095e9-7083-4f5a-9db5-8e9df6cf5afb.png" width="1091" />
  </figure>
  <p>Можно и свой сделать, но зачем? Существует туева хуча популярных велосипедов, таких как: <strong>Slick.js, bxSlider, OWL Carousel</strong> и т.д. Я долго и нудно пользовался сликом, пока не наткнулся на <strong>OWL Carousel 2</strong>.<br /><br />На мой испорченный вкус - очень удобная и сильно кастомизабельная штука.<br /><br />Базар базаром, но давайте подробней. <br />Первое что хочется посмотреть, это демки - <a href="https://owlcarousel2.github.io/OwlCarousel2/demos/demos.html" target="_blank">они тут</a>. Кому впадлу переходить, напишу что слайдер имеет <strong>60+ опций</strong> и подойдет практически под любую задачу.</p>
  <h2>Пару строк как его использовать</h2>
  <p>1. Скачиваем слайдер с официального гита: <a href="https://github.com/OwlCarousel2/OwlCarousel2/archive/2.3.4.zip" target="_blank">https://github.com/OwlCarousel2/OwlCarousel2/archive/2.3.4.zip</a></p>
  <p>2. Подрубаем стили:</p>
  <pre>&lt;link rel=&quot;stylesheet&quot; href=&quot;owlcarousel/owl.carousel.min.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;owlcarousel/owl.theme.default.min.css&quot;&gt;</pre>
  <p>Кстати, в последнем файле правится внешний вид слайдера.<br /></p>
  <p>3. Подрубаем скриптули:</p>
  <pre>&lt;script src=&quot;owlcarousel/owl.carousel.min.js&quot;&gt;&lt;/script&gt;</pre>
  <p><u>Убедитесь что вы подключили jQuery!<br /></u></p>
  <p>4. Собственно ставим в HTML в нужное место наш слайдер:</p>
  <pre>&lt;!— Слайдер для фоток жопы --&gt;
&lt;div class=&quot;owl-carousel&quot;&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;div&gt; Your Content &lt;/div&gt; 
&lt;/div&gt;</pre>
  <p>5. Наконец, дописываем скриптулю в ваш файл скриптов, ну или под слайдером в тег <code>&lt;script&gt;&lt;/script&gt;</code>:</p>
  <pre>$(document).ready(function(){
$(&quot;.owl-carousel&quot;).owlCarousel(); 
});</pre>
  <p><br />У слайдера есть <strong>много опций</strong>, они тут - <a href="https://owlcarousel2.github.io/OwlCarousel2/docs/api-options.html" target="_blank">https://owlcarousel2.github.io/OwlCarousel2/docs/api-options.html</a></p>
  <p>Прописываются они примерно так:</p>
  <pre>$(&quot;.owl-carousel&quot;).owlCarousel({
nav: true, //Навигация стрелочками
loop: true, //Бесконечный слайдер
dots: false, //Навигация точками
autoplay:true //Автоматическая смена слайдов
});</pre>
  <figure class="m_column">
    <img src="https://teletype.in/files/f7/f3/f7f30057-19f5-4345-9924-e335a21dc276.png" width="2078" />
    <figcaption>Слайдер OWL Carousel 2 отвечает на вопрос в чем смысл жизни</figcaption>
  </figure>
  <p><a href="https://t.me/wjourn" target="_blank"><br />Подписаться на @wjourn</a> 🦉</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webjourn/sypexgeo</guid><link>https://teletype.in/@webjourn/sypexgeo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn</link><comments>https://teletype.in/@webjourn/sypexgeo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webjourn#comments</comments><dc:creator>webjourn</dc:creator><title>Определяем город по IP на PHP</title><pubDate>Mon, 28 Sep 2020 12:21:10 GMT</pubDate><media:content medium="image" url="https://teletype.in/files/a2/4a/a24a332a-da86-4b7d-9842-57ae71de60d3.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/a2/4a/a24a332a-da86-4b7d-9842-57ae71de60d3.png"></img>Самый элементарный способ вычислить определить город посетителя сайта по IP - воспользоваться каким то готовым API.]]></description><content:encoded><![CDATA[
  <p>Самый элементарный способ <s>вычислить</s> определить город посетителя сайта по IP - воспользоваться каким то готовым API.</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/a2/4a/a24a332a-da86-4b7d-9842-57ae71de60d3.png" width="1091" />
  </figure>
  <p><strong>Sypex Geo</strong> как раз предоставляет такую возможность. Сразу немного инфы по количеству запросов:</p>
  <ul>
    <li><strong>10 000</strong> запросов в месяц <strong>на каждого пользователя</strong></li>
    <li>если мы зарегистрируемся - у нас будет <strong>30 000</strong> запросов в месяц <strong>на каждого пользователя</strong></li>
  </ul>
  <p>Про платную подписку даже писать не буду, потому как такого количества с головой хватит большинству корпоративных сайтиков.</p>
  <p>Итак, все что нам нужно - это закинуть им запрос. На пыхе (PHP), можно написать так:</p>
  <pre>if($request = filegetcontents(&quot;https://api.sypexgeo.net/json/&quot;.$SERVER[&#x27;REMOTEADDR&#x27;]))
{
$array = json_decode($request);
$geoipcity = $array-&gt;city-&gt;name_en;
}</pre>
  <p>Где <code>$SERVER[&#x27;REMOTEADDR&#x27;]</code> - IP нашей жертвы.</p>
  <p>Ответ нам придет такой (в JSON):</p>
  <figure class="m_column">
    <img src="https://teletype.in/files/2b/93/2b93a0bc-4dbb-47f7-8c6e-20758d382812.png" width="966" />
    <figcaption>JSON ответа</figcaption>
  </figure>
  <p>При этом, на скрине не видно, но там еще валяется информация о стране (население, телефонный код, ближайшие соседи) и о регионе. Имена мы получаем сразу на 7 языках, что наверняка пригодится.</p>
  <hr />
  <p><a href="https://t.me/wjourn" target="_blank">Подписаться на @wjourn</a></p>

]]></content:encoded></item></channel></rss>