Волею судьбы недавно мне пришлось работать с одной из open-sourse  js-библиотек под названием OAT (Openlink AJAX Toolkit). Разработчики заявляли продукт, как одно из лучших и мощнейших дополнений для работы с любыми форматами, с использованием AJAX.

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

Алгоритм подключения не очень сложный и весьма логичный:

<script type="text/javascript">

var featureList = ["grid","pivot",barchart"];// Имена подключаемых библиотек

<script>

<script type="text/javascript" src="oat/loader.js"> // Подключение загрузчика
</script>

Сначала указываем список нужных библиотек, а потом их просто используем. По-моему, удобно. Но проблемы в некоторых случаях начинались уже на этом этапе.

Кстати, о проблемах, их было как раз намного больше, чем позитивных ощущений и сейчас поговорим о них:

Первая и самая главная

Наверняка, Вы могли заметить ошибку в приведенном выше скрипте. Вместо закрывающего </script>, там открывающий. Это не моя опечатка и валенками в меня бросаться не стоит. Это – одна из привилегий OATa – ужасная документация. Поверьте, она там действительно ужасная. Особенно, это касается примеров, которые приведены для демонстрации «Как должно работать». Если посмотреть на сайты других библиотек, можно будет без труда увидеть либо специализированный раздел, например, api.jQuery.com, либо просто набор всех функций API с описанием на одной страничке. Не важно, в каком виде они представлены, важно, что к каждой должна быть представлена наглядная демонстрация и возможность просмотра полного кода, а не его куска. В случае с OAT видим как раз противоположную картину: какие-то непонятные куски кода, которые некоторых разработчиков просто повергают в шок. Но это еще не столь глобальная проблема, дальше – больше.

Проблема вторая

Эту проблему можно смело назвать loader.js. Да, это одна из основных библиотек, которые должны обеспечивать работоспособность всего фреймворка, но увы… В документации смело заявлено, что лоадер может использоваться stand-alone и представлять собой полноценную библиотеку.

По функциональности в теории он действительно впечатляет, на практике же нас опять обманывают. В документации написано следующее:

«OAT.Dom.create(tagName, [styleObj], [className])

Used for dynamic creation of HTML nodes. Three parameters are accepted; the first one is mandatory. Example:

var myDiv = OAT.Dom.create("div"); var myStyledDiv = OAT.Dom.create("div", {color : "#f00", fontWeight : "bold"}, "myDiv_class");

The second (optional) argument style Obj is an object comprised of CSS properties. For a full list of valid properties, see Mozilla documentation and MSDN. CSS properties are not the same for all browsers, so specifying a floating element looks like:

var element = OAT.Dom.create("div", {cssFloat:"left", styleFloat:"left"});»

Судя по описанию, используя OAT.DOM.create(“div”), мы должны получить на экране автоматически созданный div-тег. Либо браузеры специально  скрывают этот див (ниразу не паранойя), либо разработчики опять оплошали.

Кстати, использование библиотеки порой наводит на интересные мысли и заставляет задуматься над собственным профессионализмом. Так, например, после пятой попытки, я уже начал сомневаться, что мой шестилетний опыт работы в сфере web-технологий не был выдумкой. Слава Богу, здравый смысл меня не покинул и предложил поделиться проблемой с другими и узнать результаты их манипуляций. На удивление, у них все тоже закончилось провалом. Идем дальше.

Проблема n

Опять цитата из документации:

OAT.Dom.getViewport()

Returns size (2-item array) of current view port.

OAT.Dom.getScroll()

Returns amount of scroll (2-item array) of current view port.

OAT.Dom.position(element)

Returns x and y coordinates of element's top left corner, relative to page's top left corner. Coordinates are returned in an array of two elements. To count this value, the whole tree of offsetParents must be climbed up, so it is not wise to call this function too often. Example:

var coords = OAT.Dom.position(div);

alert("x: " + coords[0]+", y:" + coords[1]);

И опять фейл. Размеры вьюпорта получить так и не удалось. FireBug вообще сказал, что возвращается никакой не массив, а пустая переменная. Со скроллом – опять проблемы. Конечно, он работает получше: значения возвращает через раз. (Ну хоть так...)

Далее опять спотыкаемся: DOM.position (аналог смеси .offset() и .css() в jQuery) не позиционирует элемент. Вообще никак. Даже на пиксель не подвинул.

Там же, в доках, написано, что перед выпуском одной из последних версий, разработчики пытались сменить синтаксис обращения к DOM-у. Очень надеюсь, что в процессе этих изменений затерлись и полезные функции. Ну не писались же доки «на ходу», описанное же должно работать (или нет?).

Самым главным промахом разработчиков было размещение уже готовых результатов работы в качестве демо. Т.е. там была уже готовая структура, которая лишь частично модифицировалась при помощи js, в то время, как в доках подозревается авто-генерация необходимых тегов.

Несмотря на недостатки, библиотека все же имеет несколько своих поклонников. Правда, это исключительно благодаря stand-alone aplications, построенных на базе OAT.

Например, Google поделился парочкой лестных комментариев от пользователей Web DAV Brovser-a и RDFa Browser-a. Они действительно впечатляют. Кроме того, библиотека для работы со SPARQL тоже упоминалась некоторыми в качестве «например», видимо, она работала.

На этом, пожалуй, закончу.

Алекс Захарчук