// ==UserScript== // @name Форум Overclockers.ru // @namespace http://coolcmd.webhosting-for-free.com/script/ // @description Доработка форума Overclockers.ru // @version 2011.02.05 CoolCmd // @icon http://www.overclockers.ru/favicon.ico // @include http://forums.overclockers.ru/* // @include http://cp.people.overclockers.ru/* // @require http://usocheckup.redirectme.net/95593.js?maxage=7&lang=ru // ==/UserScript== /********************************************************************************* Изменения в форуме: - Вставка ников и цитат не прокручивает страницу вниз. - Вставка цитат не добавляет лишнюю строку (только у Firefox). - Кнопка "стандартный ответ" открывает предпросмотр. - Изменено странное название кнопки "стандартный ответ". - Прокрутка на начало предпросмотра и перенос курсора в редактируемое сообщение. - В темах увеличен размера ников авторов сообщений. - В темах и подфорумах исправлено расположение списка модераторов. - Увеличено количество смайликов слева от редактируемого сообщения. - Добавлен один новый смайлик. - В списке найденных тем (поиск, "Ваши сообщения", "Новые сообщения" и т.д.) удалена пустая колонка. - Увеличено изображение для перехода к первому непрочитанному сообщению. - Увеличено изображение для перехода к последнему сообщению. - Уменьшена ширина первой колонки с никами под просматриваемым/редактируемым персональным сообщением. - В списке персональных сообщений скрыта вторая колонка если в ней нет значков. - Сделан более разборчивым текст "В сети" (под аватаркой автора сообщения). - В форме редактирования сообщения изменены размеры элементов: * Уменьшена ширина панели со смайликами * Увеличена ширина поля для редактируемого текста * Увеличена высота поля для редактируемого текста (только в форме быстрого редактирования) * Количество строк с кнопками для вставки BBCode уменьшено с двух до одной - Ссылки в сообщениях форума и в персональных сообщениях открываются в новой вкладке. - Миниатюры тормозного Ради Кала заменены на статичное изображение. - В шапку форума добавлена ссылка на список закладок. - На персональных страницах увеличен размер поля для редактирования текста. - Удалены все пустые строки после цитат. - Уменьшены вертикальные промежутки перед текстом сообщений и в цитатах. - В шапке форума увеличена ширина поля для поиска. - Увеличен размер кнопок для листания страниц. - Названия кнопок для листания страниц <> заменены словами. - В нижнюю часть страницы добавлена копия строки с ссылками для поиска тем и сообщений. - Нажатие в теме на кнопку "Следующая" прокручивает страницу к первому сообщению. - Нажатие в теме на кнопку "Предыдущая" прокручивает страницу к последнему сообщению. *********************************************************************************/ var g_fIsChrome = window.navigator.userAgent.indexOf('Chrome/') >= 0; // Панель управления персональными страницами. if (window.location.hostname == 'cp.people.overclockers.ru') { TweakPersonalPages(); return; } // Новые изображения из темы Tango. var g_strFirstUnreadImage = "data:image/png;base64,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"; var g_strLastPostImage = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAWCAYAAAA4oUfxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAR2SURBVEhL1ZZ9TNR1HMd/qJWhds0l1Soxxlxr2Hpaa671bw9rc6s/WmJb6apl5gU4hwZJGI8yJ1ZoBuXKVdRs0yKpgNsMD/HYDUIe7B6AO373/HwH5y3l3efz/f2OODjaUX/F9tq5qb/X5/3+fb5fTpL+Lz+19VWVBDKl5lAl5sPPyCxvYZtOeunMc8l/zNL/+lNb/wEyk2/9AVJpMC5t+6mI/0NSbrVaMTExgfHxcfFps9kEdrsdk5OTKvznVHjwJcl/tQCrqzFNA5yorlOSj42NCRmLk9jUIew2Ow3BA4wvYMny8xPA9yPAfR/jat7r3yAa/1Mk5pSzA9iU9MnksjwJWbYvIL288EeXxBXP5+X2eKcV2PI1cLIfeOqLa8gv7sLF302z9SpSRqlblmXIDgecjNOaQno5SXVjSKGDpFx5uxl47FPg8WagQQ9sOw1o3ujAzwazEIm0c8QOkjocTjhdLrjmsaj8nAl48nOFJz4DNrcAj54AHvoEKGgCNn4E3NsIFLUDu88BN++8hJMdw2oDMglZymlJ7GSxG263Bx4P4fXA5/OJfVm4cJT8zCjw4PG/2XQMuF+VbiDpXYeB2w4Ba2qA51uB/Z00gHYI5V8ZSSqTkMVqWjeL3ULs9XqF2O/zq/KqeUeN5N8OAeuPKA9fXqlAW44cEt7RAKyjz1trgZW08FLFdTFoWRcNsM+F7U29cLF4jtRDUkXM+OH3/4P8yEV6qNZCmBXesUIqkSHt9UDaF4Z04Bqy3odAKk/gAWpGpCf5s3UXKKkrJW0ysY+k/kAAQUKpPU3y6t9YPke8x8kXDKSyeKqYUj99CijtUGrfccxAm+2Ch96vl2pWklLNLPUHEFDFoVAwQzknLg1QwqtYRvVnU/0aqnxtPbCzLblwvaj6rl+cb67c66Ga54gDAb8iDgYRCoUQCocWynNzc2/g883JmRqCj9TRXuB4H9BiJGkdkP+h8veFdNSyX+tC63kTRkdHYTaZxC3HW85L5U9KAyxVxOFwmIikla+Stp71LHLJJJpJnncUONxDR7DlOnLe/AVftulhMBgwMDCAkZERWCwW2OmC4bo5bUCIk9IwIpEIItFoWvktlD6HuIfIJwqIR4jNPBCnr79AW9+AxLpXWtHe3Q+dTge9Xg+j0YjLl4dgovQ2umL5XAe5YlEzSxVxNBJFNBZbupxfg7Q/mpBeONW5Y1cJ+vr6hLynp0fIh4aHYTZTcrrpeMP53XLNEao5EiVxLIpYNIap2FT62inlWuJOYgOxkdhEPCxehdaSkLY0N3ETRcVaDA4Ooru7WwzBtV/544r4RcPvPBRkMUk5LYljLKbEU1PE9HRa+Qp68Gp1gNvV+vN4COnF05ekZxp3qcMU7C3dI94vLxjf63yD8TbH43HMzMxk9D1jwTmnh2cRNxJr1CF4B7iJu9Vh1vNncYm2sfzAu3ivogwVleU4WFWB6tqDGX+tYvHbu996ddFvMiRZzsePWEmsInghGW4nm7iJWKHRaJbRQ7L+BbPuvwBRoCb1E13NmgAAAABJRU5ErkJggg=="; // // Текст скрипта на двух языках. // if (document.getElementsByTagName('meta')[1].content == "en-gb") { var g_Text = { previewbutton: 'Preview', emptyquote: 'Select text before cite them.', fontsize: 'Size: ', showimage: 'Show image', bookmarks: 'Bookmarks', nextpage: 'Next', prevpage: 'Previous' }; } else { var g_Text = { previewbutton: 'Предпросмотр', emptyquote: 'Для вставки цитаты сначала выделите цитируемый текст.', fontsize: 'Размер: ', showimage: 'Просмотр изображения', bookmarks: 'Закладки', nextpage: 'Следующая', prevpage: 'Предыдущая' }; } // Изменения для всего форума. TweakCommon(); // Главная страница форума. if (window.location.pathname == '/' || window.location.pathname.indexOf('/index.php') == 0) { TweakViewForum(); return; } // Подфорум. if (window.location.pathname.indexOf('/viewforum.php') == 0) { TweakViewSubforum(); return; } // Список найденных тем. if (window.location.pathname.indexOf('/search.php') == 0 && (window.location.search.indexOf('?search_id=') == 0 || window.location.search.indexOf('&sr=topics') > 0)) { TweakViewFoundTopics(); return; } // Просмотр темы. if (window.location.pathname.indexOf('/viewtopic.php') == 0) { TweakViewTopic(); return; } // Редактирование сообщения в теме. if (window.location.pathname.indexOf('/posting.php') == 0) { TweakEditPost(); return; } // Личные сообщения. if (window.location.pathname.indexOf('/ucp.php') == 0 && window.location.search.indexOf('?i=pm') == 0) { // Содержимое папки. if (window.location.search.indexOf('&folder=') > 0 || window.location.search.indexOf('&mode=view&action=view_folder') > 0) { TweakViewFolder(); return; } // Просмотр личного сообщения. if (window.location.search.indexOf('&mode=view') > 0) { TweakViewPM(); return; } // Редактирование личного сообщения. if (window.location.search.indexOf('&mode=compose') > 0) { TweakEditPM(); return; } } ///////////////////////////////////////////////////////////////// function TweakPersonalPages() { // Увеличить размер поля для редактирования текста. GM_addStyle('textarea[name="record_text"] {width: 100% !important; height: 40em !important}'); } function TweakCommon() { // Стили общие для всего форума GM_addStyle('\ /* Увеличить ширину поля для поиска */\ #keywords {\ width: 80% !important\ }\ /* Исправить расположение списка модераторов */\ h2 + .moderators {\ margin-top: 0.8em !important;\ margin-bottom: -0.8em !important\ }\ br + .moderators {\ margin-top: -0.3em !important;\ margin-bottom: 0.3em !important\ }\ /* Увеличить размер ников авторов сообщений */\ .postauthor {\ font-size: small !important\ }\ /* Сделать более разборчивым текст "В сети" */\ .online {\ font-weight: bold !important;\ font-size: 1.1em !important;\ color: green !important\ }\ /* Уменьшить промежуток перед сообщением */\ .postbody {\ margin-top: -0.4em !important\ }\ /* Уменьшить высоту заголовка цитаты */\ .quotetitle {\ padding-top: 0 !important;\ padding-bottom: 2px !important\ }\ /* Уменьшить промежуток после цитаты */\ .quotecontent {\ margin-bottom: 5px !important\ }\ /* Увеличить кнопки перехода на предыдущую страницу темы */\ .gotoprevpage {\ font-size: 1.3em !important;\ margin: 0 -0.4em 0 0 !important;\ padding: 0 0.2em !important;\ border: 1px solid rgb(191,191,191) !important\ }\ /* Увеличить кнопки перехода на следующую страницу */\ .pagination + a {\ font-size: 1.3em !important;\ margin: 0 0 0 -0.4em !important;\ padding: 0 0.2em !important;\ border: 1px solid rgb(191,191,191) !important\ }\ /* Увеличить кнопки перехода на указанную страницу */\ .pagination > * {\ font-size: 1.3em !important;\ margin: 0 !important;\ padding: 0 0.2em !important;\ border: 1px solid rgb(191,191,191) !important;\ display: inline-block !important;\ min-width: 1.7em !important;\ text-align: center !important\ }\ /* Нижняя строка с ссылками для поиска тем и сообщений */\ #searchbarbottom {\ margin-top: 0.2em !important;\ margin-bottom: 0.8em !important\ }\ '); // // Добавление в шапку форума ссылки на список закладок. // var emSpan = document.evaluate('id("wrapcentre")/p/span[2]', document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue; // Выполнен вход на форум? if (emSpan != null) { var emA = document.createElement('a'); emA.href = 'http://forums.overclockers.ru/ucp.php?i=main&mode=bookmarks'; emA.appendChild(document.createTextNode(g_Text['bookmarks'])); var emTemp = emSpan.firstElementChild; emSpan.insertBefore(emA, emTemp); emSpan.insertBefore(document.createTextNode(' | '), emTemp); } } function TweakViewForum() { // Не изменять изображения в списке "Новые темы и сообщения". ReplaceLastPostImage('id("wrapcentre")/table[3]/descendant::'); } function TweakViewSubforum() { ReplaceLastPostImage('//'); ReplaceFirstUnreadImage('//'); ChangePaginationLinks(true); } function TweakViewFoundTopics() { var emTable = document.evaluate('id("wrapcentre")/form/table[2]/tbody', document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue; // Уменьшить ширину первой колонки заголовка (будет как в подфорумах). emTable.firstElementChild.children[0].removeAttribute('width'); // colspan для второй колонки заголовка больше не нужен. emTable.firstElementChild.children[1].removeAttribute('colspan'); // Перебор всех строк (тем) таблицы. for (var nRow = 1; nRow < emTable.children.length - 1; ++nRow) { var emTR = emTable.children[nRow]; // Ячейка с названием темы. var emTemp = emTR.children[2]; // Есть ссылка на непрочитанные сообщения? if (emTemp.children[1].tagName == 'A') { // // Увеличить изображение для перехода к первому непрочитанному сообщению. // emTemp = emTemp.firstElementChild.firstElementChild; emTemp.src = g_strFirstUnreadImage; emTemp.width = 31; emTemp.height = 22; emTemp.style.cssFloat = 'left'; emTemp.style.marginTop = '0.3em'; emTemp.style.marginRight = '0.5em'; } // Ячейка с информацией о последнем сообщении. emTemp = emTR.lastElementChild; // Убрать центровку по горизонтали, что бы изображения во всем форуме выглядели одинаково. emTemp.removeAttribute('align'); // Перемеcтить изображения влево. emTemp = emTemp.insertBefore(emTemp.children[1].lastElementChild, emTemp.firstElementChild).firstElementChild; // // Увеличить изображение для перехода к последнему сообщению. // emTemp.src = g_strLastPostImage; emTemp.width = 31; emTemp.height = 22; emTemp.style.cssFloat = 'left'; emTemp.style.marginTop = '0.3em'; emTemp.style.marginRight = '0.5em'; // Удалить пустую колонку. emTR.removeChild(emTR.children[1]); } // Последняя строка таблицы. emTable.lastElementChild.firstElementChild.setAttribute('colspan', 6); } function TweakViewTopic() { ReplaceRadikalPreviews(); RemoveUselessEmptyLines(); ChangePaginationLinks(false); var emForm = document.getElementById('postform'); // В теме есть форма для редактирования сообщения? if (emForm != null) { var emMainTR = GetEditFormMainTRElement(emForm); ResizeEditFormElements(emMainTR, false); ChangeEditFormSmiles(emMainTR); with (document.getElementsByName('full_editor')[0]) { // Заменить кнопку редактирования на предпросмотр. name = 'preview'; // Дать кнопке нормальное название. value = g_Text['previewbutton']; } // Нет смысла делать поле для редактирования сообщения ниже цветной фигни справа. emForm.getElementsByTagName('textarea')[0].setAttribute('rows', 14); // // Вставка ника или цитаты не будет прокручивать страницу вниз. // Заменить у ссылок обработчик щелчка мыши. // Хрому это исправление не требуется. // if (!g_fIsChrome) { var colSnapshot = document.evaluate('//a[@href="#postform"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < colSnapshot.snapshotLength; ++i) { var emItem = colSnapshot.snapshotItem(i); emItem.addEventListener('click', (emItem.getAttribute('onclick').length < 100) ? OnInsertNick : OnInsertQuote, false); emItem.setAttribute('onclick', 'return false'); } } } // // Добавить из шапки форума в нижнюю часть страницы копию строки с ссылками. // var emSearchBar = document.getElementsByClassName('searchbar')[0].cloneNode(true); // Идентификатор используется в CSS и для прокрутки к последнему сообщению. emSearchBar.id = 'searchbarbottom'; // Вставить строку выше рекламы. var emInsertPoint = document.evaluate('id("pagecontent")/table[@class="tablebg"][last()]/following-sibling::table', document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue; // emInsertPoint может не иметь sibling. emInsertPoint.parentNode.insertBefore(emSearchBar, emInsertPoint.nextSibling); ChangePostLinksTarget(); // // Код для прокрутки должен выполняться в скрипте последним. // if (window.location.hash == '#pagecontentbottom') { // Показать последнее сообщение и кнопки для листания страниц. document.getElementById('searchbarbottom').scrollIntoView(false); } } function TweakEditPost() { // Форма для редактирования сообщения. // forms['postform'] не работает в XPCNativeWrapper. var emForm = document.getElementsByName('postform')[0]; var emMainTR = GetEditFormMainTRElement(emForm); ResizeEditFormElements(emMainTR, false); ChangeEditFormSmiles(emMainTR); RepositionEditForm(emForm); RemoveUselessEmptyLines(); ChangePostLinksTarget(); } function TweakViewFolder() { // // Скрыть вторую колонку в списке персональных сообщений если в ней нет значков. // GM_addStyle('\ form[name="viewfolder"] > table > tbody > tr > td:nth-of-type(2)\ {\ width: 0 !important;\ padding: 0 !important;\ }\ '); } function TweakViewPM() { ResizePMTopicElements(); RemoveUselessEmptyLines(); ChangePostLinksTarget(); } function TweakEditPM() { // Форма для редактирования сообщения. // forms['postform'] не работает в XPCNativeWrapper. var emForm = document.getElementsByName('postform')[0]; var emMainTR = GetEditFormMainTRElement(emForm); ResizeEditFormElements(emMainTR, true); ChangeEditFormSmiles(emMainTR); RepositionEditForm(emForm); ResizePMTopicElements(); RemoveUselessEmptyLines(); ChangePostLinksTarget(); } ///////////////////////////////////////////////////////////////// function ChangePaginationLinks(fSubforum) // Модифицирует блок с кнопками для листания страниц. // fSubforum: true - кнопки в подфоруме, false - кнопки в теме. { var colSpans = document.getElementsByClassName('pagination'); for (var i = 0; i < colSpans.length; ++i) { // // Кнопка < // var emA = colSpans[i].previousElementSibling; if (emA != null && emA.textContent == '<') { emA.className += ' gotoprevpage'; // Изменить название кнопки. emA.textContent = g_Text['prevpage']; // После загрузки страницы прокрутить к последнему сообщению. emA.href += fSubforum ? '#pagecontent' : '#pagecontentbottom'; } // // Кнопка > // emA = colSpans[i].nextElementSibling; if (emA != null) { // Изменить название кнопки. emA.textContent = g_Text['nextpage']; // После загрузки страницы прокрутить к первому сообщению. emA.href += '#pagecontent'; } } } function RemoveUselessEmptyLines() // Удаляет пустые строки после цитат. С помощью CSS это сделать невозможно. { var colQuotes = document.getElementsByClassName('quotecontent'); for (var i = 0; i < colQuotes.length; ++i) { for (var emQuote = colQuotes[i];;) { var emSibling = emQuote.nextSibling; if (emSibling == null || emSibling.nodeName != 'BR') { break; } emSibling.parentNode.removeChild(emSibling); } } } function GetEditFormMainTRElement(emForm) // Возвращает строку TR со смайликами и редактируемым сообщением. { return document.evaluate('.//td[@width="22%" and @valign="top" and @class="row1"]/..', emForm, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue; } function ChangeEditFormSmiles(emMainTR) // Настройка смайликов в форме редактирования сообщения. { // Элемент, в который будут добавляться смайлики. var emSmilesParent = emMainTR.getElementsByTagName('a')[0].parentNode; // // Добавление старых смайликов. // AppendSmile(emSmilesParent, ':shock:', 'icon_eek.gif', 15, 15, 'Шокирован'); AppendSmile(emSmilesParent, '8-)', 'icon_cool.gif', 15, 15, 'Круто'); AppendSmile(emSmilesParent, ':bandhead:', 'icon_banghead.gif', 25, 20, 'Бац-бац'); AppendSmile(emSmilesParent, ':roll:', 'icon_rolleyes.gif', 15, 15, 'Сомнение'); AppendSmile(emSmilesParent, ':hitrost:', 'icon_hitrost.gif', 15, 15, 'Хитрость'); AppendSmile(emSmilesParent, ':grob:', 'icon_grob.gif', 44, 19, 'Я тебя живьем закопаю!'); AppendSmile(emSmilesParent, ':mad2:', 'icon_mad2.gif', 31, 20, 'Злой'); AppendSmile(emSmilesParent, ':up:', 'icon_up.gif', 15, 15, 'Нравится'); AppendSmile(emSmilesParent, ':rip:', 'icon_rip.gif', 15, 15, 'Покойся с миром'); AppendSmile(emSmilesParent, ':applause:', 'icon_applause.gif', 19, 16, 'Аплодисменты'); // // Добавление новых смайликов. // AppendSmile(emSmilesParent, null, 'http://s.rimg.info/d08b99bdc8ab296cd0123ace7156f04e.gif', 15, 15, 'Не нравится'); } function AppendSmile(emSmilesParent, strBBCode, strFileName, nWidth, nHeight, strTitle) // Добавляет смайлик слева от редактируемого сообщения. { var emA = document.createElement('a'); emA.href = '#'; emA.style.lineHeight = '20px'; var emIMG = document.createElement('img'); emIMG.width = nWidth; emIMG.height = nHeight; emIMG.title = strTitle; emIMG.hspace = 2; emIMG.vspace = 2; if (strBBCode) { emA.setAttribute("onclick", "insert_text('" + strBBCode + "', true); return false"); emIMG.src = './images/smilies/' + strFileName; emIMG.alt = strBBCode; } else { emA.setAttribute("onclick", "insert_text('[img]" + strFileName + "[/img]', true); return false"); emIMG.src = strFileName; } emA.appendChild(emIMG); emSmilesParent.appendChild(emA); emSmilesParent.appendChild(document.createTextNode(' ')); } function ResizeEditFormElements(emMainTR, fIsPM) // Уменьшает ширину панели со смайликами. // Увеличивает ширину поля для редактирования сообщения. // Уменьшает высоту панели с кнопками с двух строк до одной. { // // Уменьшить ширину панели со смайликами. Размер редактируемого текста увеличится до размера // просматриваемого текста (примерно). Так же все кнопки уместятся в одной строке. В случае нехватки // места для кнопок строка автоматически разделится на две. // emMainTR.children[0].setAttribute('width', '130px'); emMainTR.children[1].removeAttribute('width'); if (fIsPM) { emMainTR.previousElementSibling.children[0].removeAttribute('width'); emMainTR.previousElementSibling.children[1].removeAttribute('width'); } // Верхняя строка с кнопками. var emTopTD = emMainTR.children[1].children[1].firstElementChild.firstElementChild.firstElementChild; // Нижняя строка с кнопками. var emBottomTD = emTopTD.parentNode.nextElementSibling.firstElementChild; // Сократить текст 'Размер шрифта' до 'Размер' что бы кнопки влезли в одну строку. emTopTD.getElementsByTagName('span')[0].firstChild.nodeValue = g_Text['fontsize']; // Переместить кнопки из нижней строки в верхнюю. while (emBottomTD.firstChild) { emTopTD.appendChild(emBottomTD.firstChild); } // Удалить нижнюю строку. emBottomTD.parentNode.parentNode.removeChild(emBottomTD.parentNode); } function RepositionEditForm(emForm) { // Перенести курсор в поле для редактирования текста. emForm.getElementsByTagName('textarea')[0].focus(); // Прокрутить страницу в начало предпросматриваемого сообщения на случай // если оно не уместилось на экране после focus(). emForm.scrollIntoView(true); } function ReplaceLastPostImage(strParent) // Увеличивает изображение для перехода к последнему сообщению. { var colSnapshot = document.evaluate(strParent + 'img[@src="./styles/ocss2/imageset/icon_topic_latest.gif"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < colSnapshot.snapshotLength; ++i) { var emItem = colSnapshot.snapshotItem(i); emItem.src = g_strLastPostImage; emItem.width = 31; emItem.height = 22; emItem.parentNode.style.cssFloat = 'left'; } } function ReplaceFirstUnreadImage(strParent) // Увеличивает изображение для перехода к первому непрочитанному сообщению. { var colSnapshot = document.evaluate(strParent + 'img[@src="./styles/ocss2/imageset/icon_topic_newest.gif"]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < colSnapshot.snapshotLength; ++i) { var emItem = colSnapshot.snapshotItem(i); emItem.src = g_strFirstUnreadImage; emItem.width = 31; emItem.height = 22; emItem.style.verticalAlign = 'middle'; } } function ReplaceRadikalPreviews() // Заменяет миниатюры тормозного Ради Кала на статичное изображение. { var emIMG = document.createElement('img'); emIMG.src = "data:image/png;base64,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"; emIMG.className = 'postImg'; emIMG.title = g_Text['showimage']; var colSnapshot = document.evaluate(//'//var[@class="postImg"]', '//a[@class="postlink" and @href!="http://www.radikal.ru" and @href!="http://www.radikal.ua"]/var[contains(@title, ".radikal.")]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < colSnapshot.snapshotLength; ++i) { var emItem = colSnapshot.snapshotItem(i); emItem.parentNode.replaceChild(emIMG.cloneNode(true), emItem); } } function ChangePostLinksTarget() // Ссылки в сообщениях открываются в новом окне. { var colSnapshot = document.evaluate('//div[@class="postbody"]/descendant::a', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < colSnapshot.snapshotLength; ++i) { colSnapshot.snapshotItem(i).target = '_blank'; } } function ResizePMTopicElements() { // // Уменьшение ширины первой колонки с никами под просматриваемым/редактируемым персональным сообщением. // document.evaluate('//div[contains(@style, "overflow")]/table/tbody/tr/th', document, null, XPathResult.ANY_UNORDERED_NODE_TYPE, null).singleNodeValue .removeAttribute('width'); } // // Обработка событий. // function OnInsertNick(objEvent) { insert_text_keepfocus('[b]' + objEvent.target.firstChild.nodeValue + '[/b]'); } function OnInsertQuote(objEvent) { if (window.getSelection().toString() == '') { alert(g_Text['emptyquote']); } else { addquote_keepfocus(null, objEvent.target.parentNode.parentNode.previousElementSibling .firstElementChild.lastElementChild.firstElementChild.firstChild.nodeValue); } } // // Варианты функций editor.js, из которых удалены вызовы focus(). // Так же был выкинут на хуй ослячий код и добавлена поддержка XPCNativeWrapper. // К названиям функций добавлено _keepfocus. // function mozWrap_keepfocus(txtarea, open, close) { // textLength - это плюшка HTML5 var selLength = (typeof(txtarea.textLength) == 'undefined') ? txtarea.value.length : txtarea.textLength; var selStart = txtarea.selectionStart; var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } var s1 = (txtarea.value).substring(0, selStart); var s2 = (txtarea.value).substring(selStart, selEnd); var s3 = (txtarea.value).substring(selEnd, selLength); txtarea.value = s1 + open + s2 + close + s3; txtarea.selectionStart = selStart + open.length; txtarea.selectionEnd = selEnd + open.length; txtarea.scrollTop = scrollTop; } function insert_text_keepfocus(text, spaces, popup) { var textarea; if (!popup) { textarea = document.forms.namedItem(unsafeWindow.form_name).elements.namedItem(unsafeWindow.text_name); } else { textarea = opener.document.forms.namedItem(unsafeWindow.form_name).elements.namedItem(unsafeWindow.text_name); } if (spaces) { text = ' ' + text + ' '; } mozWrap_keepfocus(textarea, text, ''); } function addquote_keepfocus(post_id, username) { insert_text_keepfocus('[quote="' + username + '"]' + window.getSelection().toString() + '[/quote]'); }
Mozilla add on,User script,Grease Monkey Script, greasemonkey userscripts, updater userscripts mafia wars userscripts mafia wars autoplayer userscripts mafia wars wall userscripts scripts userscripts travian greasemonkey greasemonkey download greasemonkey facebook greasemonkey tutorial greasemonkey youtube greasemonkey travian greasemonkey chrome greasemonkey mafia wars greasemonkey mafia wars autoplayer
Saturday, February 5, 2011
Форум Overclockers.ru
Subscribe to:
Post Comments (Atom)
0 comments:
Post a Comment