понедельник, 10 мая 2010 г.

Обновление js-библиотек пакета mbgserver-jquery

Деб-пакет mbgserver-jquery содержит базовые javascript библиотеки, используемые в наших проектах. Многие из них поправлены мною для исправления багов или получения желаемой функциональности. В целях унификации и упрощения поддержки периодически проверяю состояние апстрима, и по возможности заменяю правленную версию на оригинальную. И вот наконец-то удалось собрать набор библиотек, вовсе не требующих правки! jgrowl и ajaxupload доведены до ума в апстриме, причем все мои патчи независимо реализованы разработчиками :-) Конечно, не мешало бы им патчи эти отправить своевременно, но я разработку на javascript не люблю и занимаюсь этим лишь по необходимости. Расширение autocomplete заменяем на аналог из JQuery UI, появившийся в последнем релизе. Замечу, что указанный аналог имеет глюк с позиционированием списка вариантов при изменении масштаба страницы (а именно, замечено при нажатии Ctrl + в браузере google chrome). Расширения thickbox и cluetip заменит стандартный dialog из JQuery UI, сделать для него обертку с поддержкой AJAX тривиально. А вот treeview просто выкидываем, поскольку такой интерфейс неудобен, использовался у нас вынужденно в одном месте, и уже удалось придумать, чем его заменить: Прототип интерфейса рассылки сообщений для ПО оффлайн-сервис

Новые версии библиотек помещены в поддиректорию js пакета, а соответствующие стили - в поддиректорию css. В настоящий момент также включено 8 стилей оформления для JQuery UI, выбранные мною по своему вкусу; картинки внедрены непосредственно в файлы css.

Ниже привожу список патчей, которые были использованы в предыдущей версии библиотек. Эта информация предназначена исключительно в роли подсказки при обновлении библиотек в существующих проектах.
jquery.autocomplete.js - добавлен обработчик для onItemSelect

jquery.jgrowl.js - подправлено для отображения _и_ первого сообщения 
в виде плавающего меню
    if($('div.jGrowl-notification:parent',this.element).size()>2
    заменено на
    if($('div.jGrowl-notification:parent',this.element).size()>1

thickbox.js - добавлен аргумент onLoadFunction к функции tb_show 
(необходим для отображения datapicker во всплывающем окне)
    заменил
        <a href='#' id='TB_closeWindowButton'>close</a> or Esc Key</div>
    на
        <a href='#' id='TB_closeWindowButton'>[×]</a></div>
    указал путь к картинке
        var tb_pathToImage="/img/jquery/thickbox/loadingAnimation.gif";

jquery.autocomplete.min.js - переименован служебный параметр limit 
в ajax_limit_autocomplete: limit:options.max на ajax_limit_autocomplete:options.max

jquery.autocomplete.min.js - добавлен второй параметр onItemSelectParam в функцию onItemSelect

jquery.autocomplete.min.js - для указания кол-ва элементов в выпадающем списке 
поправить константу в коде проверки значения параметра options.scroll
    options.scroll?10 заменено на options.scroll?20

#jquery.form.min.js - заменено el.disabled на el.disabled1 - чтобы значения 
# задизэбленных элементов тоже передавались на сервер
#jquery.form.min.js - для невыбранных чекбоксов теперь возвращает пустые значения
#   (t == 'checkbox' || t == 'radio') && !el.checked => (t == 'radio') && !el.checked
#
# // fixed - hidden inputs must be cleaned too!
#    if (t == 'text' || t == 'password' || tag == 'textarea' || t == 'hidden')

jquery.treeview - добавлена поддержка json-атрибута onclick

3.ajaxupload.3.1.js - поправлена обработка JSON-ответа сервера. Проверено в Firefox и Opera.

Upd. Баги все же обнаружились - в JQuery UI аж в 4-х местах написана потрясающая конструкция вида "+ ++" вместо "+ (++ )". Обновил пакет, тестируем дальше.

Upd. В ajaxupload не поддерживаются Firefox 1.x/2.x. Мой патч эту проблему решает, но таковых пользователей единицы, рекомендуем им обновить браузер, нежели поддерживать совместимость с указанными ископаемыми браузерами.

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru