some image

Tag javascript

Сортировка dropdown(select) списка на jQuery

Метки: , Работа

Предлагаю вашему вниманию простой способ отсортировать все списки с определенным классом на странице. Красиво, быстро, удобно. Это может быть удобно после динамического добавления значения в конец, после чего его необходимо переместить в соответствии с сортировкой.

        //Sorting by text value asc
        jQuery('.class').each( function(){
            jQuery(this).html( jQuery(this).find('option').sort(function(a, b) {
                return a.text == b.text ? 0 : a.text < b.text ? -1 : 1
         }) );
        });

Я люблю javascript

Метки: Работа

Уже не раз писал заметки о JS, но еще ни разу не говорил о своем отношении к нему. Так вот, я считаю, что если продолжительное время писать на нем и использовать как основной язык — прежним ты уже не станешь. Я действительно считаю, что этот язык не просто плох, а очень плох. Потому что я не знаю второго такого языка, который бы позволял накидать столько логических ошибок на 1 строчку кода. Такого количества неявных вещей, упрощений и тп нет ни в одном другом языке. И меня бы мало это волновало, если бы это был какой-нибудь Lisp или Haskell. Но это язык, на котором приходится писать половину кода браузерного приложения, существующую на стороне клиента.

Я считаю что JS это реально самая большая проблема веба сейчас. Количество кода, не поддающегося рефакторингу, просто зашкаливает даже в самом крутом, на первый взгляд, веб проекте. Загляните в исходники вашего любимого портала. Удивитесь. Да это же просто вакханалия в половине случаев.

Я хочу рассказать в этой заметке о самом жестоком виде логических ошибок, который мне приходилось встречать. Это перемешивание глобальных и локальных переменных. А все идет корнями в дебильный синтаксис javascript. Почему если я пишу

function alertURL(){
 alert(url);
}

я не могу предугадать то что получу? Почему это вообще никаким образом не зависит от меня? Это зависит от того до jQuery я вызвал мою функцию или после, от того какие вообще пакеты я включал в head, от того какой сегодня день, как зовут маму Брендана Айка, но только не от меня.

Правильно! Потому что я не добавил волшебное слово var! Этот целебный эликсир  предотвращающий ошибки, которые вообще не поддаются отладке. А теперь вопрос: накой черт дергать все из глобальной области видимости? Как часто вам внутри функции нужны глобальные переменные? Что, действительно чаще, чем локальные? Почему Zend догадались сделать слово global, a в JS его нет?

Так вот представьте. Мне дают 2 библиотеки, большущие библиотеки в несколько тысяч строк кода каждая, где нет не одного слова var, нет какого-то подобия namespaces, вообще ничего, отделяющего область видимости, нет. Ну не думал тот программист, который писал каждую из них, что их понадобится использовать вместе, а может он вообще не знал что такое var, лабал да лабал себе потихоньку. И они начинают падать, неистово падать из-за смешения глобальных переменных. Само даже допущение такой ситуации — это ошибка в дизайне языка.

Казалось бы — ну введите вы namespaces, и все, и нет проблем, хотя бы на уровне смешения пакетов. Чтоб я мог написать просто в начале каждого пакета ‘use namespace popa’ и все, и решить все проблемы. Но нет, все в очередной раз пользуются гипер костылем, эмулирующим namespaces в js.

И nobody cares, все лабают быдлокод не поддающийся пониманию, и все счастливы.

Умная адаптация под разрешение экрана на fileboard.ru

Метки: , , Работа

Многие знают про мой проект — fileboard.ru. Рассказывать про него не буду. Просто перейдите, зарегистрируйтесь, попробуйте.

Так вот, существовала проблема, до которой долго не доходили руки. Когда пользователь группирует файлы в одном разрешении, а потом открывает, например, на телефоне, в намного меньшем разрешении — все слепляется в кучу. Появляется эта проблема из-за того, что координаты файлов на экране не привязаны к разрешению, а имеют относительные координаты по осям от 0 до 1. Масштабировать текст и превьюшки — плохая идея, т.к. не хочется ограничивать пользователей 24″ мониторов огромными значками в угоду сохранения читаемости на мобильных.

Пример (1366×768):

Read More