Помнится, Влад предлагал сделать на NemerleWeb новое дерево/меню для rsdn.ru.
На этой неделе удалось допилить это дерево до состояния, когда можно уже показывать общественности.
Пока из новых фишек только поиск и возможность прикреплять под-ветки на главную страницу.
Если кому интересно, посмотреть можно здесь:
http://m.rsdn.ru
Самое интересное — это код. Вся структура меню состоит из трёх Unit'ов
1. MainPage
https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/MainPage.n
Здесь рендерится общая структура страницы: левая часть (поиск, прикреплённые ветки, меню) и правая, которая содержит iframe для страниц rsdn.
2. TreeNode
https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/TreeNode.n
Собственно, нода. Всё что она делает — это рендерит свои под-ноды и подгружает их по мере надобности. Одновременно является объектом, который используется как на сервере, так и на клиенте.
3. Search
https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/MVVM/Search.n
Поиск. Тут стоит обратить внимание на макрос throttle, который генерирует код примерно следующего содержания:
window.clearTimeout(_timeout1);
_timeout1 = window.setTimeout(() => {
...code...
}, 500)
При этом генерируется поле _timeout{X} для каждого отдельного throttle.
На сервере есть ещё всего один "лишний" класс, который отвечает за загрузку дерева в память:
https://github.com/NemerleWeb/NemerleWeb/blob/master/NemerleWeb.RSDN/Models/TreeLoader.n
Всё остальное генерируется фреймворком.