TestLink

Время от времени занимаюсь модификацией используемого внутри компании инструмента «TestLink». Сложная задача — приделать к нему ЧПУ (TestLink целиком на фреймах, у него не то что ЧПУ, обычных-то URL нет).

С задачей справился чуть менее, чем полностью — осталась пара мелочей, а в пятницу по половины одиннадцатого вечера боролся с деревом тест-кейсов. Всё просто — получили линк на test case, нужно раскрыть дерево на определённом узле. Дерево выполнено не на православном jQuery, а на сатанинском ExtJS (кстати, привет авторам ExtJS и вопрос — для чего вы делали собственные ID, но не потрудились сделать возможность привязаться к ним из select и get?).

Осложняется всё тем, что дерево снаружи недоступно (изолируется внутри функции), а менять JS-код продукта я не могу, это крайне нежелательно. Пришлось эмулировать события, чем я раньше никогда не занимался. Оказывается на эту тему есть весьма развесистые плагины (в том числе и для jQuery), я эмулировал вполне конкретное событие — клик мышью, поэтому сделал свою небольшую функцию, как водится, две ветки — для IE и всего остального. Запишу сюда, чтобы не потерять:
function fireEvent(element, eventname){
    if (document.createEventObject){
        return element.fireEvent('on' + eventname, document.createEventObject())
    } else{
        var event = document.createEvent("HTMLEvents")
        event.initEvent(eventname, true, true)
        return !element.dispatchEvent(event)
    }
}
В итоге получилась дикая вещь — когда человек вводит этот самый понятный ему URL, браузер спрашивает у сервера путь по дереву, получает его, по таймеру долбит дерево в плюсики (дерево грузит каждый узер через AJAX), чтобы развернуть каждый узел по пути следования к test case, а когда добирается до цели, таймер тушится.

Такие развесистые клюквы там приходится программировать на каждом шагу. Зато все URL абсолютно понятны пользователю и роутинг правится очень просто.

Добавлено 8 декабря 2009 0:41: потом я переписал всё на чистом ExtJS, воспользовавшись getCmp, expandPath и внутренней реализацией fireevent, но код всё равно тут оставлю — пригодится.
5 декабря 2009 23:47

inviz.mp (inviz.mp)
6 декабря 2009, 01:31

а link.click() уже не в почете?

inviz.mp (inviz.mp)
6 декабря 2009, 01:35

И я прощу прощения, но не может человек, любящий JavaScript назвать jQuery "православным". Это оскорбление самому языку ;-)

bolk (bolknote.ru)
6 декабря 2009, 09:13, ответ предназначен inviz.mp:

Там в дереве не было ссылок. Кликать надо на картинки.

Ну уж нет, jQuery — отличный framework, при этом я очень люблю JS.

Ваше имя или адрес блога (можно OpenID):

Текст вашего комментария, не HTML:

Кому бы вы хотели ответить (или кликните на его аватару)