1

Тема: JavaScript: скрипт для FF+Greasemonkey+CoLT, для удобства на форуме

Скрипт для дополнения Greasemonkey для совместного использования с дополнением CoLT в Mozilla Firefox.

Greasemonkey — это расширение Mozilla Firefox, позволяющее добавить на любую страницу пользовательский JavaScript, записанный в формате этого расширения (сайт по пользовательским скриптам Greasemonkey: Userscripts.org).

CoLT  — это расширение Mozilla Firefox, позволяющее кoпиpoвaть нaзвaниe и URL ccылки чepeз кoнтeкcтнoe мeню в разных, в том числе и пользовательских, форматах — BBCode, HTML, Wiki и т.п. Например, при щелчке правой кнопкой мышки на левой верхней ссылке на этой странице («Список») и последующем выборе пункта контекстного меню «Копировать название и URL ссылки», «BBCode» в буфер обмена будет скопирован следующий текст:

[url=http://forum.script-coding.com/index.php]Список[/url]

, сразу готовый для вставки в окно сообщения форума.

Здесь предлагается скрипт для Greasemonkey, добавляющий ссылки к номерам сообщений этого форума, чтобы с помощью расширения CoLT было удобно копировать ссылку в формате BBCode, содержащую текст «# НомерПоста», получая в результате копирования такое:

[url=http://forum.script-coding.com/viewtopic.php?pid=19043#p19043]#1[/url]

Сам скрипт:

// ==UserScript==
// @name          SCI_AddLinks2PostNumbers
// @description   Script-Coding.com: Add links to post numbers.
// @include       http://forum.script-coding.com/viewtopic.php*
// @version       0.01.1
// ==/UserScript==

var collTags = document.getElementsByTagName("span");
var elemPostNumberLink;

for (var i = 0; i < collTags.length; i++){
    if (collTags[i].className == "conr") {
        elemPostNumberLink = document.createElement("a");

        with (elemPostNumberLink) {
            href = collTags[i].nextSibling.href;
            appendChild(document.createTextNode(
                collTags[i].firstChild.nodeValue.replace(/^[\s]+/, "").replace(/[\s]+$/, "")));
            title = "Используйте расширение CoLT (http://www.borngeek.com/firefox/colt/), \r\n" +
                "чтобы скопировать скопировать название и URL ссылки в формате BBCode";
            style.backgroundColor = "aqua";
            style.MozBorderRadius = "0.1em";
            style.padding         = "0.2em";
            style.textDecoration  = "none";
        }

        collTags[i].replaceChild(elemPostNumberLink, collTags[i].firstChild);
    }
}

1. Загрузите и установите расширение Greasemonkey.
2. Загрузите и установите расширение CoLT.
4. Перезапустите Firefox, чтобы установленные расширения начали работать.
3. Сохраните код скрипта в формате UTF-8 (необходимо для отображения кириллицы; проще всего это сделать в Блокноте) под именем «sci_addlinks2postnumbers.user.js» (начало имени файла может быть произвольным, но обязательно должно оканчиваться на «.user.js» — по этому признаку Greasemonkey распознаёт пользовательский скрипт).
4. Перетащите файл «sci_addlinks2postnumbers.user.js» из Проводника в окно Firefox. Если Вы всё сделали правильно, Greasemonkey распознает пользовательский скрипт и задаст вопрос о разрешении установки скрипта. Подтвердите установку пользовательского скрипта.
5. После установки скрипт будет работать на страницах, перечисленных параметрами @include, в данном случае на «http://forum.script-coding.com/viewtopic.php*» — страницах этого форума, содержащих сообщения. Можно легко добавить другие форумы на том же самом движке (PunBB), пользуясь диалогом настройки дополнения Greasemonkey. После добавления скрипта (или нового шаблона URL для него) необходимо перезагрузить страницу форума, и номера постов превратятся в ссылки, с которыми будет удобно работать через контекстное меню, предоставляемое дополнением CoLT.

Проверялось на Mozilla Firefox 2.0.0.20 и 3.0.5, Greasemonkey 0.8.20080609.0, CoLT 2.4.3.

Автор скрипта — alexii.

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.

2

Re: JavaScript: скрипт для FF+Greasemonkey+CoLT, для удобства на форуме

Дополнение к вышеприведённому скрипту. В блоках кода на форуме можно реализовать кнопку "Выделить код". Это будет весьма удобно в сочетании с этим инструментом. Скрипт с добавлением:

// ==UserScript==
// @name          SCI_AddLinks2PostNumbers
// @description   Script-Coding.com: Add links to post numbers.
// @include       http://forum.script-coding.com/viewtopic.php*
// @version       0.01.2
// ==/UserScript==

var collTags = document.getElementsByTagName("span");
var elemPostNumberLink;

for (var i = 0; i < collTags.length; i++){
    if (collTags[i].className == "conr") {
        elemPostNumberLink = document.createElement("a");

        with (elemPostNumberLink) {
            href = collTags[i].nextSibling.href;
            appendChild(document.createTextNode(
                collTags[i].firstChild.nodeValue.replace(/^[\s]+/, "").replace(/[\s]+$/, "")));
            title = "Используйте расширение CoLT (http://www.borngeek.com/firefox/colt/), \r\n" +
                "чтобы скопировать скопировать название и URL ссылки в формате BBCode";
            style.backgroundColor = "aqua";
            style.MozBorderRadius = "0.1em";
            style.padding         = "0.2em";
            style.textDecoration  = "none";
        }

        collTags[i].replaceChild(elemPostNumberLink, collTags[i].firstChild);
    }
}

var collTags = document.getElementsByClassName("codebox");
var elemCode;
var num = 0;
var code1 = "javascript:pre = document.getElementById('";
var code2 = "').getElementsByTagName('pre')[0]; var range = document.createRange(); range.selectNode(pre); window.getSelection().addRange(range);";

for (var i = 0; i < collTags.length; i++){
    collTags[i].id = "codebox" + num; num++;
    form = document.createElement("form");
    input = document.createElement("input");
    input.type = "submit";
    input.value = "Выделить код";
    form.appendChild(input);
    form.action = code1 + collTags[i].id + code2;
    br = document.createElement("br");
    collTags[i].insertBefore(br, collTags[i].firstChild);
    collTags[i].insertBefore(form, collTags[i].firstChild);
}

http://img23.imageshack.us/img23/5718/scrqo7.jpg

Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.