Вольный перевод статьи. Оригинал располагается здесь.

Первый релиз-кандидат Prototype 1.6.0 наконец созрел! core team продолжает традицию последовательного обновления API ядра в направлении увеличения производительности и исправлении ошибок. Продолжай читать, чтобы узнать какие произошли изменения в этом важном релизе, или скачай библиотеку сейчас чтобы познакомиться с ней безотлагательно.

Расширения Event API

Мы назвали 1.6.0 релизом "реконструкции событий" внутри команды, и это видно невооружённым глазом - одна их наших самых гавёных API стала одной их самых лучших. Вот, собственно, что было изменено:

Расширения Function API

Мы добавили несколько методов к Function.prototype для лучшей поддержки функциональной и аспектно-ориентированной техник программирования. Расширение Class API

Этот релиз делает первоее изменение в "классовом" API с версии 1.0, и добавляет правдивую поддержку методов наследования и базовых классов. Изменения не нарушают совместимость с существующим API. Расширения Ajax API

Поддержка JSON Ajax.Request-ом была значительно улучшена в Prototype 1.6.0: Новые доступные опции Ajax.Request: Расширения DOM API
new Element("input", { name: "user", disabled: true });
//-> <input name="user" disabled="disabled" />
DOM построитель использует Element#writeAttribute, другое новое дополнение к DOM API, которое помогает выставлять атрибуты элемента в кросс-браузерном виде.

$("items").insert({ after: new Element("p") });
$("items").insert({ top: "<li>an item</li>" });
$("items").insert("<li>another item</li>"); // defaults to bottom
Если в insert передан объект, содержащий метод toHTML или toElement, то вызывается этот метод для создания HTML кода или DOM элемента для вставки.

var Calendar = Class.create({
  // ...,
  toElement: function() {
    var container = new Element("div");
    // ...
    return container;
  }
});

$("sidebar").insert(new Calendar());
// same as $("sidebar").insert({ bottom: new Calendar() }) or
//         $("sidebar").insert({ bottom: new Calendar().toElement() })

$("header").setStyle("font-size: 12px; float: left; opacity: 0.5");

Заметка о производительности: uncamelized-стиль имён свойств в случае установки стиля через хеш объявлен устаревшим. Так что если вы имеете код вроде этого:


$("header").setStyle({ "font-size": "12px" });

Вам необходимо заменить его на один из двух вариантов:


$("header").setStyle({ fontSize: "12px" });
$("header").setStyle("font-size: 12px");

Новый объект document.viewport позволяет определить размеры и позицию окна браузера:

document.viewport.getDimensions()     // { width: 1149, height: 923 }
document.viewport.getWidth()          // 1149
document.viewport.getHeight()         // 923
document.viewport.getScrollOffsets()  // { left: 0, top: 1592 }
Расширения API шаблонов.

Расширенный смысл grep

Prototype 1.6.0 вводит новое соглашение для первого параметра Enumerable#grep: аргумент должен быть объектом, имеющим метод match, который будет просматривать каждый элемент в Enumerable; Если метод возвращает true, то элемент будет добавлен в результирующий массив, возвращаемый grep-ом. Это значит, что вы можте теперь фильтровать массивы с помощью grep-а, передавая ему любой объект имеющий метод match. Для примера, вы можете легко сократить массив DOM до массива, содержащего только элементы, соответствующие заданному CSS селектору:

elements.grep(new Selector("div.widget:first-child"))
Прототайп связывает RegExp#test с RegExp#match, так что существующий код например просматривающий строку массива с помощью регулярных выражений будут работать так, как вы этого и ожидаете. Конвенция метода сравнения навеяна Ruby оператором ===.

Улучшена поддержка JavaScript 1.6 и WHATWG 1.0 стандартов

Мы подчеркнули свою приверженность веб-стандартам в этой версии с улучшенной поддержкой JavaScript 1.6 и Web WHATWG 1.0 спецификации приложений.

... И ещё немного

Это лишь основные изменения; смотри в CHANGELOG полный список изменений. Мы считаем что многочисленные мелкие изменения являются лишь результатом приведения API к более удобному виду. Так что пожалуйста сообщайте нам, что вы думаете, в mailing списках, и о любых багах, найденных вами (желательно с протестированными патчами).

Заметка о этом релиз кандидате

Мы не намерены в Prototype 1.6.0_rc0 изменять API, но оставляем за собой право внести коррективы API и добавить или убрать функции, которые будут представлены в окончательном варианте.

Download

Спасибо многочисленным помощникам, которые сделали этот релиз возможным!


translated by vectoroc