Приведенные примеры режут глаз. Как, примерно, мы используем xslt шаблоны:
<!-- Вывод информации о пользователе -->
<xsl:template match="*" mode="user">
<div class="user">
<xsl:apply-templates select="." mode="user_picture"/>
<xsl:value-of select="concat(first_name, ' ', last_name)"/>
</div>
</xsl:template>
<!-- Вывод фотографии пользователя -->
<xsl:template match="*" mode="user_picture">
<!-- По хорошему в xml нужно хранить путь до картинки целиком -->
<img class="user__avatar" src="/img/{string(userpic)}.png" />
</xsl:template>
<!-- Загрушка, если нету фотографии пользователя -->
<xsl:template match="*[not(userpic)]" mode="user_picture">
<span class="user__avatar user__avatar_default"></span>
</xsl:template>
<xsl:template match="*" mode="post">
<!-- Выводим пользователя из поста или найденного по user_id -->
<xsl:apply-templates select="(user|/*/ref_users/item[user_id=current()/user_id])[1]" mode="user"/>
</xsl:template>
<!-- Выводим текущего пользователя, или пользователей, соответствующих xpath выоражению -->
<xsl:apply-templates select="/*/cur_user" mode="user"/>
Помимо этого, накопили много разных удобных плюшек в виде шаблонов, функций и других приемов, которые сильно облегчают жизнь.
XSLT не понацея, но очень удобный шаблонизатор, когда знаешь, как с ним работать. Реальный пример вижу каждый день — у нас две версии проекта: старая и новая, обе рабочие. В новой версии chikuyonok бережно переписал, заложил возможности для расширения в тех местах, где это может предположительно потребоваться, что аж глаз радуется :). А самое главное — разобрать шаблоны не составляет большого труда, чего не скажешь о шаблонах в старом проекте.
тоже буквально на прошлой неделе пересел на Juno, из непонравившегося — другое поведение скрывающихся вьюх, так и не понял как вернуть прежние поведение, чтобы не попапом поверх было…
21 октября Аймобилка делала видео-трансляцию концерта Мумий Тролль «Владивосток 3000» из клуба Arena Moscow.
Вещали в два потока: 720p и поменьше, для людей со слабым каналом.
500-600 пользователей смотрело на протяжении всего концерта.
30% пользователей — низкий поток, остальные — высокий.
И даже я смотрел трансляцию, пока ехал домой. 3G (beeline) в пределах ТТК хорошо справлялся.
с ИЕ > 7 уже можно жить и для них отдельных стилей особо и не надо… ну не будет некоторых рюшечек, но и страница не будет разваливаться как в случае с 6-7 и для того чтобы это починить приходилось добавлять букет хаков
никто не мешает создать нужное кол-во аккаунтов (бесплатно по 1гб вроде дают)
не думаю что гугл будет заморачиваться чтобы вычислить пару, ну пускай даже десять, тысяч аккаунтов чтобы прикрыть лавочку
это конечно геморой, но если все автоматизировать — вполне
apply-template
наиболее читабельнее выглядит в этом случае, имхоИногда требуется использовать шаблон в разных контекстах, но с одинаковой структурой внутри.
Это пример, не более того.
Помимо этого, накопили много разных удобных плюшек в виде шаблонов, функций и других приемов, которые сильно облегчают жизнь.
XSLT не понацея, но очень удобный шаблонизатор, когда знаешь, как с ним работать. Реальный пример вижу каждый день — у нас две версии проекта: старая и новая, обе рабочие. В новой версии chikuyonok бережно переписал, заложил возможности для расширения в тех местах, где это может предположительно потребоваться, что аж глаз радуется :). А самое главное — разобрать шаблоны не составляет большого труда, чего не скажешь о шаблонах в старом проекте.
Вещали в два потока: 720p и поменьше, для людей со слабым каналом.
500-600 пользователей смотрело на протяжении всего концерта.
30% пользователей — низкий поток, остальные — высокий.
И даже я смотрел трансляцию, пока ехал домой. 3G (beeline) в пределах ТТК хорошо справлялся.
шаг в лево, шаг в право —
расстрел на местеедет верстка (webkit округляет до целого px, а ff нет)сам лично удалял недавно пару доменов таким образом.
ширина блоков
jquery
Array.prototype.sum = function(){
for(var i=0,sum=0;i<this.length;sum+=this[i++]);
return sum;
}
$.makeArray($('.selector').map(function() { return $(this).width() })).sum()
или
var sum = 0;
$('.selector').each(function() { sum += $(this).width() });
+ Underscore.js
_.reduce($('.selector'), 0, function(m, el){ return m + el.width() });
не думаю что гугл будет заморачиваться чтобы вычислить пару, ну пускай даже десять, тысяч аккаунтов чтобы прикрыть лавочку
это конечно геморой, но если все автоматизировать — вполне
есть и ограничения, но их можно обойти
код вполне читабельный