2010-07-14

Долбанный ms.help v1.0

В MSDEV 2010 мелкомягковцы решили отказаться от старой монолитной системы помощи..
Пускают мелкий http сервер (они таки решили что IIS 7.0 для html справок - это слишком круто) - который раздаёт локальную справку..
В трее иконка - и.. ну многое сделано через ж@пу - и вообще. например
ссылки там имеют вид http://127.0.0.1:47873/help/1-6072/ms.help?мусор - где номер порта и адрес хоста - статические - а 6072 - это номер процесса. Зачем это они сделали - на их совести. Я уж молчу что они извратили идею http - пути и т.п. - всё в динамике? в запросе. что не позволит нормально использовать html.. но этим страдают многие. Но номер процесса в пути???
С внешки можно подключаться к этому же порту - но на все вопросы - "Bad Host" - как если не угадать номер процесса ..

Так вот. К вопросу хелпа *msdev 2010. Примеры кода там имеют удобный интерфейс - где разные языки заключены в разные "табы". Выбираешь таб - он пишется в куку - и все остальные запросы автоматом этот язык потом будут показывать "по умолчанию".
Реализатору респект К тому же код грамотный при первом взгляде - поддержка разных браузеров (разве что копирование в буфер обмена для хрома без анализа версий или чего-то там добавили). Хотя это мог какой-то исправлятор отсебятину наваять. Но локализаторы или кто там потом порылся.. Проблема в том, что есть язык C#, C++, F#, JScript. А вот бейсиков - оказывается два.
Первый - называется VB - и он идёт первым в списке (оно и понятно - тайную любовь БГ к языку своей молодости в мелкомягкой корпорации возвели в ранг всеобщей любимицы). Ну да оно не страшно в связи с краткостью и памятью на табы. Но вот тот "умник" что ковырялся "после" - добавил ещё одну вкладку - дубликат языка "VB" который так и называется - "Язык Visual Basic". Кроме всего прочего - он показывается отдельной вкладкой Оторвать бы этому ковыряльщику его ковырялки..

Пришлось ковырять "C:\Program Files\Microsoft Help Viewer\v1.0\dev10.mshc" (zip - архив - что также показывает грамотность "родного" автора поделия - не cab какой-то) и править файлик branding.js - и вот такая вот у меня получилась функция:

function addSpecificTextLanguageTagSet(codesnippetid)
{
for (var i = 1;i < 6;i++)
{
var snippetObj = document.getElementById(codesnippetid + "_tab" + i);
if (snippetObj == null) break;

var tagSet = getDevLangFromCodeSnippet(snippetObj.innerHTML);
if (!allLanguageTagSets.hasObject(tagSet))
allLanguageTagSets.push(tagSet);
}

if (!snippetIdSets.hasObject(codesnippetid))
snippetIdSets.push(codesnippetid);
else
{
var obj1 = document.getElementById(codesnippetid);
var obj2= obj1.nextSibling.nextSibling;
if (obj2.id == codesnippetid) obj2.style.display = 'none';
}
}