И это не шутка и не бред.
Сегодня я закончил достаточно трудоемкую задачу - доделал jQuery-враппер в Lexa.Jsm.CoreLibrary. О том, что такое Lexa.Jsm, можно узнать из этой статьи.
Заодно накидал несложный пример и поместил его в Misc/jQueryDemo. В процессе его билдежки из C#-ного исходника App.cs получается вот такой милый скрипт:
app.js
JSM.ensureNamespace('jQueryDemo');
var _ = jQueryDemo.App = {
};
_.DomReady = function() {
$(document.body).css({ margin: 0, padding: 0 });
var div = $('<div></div>').text('Hey, it\'s fun to write jQuery code in C# :)').css({ background: 'orange', font: '16pt Tahoma', padding: '8px 16px' }).fadeIn(400).appendTo(document.body);
var button = $('<input>');
button.attr('type', 'button').val('Click here to hide orange bar').one('click', function(e) { return div.slideUp('slow', function() {
button.attr('disabled', true);
window.alert('No more orange bars!');
}) });
document.body.appendChild(button.get(0));
}
_.Run = function() {
$(jQueryDemo.App.DomReady);
}
_ = JSM.registerType;
delete _;
По крайней мере, таким он получается сегодня. Кто знает, чего я натворю в Jsm-компиляторе в будущем
Кстати, обертка для jQuery снабжена документацией, а значит jQuery-код писать теперь гораздо легче. Взгляните:

Тут и intellisense, и подсказка по параметрам, и проверка синтаксиса и типов as you type, и Go to definition с Find all references. Писать приходится немножко больше, но происходит это теперь быстрее.
Еще есть несколько особенностей.
Во-первых, имеются некоторые названия, которых, строго говоря, в jQuery нету. Напрмер, jQuery.AjaxOptions или jQuery.AnimationOptions. Они облегчают написание кода и в то же время не создают дополнительного выхлопа, то есть компилируются в обычные JavaScript-объекты.
Во-вторых, вместо $(...) или $.each следует писать соответственно new jQuery(...) и jQuery.each, однако компилируется это в свои короткие аналоги.
В-третьих, в jQuery часто используется this внутри callback-функций. Совершенно понятно, что в C# никаких фокусов c this не бывает. Чтобы не потерять функционала, я ввел три дополнительных метода:
DomElement jQuery.thisElement()
T jQuery.thisObj<T>()
jQuery jQuery.thisWrapper()
Первые два компилируются в просто this, третий - в $(this). Правда, следует иметь в виду, что в анонимных функциях настоящий this при использовании этих методов употреблять нельзя - будет создано дополнительное замыкание, и this испортится.
Теперь думаю, может показать это Резигу?