Современный веб и всё, что мне интересно
3 заметки с тегом

разработка

Уроки спецпроектов

1 августа 2017, 18:40

1. Нельзя доверять стороннему АПИ:
— данные могут не прийти
— нужные вам поля могут быть пустыми или иметь неожиданное значение.

2. Следствие п. 1 — ваш код должен быть к этому готов.
Всё должно отображаться и работать без ошибок даже если данные некорректны или отсутствуют.

3. Обязательно учитывайте кэширование на стороне клиента.
— «скручивайте версию»: ссылка на файл скрипта или стилей должна меняться при изменении содержимого файла, чтобы клиент всегда получал свежую версию;
— если используете Реквайр, то придется переименовать файл, потому что Реквайр не умеет дополнять путь к отдельному файлу ГЕТ-параметром;
— если используете Вебпак, то добавляйте хэш к имени файла чанка, но не забывайте скручивать версию в месте подключения точки входа:

output: { 
...
    chunkFilename: '[name].[chunkhash].min.js'
}

4. Сафари в Айос  — чума 21 века для веб-разработчика

Сафари на айфонах по-особенному работает с айфреймами, у которых динамический контент. Например, с виджетом Твиттера.

Если такой айфрейм положить в абсолютно позиционированный блок с фиксированной высотой и внутренним скроллом (owerflow-y: auto), то он не будет растягиваться и скролл не будет работать. Похоже, сафари определяет границы блока и его контент при первом рендере и не учитывает загрузившийся айфрейм высотой 6000+ пикселей. Помогает такой хак:

*
    -webkit-overflow-scrolling: touch
.block__wrapper
    height: calc(100% + 1px)

5. Айфреймы в мобильном Сафари вообще часто ведут себя не так, как вы ожидаете. Например, их размер может внезапно зависеть от размера контента или от размера еще непонятно чего. Если нужно сделать адаптивный айфрейм, то помогает такой хак:

iframe {
        width: 1px;
        min-width: 100%;
        *width: 100%;
    }

6. Фоновый SVG в IE9-11 требует обязательно указывать атрибуты width и height, иначе его размер вырастет непредсказуемо, растянув или уменьшив картинку.

<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" width="1117" height="1403" viewBox="0 0 1117 1403">
...
css   frontend   js   разработка   советы

RTL layout cross-browser element.scrollLeft issue solution

1 марта 2017, 16:42

Sometimes there is a moment as you make horizontal scrolling slider or timeline and become aware of the real world around you.

Some people will figure out the difference in how browsers implements Element.scrollLeft property on right to left layout (dir=«rtl»).

Most browsers have an initial value of scrollLeft equal to zero and will increase its value as you scroll (IE/Edge).

But in Chrome initial value of scrollLeft depends on scroll width (!) and is reduced to zero as you scroll.

Next problem is that some browsers increase scrollLeft value (Chrome, IE/Edge) while others decrease it to make it negative (Safari and Firefox).

Here is simple and obvious solution

// get initial value
var initial = el.scrollLeft();
// try to scroll with negative value
el.scrollLeft(-1);
// check if browser sets scrollLeft to negative
if ( el.scrollLeft() < 0 ) {
    // Safari, FF
    el.scrollLeft(/* ...  */);
} else {
    if ( initial > 0 ){
        // Chrome
        el.scrollLeft(/* ...  */);
    } else {
        // IE
        el.scrollLeft(/* ...  */);
    }
}
frontend   hint   javascript   js   rtl   scrollLeft   разработка

Processwire — ЦМС/фреймворк с удобным АПИ

12 августа 2016, 14:04

Процессвайр я использовал в трёх проектах. В одном из них на базе этой системы я разработал отличное АПИ для веб-приложения. Два других — типичные корпоративные сайты.

Прикол Процессвайр в исключительно удобном АПИ, написанном в духе ДжейКвери.
Она во многом напоминает МОДикс: тут есть страницы (ресурсы), к ним можно назначать шаблоны и поля (переменные, ТиВи).

Ещё, в отличие от МОДикс здесь по умолчанию нет никаких полей, кроме названия страницы и нет никаких чанков — вся логика прописывается в шаблонах, через плагины или хуки.

Основная особенность: здесь любая сущность — это страница (page), наподобие нод в Друпале. Например, пользователь здесь — это тоже страница.

Примеры использования АПИ

Текущая страница доступна в переменной $page

// Вывести название текущей страницы
echo $page->get("title");

// Хлебные крошки
echo "<ul>";
foreach ($page->parents as $parent) 
    echo "<li><a href='{$parent->url}'>{$parent->title}</a></li>";
echo "</ul>";

// Вывести случайное изображение
$image = $page->images->getRandom();
if ($image) echo "<img src='{$image->url}'>";

Можно обратиться к любой странице через $pages

// Вывести заголовок нужной страницы
echo $pages->get("/shop/category/product1/")->title;

// Найти все телефоны, выпущенные после 2014 года с размером экрана больше 4" и отсортировать по производителю
$phones = $pages->find("template=phones, year>2014, screen>=4, sort=-vendor");

Здесь есть хуки, кэширование, удобная поддержка языков, темы для админки, система плагинов и добрейшее комьюнити. Систему активно разрабатывают в соответствии с роадмапами.

Если вы устали от МОДикс и ищите что-то новое, то вам обязательно нужно попробовать Процессвайр.

Канал о Процессвайр в Телеграме

cms   processwire   процессвайр   разработка