<

Custom Buttons

Автор: Anton
Домашняя страница: http://custombuttons.mozdev.org/
Страница расширения на AMO: https://addons.mozilla.org/en-US/firefox/addon/2707
Старая домашняя страница: http://xsms.nm.ru/custombuttons/
Автор первых версий: Yan (к новым версиям отношения не имеет)
Описание: Позволяет добавлять собственные кнопки на панели инструментов.

Давно мечтал о ББ-тулбаре....
НО

Удаление кнопок пока не прикрутил.

это как то жостко.

буду внимательно следить за разработкой)

Yan
удаление кнопок прикрутил? а то так тестить боязно.:)

Хм... а чем Customizable Toolbar Buttons не подходил?

Lynxx
замудрёность тьюторила... или его англаязычность :)

Крыска
Очевидно у нас разные понятия о замудренности ;)

Lynxx
все люди разные :)

Yan молодец! Поздравляю (я то наверное могу это сделать со знанием темы)! Очень классный код и перспективный!
Я и не сомневался, что у тебя классное расширение получится!

Я кстати также твое участие в своем расширении всех версий обязательно позиционирую (как и обещал!).

Если ты сам считаешь что код нормальный, то может можно его на международный уровень выводить? Если что я помогу чем смогу (в т.ч. и могу поставить расширение в свой сайт по расширениям)

Да еще! Если не против, могу предложить интеграцию части того что ты сделал в мое расширение. Тем более, что мы с тобой работаем в схожем направлении. Я тоже нечто подобное для своего сделал и думал через месяцок выпустить. Но откровенно, твой код по прямее будет. Короче если есть желание опять скооперироваться пиши в личку, - я обрисую конфигурацию.

Yan
ну отпишись о ходе разработки? как оно там?

Крыска

удаление кнопок прикрутил? а то так тестить боязно.:)

Пока нет.. Не было меня в городе, ничего не делал. Расширение можно тестить - кнопки удаляются через about:config сбрасыванием параметра custombuttons.button*.
Раз интерес к расширению есть - то обязательно доведу до ума.
Lynxx

Хм... а чем Customizable Toolbar Buttons не подходил?

Тем, что все создаваемые кнопки находятся в одном месте - их не распихать по нужным углам.
hex
Код ужасен - буду переписывать. Выкладывать на mozilla.org рано, да я и сам справлюсь, так что помощь с "выходом на международный уровень" однозначно не потребуется, спасибо.
Что касается твоего расширения.. Если честно, то у меня (да и не только у меня) есть большие вопросы по поводу него. Распространение только по e-mail, рекламные кнопки... Всё это рядовому пользователю чуждо, и неприятно. Так что у меня нет желания участвовать в его разработке каким-либо образом.

Yan пишет:

hex
Код ужасен - буду переписывать. Выкладывать на mozilla.org рано, да я и сам справлюсь, так что помощь с "выходом на международный уровень" однозначно не потребуется, спасибо.
Что касается твоего расширения.. Если честно, то у меня (да и не только у меня) есть большие вопросы по поводу него. Распространение только по e-mail, рекламные кнопки... Всё это рядовому пользователю чуждо, и неприятно. Так что у меня нет желания участвовать в его разработке каким-либо образом.

Понял! Спасибо за добрые слова и в мой адрес и в адрес моего расширения! Дальновидная политика, молодец!
Все сделаю как ты просил.
Учитывая что расширение такое плохое, принял решение не отягощать им форум во избежании народного гнева.

hex
Зачем же так бурно реагировать на чьё-либо личное мнение? Тем более если сам с ним не согласен.
P.S. Вопрос риторический, тема закрыта. Ибо оффтоп.

Супер

:beer:
теперь бы сюда перегнать расширение BBcode  :angel:

:whiteflag:
кнопки слетают каждый раз. ставлю в статусную строку 3 кнопки и после перезагрузки их уже нет.

:whistle: удаление кнопок можно с таким глюком не прикручивать :D

Крыска

ставлю в статусную строку 3 кнопки и после перезагрузки их уже нет.

Статусная строка по умолчанию не предназначена для кнопок, вот и слетают. :) Потом посмотрю, как расширения реализуют добавление кнопок, и попробую исправить. Кстати, а что используется? AIOS?

Yan
ссылка на мой ФФ в подписи :)
у меня вверху только одна строка: там и меню и кнопки и поиск и адресная вместе. каждое место на вес золота.
Поставил туда. посмотрим.

ссылка на мой ФФ в подписи :)

А я подписи отключил. :) Пойду в профиле погляжу..

у меня вверху только одна строка: там и меню и кнопки и поиск и адресная вместе. каждое место на вес золота.

У меня тоже. Поэтому редкие кнопки (bbcode, например) я вынес на панель закладок, которую открываю только по необходимости (тоже кнопкой). Собственно, для того и расширение написал. :)
В общем, посмотрю потом, что там со статус-баром...

Поэтому редкие кнопки (bbcode, например) я вынес на панель закладок

т.е. в панель АИОС?

кстати на основной панели работает.

Крыска

т.е. в панель АИОС?

Нет, именно Панель закладок. А на панели навигации как раз меню,... А там, где меню, там и адресное поле, и кнопки, и закладки...

Сделал alpha2.

Изменения:
1. Добавил удаление кнопок. :)
2. Добавил совместимость со Status Buttons и All-In-One-Sidebar.
К сожалению, кнопки слева и справа от вкладок по-прежнему распологать нелязя, т.к. эти 2 маленькие панельки не полностью эмулируются AIOS как стандартные toolbar'ы, и не имеют необходимого свойства currentset, так что с этим ничего не поделаешь....
3. Добавил реализацию протокола "custombutton". Теперь кнопки можно устанавливать прямо с web-страниц (a-la Opera).
4. Сделал кнопки для расширения BBCode, и еще несколько других. Их можно установить со страницы расширения.
5. Убрал из расширения кнопки по умолчанию. Теперь все кнопки надо устанавливать либо с web-страниц, либо создавать вручную.

Вроде всё.

А можно как нибудь по простому объяснить, что нужно вставлять в поле Code? Например если я хочу создать кнопку для вызова расширения FireFTP ...

Было бы ещё шоколадно сделать плавающую (float) панель для размещения на ней кнопок.

Ура! ПОлная поддержка ББкод! Теперь я доволен :P:heart: Панель Ббкодов имею и через контекстное лазить не надо :)

BraVo123

А можно как нибудь по простому объяснить, что нужно вставлять в поле Code?

Код тот же, что и для настройки горячих клавиш в keyconfig.
Поэтому можно почитать в wiki и тему Горячие клавиши.
И там, и там много всего полезного.
В частности, строки:

# Ставим расширение MenuManipulator.
# Установив расширение, запускаем Firefox.
# Заходим в «Инструменты → Расширения → MenuManipulator».
# В MenuManipulator напротив настраиваемой команды смотрим значение command или oncommand.
# Копируем его (Edit → Ctrl+C).
# В поле /* CODE */ пишем значение того самого command или oncommand, которые мы смотрели при помощи MenuManipulator (например, gBrowser.reloadAllTabs()

Вместо MenuManipulator можно воспользоваться DOM Inspector. Правда, это порядком сложнее.

Yan, спасибо за исчерпывающий ответ :) .

Yan , я конечно уже извращаюсь, но всётаки, картинка для кнопки, может быть только одна или можно несколько втавить (отжатая кнопк, нажатая кнопка, неактивная кнопка)

BraVo123
В принципе одна. Но если очень хочется, то всё можно сделать через JavaScript.
Например, вставить код типа

Выделить код

Код:

if (!this.checked){
 this.checked=true;
 this.image="file:///F:/knopki/variant1.png";
}else{
 this.checked=false;
 this.image="file:///F:/knopki/variant2.png";
}

this в коде указывает на саму кнопку.

Пока у этого способа много недостатков (например, теряется состояние кнопки при перезагрузке браузера), но в alpha3 я планировал что-то с этим сделать.

Yan, не стоит использовать абсолютных путей...

Dark-Demon

Yan, не стоит использовать абсолютных путей...

Где? В коде для смены картинки? Если да, то почему?

Где? В коде для смены картинки? Если да, то почему?

Ну например, я использую PortableFireFox .... :) (в том числе)
З.Ы. Конечно можно и base64 конвертнуть ...

BraVo123

Ну например, я использую PortableFireFox .... smile (в том числе)
З.Ы. Конечно можно и base64 конвертнуть ...

Ну это уже от желания пользователя зависит.. Если надо - придется конвертить.
Можно, конечно, попробовать запихнуть картинку на chrome://, т.е. в папку расширения.. Но тогда при установке новой версии всё потрется.. Так что выхода я пока не вижу..

Лучше в профиле создавать папку и кидать туда картинки.
А если указывать через file:///f:/... то возникает траблы.
Напр. в unix-подобных системах нет никакого диска f: (и c: тоже нет)

Напр. в unix-подобных системах нет никакого диска f: (и c: тоже нет)

Ну так для юникс-подобных систем свой путь и вводить. Типа file:///home/yan/......

Кстати, можно вообще хоть из нета картинки использовать. Типа http://forum.mozilla.ru/favicon.ico.

Повторюсь, это уже как пользователю удобнее будет. От меня тут мало что зависит. Что человек напишет в полях Image и Code, такая кнопка у него и получится.

Anton прислал мне код для конвертации картинок в base64, так что проблемы с абсолютными путями отпадают. :D

Кроме этого, в alpha3 я добавил поле Initialization. В него вписывается код, который будет выполнен один раз при загрузке браузера. Например, это может быть код, устанавливающий начальное состояние кнопки, меняющий её тип, её свойства.
Это позволит создавать кнопки с довольно сложным функционалом. Для примера я сделал часики http://xsms.nm.ru/custombuttons/icons/clocks88.xbm и Cookie button (по аналогии с одноименным расширением).

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

что-то с часами я не понял. они у меня звёздочкой отображаются.

Крыска
При добавлении кнопки из окна настройки панелей инструментов кнопка инициализируется не сразу. Нужно по ней кликнуть, и всё заработает. :)

Интересная иконка: http://xsms.nm.ru/custombuttons/icons/clocks88.xbm
На кнопке тоже так будет?

раз 20 щёлкал. у меня не работает.
а вот как только переустановил кнопку, то заработала :)

А можно сделать кнопку scrapbook'a "захватить"?

INFOMAN пишет:

Интересная иконка: http://xsms.nm.ru/custombuttons/icons/clocks88.xbm
На кнопке тоже так будет?

ага. так и работает :)

Yan пишет:

...часики...

Устанавливаются почему-то только при отключенном JavaScript - мол, кнопка недоступна, установите необходимое расширение. Но работают без этого расширения.

INFOMAN

Интересная иконка: http://xsms.nm.ru/custombuttons/icons/clocks88.xbm
На кнопке тоже так будет?

Не знал, какое время для примера взять. :) Вообще, часы синхронизируются с системным временем каждую минуту.
Крыска

раз 20 щёлкал. у меня не работает.
а вот как только переустановил кнопку, то заработала

Странно. :( Надо будет мне получше потестировать установку кнопок..

А можно сделать кнопку scrapbook'a "захватить"?

Да:

Code:

var menuItem=document.getElementById('ScrapBookContextMenu4');
menuItem.click();

Image:

chrome://scrapbook/skin/capture_entire_as.png

Anton

Устанавливаются почему-то только при отключенном JavaScript - мол, кнопка недоступна, установите необходимое расширение.

Это я перемудрил со скриптом. :( Сейчас подправил.

Yan
а как код операции находить?:blush:

Крыска

а как код операции находить?

В общем случае как и в keyconfig.
Но в случае со Scrapbook не все эти способы подходят, т.к. в самом коде Scrapbook используется обработка нажатого пункта меню. Т.е. один и тот же код, но для разных пунктов меню.
Поэтому в этом случае нужно имитировать клик по пункту меню.
ID пункта меню можно узнать через DOM Inspector, или выполнив в кнопке код:

Выделить код

Код:

var ar=document.getElementsByAttribute('label','Захватить как...');
alert(ar[0].id);

Ну и потом вписать этот ID в код:

var menuItem=document.getElementById('ScrapBookContextMenu4');
menuItem.click();

Сделал для себя кнопку Proxy On/Off, а заодно и Offline Button. Если кому понадобится - установка там же.

Yan
Респект за полезное расширение!
Вопросы|предложения:
1. Что конкретно делает операция "конвертации картинок в base64"?
К примеру, если я назначаю кнопке какой-то значок, расположенный на диске, а затем удаляю значок с диска, то кнопка остается с назначенным значком. Это как понимать? Куда прописывается иконка кнопки?
2. Может стоит конфирмить удаление кнопки, я уже парочку с трудом сделанных кнопок потер.
3. Планируется ли ввести возможность настройки всплывающих подсказок кнопок, обработки событий, соотвествующих разным нажатиям на кнопку (middle click, rught click)?
4.  И еще, предлагаю открыть ветку, посвященную Custom Buttons в разделе Extensions на forums.mozillazine.org. Расширение в рабочем состоянии, местные умельцы быстро кнопок наклепают.

И еще, предлагаю открыть ветку, посвященную Custom Buttons в разделе Extensions на forums.mozillazine.org. Расширение в рабочем состоянии, местные умельцы быстро кнопок наклепают.

прально... пора выходить на мировой уровень :iron:

Куда прописывается иконка кнопки?

Предполагаю, что прямо в кнопку в виде data:image/png;base64.....

Dimanish пишет:

...умельцы быстро кнопок наклепают.

А чтобы "умельцам" было проще, пусть само расширение компонует ссылки для установки кнопок.

Dimanish

Что конкретно делает операция "конвертации картинок в base64"

INFOMAN правильно сказал. Конвертация в base64 позволяет хранить картинку в самом коде кнопки.

Может стоит конфирмить удаление кнопки, я уже парочку с трудом сделанных кнопок потер.

Обязательно сделаю.

Планируется ли ввести возможность настройки всплывающих подсказок кнопок, обработки событий, соотвествующих разным нажатиям на кнопку (middle click, rught click)?

Никаких нововведений и не требуется. Всё это можно сделать и сейчас в коде инициализации.
Например:

this.tooltipText='Всплывающая подсказка';
this.onclick=function(event){
if (event.button==1){
  alert('Средняя кнопка');
}
}

А вот правую кнопку лучше не обрабатывать, а то тогда контекстное меню не отроешь, и кнопку отредактировать можно будет только через about:config.

И еще, предлагаю открыть ветку, посвященную Custom Buttons в разделе Extensions на forums.mozillazine.org. Расширение в рабочем состоянии, местные умельцы быстро кнопок наклепают.

Про рабочее состояние говорить рано. Например, вчера нашел баг, из-за которого кнопки могли пропадать, или наоборот, появляться лишние.

P.S. base64

Anton

А чтобы "умельцам" было проще, пусть само расширение компонует ссылки для установки кнопок.

Так контекстное меню -> Copy URI копирует в буфер ссылку. :)
Правда, протокол custombuttons:// на форумах резаться наверняка будет...
P.S. Ну да, режется...

Yan пишет:

...
Так контекстное меню -> Copy URI копирует в буфер ссылку. :)
...

:blush:
невнимательность, блин...

Бесплатных хостингов, на которых можно повесить страницу с кнопками, пока хватает.

Хотелось бы, чтобы диалог редактирования кнопки был немодальным - когда нужно копировать скрипты с разных веб страниц, приходится его постоянно закрывать и открывать.

Anton

Хотелось бы, чтобы диалог редактирования кнопки был немодальным - когда нужно копировать скрипты с разных веб страниц, приходится его постоянно закрывать и открывать.

Да, пожалуй так лучше будет. Сделаю.

да. будет получше., а то у меня кнопка получилась гибридная :) действие правильное, а иконка и название, что придумалось.

Я сделаю так, чтоб окно всё равно было поверх других, но при этом была возможность копировать текст со страниц, и вообще работать с браузером. (как в Adblock Plus 0.7 отсоединённая панель со списком элементов). Так удобно будет?

Yan
ага.

Yan пишет:

Я сделаю так, чтоб окно всё равно было поверх других, но при этом была возможность копировать текст со страниц, и вообще работать с браузером...Так удобно будет?

Конечно, будет удобней, если окно будет всегда наверху.

custombuttons 0.0.1 beta

Изменения:
- исправлен баг с пропаданием/случайным появлением кнопок;
- подтверждение при удалении кнопки;
- по-другому открывается окно редактирования кнопки;
- русификация;
- изменил стандартную иконку и добавил иконки в контекстное меню;

Сварганил парочку кнопок:
toggle JavaScript

Выделить код

Код:

custombutton://ara%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABcMAAAXDABsIpz7QAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACqklEQVR4nG3TzWucVRTH8e/v3HOfecvLZGqGaQKmllKmWg1J1cyibu2ioihuXCjWnYSi/4Euu9KquJGCoqWKIMZUMBErKhGCaLrRLiy+QtugdKCDGZOZeeZxkUwI6tncxeVzzrlcfqrc9Th7ah9QAVaAEQBJg7uWBT+OaLrHm8EjSPgeXAM+BBogZIYkzAQIID+UpT8W+ulak3gSWAewPZPfBzVkthHcCTHiMW55zG3FfJ5yDJxrX+WN9tXZar+7lMHooEEN+BjpATMjeGzJ7JFg9nxSKPaTYik3qfTF5ea3V6a7Leq9Dd669f3BPNmnkI0bUAYaZoaFQHB3T5LFwvDoZ0mhWNiv9MwnN74+MZJ27xy8tUz6QlYsmSe5SQe+lAxZ2F47yZmFEJJiaWg47fHOLyuPAYcH+PWJ2eZ7+w7Ne6cz1KO77KCyzAjueEyI2w2Y7rSG56+vMdbb3MXnJmd+/qB29KD3+xVJyNRxSX0LRghOSBJCkrN3f/18dLy3+fJQ2tn9oi8qB968sP+eZySdQXowSDNZRuoy9c1sw9xL7rE7KrIDW60lwdEBfmWqwWK1fkrwF3AReFtm50Pwu02yTSlcErp/LOstn/39q7LgvgF+darRX6zWU2ATOA08K3FF4geZuQOrSKcvX7t0az0WZ2vd9u7a5yem1z6q1p8E/gSWds4nQA6MSGq5pOeGSX+75oX1yW67NsCvTc11FqpH7gAuA08Dp4AMOATMAw8DdTf3dqHf++5vhWMDfPb2OS5WjwCMAV3gAv+tVZm1DLj+h8UT8+Mz3/yUG+GliWMs3HYYyJLtgcT/wSvAQ8AN1e59CknEfLFWir6Q5YtznuSw4MiE0L/xKvAoO2Ham8b1juykZ1kl7fVWQCNGQAY7aWwBx4EmcHOA/gEb272+WkeOLAAAAABJRU5ErkJggg%3D%3D%5D%5Bswitch%28this.PS.getBoolPref%28this.pref%29%29%7B%0A%09case%20true%3A%20this.PS.setBoolPref%28this.pref%2C0%29%3Bbreak%3B%0A%09case%20false%3A%20this.PS.setBoolPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%5D%5Bthis.pref%3D%27javascript.enabled%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%20var%20state%3Dthis.PS.getBoolPref%28this.pref%29%3B%0A%20if%20%28state%3D%3D1%29%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABcMAAAXDABsIpz7QAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACUklEQVR4nG2TsWueVRjFf+c8z/u++ZIQQoqiCIIgIhRRUUrQboJTRJAK2sm1lA4KiquTOul/IEipYAfBdslQREgh1MUlHXS3WVrwk2jSfO99HL4vpWIP3OVefudcnnOvNk6f4yGdAjaAHWANQNLJ2dSRZxH3Mru7kR1I5EPwE8APwCYI2UjCFiCApYLfoG4BbwP7wAODU8D3oE1ZB3asKAJLR3ag8FCt5j7FmWrtesEbgj/zQbK0aRlnToHzYT/TLU0+d+SkjbNP+8nyrWrlw4O/VmVflLQN9VYC68CmbewgMlP2j0vLq6ed+XVVfZbD0pfZ9d+JutMNw0dV9dPx0T832jg+lcDPkpGD6DqyH+yI6JdXVjWfxZ4jAJ6j6j3gndbGWbVhdcbxdoLWZROZZNfTzQ3oul4g3MWrwlfbOHtF8k3gNbdAErLup6TmMBFJ9D3RD54PLkFC8AkgR/5aVa9L+gLpzZBermJMWc32gTNXMrvjyK7Z1rw+ADXg48Wb2ASuAd/KvhyRL1jyoRQ3hM7IcT3C67YBHS/6b8AIHAKXgAsStyX2ZKeBXaRLOQy/ROYeaF/SDHgauAq8CDwJ3Aa2gfdBCVqTNNXjL51/Nvvh934y+WqYrHzT9QPR9Y/JvgYcASvAB8AeUIsbXQQuVGvPpzP/rqpd4MPFOtF9YBk4Bq7wf+3Knhr4A2qrtXaztZGqolUB1c8D6R4B7wBbwB0vNu6CzrVx3B3HGdVGWqs5/ohk4N05w39+4z6wVVUb42y2A1ozgQyLNqbAWeDeCQzwL0hNudpWhtFVAAAAAElFTkSuQmCC%27%3B%0A//%20%20this.checked%3Dtrue%3B%0A%20%7Delse%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABcMAAAXDABsIpz7QAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACqklEQVR4nG3TzWucVRTH8e/v3HOfecvLZGqGaQKmllKmWg1J1cyibu2ioihuXCjWnYSi/4Euu9KquJGCoqWKIMZUMBErKhGCaLrRLiy+QtugdKCDGZOZeeZxkUwI6tncxeVzzrlcfqrc9Th7ah9QAVaAEQBJg7uWBT+OaLrHm8EjSPgeXAM+BBogZIYkzAQIID+UpT8W+ulak3gSWAewPZPfBzVkthHcCTHiMW55zG3FfJ5yDJxrX+WN9tXZar+7lMHooEEN+BjpATMjeGzJ7JFg9nxSKPaTYik3qfTF5ea3V6a7Leq9Dd669f3BPNmnkI0bUAYaZoaFQHB3T5LFwvDoZ0mhWNiv9MwnN74+MZJ27xy8tUz6QlYsmSe5SQe+lAxZ2F47yZmFEJJiaWg47fHOLyuPAYcH+PWJ2eZ7+w7Ne6cz1KO77KCyzAjueEyI2w2Y7rSG56+vMdbb3MXnJmd+/qB29KD3+xVJyNRxSX0LRghOSBJCkrN3f/18dLy3+fJQ2tn9oi8qB968sP+eZySdQXowSDNZRuoy9c1sw9xL7rE7KrIDW60lwdEBfmWqwWK1fkrwF3AReFtm50Pwu02yTSlcErp/LOstn/39q7LgvgF+darRX6zWU2ATOA08K3FF4geZuQOrSKcvX7t0az0WZ2vd9u7a5yem1z6q1p8E/gSWds4nQA6MSGq5pOeGSX+75oX1yW67NsCvTc11FqpH7gAuA08Dp4AMOATMAw8DdTf3dqHf++5vhWMDfPb2OS5WjwCMAV3gAv+tVZm1DLj+h8UT8+Mz3/yUG+GliWMs3HYYyJLtgcT/wSvAQ8AN1e59CknEfLFWir6Q5YtznuSw4MiE0L/xKvAoO2Ham8b1juykZ1kl7fVWQCNGQAY7aWwBx4EmcHOA/gEb272+WkeOLAAAAABJRU5ErkJggg%3D%3D%27%3B%0A//%20%20this.checked%3Dfalse%3B%0A%20%7D%0A//alert%28%27jh%27%29%3B%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B

toggle Java

Выделить код

Код:

custombutton://ara%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABcMAAAXDABsIpz7QAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACpElEQVR4nF2TT2icdRCGn/n3+751t38SMBQMxNZGm0qhFMEepA20tqVG8FDwIIgRBCke1JpehB5KLx68Si+Siwfx4EmC4KX0YoVKhRKCJLVNirUU026arGSz+fbnIVltOjC3eeYdZt6R/pfP8ETUgSPAl8AIsCYiAElgRtTOichVi2ghgpqjT8BDwA/AFMiIqCLuSS2SRkIjjWA6lTdqhnqQbuYgcBkYRRVzJzyIiCpSWomUHkcqVs90l/LZ9QejiFxW80FArTawfxvwHXBc3VFzzAIrEqkoK1QnVe3rd9oPXv28+fuOw50m4r7317TzkIh878CBDWXDVDEPLAoiBR4pOuvrV67fnqp3kUElA3Csvcg3fXtHV7MecGBSRFAz1BOeCqIo8ZQwDy4sXj8BjCtZAGZrfXy8+yjdrFi7Pemgw6KKmWMRRFHgZYFFwVjzDqce/vH+5p6Ye6afc8Ov07IgqgrJeVhFaKsb5o6nwKPAPTHWnGdi4RqyCd8td7Q+e+kkrVRiaqg6nlJbUUFVUXfME+rOG8073YmFn9Gce9f67ZN9p6aXvQAEEVAVVB1VkQLRjSZqnbcfzc2dX7j2H/wwaveAY4+itvK/ZQRRQVQLB2ZVZFhUeevx3fZH92/s6Y39Z7l9+Yvdr52dbgwosJMtIYjIrIroOAhvrtzL5+/faPTgZU+3L+05+uF0Y6ANfAXsB/LWHjLuanazzOtXP1i6daR351u1vjyx72R9ycuLQAk8C6StE3BFRG5a47mDnY7oT780dh0aXf37+b9Sg09fPCHLqawD/SDbAXsK/hEYBxZl1yvvEkWJqA69oNW3rbJx+J/aNswcUQGEp5WB94B5egZh42XnF7x+fEnjdLeqZqqqInfzGuS1TXAGOA2M9WCAfwFy6bThwAwC4wAAAABJRU5ErkJggg%3D%3D%5D%5Bswitch%28this.PS.getBoolPref%28this.pref%29%29%7B%0A%09case%20true%3A%20this.PS.setBoolPref%28this.pref%2C0%29%3Bbreak%3B%0A%09case%20false%3A%20this.PS.setBoolPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%5D%5Bthis.pref%3D%27security.enable_java%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%20var%20state%3Dthis.PS.getBoolPref%28this.pref%29%3B%0A%20if%20%28state%3D%3D1%29%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABcMAAAXDABsIpz7QAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACKUlEQVR4nHWSMYudRRSGn/c9Z+a7axBENAYsopgVdyUggq1skSoEbGy3SBdrf4eFCBaCbK9oIbKkvLGws0qxxVaB/ALZSPbu/eZY3Lt4FXybaeZ5Zt45o9c//Jyd3AA+Bb4CDoCVJIAuOJPjS0m/RWsvkHAk3oFvA78Cp6AD2SizO1p367j1A8Kntdlz+xqKvZuHBt4GvgPuYRORZCSROWe2vyLzZUSWM23Hu4gPHPkEuIi9m4evAj8A95yJI4loxNTp02LGPrHj+5wW72frt9walu4AH0v6OYG7wBEOwiayEW2i9Ua23q7W66XDP7a+OIZi1KD6mvXq6qhG3U3gRBKOwNnJPtGmBdk7kY1+I/dkq8ZYbARQY0bRmC8vTxK8r23vaI02TeRiItpEOlDYIHAUgKqoCuxAVfspcemMKTLJ3sg2kdmJSGyDVLtzDkFVMEpk75fGwjbOJLKzechY214hAK4Ful4ksIWd2NKEvJE4rhTxuxyfIX29Zd7aSl7+cw8hC9lTAueW9mUjx5+yfxI6Bc6Bj4A/gDeA1/hXhKRzS364OUkFvAL1BfDLdrzfAB34FjjcqbN16GE64umgllXjqJj3atSdinpH6BPgBbAA3tyKdrOU9NRIF1QdV/G4RlFVVFVC3YJ6b/vN/ws/Bo6BCwOj9ek51KMaY1nzmhozNYr/yRJ4BDwHhrddAJ5RPKiq+2Oez+Z5pkatoFZb8Ay4DzwAnl3b/gZOa6bN/Lu7HAAAAABJRU5ErkJggg%3D%3D%27%3B%0A//%20%20this.checked%3Dtrue%3B%0A%20%7Delse%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABcMAAAXDABsIpz7QAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACpElEQVR4nF2TT2icdRCGn/n3+751t38SMBQMxNZGm0qhFMEepA20tqVG8FDwIIgRBCke1JpehB5KLx68Si+Siwfx4EmC4KX0YoVKhRKCJLVNirUU026arGSz+fbnIVltOjC3eeYdZt6R/pfP8ETUgSPAl8AIsCYiAElgRtTOichVi2ghgpqjT8BDwA/AFMiIqCLuSS2SRkIjjWA6lTdqhnqQbuYgcBkYRRVzJzyIiCpSWomUHkcqVs90l/LZ9QejiFxW80FArTawfxvwHXBc3VFzzAIrEqkoK1QnVe3rd9oPXv28+fuOw50m4r7317TzkIh878CBDWXDVDEPLAoiBR4pOuvrV67fnqp3kUElA3Csvcg3fXtHV7MecGBSRFAz1BOeCqIo8ZQwDy4sXj8BjCtZAGZrfXy8+yjdrFi7Pemgw6KKmWMRRFHgZYFFwVjzDqce/vH+5p6Ye6afc8Ov07IgqgrJeVhFaKsb5o6nwKPAPTHWnGdi4RqyCd8td7Q+e+kkrVRiaqg6nlJbUUFVUXfME+rOG8073YmFn9Gce9f67ZN9p6aXvQAEEVAVVB1VkQLRjSZqnbcfzc2dX7j2H/wwaveAY4+itvK/ZQRRQVQLB2ZVZFhUeevx3fZH92/s6Y39Z7l9+Yvdr52dbgwosJMtIYjIrIroOAhvrtzL5+/faPTgZU+3L+05+uF0Y6ANfAXsB/LWHjLuanazzOtXP1i6daR351u1vjyx72R9ycuLQAk8C6StE3BFRG5a47mDnY7oT780dh0aXf37+b9Sg09fPCHLqawD/SDbAXsK/hEYBxZl1yvvEkWJqA69oNW3rbJx+J/aNswcUQGEp5WB94B5egZh42XnF7x+fEnjdLeqZqqqInfzGuS1TXAGOA2M9WCAfwFy6bThwAwC4wAAAABJRU5ErkJggg%3D%3D%27%3B%0A//%20%20this.checked%3Dfalse%3B%0A%20%7D%0A//alert%28%27jh%27%29%3B%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B]

Yan, поправь переключалку прокси, а то у тебя там отладочный алярм по клику выскакивает :)
Еще, есть проблемы с AIOS, а точнее с его тулбоксами по краям таббара, - кнопки там держатся только до перезагрузки, после чего убегают обратно в "Настройки панелей инструментов".
Переключалка прокси, кстати, тоже безконца со статусбара убегает, только рандомно как-то...
Еще было бы неплохо убрать пункт меню "Вид - Add new button" и добавить соответствующую кнопку в "Настройки панелей инструментов".
Неплохо было бы сделать "менеджер кнопок", который бы автоматом обновлял список доступных кнопок...

ссылка в последнем посте у тебя битая...

Dark-Demon

Yan, поправь переключалку прокси, а то у тебя там отладочный алярм по клику выскакивает smile

Ой. Какой кошмар! :)

Еще, есть проблемы с AIOS, а точнее с его тулбоксами по краям таббара, - кнопки там держатся только до перезагрузки, после чего убегают обратно в "Настройки панелей инструментов".

Есть такое. Подправить скорее всего не удастся, это связано в реализацией этих панелей в AIOS.

Переключалка прокси, кстати, тоже безконца со статусбара убегает, только рандомно как-то...

А это вроде как раз тот баг, что я в бете исправил. Но возможно и нет, надо будет последить еще...

Еще было бы неплохо убрать пункт меню "Вид - Add new button" и добавить соответствующую кнопку в "Настройки панелей инструментов".

Я изначально думал так сделать, но потом отказался в пользу нынешнего решения по нескольким причинам:
1. Программная реализация довольно объёмна, могут быть непредвиденные баги. Т.е. надёжнее добавить кнопку в браузер ДО открытия окна настройки.
2. В окне настройки у всех кнопок отсутствуют котнекстные меню. Поэтому получится, что добавил кнопку, а удалить её оттуда нельзя будет, как и отредактировать. Можно, конечно, покопаться поглубже, но не факт, что итоговая реализация будет выглядеть адекватно.

Как вариант, думаю в окно создания кнопки добавить галку "открыть настройку панелей", и выбор панели, куда сразу поместить кнопку.

Неплохо было бы сделать "менеджер кнопок", который бы автоматом обновлял список доступных кнопок...

А вот это считаю излишним. Всё-таки суть расширения не в наборе кнопок, а в возможности добавлять их самому.

P.S. Большое спасибо за bug-reports, побежал исправлять. :)

Dark-Demon
Подправил твои кнопки и поместил на страницу.

А чем тебе в кнопках  this.checked не угодили? Удобней ведь с ними?
Да, и если в кнопке обе картинки задаются в коде, то заполнение Image получается излишним - только "вес" кнопки раздувает.

Как устанавливать приведенные мной кнопки: трижды щелкните по урлу (он должен весь выделиться), скопируйте его в строку адресса и нажмите "перейти".

Yan, и еще один нюанс, когда ставишь несколько кнопок подряд несколько напрягает читать сообщения, что новая кнопка теперь доступна для юзания (сразу после установки). Для этого лучше юзать ненавязчивые всплывающие окошки в правом нижнем углу экрана (например, как при завершении всех загрузок).

А еще весьма полезной была бы функция бекапа всех кнопок в одну html страничку...

>А чем тебе в кнопках  this.checked не угодили? Удобней ведь с ними?
ага, удобней, только у меня из-за этого вся тема в раскарячку :) статусбар меняет высоту, кнопка чуть двигается, да и вообще, тема у меня темная, а фон у кнопок слишком светлый получается...

Dark-Demon

Yan, и еще один нюанс, когда ставишь несколько кнопок подряд несколько напрягает читать сообщения, что новая кнопка теперь доступна для юзания (сразу после установки). Для этого лучше юзать ненавызчивые всплывающие окошки в правом нижнем углу экрана (например, как при завершении всех загрузок).

Я поставлю галочку "Не показывать больше".

А еще весьма полезной была бы функция бекапа всех кнопок в одну html страничку...

Разумно. Пожалуй, сделаю.

P.S. Кнопки всё-таки пропадают из строки состояния.. ( Буду искать..

Пока вот что нашел: если после кнопок в статусбаре поставить разделитель (separator), то кнопки пропадать не будут...

>Да, и если в кнопке обе картинки задаются в коде, то заполнение Image получается излишним
+- килобайт - это не существенно ;) хотя, я бы сделал так: на кнопке нарисована одна картинка, а во включенном состоянии на нее сверху накладывается другая. тогда можно было бы сделать два значка "J" и "JS" и один значек "/", который и накладывать на них.
Кстати, хранить картинки, имхо, лучше в profile/chrome/buttons/

Я себе, кстати, сделал в firefox/chrome/ директорию local и добавил вот такой вот простенький манифест:

Выделить код

Код:

content local local/

И теперь ее содержимое доступно по chrome://local/content/*
Очень удобно так хранить дополнительные файлы без привязки к абсолютным путям...

>надёжнее добавить кнопку в браузер ДО открытия окна настройки.
Ну так это ж как раз самое простое :) Надо только заоверлеить chrome://global/content/customizeToolbar.xul который лежит в toolkit.jar

>В окне настройки у всех кнопок отсутствуют котнекстные меню.
и что. никак его не добавить? :/ ну тогда можно удалять в два хода: переносим на тулбар, жмем правую кнопку.
А вообще, имхо, стоит отказаться от контекстной менюшки. Для настроек кнопок юзать спец менеджер, а в остальном они должны вести себя как самые обычные кнопки.

>Всё-таки суть расширения не в наборе кнопок, а в возможности добавлять их самому.
Ну, не все способны свою кнопку забацать... А ставить кучу расширений реализующих пустяковые функции - не есть гуд. Сравни к примеру объем кода расширения quickJava и объем кода тех двух кнопок, что я выложил.

>Но возможно и нет, надо будет последить еще...
угу, все-равно убегает... :( сколько волка ни корми...

>если после кнопок в статусбаре поставить разделитель (separator), то кнопки пропадать не будут
ага :) они у меня как раз пропадают после сепаратора...

А еще весьма полезной была бы функция бекапа всех кнопок в одну html страничку...

я страничку с кнопками сохранил в СкрапБуке. теперь при необходимости достать могу :)

Dark-Demon

+- килобайт - это не существенно wink хотя, я бы сделал так: на кнопке нарисована одна картинка, а во включенном состоянии на нее сверху накладывается другая. тогда можно было бы сделать два значка "J" и "JS" и один значек "/", который и накладывать на них.

Это уже как автор кнопки напишет - так и будет. Можно и так.

Кстати, хранить картинки, имхо, лучше в profile/chrome/buttons/

А формат тогда какой применять? rdf? Что-то я не вижу преимуществ. Кнопки-то не по шаблону создаются, а через DOM.

Ну так это ж как раз самое простое smile Надо только заоверлеить chrome://global/content/customizeToolbar.xul который лежит в toolkit.jar

Эх.. Если бы всё так просто было... Там совсем другая система.
Кнопки все хранятся в document.getElementById("navigator-toolbox").palette главного окна браузера.
А при открытии окна насройки они оттуда достаются через JS и добавляются в окно через DOM. Причем куски этого кода перекрываются кодом из AIOS, если тоже что-то там начать перекрывать, то можно нарваться на несовместимость расширений.
Так что оверлеями там никак не обойтись, тем более кнопки создаются динамически.

Потом, еще много вопросов появится с инициализацией кнопок - их нельзя будет инициализировать в окне настройки, потому что потом, при добавлении кнопки на тулбар, браузером используется метод cloneNode, а при его использовании пропадают все свойства (не атрибуты) кнопок. Получится, что человек в окне настройки кнопку создал, а отлаживать её всё равно только на панели можно..

Я все эти варианты уже рассматривал, ковырялся в browser.js, customizeToolbar.js, в AIOS, потом посмотрел на все эти хитрости, решил, что затраченные усилия результат не окупят, и сделал так, как есть сейчас.

А вообще, имхо, стоит отказаться от контекстной менюшки. Для настроек кнопок юзать спец менеджер, а в остальном они должны вести себя как самые обычные кнопки.

А по мне, так наоборот, контекстное меню - самый удобный способ управления кнопками. Кнопку можно отредактировать в пару кликов, и тут же проверить работоспособность.

Ну, не все способны свою кнопку забацать... А ставить кучу расширений реализующих пустяковые функции - не есть гуд. Сравни к примеру объем кода расширения quickJava и объем кода тех двух кнопок, что я выложил.

Это да, для того я собственно, и расширение писал. Но реализовывать в расширении свой собственный механизм обновлений - это уж слишком будет, IMHO.

А если не секрет, чем преобразовывать ссылки custombuttons?

Philip
В смысле чем?
Если само расширение установлено, то при нажати на ссылку выскочит предложение установить кнопку.
Если имеется в виду, как создать эту ссылку, то контекстное меню на кнопке, и "Копировать код в буфер". Скопируется ссылка, готовая для вставки на страницу.

Окно - то, что надо. Даже свернуть/развернуть кнопочки появились (я хотел попросить, но забыл).
Спасибо.

Yan, нет, я про то, что если я захочу сделать подобную ссылку, как можно конвертировать например кириллицу в ASCII символы.

Anton
Ну с этим-то проблем никаких не было. :)
Philip
Главное кнопку сделать. Остальное всё автоматом.
Когда она будет готова, кликнуть по ней правой кнопкой, и выбрать "Копировать код в буфер". Ссылка скопируется в буфер обмена, и её останется только вставить туда, куда надо.

Yan, точно! я как-то и не заметил. Извиняюсь. Очень удобно!

>Кнопки все хранятся в document.getElementById("navigator-toolbox").palette главного окна браузера.
Не, ты меня не понял. В настройке панелей есть три недрегендропящихся кнопки: "Добавить новую панель", "Восстановить" и "Готово". Так вот оверлеем можно создать еще одну  такую же кнопку с надписью "Создать кнопку".
Гм.. надо как-то различать эти два вида кнопок... Эти три штуки можно называть "статичными кнопками"...

я страничку с кнопками сохранил в СкрапБуке. теперь при необходимости достать могу

проблема в том, что созданные тобой кнопки приходится добавлять на нее самостоятельно...

ps: рулез, BBкодные кнопки работают в QuickNote! :rock:

Кстати, иконки для кнопок я взял из QuickJava...

Dark-Demon
Нет, ну со статичными кнопками чтоб проблемы были, это надо сильно постараться. :)
Я про то, что если делать так, как ты говоришь, то помимо тех сложностей, что я уже описал, могут возникнуть непредвиденные проблемы.
Например, как с пропаданием кнопок. Ну откуда я мог знать, что AIOS из правого статусбара специально зачем-то удаляет последний элемент? Правильно, ниоткуда. Так вот, если начать ковырять скрипт добавления кнопок в окно настройки панелей, то боюсь, что таких "приятностей" может много оказаться, ибо и в AIOS, и в самом Firefox кода, отвечающего за это дело, немало, а штудировать его весь что-то не хочется..
По-моему, чем расширение проще будет, тем надежнее, а значит лучше.

P.S. Сейчас выложу новую версию.

Новая версия:
http://xsms.nm.ru/custombuttons/files/custombuttons.xpi

Fixed:
- пропадание кнопок в статусбаре

Dark-Demon

ps: рулез, BBкодные кнопки работают в QuickNote!

Ага, даже в адресной строке. :)

Yan
а может автообновление бы? а то вручную лень.....:rolleyes:

Опять новая версия: :)
http://xsms.nm.ru/custombuttons/files/custombuttons.xpi

Fixed:
- пропадание кнопок в таббаре
Теперь должна быть полная совместимость с AIOS.

Крыска

а может автообновление бы? а то вручную лень.....roll

Доделаю версию 0.0.1, и сделаю. А то мне пока тоже лень заморачиваться с новыми номерами для каждой версии и править update.rdf.

Yan

А то мне пока тоже лень заморачиваться с новыми номерами для каждой версии и править update.rdf.

ну это понятно, но с такимми частыми апдейтами - автоапдейт будет лучшим способом обновления.

Крыска
Вот именно, что с такими частыми апдейтами мне и влом. :)

Yan
Хочу сделать кнопку для сохранения страниц при помощи Scrapbook http://forum.mozilla.ru/uploaded/scrmainsave.png
В зависимости от того, выделен ли текст или нет, при нажатии на левую кнопку мышки на кнопке происходит быстрое сохранение страницы|выделения, щелчок средней кнопки мыши вызывает диалог "Сохранить как..." для сохранения выделенной области|страницы целиком.
Как распознать выделен ли текст на странице?

Dimanish

Выделить код

Код:

var focusedWindow = content;
var reference = focusedWindow.getSelection();
if (!reference.isCollapsed){
 alert('выделения нет');
}else{
 alert('выделение есть');
}

Dimanish
Кстати, там совсем не обязательно определять, есть ли выделение, или нет. Scrapbook сам это делает.
Вот код такой кнопки:
(надо вставить в Инициализацию)

this.onclick=function(event){
switch (event.button){
  case 0:document.getElementById('ScrapBookMenubarItem1').click();break;
  case 1:document.getElementById('ScrapBookMenubarItem2').click();break;
}
}

Brrrr... Тут была дикая опечатка. Исправил. Извиняюсь...

Dimanish, а что, дрегондроп не рулит?

Dimanish
Блин, в предыдущем коде я дико опечатался. Исправил.

Yan
Вот так сделал:

Выделить код

Код:

/*Initialization Code*/
this.onclick=function(event){
/*левая кнопка мыши*/
if (event.button==0){
 var focusedWindow = content;
 var reference = focusedWindow.getSelection();
 if (!reference.isCollapsed){
 sbBrowserOverlay.execCapture(true, true, false, event.originalTarget.id); /*выделение есть*/
}else{
 sbBrowserOverlay.execCapture(false,false,false, event.originalTarget.id); /*выделения нет*/
}}
/*средняя кнопка мыши*/
if (event.button==1){
 var focusedWindow = content;
 var reference = focusedWindow.getSelection();
 if (!reference.isCollapsed){
 sbBrowserOverlay.execCapture(true, true, true , event.originalTarget.id);
}else{
 sbBrowserOverlay.execCapture(false,false,true , event.originalTarget.id);
}}}

Все работает.

Dark-Demon

ни капельки не рулит :)

Dark-Demon
Мне кнопкой удобнее

Так. я что-то не доехал. Вроде же сделали, что б окно можно было свернуть при создании кнопки... а не пашет.
версия от 21 в 14,10

Крыска
Окно можно свернуть|развернуть только при редактировании кнопки.
Yan может поправишь?

Dimanish

Вот так сделал:
...

Ну я в такие дебри не полез. :)
Немного упростил:

Выделить код

Код:

this.onclick=function(event){
 if (event.button<=1){
 var sel=!content.getSelection().isCollapsed;
  sbBrowserOverlay.execCapture(sel,sel,(event.button==1),event.originalTarget.id);
 }
}

Крыска

Вроде же сделали, что б окно можно было свернуть при создании кнопки...

Ой, а про создание я и забыл... :( Что-то я рассеян в последнее время. Подправлю, конечно.

Окно можно свернуть|развернуть только при редактировании кнопки.
Yan может поправишь?

Подправил.

Так. столько кнопок для скрапбук наворатили. Теперь объясните действие каждой, в чём отличия?

Крыска
Да один и тот же:

Dimanish пишет:

В зависимости от того, выделен ли текст или нет, при нажатии на левую кнопку мышки на кнопке происходит быстрое сохранение страницы|выделения, щелчок средней кнопки мыши вызывает диалог "Сохранить как..." для сохранения выделенной области|страницы целиком.

А различия в реализации.

Хм, не уловил момент, но иногда кнопка Scrapbook (оба варианта) отказывается работать, лечится открытием окна редактирования с последующим нажатием "OK".

Dimanish
Если еще такое будет, то надо бы:
1) Заглянуть в JS-консоль.
2) Запустить DOM-инспектор, найти в нём кнопку, переключиться из режима "DOM node" в режим "Javascript Object", и посмотреть, чему равно свойство onclick.

Тогда может быть станет что-то ясно..

Yan
Попробую посмотреть.
Еще вопросы|предложения:
1. Как сделать кнопку для запуска стороннего приложения?
2. Можно ли сделать кнопку с выпадающим меню, как в Опере?
3. Может кнопки, сделанные Custom Buttons, сбрасывать в отдельное окно, а не в общее со всеми кнопками?

Dimanish

1. Как сделать кнопку для запуска стороннего приложения?
2. Можно ли сделать кнопку с выпадающим меню, как в Опере?

Вчера как раз сделал себе кнопку "External Applications" с выпадающим меню для запуска сторонних приложений:

Выделить код

Код:

custombutton://External%20Applications%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4XqXNa2jVZQAG8N//nJ3jmbs4l6XZhSGI0sWhQ9CCpKhcWljOYCLZDZEgsA+RFEQWCcEsF8vsy9yHLiKCGxgsVnZZzLm2BV2kYdgWJ7cyN6Zn7nLO8bwh9KmBX/rB8/F5niiE4H/r2qX+xLPaTu4TPt1mvG2LyfYnjaAYcdcQXS1PxBzOZnh4L0bI/M7oKL+ccD6W1Vt7VB1yKMwauPpcvd6m6+7BcWQxByVkphjKcbbd4cfa7MDUf0dilzM2Dg0gzfRl6e//sG84q7Ww0ExZDVVLyOdsbqn1IlKIAEDfHiH0C6FTSO/ViuW4teEFa3/rrSyEv4WZHuHI1lRI7vwod8u2lqeQQASxzBky3chy8002vVHnelw8OPXJK5svNEcqSMb5NXOnxTXriiZnHCqrb0nfsKV5OxKxfNLuzi9cchGlole3+ybT6UC5P28zXkEBw6xeNGDZYJ/b77s/mn/XqoX5bHYDSiMkv3zG5XvvVqQYU5iLxYhjEEmG0rxz7vn+gQdfW1UqGX1+sp++gY4YcoWk/EiCn0bJ1mAMP+MvXKL7K3q+lW7a/97TUTT8VmpJifLVa2QrylfGEKbH7Ow56nTXcQ2nWl2BoTGGKrGCsYvzfLbmyHlMd9RWN5bk4yZGZ4TxTCoCJFCO4o5dTi99VHnPuy4cG1u3oG7FDxpT+5294wk3zg0SybiRqci5HLraRYAIRYg3r7c15NUeiuq/O7Xs8YbUvMpocnkVySpGUYoJ/NguMXAmbTYJzMeiBRvffq7ykaYPyjYc6PX+YPDmSHCwO/g6hKjuwwKqzSZCEZIoRmXZA417vHwsxHd8PD1n7esNsYeapotW7n4JSyPXFiGOJEr/DVxBwOQ/YMb/YyJTjUkAAAAASUVORK5CYII%3D%5D%5B%5D%5Bvar%20apps%3Dnew%20Array%3B%0A//------menu%20items--------%0Aapps.push%28%5B%27Proxomitron%27%2C%27D%3A/Program%20files/ProxN45_nohlp/Proxomitron.exe%27%5D%29%3B%0Aapps.push%28%5B%27Notepad%27%2C%27c%3A/windows/notepad.exe%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Opera%27%2C%27D%3A/Program%20files/Opera9/Opera.exe%27%5D%29%3B%0Aapps.push%28%5B%27IE%27%2C%27c%3A/Program%20files/Internet%20Explorer/IEXPLORE.EXE%27%5D%29%3B%0A//------/menu%20items-------%0A%0Avar%20nMItem%3Dfunction%28label%2Cpath%2Cargs%2Cobj%29%7B%0A%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20m.f%3Dobj.startProcess.bind%28obj%29%3B%0A%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%29%27%29%3B%0A%20%20return%20m%3B%0A%7D%0Athis.startProcess%3Dfunction%28path%2Cargs%29%7B%0Avar%20file%20%3D%20Components.classes%5B%27@mozilla.org/file/local%3B1%27%5D%0A%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Avar%20process%20%3D%20Components.classes%5B%27@mozilla.org/process/util%3B1%27%5D%0A%20%20%20%20.getService%28Components.interfaces.nsIProcess%29%3B%0A%20file.initWithPath%28path.replace%28/%5C//g%2C%27%5C%5C%5C%5C%27%29%29%3B%20%0A//%20file.launch%28%29%3B%0A%20process.init%28file%29%3B%0A%20process.run%28false%2C%5Bargs%5D%2C1%29%3B%20%0A%7D%0A%0Athis.orient%3D%22vertical%22%3B%0Avar%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0Afor%20%28var%20i%3D0%3Bi%3Capps.length%3Bi++%29%7B%0A%20if%20%28apps%5Bi%5D%20%3D%3D%27separator%27%29%7B%0A%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%7Delse%7B%0A%20%20if%20%28%21apps%5Bi%5D%20%5B2%5D%29%20apps%5Bi%5D%20%5B2%5D%3D%27%27%3B%0A%20%20mP.appendChild%28nMItem%28apps%5Bi%5D%20%5B0%5D%2Capps%5Bi%5D%20%5B1%5D%2Capps%5Bi%5D%20%5B2%5D%2Cthis%29%29%3B%0A%20%7D%0A%7D%0Athis.appendChild%28mP%29%3B%0A%0A

(Для установки кнопки нужно выделить код и вставить его в адресную строку)

3. Может кнопки, сделанные Custom Buttons, сбрасывать в отдельное окно, а не в общее со всеми кнопками?

Вряд ли возможно что-то приемлемое. Кнопки на самом деле добавляются не в окно, а в "спец. хранилище", откуда окно их потом "подцепляет". Если писать своё окно с кнопками, то очень многие стандартные функции (типа drag'n'drop, сохранение положения на тулбарах) придется заново переписать. Лишний код, лишнее время, лишние баги.. К тому же совместимость с другими расширениями ухудшится (с тем же AIOS, например).

Yan
Теперь понял как создавать менюшки. Спасибо.
Мне бы просто кнопку для запуска приложения, например, Proxomitron.
При этом приложение должно быть запущено с определенным параметром -  Dimanish.cfg, т.е. с моим набором настроек прокса:
командная строка - "C:\Program Files\Proxomitron\Proxomitron.exe" Dimanish.cfg

И еще, кнопка Scrapbook (и видимо остальные также) перестает работать после того, как открываешь окно "Настройка панелей инструментов", в котором находятся все кнопки. Стоит открыть окно редактирования кнопки и нажать "OK" или перезапустить браузер - все становится нормально.
Видимо, не совсем верно функционирует /*Initialization Code*/.

Dimanish

Мне бы просто кнопку для запуска приложения, например, Proxomitron.
При этом приложение должно быть запущено с определенным параметром -  Dimanish.cfg, т.е. с моим набором настроек прокса:
командная строка - "C:\Program Files\Proxomitron\Proxomitron.exe" Dimanish.cfg

Выделить код

Код:

var path='C:\\Program Files\\Proxomitron\\Proxomitron.exe';
var arguments=['Dimanish.cfg'];

var file = Components.classes['@mozilla.org/file/local;1']
    .createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
    .getService(Components.interfaces.nsIProcess);
 file.initWithPath(path); 
 process.init(file);
 process.run(false,arguments,arguments.length);

Также можно в предыдущей кнопке указать аргументы запуска третьим параметром:

Выделить код

Код:

...
apps.push(['Opera','D:/Program files/Opera9/Opera.exe','http://forum.mozilla.ru/viewtopic.php?pid=109351#p109351']);
...

И еще, кнопка Scrapbook (и видимо остальные также) перестает работать после того, как открываешь окно "Настройка панелей инструментов", в котором находятся все кнопки. Стоит открыть окно редактирования кнопки и нажать "OK" или перезапустить браузер - все становится нормально.
Видимо, не совсем верно функционирует /*Initialization Code*/.

Мда... Именно так. :(
Странный глюк. Через DOM-инспектор посмотрел - все свойства на месте, всё должно работать. А на деле не работает. Не знаю даже, где у этого бага корни искать. :(

Хм... отличная идея с плагином для кнопок но есть парочка мелких замечаний и вопросов:
1. Почему только русский язык? Я использую ФФ 1.5.0.3 русский и лолифокс 0.2.2 английский (нет пока русского да и не хочу). В первом все смотрится нормально, но вот во втором... ну неуместно как-то смотрится русский текст Ж). Просто локаль добавь, а?
2. А можно окно редактирования в сайдбар запихнуть? Во всяко случае интересная возможность, как по мне. (Это должно быть опционально).
3. Чья-то кнопка "Панель закладок" действует до первого перезапуска (лолифокс, он кстати на бонэхо построен).
4. Можно ли в коде кнопки генерировать окно с элементами управления и сохранять установки в нем и как это сделать (просто есть проапгрейдить часы до часов с кукушкой, что б каждые пол часа сигнал издавали, но так, что бы это можно было бы настраивать)?
5. Можно ли перехватывать нажатие правой кнопкой мыши по кнопке, но при этом не заменять меню на свое а дополнять его новыми пунктами и реструктурировать старые (например вынести их в подменю)?

Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1a2) Gecko/20060513 lolifox/0.2.2

Вообщем, плюнул и перевел сам Ж).
Для повторения моего фокуса требуется изменить приведенные ниже файлы так как я укажу в поле кода.
1. Переименовать chrome\custombuttons\locale\en-US в chrome\custombuttons\locale\ru-RU
2. Добавить в файл chrome.manifest строку, указывающую на русскую локализацию как показано тут

Выделить код

Код:

overlay    chrome://browser/content/browser.xul    chrome://custombuttons/content/overlay.xul
content    custombuttons    chrome/custombuttons/content/custombuttons/

locale    custombuttons    en-US    chrome/custombuttons/locale/en-US/custombuttons/
locale    custombuttons    ru-RU    chrome/custombuttons/locale/ru-RU/custombuttons/

skin    custombuttons    classic/1.0    chrome/custombuttons/skin/classic/
style    chrome://browser/content/browser.xul    chrome://custombuttons/skin/custombuttons.css
style    chrome://global/content/customizeToolbar.xul    chrome://custombuttons/skin/custombuttons.css

3. Файл chrome\custombuttons\locale\ru-RU\custombuttons\custombuttons.properties

Выделить код

Код:

RemoveConfirm=Удалить кнопку "%s"?
ButtonAddedAlert=Кнопка была успешно создана. Вы можете добавить её на любую панель инструментов через меню "Вид -> Панели инструментов -> Настроить..."
InstallConfirm=Установить кнопку "%s"?
ButtonErrors=Кнопка не может быть создана, потому что содержит ошибки!

4. Создать папку chrome\custombuttons\locale\en-US
5. Потом создать папку chrome\custombuttons\locale\en-US\custombuttons
6. Создать в ней файл chrome\custombuttons\locale\en-US\custombuttons\custombuttons.dtd

Выделить код

Код:

<!ENTITY custombuttons.viewMenu_Item                 "Add new button...">
<!ENTITY custombuttons.buttonPopup.edit             "Edit...">
<!ENTITY custombuttons.buttonPopup.remove             "Delete">
<!ENTITY custombuttons.buttonPopup.clone             "Clone">
<!ENTITY custombuttons.buttonPopup.copyURI             "Copy code to clipboard">

7. Так же создать chrome\custombuttons\locale\en-US\custombuttons\custombuttons.properties

Выделить код

Код:

RemoveConfirm=Delete button "%s"?
ButtonAddedAlert=The button was successfully created.\nYou can add it to any toolbar via "View -> Toolbars -> Customize..."
InstallConfirm=Do you wish to install "%s" button?
ButtonErrors=The button can not be created because it contains errors!

8. И еще chrome\custombuttons\locale\en-US\custombuttons\editor.dtd

Выделить код

Код:

<!ENTITY editor.dialog.title        "Edit bitton">
<!ENTITY editor.name                "Name:">
<!ENTITY editor.name.tooltiptext        "Use this to create label and popup help for button">
<!ENTITY editor.image            "Image:">
<!ENTITY editor.select            "Browse...">
<!ENTITY editor.base64            "⇒ base64">
<!ENTITY editor.base64.tooltiptext        "Convert image in base64 format (data:image/png;base64,...)">
<!ENTITY editor.code                "Code">
<!ENTITY editor.code.tooltiptext        "Executing when button pressed">
<!ENTITY editor.initCode            "Initialize">
<!ENTITY editor.initCode.tooltiptext    "Executing when browser loaded">
<!ENTITY editor.code.defaultValue        "/*CODE*/">
<!ENTITY editor.initCode.defaultValue    "/*Initialization Code*/">

Вот так вот примерно Ж). Люблю я длинные посты. Если есть ашЫпки в переводе, то исправьте и отпишите.

З.Ы. Спасибо афтару за отличный плагин!
З.З.Ы. 3 строки английского перевода уже были в плагине в файле chrome\custombuttons\locale\en-US\custombuttons\custombuttons.properties. Только как то странно они были объявлены... Вот так примерно:

Выделить код

Код:

InstallConfirm_en=ффф Do you wish to install "%s" button?

Для чего это было??? Вообщем выкинул.

Lain_13

1. Почему только русский язык? Я использую ФФ 1.5.0.3 русский и лолифокс 0.2.2 английский (нет пока русского да и не хочу). В первом все смотрится нормально, но вот во втором... ну неуместно как-то смотрится русский текст Ж). Просто локаль добавь, а?

Так не успел еще. Beta всё-таки. Пока отлов багов считаю более важным.

2. А можно окно редактирования в сайдбар запихнуть? Во всяко случае интересная возможность, как по мне. (Это должно быть опционально).

Попробую.

3. Чья-то кнопка "Панель закладок" действует до первого перезапуска (лолифокс, он кстати на бонэхо построен).

Наверное, кнопка-то работает, но панель не сохраняет положение. Так? Чтобы сохранялось, надо посложнее код писать..

4. Можно ли в коде кнопки генерировать окно с элементами управления и сохранять установки в нем и как это сделать (просто есть проапгрейдить часы до часов с кукушкой, что б каждые пол часа сигнал издавали, но так, что бы это можно было бы настраивать)?

Окно - вряд ли. Сложно. А вот разные параметры можно в коде кнопки через JS задавать.

5. Можно ли перехватывать нажатие правой кнопкой мыши по кнопке, но при этом не заменять меню на свое а дополнять его новыми пунктами и реструктурировать старые (например вынести их в подменю)?

Вообще, можно всё. :) Надо знать JS и DOM. Будет время - напишу примерчик.

P.S. За перевод спасибо. Я его немного подправлю, и потом добавлю.

Yan
Может добавишь поддержку Flock? У меня стоит это расширение, вроде работает.

stoneflash
Поставлю Flock, погляжу..

При запуске лолифокса (напомню, это бонэхо) в консоли джаваскрипта выдается:

Выделить код

Код:

Warning: Warning: Ignoring unrecognized chrome manifest instruction.
Source File: file:///C:/Documents%20and%20Settings/YGolovanyov/Application%20Data/altimit-dev/lolifox/Profiles/yr0p9crz.default/extensions/custombuttons@xsms.org/chrome.manifest
Line: 1

Интересно, в оригинальной версии это есть? или это я напортачил 1 строчку добавив. Хотя нет, я строку 1 не правил... значит ашипка где-то в ней...

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

установить мою модификацию (версия 0.0.1.1).

Так же там изменен стиль оформления данных о плагине. Данные о дате и времени билда перемещены в окно информации о претензии. В окне расширений виден ТОЛЬКО номер билда. Кстати, обычно в названии плагина номер его версии вообще не пишут, для этого есть поле "версия". В дальнейем наверное информацию о версии и билде желательно размещать там и только там (иначе в окне информации о плагине заголовок просто НЕ ВЛЕЗАЕТ в окно).

Yan
хочу конопочек :blush:

Просьба не путать, это не флейм.
Sergeys

Крыска, а какие кнопочки интересуют?

Dark-Demon
я и не знаю. заранее не знаешь, что пригодиться пока не увидишь в работе.
а вообще есть кнопка переключения между альбомами скрапбука.... но я сомневаюсь, что её можно реализовать.

переделанный image show-hide. переключает между тремя режимами.

Выделить код

Код:

custombutton://image%20show-hide%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%5D%5Bswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0A%09case%201%3A%20this.PS.setIntPref%28this.pref%2C2%29%3Bbreak%3B%0A%09case%202%3A%20this.PS.setIntPref%28this.pref%2C3%29%3Bbreak%3B%0A%09case%203%3A%20this.PS.setIntPref%28this.pref%2C1%29%3Bbreak%3B%0A%7D%5D%5Bthis.pref%3D%27permissions.default.image%27%3B%0Athis.setState%3Dfunction%28%29%7B%0Aswitch%28this.PS.getIntPref%28this.pref%29%29%7B%0Acase%201%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg%3D%3D%27%3B%0A%20%7D%3B%20break%3B%0Acase%202%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC%27%3B%0A%20%7D%3B%20break%3B%0Acase%203%3A%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACdklEQVR42mL4//8/g3zm6f8AAcQAYvz69es/QACBeSAOQAAx/Pnz5//Z20/+AwQQWOrHv///n7x89R8kCxBAYIEuXdb/f//+/X/w8oP/AAHEADMFphcggEAc1pdv3vyHCQIEEMPPnz//gwy8dPcpWAAggMCmnzp16v+Rqw/BAgABBDOD9RfQpncf3v1/9RahHSQHEEBwBd+BCh4DnXLv6Yv/Nx89/3/l/jOwIoAAAisAGXv9+vX/MOedvvn4//Frj8AKAAII7keQBAj//v37//M///8/+/0frAAggFD8gYxB4iAMEEBwBR8+vvv/5v1bYJC8/v/733+4IoAAgit4/e7t/+evX/9/9OIVskmsAAEEV/D01ev/D56//H/78Yv/1x48+//uD9gUVoAAYlizZg04pGAYxD8PjIbXUAUAAQRWMMmA9f+VK1f+dwK9CeKfuP7o/0uoAoAAAivo02f9f+7cuf9tOhAFh4DR9BziTVaAAAIrgIUBCIP4IEloOLACBBADzL8gDsixIC+C4uUnFP+AYmxhBMIAAYRhwE9wpL79/wYYLKCIfQEMmofPIUHz6e///2///EcxCCCAMAwA2fYCmKCeATWC0uFDYNDdf/by/50nL/5fBQbf5ftP/7//CzeEFSCAwJpB/iKErwJTz6V7T/9fBCZMJFewAgQQ3ABQAE0BBjcoyCcAQxUUsj16rP///fsHNuAcMG7OAFPZqRuP/79CMgAggOAGgCIRpBEUX6BkCYqWDh1WeMiD4u4oMBeAcsILJAMAAgjFgF6gjSDNII2gOG3RRhhw+MrD/wcvPfi//+J9eFIGGQAQQESHAa4kDxBgAMjdAQviliYiAAAAAElFTkSuQmCC%27%3B%0A%20%7D%3B%20break%3B%0A%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B

Крыска, а нафига несколько альбомов? там же можно дерево папок соорудить...

Yan, что-то у тебя на сайте оформление полетело... черные буквы на тёмно синем фоне плохо смотрятся...

Dark-Demon

а нафига несколько альбомов? там же можно дерево папок соорудить...

кхм... а тормоза не мешают? :whistle:

Yan

var path='C:\\Program Files\\Proxomitron\\Proxomitron.exe';
var arguments=['Dimanish.cfg'];

var file = Components.classes['@mozilla.org/file/local;1']
    .createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
    .getService(Components.interfaces.nsIProcess);
file.initWithPath(path);
process.init(file);
process.run(false,arguments,arguments.length);

Proxomitron ругается:
http://forum.mozilla.ru/uploaded/pr1212s.png
и запускается с настройками по-умолчанию.
При этом Firefox виснет пока не закроешь Proxomitron.

Yan, и еще один нюанс, когда ставишь несколько кнопок подряд несколько напрягает читать сообщения, что новая кнопка теперь доступна для юзания (сразу после установки). Для этого лучше юзать ненавызчивые всплывающие окошки в правом нижнем углу экрана (например, как при завершении всех загрузок).

Я поставлю галочку "Не показывать больше".

Можно ещё добавить к сообщению кнопку "настроить сейчас", которая откроет окно с кнопками.

А вообще, имхо, стоит отказаться от контекстной менюшки. Для настроек кнопок юзать спец менеджер, а в остальном они должны вести себя как самые обычные кнопки.

А по мне, так наоборот, контекстное меню - самый удобный способ управления кнопками. Кнопку можно отредактировать в пару кликов, и тут же проверить работоспособность.

Имхо, скоро появятся странички с большим количеством кнопок, доступных для установки(эта например). И пользователю не придётся делать кнопки самому, только пользоватся ими.
Идея с менеджером не такая уж и плохая. Можно будет увидеть сразу все кнопки, установленные расширением, быстро удалить, отредактировать их. В меню можно оставить один пункт "Manage Custom Buttons".

После установки, расширение не появляется в менеджере расширений. FF 2.0a3

Отличное расширение.

после того как настраиваю тулбар все меню остается серым (не активным)
при отключении расширения все норм.
это только у меня так?

fit to width - выравнивает текущую страницу по ширине окна. Полезно для убирания горизонтального скролла на некоторых сайтах при открытом сайдбаре.

Выделить код

Код:

custombutton://fit%20to%20width%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC%5D%5Bvar%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0As.insertRule%28%27*%20%7Bmin-width%3A0%21important%3B%20white-space%3Anormal%21important%3B%20margin%3A0%21important%3B%20padding%3A0%21important%3B%20float%3Anone%3B%7D%27%2C0%29%3B%0As.insertRule%28%27div%2Ctable%2Ctbody%2Ctr%2Ctd%2Cp%2Col%2Cul%2Ch1%2Ch2%2Ch3%2Chr%20%7Bmax-width%3A99%25%21important%3B%7D%27%2C0%29%3B%0As.insertRule%28%27table%2Ctbody%2Ctr%2Ctd%20%7Bdisplay%3Ablock%21important%7D%27%2C0%29%3B%0A%0Avar%20i%3D%20content.document.images%3B%0Afor%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20var%20k%3D%20content.window.innerWidth/i%5Bj%5D.width*.95%3B%0A%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%7D%0A%0A%0A%5D%5B

Код еще довольно сырой, но в некоторых случаях помогает. В общем - тестируем и подкидываем идеи по улучшению :)

Lain_13

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

установить мою модификацию (версия 0.0.1.1).

Так же там изменен стиль оформления данных о плагине. Данные о дате и времени билда перемещены в окно информации о претензии. В окне расширений виден ТОЛЬКО номер билда. Кстати, обычно в названии плагина номер его версии вообще не пишут, для этого есть поле "версия". В дальнейем наверное информацию о версии и билде желательно размещать там и только там (иначе в окне информации о плагине заголовок просто НЕ ВЛЕЗАЕТ в окно).

Гм. Может это, с самодеятельностью чуток поаккуратнее? :)
Я понимаю, что есть время, желание, хочется помочь - это всегда приветствуется. Но что касается выпуска новых версий - это всё-таки моя прерогатива.
Нехорошо как-то получается. Я еще 0.0.1 до финала не довел, а ты уже 0.0.1.1 выпустил. Вот поставит пользователь себе твою 0.0.1.1, и будет думать, что у него стоит последняя версия, в то время как последней на самом деле будет 0.0.1 final. (0.0.1<0.0.1.1). К тому же я в финальных версиях дату сборки уберу, совсем путаница будет.
Что касается стиля билда - так надо, я так решил, и мне так удобнее.
Ну и самое важное: твоя сборка в Firefox 1.5.0.x не работает...

Dimanish

Proxomitron ругается:
...
и запускается с настройками по-умолчанию.
При этом Firefox виснет пока не закроешь Proxomitron.

Мда, не знаю в чем дело. Другие программы нормально запускаются, а с проксомитроном у меня та же штука..

petrovich

Можно ещё добавить к сообщению кнопку "настроить сейчас", которая откроет окно с кнопками.

Да, я так и хотел сделать.

Идея с менеджером не такая уж и плохая. Можно будет увидеть сразу все кнопки, установленные расширением, быстро удалить, отредактировать их. В меню можно оставить один пункт "Manage Custom Buttons".

Идея-то хорошая. Но реализовывать относительно долго. Пока на это время тратить не буду, может в следующих версиях сделаю.

После установки, расширение не появляется в менеджере расширений. FF 2.0a3

Спасибо, посмотрю, что они там поменяли..

Cwer

после того как настраиваю тулбар все меню остается серым (не активным)
при отключении расширения все норм.
это только у меня так?

Нет, должно быть всё нормально.
Какие расширения установлены?
На новом профиле то же самое?

Dimanish

И еще, кнопка Scrapbook (и видимо остальные также) перестает работать после того, как открываешь окно "Настройка панелей инструментов", в котором находятся все кнопки. Стоит открыть окно редактирования кнопки и нажать "OK" или перезапустить браузер - все становится нормально.

Как исправить баг не знаю, но можно задавать обработчик onclick не через свойство, а через атрибут. Т.е. вместо:


Неправильно:

this.onclick=function(event){
switch (event.button){
  case 0:alert('левая кнопка');break;
  case 1:alert('средняя кнопка');break;
}
}

писать надо так:


Правильно:

this.onclickFunction=function(event){
switch (event.button){
  case 0:alert('левая кнопка');break;
  case 1:alert('средняя кнопка');break;
}
}
this.setAttribute('onclick','this.onclickFunction(event);');

Так обработка onclick пропадать не будет.

Yan
Спасибо за ответ.

Ещё раз: отличная работа.

Ну и самое важное: твоя сборка в Firefox 1.5.0.x не работает...

Подтверждаю.

Dimanish пишет:

Yan
...
Proxomitron ругается:
...
и запускается с настройками по-умолчанию.
При этом Firefox виснет пока не закроешь Proxomitron.

Надо указать путь к конфигурационному файлу, т. е., если он в каталоге proxomitron'а, то

...
var arguments=['C:\\Program Files\\Proxomitron\\Dimanish.cfg'];
...

А опишите собствено говоя для чего данное расширение

Anton

Надо указать путь к конфигурационному файлу, т. е., если он в каталоге proxomitron'а, то

Точно, спасибо. Странно, что из командной строки без пути запускается, а из FF-нет.

petrovich

После установки, расширение не появляется в менеджере расширений. FF 2.0a3

Не подтверждаю. Скачал FF 2.0a3, создал новый профиль - всё успешно установилось. Другие расширения ставятся успешно?

WaRdeN69

А опишите собствено говоя для чего данное расширение

Yan пишет:

Описание: Позволяет добавлять собственные кнопки на панели инструментов.

Что-то не ясно? :)

из командной строки без пути запускается, а из FF-нет.

У меня и из командной строки не запускается без указания пути.


p.s. :blush: хочется шрифт вроде Courier и tab/shift-tab на отступы, а в userchrome лень не пускает...

Не подтверждаю. Скачал FF 2.0a3, создал новый профиль - всё успешно установилось. Другие расширения ставятся успешно?

Это мой косяк. Раньше в Firefox расширения сортировались соответственно порядку установки(первым поставил - первым в списке), теперь по алфовиту. Вот не туда и посмотрел. Всё нормально, расширение в списке присутствует.

а вообще есть кнопка переключения между альбомами скрапбука.... но я сомневаюсь, что её можно реализовать.

так можно такое сотворить или нет?

petrovich пишет:

Yan
Спасибо за ответ.

Ещё раз: отличная работа.

Ну и самое важное: твоя сборка в Firefox 1.5.0.x не работает...

Подтверждаю.

Ну вот! Меня разбанили. Сам виноват, много оффтопика...
1. Искренне извинияюсь перед автором этого замечательного расширения и перед всеми остальными участниками форума, за свое наглое вмешательство.
2. Да, действительно не работает, потому, что я лопухнулся и сохранил chrome.manifest и install.rdf в формате UTF-8... С ЗАГОЛОВКОМ... А это 3 кракозябры, на которые ФФ2.0 не обращает внимания, а вот ФФ1.5 от этого клинит по черному.
3. Пока ты не выпустил финальную версию выкладываю Lain_fix_2. По крайней мере исправлю свой баг Ж).
4. Жду Custom_Buttons_0.0.1_final :). Да и все остальные, я думаю, тоже.

з.ы.: я вообще выкладывал свой первый фикс для тех, кому нужна русско/английская версия... а вот как вышло...
з.з.ы.: по поводу размещения номера версии в названии. во-первых... да, действительно, это не мое дело, где ты собираешся размещать номер версии плагина. но есть у меня подозрение, что при поиске обновлений оно смотрит в поле номера версии... на предмет изменения. во-вторых, почему я все же предложил изменить способ именования плагина в списке... дело в том, что твое расширение единственное с номеров версии в названии... от этого, по большому счету, никому ни холодно, ни жарко, но видимо выработался какой-то стандарт. когда выйдет финальная версия, подозреваю, что она будет достойна немедленного размещения на оф. сайте мозилы или где нибуть рядом в сборнике расширений. (т.е. выход на мировой уровень). а поэтому стоит все же придерживаться хоть и негласных но правил.
з.з.з.ы.: интересно, а можно ли в кнопки встраивать локализацию их названий? или возможно ли это встроить в финальную версию расширения?

хотелось бы, чтобы при нажатии на bb-кнопки средней кнопкой в поле вставлялся текст из буфера обрамленный тегами. так вот, как получить содержимое буфера обмена?

Dark-Demon пишет:

...как получить содержимое буфера обмена?

http://forum.mozilla.ru/viewtopic.php?pid=77068#p77068
(http://xulplanet.com/tutorials/xultu/clipboard.html)

Спасибо, вот что получилось...

Выделить код

Код:

custombutton://BB%3A%20%u043F%u043E%u043B%u0443%u0436%u0438%u0440%u043D%u044B%u0439%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAg4AAMIHEiwoMGDCBMaBMCwIcOEDQVGPDhx4sKHASwWdKhxI8aOAytivAhA4kiCHEEqXMmypcuBAQEAOw%3D%3D%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bb%5D%22%3B%0Avar%20close%3D%22%5B/b%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B
Выделить код

Код:

custombutton://BB%3A%20%u043F%u043E%u0434%u0447%u0435%u0440%u043A%u043D%u0443%u0442%u044B%u0439%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAg+AAUIHEiwoMGDBwEoBCBgIcOEDxtGNKhwYEWEFyUi1CgwI8WIHgtmDElQYQABAUiWdLix5UeHC13KnElTYEAAOw%3D%3D%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bu%5D%22%3B%0Avar%20close%3D%22%5B/u%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B
Выделить код

Код:

custombutton://BB%3A%20%u043A%u0443%u0440%u0441%u0438%u0432%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7e4SEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAAgyAAcIHEiwoMGDCBMqBMCQoUKBDAU8HBDA4USGASZWBDBxAEaNFh9+XNgwZMeTKFMqDAgAOw%3D%3D%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bi%5D%22%3B%0Avar%20close%3D%22%5B/i%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B
Выделить код

Код:

custombutton://BB%3A%20%u0446%u0438%u0442%u0430%u0442%u0430%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACCklEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAUSxAQABxAIiurq6OM+cOZPPx8fHaWZm1rp8+fLEDx8+aGVmZrZKSEgwT5s2rRPIFwKyj/38+fPbmzdvvHh5eV/v27cvGiCAwAY8fPgwfvfu3Q3e3t5Vx48fD7hy5UonNzf3opcvX34FSiuePHkyEGgAj6ys7P9v3759fPv2rSsPD88nkF6AAAJ7YceOHbFSUlLb+fn5Jx09ejRORkbmkomJSVVtbe1XZmZmVmBMMYLUsbOzf/n37x9YDysr63cQDRBAYM6TJ09kfv/+fXbz5s18QNO1vn//fnHNmjVfQHKioqLP/fz85ggKCr4DGsAVEhKyXkND4yJQPTtIHiCAGKDp4BnQSYcUFBSagBoeA/k3gC5Ki42N5QXJL1y4kEdVVfWks7PzBhA/NTW1AqjuHYgNEECwWPj79etXWyYmpkigLT+AfHU2NrbYI0eO8IEkga7i//HjhxQQXwfxgeJqwAB9BWIDBBDMAHagZoa/f/8yAp3GBhL4/Pnz36CgoH8LFizgX7Vq1XSggQympqbLBQQEEq5fvx6hq6u7AqQOIIDAsQAMtBPAwBIGmvoAaAsH0GnvhYWFL8rJyf3g5OQUBrrun7q6egGQfQsY1VE6OjozgXITQXoBAoiR0rwAEEAUp0SAAKLYAIAAotgAgAADANuDzfQSUmlqAAAAAElFTkSuQmCC%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bquote%5D%22%3B%0Avar%20close%3D%22%5B/quote%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B
Выделить код

Код:

custombutton://BB%3A%20%u043A%u043E%u0434%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA60lEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAYQNKQHxfyieABWrRRJTQlYMEEBYNc9YtR2MoRoYsIjBDQEIIKyavTOb0RWC5ZJrJ2PIAQQQTs2g2EHH2AwBCCCQIIeNkweGzTgMwHAJQACBBLkUdC3BArqOgSDBSAaIE7AZADdk6dYD/+W0Tf8DBBAoGhk5GX+AZbx8A0DUMjwhDRK/C9TMsGzLYYZHV08zAAQQiqkgV5T3LcQV0nCbkb0KEEAYCnAYglMzQABhjUo0QxjwaQYIIEIpMQcqNgFXSgQIIEZKcyNAAFGcmQACDAB0jLqYK4uYbwAAAABJRU5ErkJggg%3D%3D%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bcode%5D%22%3B%0Avar%20close%3D%22%5B/code%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B
Выделить код

Код:

custombutton://BB%3A%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABpUlEQVR42p2TP0gbURzHPxebwyEJVBw6aKZAxOUcbYYOpS0IRSgljVBMOLgxZA64SBY30RDp0HuEDraBQodChrQI/UNj3XRRoreYQfo3NF4kSo9ct4dHcsX4pvd77/v9/B7vva8CUKlU3E6nw7DDMAxFMU3TTSQSxGKxocyWZVGv1wkAvmYhBJqmoaoqmqYhhMBxHLrdrvTc8OsghODt6zXq7zZQ1RG6Z39YNPI4jkM6nZa6gB+gWCzy8sUGI73vXPz+SOB8j2crjyiVSh6dPIGqqn2Qm5P3aO0vyzoSHqXRaAwGAHxb0nFOmrKeKG8xNr3MZmmBubtTnNrnxONxf4Bz0uTv8ZFH8OnrLndmZ3j/ymD1+Wey2axnP/C/pyoUCuwc/gQgV/jCw8c5MpnM1QDlZpv780/40bLR8+tEo1F0Xe/T+QJ+PXjKwXELgPFbk9RqNarVap/OcwcT5S05317N8ebDvqz1/DrJZJJ2uz0YcDkLoVCI2zNTV/rSEuC6rly0bXuguNfrARAMBr0Ay7KuFaZIJIICYJqmO2yUw+EwqVRK+QdtIZCYwfQIRQAAAABJRU5ErkJggg%3D%3D%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bimg%5D%22%3B%0Avar%20close%3D%22%5B/img%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B
Выделить код

Код:

custombutton://BB%3A%20%u0433%u0438%u043F%u0435%u0440%u0441%u0441%u044B%u043B%u043A%u0430%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAKIAAGZmZgAAAP///8zMzP///////////////yH5BAEAAAQALAAAAAAQABAAAAMxSLrc/jBKCYK16lpAqhBDaH3hEHimpoqBEJhkWJkpq17iXFZnaXK8S0bDmRiPyGQyAQA7%5D%5B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Burl%5D%22%3B%0Avar%20close%3D%22%5B/url%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20theBox.value.substring%28startPos%2C%20endPos%29%3B%0Aif%28event.button%3D%3D1%29%0A%20%20%7B%0Avar%20clip%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboard%3B1%22%5D.getService%28Components.interfaces.nsIClipboard%29%3B%0Avar%20trans%20%3D%20Components.classes%5B%22@mozilla.org/widget/transferable%3B1%22%5D.createInstance%28Components.interfaces.nsITransferable%29%3B%0Atrans.addDataFlavor%28%22text/unicode%22%29%3B%0Aclip.getData%28trans%2Cclip.kGlobalClipboard%29%3B%0Avar%20str%20%3D%20new%20Object%28%29%3B%0Avar%20strLength%20%3D%20new%20Object%28%29%3B%0Atrans.getTransferData%28%22text/unicode%22%2Cstr%2CstrLength%29%3B%0Aif%20%28str%29%20str%20%3D%20str.value.QueryInterface%28Components.interfaces.nsISupportsString%29%3B%0Aif%20%28str%29%20pastetext%20%3D%20str.data.substring%280%2CstrLength.value%20/%202%29%3B%0A%20%20%7D%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

по поводу кнопки запуска внешний приложений - не мешало бы пути к ним брать из реестра...

Имхо, в расширении необходимо сделать common-секцию для скриптов, т. е., скриптов, общих для всех кнопок.


Две кнопки для преобразования текстовых ссылок 'custombutton://' в реальные ссылки:

Выделить код

Код:

custombutton://%u041F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u0442%u044C%20%u043A%u043E%u0434%u044B%20custombuttons%20%u0432%20%u0441%u0441%u044B%u043B%u043A%u0438%20%28%u0441%u0442%u0440%u043E%u0433%u043E%u0435%20%u043F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u043D%u0438%u0435%29%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfWBgMQBxbn9GxKAAAAB3RJTUUH1gYDEBMzV1+MKAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADNQTFRF////mZmZMzMzZmZmzMzM/8yZ/5mZ/8xm/8wA///M/8wz/8zMzJmZ/5kA/5lmZmYz/5kzCyXdoQAAAAF0Uk5TAEDm2GYAAAB6SURBVHjaTc5bFsIgDATQCZOIJdZ2/6t1oNHKRwj3kAcaeZAVDACRXdcWAfiEI/rogT5GFCg9E3kqLGDu+1slmVXCiHwBNvMLsA7d/IY5QEO9YNMYNdRCVj/6c24iaQURD1xCB5qZ2uEWPVevryj+ARvXOj+oxBrrCD73jALvj0npfgAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20cbcodes%20%3D%20doc.%20evaluate%0A%28%0A%20%20%20%20%22//text%28%29%5Bstarts-with%28.%2C%27custombutton%3A//%27%29%5D%22%2C%0A%20%20%20%20doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%2C%20cn%2C%20cnt%2C%20cnf%2C%20nn%2C%20t%2C%20titletext%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20cbcodes.%20snapshotLength%3B%20i++%29%0A%7B%0A%20%20%20%20cn%20%3D%20cbcodes.%20snapshotItem%20%28i%29%3B%0A%20%20%20%20cnt%20%3D%20cn.%20textContent%3B%0A%20%20%20%20cnf%20%3D%20cnt.%20split%20%28%22%255D%255B%22%29%3B%0A%20%20%20%20if%20%28cnf.%20length%20%21%3D%204%29%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20titletext%20%3D%20unescape%20%28cnf%20%5B0%5D.%20replace%20%28/custombutton%3A%5C/%5C//%2C%20%22%22%29%29%3B%0A%20%20%20%20title%20%3D%20title.%20replace%20%28/%25%28u.%7B4%7D%29/g%2C%20%22%5C%241%22%29%3B%0A%20%20%20%20var%20converter%20%3D%20Components.classes%5B%27@mozilla.org/intl/texttosuburi%3B1%27%5D.createInstance%28Components.interfaces.nsITextToSubURI%29%3B%0A%20%20%20%20title%20%3D%20converter.UnEscapeAndConvert%28%27windows-1251%27%2C%20title%29%3B%0A%20%20%20%20nn%20%3D%20doc.%20createElement%20%28%22a%22%29%3B%0A%20%20%20%20nn.%20setAttribute%20%28%22href%22%2C%20cn.%20textContent%29%3B%0A%20%20%20%20t%20%3D%20doc.%20createElement%20%28%22img%22%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22src%22%2C%20unescape%20%28cnf%20%5B1%5D%29%20%7C%7C%20%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22class%22%2C%20%22toolbarimg%22%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22title%22%2C%20titletext%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22alt%22%2C%20titletext%29%3B%0A%20%20%20%20nn.%20appendChild%20%28t%29%3B%0A%20%20%20%20cn.%20parentNode.%20replaceChild%20%28nn%2C%20cn%29%3B%0A%7D%5D%5B
Выделить код

Код:

custombutton://%u041F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u0442%u044C%20%u043A%u043E%u0434%u044B%20custombuttons%20%u0432%20%u0441%u0441%u044B%u043B%u043A%u0438%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfWBgMQBxbn9GxKAAAAB3RJTUUH1gYDEBMzV1+MKAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADNQTFRF////mZmZMzMzZmZmzMzM/8yZ/5mZ/8xm/8wA///M/8wz/8zMzJmZ/5kA/5lmZmYz/5kzCyXdoQAAAAF0Uk5TAEDm2GYAAAB6SURBVHjaTc5bFsIgDATQCZOIJdZ2/6t1oNHKRwj3kAcaeZAVDACRXdcWAfiEI/rogT5GFCg9E3kqLGDu+1slmVXCiHwBNvMLsA7d/IY5QEO9YNMYNdRCVj/6c24iaQURD1xCB5qZ2uEWPVevryj+ARvXOj+oxBrrCD73jALvj0npfgAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20cbcodes%20%3D%20doc.%20evaluate%0A%28%0A%20%20%20%20%22//text%28%29%5Bcontains%28.%2C%27custombutton%3A//%27%29%5D%22%2C%0A%20%20%20%20doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%2C%20j%2C%20cn%2C%20cnt%2C%20cnf%2C%20nn%2C%20t%2C%20titletext%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20cbcodes.%20snapshotLength%3B%20i++%29%0A%7B%0A%20%20%20%20cn%20%3D%20cbcodes.%20snapshotItem%20%28i%29%3B%0A%20%20%20%20cnt%20%3D%20cn.%20textContent.%20match%20%28/custombutton%3A%5C/%5C/.+/%29%3B%0A%20%20%20%20for%20%28j%20%3D%200%3B%20j%20%3C%20cnt.%20length%3B%20j++%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20cnf%20%3D%20cnt%20%5Bj%5D.%20split%20%28%22%255D%255B%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28cnf.%20length%20%21%3D%204%29%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20titletext%20%3D%20unescape%20%28cnf%20%5B0%5D.%20replace%20%28/custombutton%3A%5C/%5C//%2C%20%22%22%29%29%3B%0A%20%20%20%20%20%20%20%20title%20%3D%20title.%20replace%20%28/%25%28u.%7B4%7D%29/g%2C%20%22%5C%241%22%29%3B%0A%20%20%20%20%20%20%20%20var%20converter%20%3D%20Components.classes%5B%27@mozilla.org/intl/texttosuburi%3B1%27%5D.createInstance%28Components.interfaces.nsITextToSubURI%29%3B%0A%20%20%20%20%20%20%20%20title%20%3D%20converter.UnEscapeAndConvert%28%27windows-1251%27%2C%20title%29%3B%0A%20%20%20%20%20%20%20%20nn%20%3D%20doc.%20createElement%20%28%22a%22%29%3B%0A%20%20%20%20%20%20%20%20nn.%20setAttribute%20%28%22href%22%2C%20cn.%20textContent%29%3B%0A%20%20%20%20%20%20%20%20t%20%3D%20doc.%20createElement%20%28%22img%22%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22src%22%2C%20unescape%20%28cnf%20%5B1%5D%29%20%7C%7C%20%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22class%22%2C%20%22toolbarimg%22%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22title%22%2C%20titletext%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22alt%22%2C%20titletext%29%3B%0A%20%20%20%20%20%20%20%20nn.%20appendChild%20%28t%29%3B%0A%20%20%20%20%20%20%20%20if%20%28j%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20%20%20%20%20cn.%20parentNode.%20replaceChild%20%28nn%2C%20cn%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20cn.%20parentNode.%20appendChild%20%28nn%29%3B%0A%20%20%20%20%7D%0A%7D%5D%5B

первая работает только в тех текстовых узлах, текст которых начинается с 'custombutton://' (как в этой теме), т. е.

Выделить код

Код:

[code]custombutton://...[/code]

но не в

Выделить код

Код:

[code]any text ... custombutton://...[/code]

вторая кнопка ищет все 'custombutton://' в текстовых узлах и заменяет соответствующие текстовые узлы набором ссылок.

скриншот, показывающий пример работы: http://forum.mozilla.ru/uploaded/cbtext … ertor2.png

Неплохо бы прикрутить поддержку Thunderbird.

Anton, за кнопки спасибо. Но есть бага. Твой же собственный пост они не обработали! (предидущий про ббкод отлично). В чем же фокус?

Lain_13 пишет:

...есть бага. Твой же собственный пост они не обработали! (предидущий про ббкод отлично). В чем же фокус?

Хм. Не знаю. У меня всё работает, вот скрин: http://forum.mozilla.ru/uploaded/cbtext … ertor3.png. Подробней можно ?

Anton, прикольно :) только надобно иконку подправить, а то у нее вместо белого цвета - прозрачность.
а можешь сделать кнопку, которая бы кроме этих ещё и прочие текстовые ссылки преобразовывала бы в гиперссылки?
с примерно таким регекспом:
/[A-Za-z]+:\/\/\S+/
и назвать ее я думаю стоит "найти ссылки".

Yan, сделай пожалуйста шрифт в редакторе моноширинный, а то сейчас туда код набивать очень напряжно...

А нельзя ли как-нибудь сделать кнопочку для запуска jar-файла из chrome?

stoneflash, а закладки не годятся?

Простенький редактор кода для расширения: http://forum.mozilla.ru/uploaded/codeeditor.zip
xbl из архива "подшивается" через userChrome.css примерно так:

Выделить код

Код:

textbox#code,textbox#initCode
{
    -moz-binding: url("file://P:/xul/codeeditor.xml#code_editor_binding");
    font-family: monospace !important;
}

Клавиши:

Ctrl+Shift+AКомментирует или снимает комментарий текущей строки / выделения
TabВставляет символ табуляции / Табулирует выделение
Shift+TabСнимает уровень табуляции с текущей строки / выделения
EnterВставляет перевод строки и создаёт отступ, равный отступу предыдущей строки


Кстати, к вопросу

...как получить содержимое буфера обмена?

недавно обнаружил в browser.js функцию readFromClipboard. Так что, просто

Выделить код

Код:

var str = readFromClipboard ();


Кнопка, загружающая с помощью ILO только те изображения, которые попали в выделение:

Выделить код

Код:

custombutton://ILO%3A%20load%20images%20from%20selection%5D%5B%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20sel%20%3D%20doc.%20defaultView.%20getSelection%20%28%29%3B%0Avar%20r%20%3D%20sel.%20getRangeAt%20%280%29%3B%0Avar%20imgs%20%3D%20doc.%20evaluate%0A%28%0A%09%22//img%22%2C%0A%09doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20imgs.%20snapshotLength%3B%20i++%29%0A%09if%20%28r.%20intersectsNode%20%28imgs.%20snapshotItem%20%28i%29%29%29%0A%09%09ILO.%20loadImg%20%28imgs.%20snapshotItem%20%28i%29%29%3B%5D%5B

Anton пишет:

Lain_13 пишет:

...есть бага. Твой же собственный пост они не обработали! (предидущий про ббкод отлично). В чем же фокус?

Хм. Не знаю. У меня всё работает, вот скрин: http://forum.mozilla.ru/uploaded/cbtext … ertor3.png. Подробней можно ?

вот так вот у меня эта бага выглядит...
http://forum.mozilla.ru/uploaded/baga_w … placer.PNG

Lain_13 пишет:

...
вот так вот у меня эта бага выглядит...

Поэкспериментировал с настройками браузера, ILO, форума - воспроизвести не удаётся. Так что никаких идей пока нет.

Anton

Две кнопки для преобразования текстовых ссылок 'custombutton://' в реальные ссылки:

Простенький редактор кода для расширения: http://forum.mozilla.ru/uploaded/codeeditor.zip

Класс. Очень удобно. Спасибо. Не против, что я включу твой код в расширение?

Новый build.
Именения:
- моноширинный шрифт
- англ. локализация
- xbl от Anton'а, делающий более удобным редактирование кода.

P.S. Сдавал сессию, времени не было..

Yan пишет:

...Не против, что я включу твой код в расширение?

Конечно не против, забирай.

Насчёт преобразованием ссылок надо подумать - имхо, лучше не делать автоматическое распознавание, а если делать, то предусмотреть в настройках возможность его отключения, т. к. возможно на больших мегабайтных страницах будут "тормоза".

Anton
Я неправильно выразился — я имел в виду только xbl.

Рулёз, обновил (кода меньше=>должно быть ещё быстрее; вроде исправил глюк с "забыванием", когда кнопка переставала что-либо делать и требовала открытия редактора и последующего его закрытия кнопкой ОК):
B

Выделить код

Код:

custombutton://BB%3A%20%u043F%u043E%u043B%u0443%u0436%u0438%u0440%u043D%u044B%u0439%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAg4AAMIHEiwoMGDCBMaBMCwIcOEDQVGPDhx4sKHASwWdKhxI8aOAytivAhA4kiCHEEqXMmypcuBAQEAOw%3D%3D%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bb%5D%22%3B%0Avar%20close%3D%22%5B/b%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

U

Выделить код

Код:

custombutton://BB%3A%20%u043F%u043E%u0434%u0447%u0435%u0440%u043A%u043D%u0443%u0442%u044B%u0439%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAg+AAUIHEiwoMGDBwEoBCBgIcOEDxtGNKhwYEWEFyUi1CgwI8WIHgtmDElQYQABAUiWdLix5UeHC13KnElTYEAAOw%3D%3D%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bu%5D%22%3B%0Avar%20close%3D%22%5B/u%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

I

Выделить код

Код:

custombutton://BB%3A%20%u043A%u0443%u0440%u0441%u0438%u0432%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7e4SEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAAgyAAcIHEiwoMGDCBMqBMCQoUKBDAU8HBDA4USGASZWBDBxAEaNFh9+XNgwZMeTKFMqDAgAOw%3D%3D%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bi%5D%22%3B%0Avar%20close%3D%22%5B/i%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

QUOTE

Выделить код

Код:

custombutton://BB%3A%20%u0446%u0438%u0442%u0430%u0442%u0430%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACCklEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAUSxAQABxAIiurq6OM+cOZPPx8fHaWZm1rp8+fLEDx8+aGVmZrZKSEgwT5s2rRPIFwKyj/38+fPbmzdvvHh5eV/v27cvGiCAwAY8fPgwfvfu3Q3e3t5Vx48fD7hy5UonNzf3opcvX34FSiuePHkyEGgAj6ys7P9v3759fPv2rSsPD88nkF6AAAJ7YceOHbFSUlLb+fn5Jx09ejRORkbmkomJSVVtbe1XZmZmVmBMMYLUsbOzf/n37x9YDysr63cQDRBAYM6TJ09kfv/+fXbz5s18QNO1vn//fnHNmjVfQHKioqLP/fz85ggKCr4DGsAVEhKyXkND4yJQPTtIHiCAGKDp4BnQSYcUFBSagBoeA/k3gC5Ki42N5QXJL1y4kEdVVfWks7PzBhA/NTW1AqjuHYgNEECwWPj79etXWyYmpkigLT+AfHU2NrbYI0eO8IEkga7i//HjhxQQXwfxgeJqwAB9BWIDBBDMAHagZoa/f/8yAp3GBhL4/Pnz36CgoH8LFizgX7Vq1XSggQympqbLBQQEEq5fvx6hq6u7AqQOIIDAsQAMtBPAwBIGmvoAaAsH0GnvhYWFL8rJyf3g5OQUBrrun7q6egGQfQsY1VE6OjozgXITQXoBAoiR0rwAEEAUp0SAAKLYAIAAotgAgAADANuDzfQSUmlqAAAAAElFTkSuQmCC%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bquote%5D%22%3B%0Avar%20close%3D%22%5B/quote%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

CODE

Выделить код

Код:

custombutton://BB%3A%20%u043A%u043E%u0434%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA60lEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAYQNKQHxfyieABWrRRJTQlYMEEBYNc9YtR2MoRoYsIjBDQEIIKyavTOb0RWC5ZJrJ2PIAQQQTs2g2EHH2AwBCCCQIIeNkweGzTgMwHAJQACBBLkUdC3BArqOgSDBSAaIE7AZADdk6dYD/+W0Tf8DBBAoGhk5GX+AZbx8A0DUMjwhDRK/C9TMsGzLYYZHV08zAAQQiqkgV5T3LcQV0nCbkb0KEEAYCnAYglMzQABhjUo0QxjwaQYIIEIpMQcqNgFXSgQIIEZKcyNAAFGcmQACDAB0jLqYK4uYbwAAAABJRU5ErkJggg%3D%3D%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bcode%5D%22%3B%0Avar%20close%3D%22%5B/code%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

IMG

Выделить код

Код:

custombutton://BB%3A%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABpUlEQVR42p2TP0gbURzHPxebwyEJVBw6aKZAxOUcbYYOpS0IRSgljVBMOLgxZA64SBY30RDp0HuEDraBQodChrQI/UNj3XRRoreYQfo3NF4kSo9ct4dHcsX4pvd77/v9/B7vva8CUKlU3E6nw7DDMAxFMU3TTSQSxGKxocyWZVGv1wkAvmYhBJqmoaoqmqYhhMBxHLrdrvTc8OsghODt6zXq7zZQ1RG6Z39YNPI4jkM6nZa6gB+gWCzy8sUGI73vXPz+SOB8j2crjyiVSh6dPIGqqn2Qm5P3aO0vyzoSHqXRaAwGAHxb0nFOmrKeKG8xNr3MZmmBubtTnNrnxONxf4Bz0uTv8ZFH8OnrLndmZ3j/ymD1+Wey2axnP/C/pyoUCuwc/gQgV/jCw8c5MpnM1QDlZpv780/40bLR8+tEo1F0Xe/T+QJ+PXjKwXELgPFbk9RqNarVap/OcwcT5S05317N8ebDvqz1/DrJZJJ2uz0YcDkLoVCI2zNTV/rSEuC6rly0bXuguNfrARAMBr0Ay7KuFaZIJIICYJqmO2yUw+EwqVRK+QdtIZCYwfQIRQAAAABJRU5ErkJggg%3D%3D%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Bimg%5D%22%3B%0Avar%20close%3D%22%5B/img%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

URL

Выделить код

Код:

custombutton://BB%3A%20%u0433%u0438%u043F%u0435%u0440%u0441%u0441%u044B%u043B%u043A%u0430%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAKIAAGZmZgAAAP///8zMzP///////////////yH5BAEAAAQALAAAAAAQABAAAAMxSLrc/jBKCYK16lpAqhBDaH3hEHimpoqBEJhkWJkpq17iXFZnaXK8S0bDmRiPyGQyAQA7%5D%5Bthis.onclick%28%29%3B%5D%5Bthis.onclick%3Dfunction%28event%29%0A%7B%0Aif%28event.button%3C2%29%0A%7B%0Avar%20open%3D%22%5Burl%5D%22%3B%0Avar%20close%3D%22%5B/url%5D%22%3B%0Avar%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0Avar%20startPos%20%3D%20theBox.selectionStart%3B%0Avar%20endPos%20%3D%20theBox.selectionEnd%3B%0Avar%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0Avar%20oPosition%20%3D%20theBox.scrollTop%3B%0Avar%20oHeight%20%3D%20theBox.scrollHeight%3B%0Avar%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0Atext%20+%3Dopen+pastetext+close%3B%0Atext%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0AtheBox.value%20%3D%20text%3B%0AtheBox.selectionStart%20%3D%20startPos%3B%0AtheBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0Avar%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0AtheBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%7D%3B%0A%7D%3B

Насчёт преобразованием ссылок надо подумать - имхо, лучше не делать автоматическое распознавание

дык автоматическое уже есть, но по озвученным тобой причинам его мало кто ставит, а вот специальная кнопочка для этого бы не помешала... только ссылки надо без реферера открывать (не зря же их ввиде текста сделали...)

Dark-Demon

кода меньше=>должно быть ещё быстре

Хм, ты про что?

вроде исправил глюк с "забыванием", когда кнопка переставала что-либо делать и требовала открытия редактора и последующего его закрытия кнопкой ОК

Кто исправил, ты?
Что-то не заметно.

Самое интересное, что кнопка Online\Offline работает после открытия/закрытия панели инструментов.
Странно.
custombutton://Online%5COffline%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1AsRFQ8FNxF8qQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAJMSURBVHjajVJLiJJhFP1+/VPH9wNERXHAohEfCLaJgjAJgxIicBFtomULaedKZtOyhbpRlB4uahUkhGmQLcIoDbPJxERRVDQfqKmjqPxa949pmBjNLpzFvd+957uce7BSqfSi1WpdrtVqqFwuxx0OxzWE0AD9Z1CdTmeQRqOdmM/nlHQ6reRyuXOTybTg8XhbOI7v93q9xb8IcDqdTh2NRojNZqN6vY4Fg8Hd2Wy22+/3UaVSIZrN5h7Es0Qi4U2lUsc2wzudzgLDMAo0omq1ivx+P4KNEIvFQiKRCFepVEa5XG6E/M50OrVms9m9owSY3W6PgQYXyWH4sQ+/v4Kt9gFCBoMhl0gkJ61Wq1Amk6FAIPAlFotdgLkfhxt4PJ7rFArlynK5ZEA+A7w8aKAA6LlcTqbRaB5JpdLzoM8O1M4AXh8SkIrD8NMV+ixsNttPs9l8WygUnm2326RGE5L0Lw3Wqet2u01KpfIh6LFdKBRQJBIhisXiB3j6tJHA5XJdNRgMz4fDIR4Oh1EymRzk8/k3kN+D5+8bCcRi8X3wBe7z+RaZTOYrCPwYyk8AnWNnXEUwGAzkcELU7XYbMHwXSm8By5VOXLPBOb1ef0qtVnMFAgFOpVI/NhqN4apebFXRaDTuaLXadxaLRQgnRjBMwBXegwZxwDdwbgv8Mo5Go/GVBGSQDgTzPNDpdHpwIsZkMhE4EU0mk98Yj8fI6/VeWktwEDyFQnGDz+ff5HA4GtCFBw4lDYYIgkChUOjWJoI/sQXYBpwmSY/UP/8CL+z76C73PLQAAAAASUVORK5CYII%3D%5D%5BBrowserOffline.toggleOfflineStatus%28%29%3B%5D%5Bthis.pref%3D%27browser.offline%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%20var%20state%3Dthis.PS.getBoolPref%28this.pref%29%3B%0A%20if%20%28state%3D%3Dtrue%29%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1AsRBRYGKT4newAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAMPSURBVHjajVNrSFNhGH7P2XFnJzenW6bO5WUTRFPMhiCE17QMmjowK+hH+CcI8UeB9keUfkRQURCoKIEjyX5EiBooKBTOVPKamEHmZVPZ3P3u2XZm7/5NlOiD53C+93vf5718z0dsbm6OmEymGoPBAFtbW7q2trZ6AHDCfy5ee3u7ls/nxwQCAXJpaSk9Li4uUFFRwYnFYoaiKI/NZuP+RUDRNM1zu90gFAphb2+P0Gq1HSzLdtjtdtjZ2QkZjcYVXB/n5ua6FxYWTlRGmc1mjiAIEh1Br9dDb28vYEUQGxsLUqmUUiqVKrlcrsL9g8PDQ/Xa2tpKNAHR0tIyiTOojARjRjtmH8eqPAiJQCCQJycnZ6nVaolMJoO+vr4fk5OTZRjniCYRFyYktHYWFPykSfI+7hMixDUA9EhZWU99Skpdc3Pz1ODg4JFGo2HxrOpYC8MqlVhRWX5fceO6ovjVm4YnU7r31VYr72qtWlvYWHdL9nW6cTMvL85ktUZm5MMY+hgBQcc8yiwpVjAcC2V3NFWPve5PQoKwF9aU3mSCPsjJzUz4/nkURoOh0MbGxizGLB67xn3Dri7RaC5KS01UMkccpJ1PUqSmpVxgIAx+swUGxqag32Z3Li4vjzscjk6M+X2MYAcgYNjeHpIcWFUZ5+KV9FEYeKEQ+GxO6J/4xr3Q766urq+/xuE+Rf8/J64x8qkG8PP8fmfQ4UJh8OEICYJuHzgtVodRr29FlwlE+FQldiBJTnbWQMXlokYBSYAPSViXF/jhMORL4s8ofWyqJ0X2ZdtiOVXeRJdU8rL+WvlDIWb2ef3QrZs1k2FwNV3KVzI8Erxo+8ByIXtJ6YzL5dIhfqFyTdiSd2xsTMdTcNwu5WcbztK0sGtq1vzswNKz4vE+SLI7LqbRAsXMvgkslVdIqVyejmosQclr8L3cxf+m+fn5aSJSxm2AQhGfetsfCI0EAZ6jyZMNIKqNod4NC5hYfkYGIxKJclHaYlQoGYkJ4ZyGhobuEVHtJCK8CF+UjUGIEG5EBiI7otyo8+W/+YhULvaZc0MAAAAASUVORK5CYII%3D%27%3B%0A%20%20this.checked%3Dtrue%3B%0A%20%20this.tooltipText%3D%27%u0410%u0432%u0442%u043E%u043D%u043E%u043C%u043D%u043E%27%3B%0A%20%7Delse%7B%0A%20%20this.image%3D%0A%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1AsRFQ8FNxF8qQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAJMSURBVHjajVJLiJJhFP1+/VPH9wNERXHAohEfCLaJgjAJgxIicBFtomULaedKZtOyhbpRlB4uahUkhGmQLcIoDbPJxERRVDQfqKmjqPxa949pmBjNLpzFvd+957uce7BSqfSi1WpdrtVqqFwuxx0OxzWE0AD9Z1CdTmeQRqOdmM/nlHQ6reRyuXOTybTg8XhbOI7v93q9xb8IcDqdTh2NRojNZqN6vY4Fg8Hd2Wy22+/3UaVSIZrN5h7Es0Qi4U2lUsc2wzudzgLDMAo0omq1ivx+P4KNEIvFQiKRCFepVEa5XG6E/M50OrVms9m9owSY3W6PgQYXyWH4sQ+/v4Kt9gFCBoMhl0gkJ61Wq1Amk6FAIPAlFotdgLkfhxt4PJ7rFArlynK5ZEA+A7w8aKAA6LlcTqbRaB5JpdLzoM8O1M4AXh8SkIrD8NMV+ixsNttPs9l8WygUnm2326RGE5L0Lw3Wqet2u01KpfIh6LFdKBRQJBIhisXiB3j6tJHA5XJdNRgMz4fDIR4Oh1EymRzk8/k3kN+D5+8bCcRi8X3wBe7z+RaZTOYrCPwYyk8AnWNnXEUwGAzkcELU7XYbMHwXSm8By5VOXLPBOb1ef0qtVnMFAgFOpVI/NhqN4apebFXRaDTuaLXadxaLRQgnRjBMwBXegwZxwDdwbgv8Mo5Go/GVBGSQDgTzPNDpdHpwIsZkMhE4EU0mk98Yj8fI6/VeWktwEDyFQnGDz+ff5HA4GtCFBw4lDYYIgkChUOjWJoI/sQXYBpwmSY/UP/8CL+z76C73PLQAAAAASUVORK5CYII%3D%27%3B%0A%20%20this.checked%3Dfalse%3B%0A%20%20this.tooltipText%3D%27%u0412%20%u0441%u0435%u0442%u0438%27%3B%0A%20%7D%0A%7D%0A%0Athis.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B

Dimanish

Самое интересное, что кнопка Online\Offline работает после открытия/закрытия панели инструментов.
Странно.

У меня нормально работает, проверил.
Dark-Demon

роде исправил глюк с "забыванием", когда кнопка переставала что-либо делать и требовала открытия редактора и последующего его закрытия кнопкой ОК

Не, таким способом это не исправить.
Исправляется это только через назначение атрибута onclick. (см. ранее)

Upd.
Кстати,

только ссылки надо без реферера открывать (не зря же их ввиде текста сделали...)

- это про что?

Yan

У меня нормально работает, проверил.

Я и написал, что работает.

Dimanish
А, сразу не понял. Понятно. Там нет обработчика onclick, вот и работает нормально.

Yan, ну не знаю, после того, как я написал this.onclick(); в коде, кнопки склерозом страдать перестали...
Dimanish, я про предложенный Антоном readFromClipboard(), вместо того громоздкого кода...

Dark-Demon
Тест:
1. Ставим отсюда кнопку "B", открываем настройку панелей, перетягиваем кнопку на панель. Закрываем настройку.
2. Кнопка пока не проинициализирована. Для инициализации кликаем по ней один раз. На следующий начинает работать как надо. Пока всё нормально.
3. Открываем окно настройки панелей, и тут же его закрываем.
4. Кликаем по кнопке....

Результат - кнопка не работает..

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

Как лечится я говорил выше.
В принципе есть и другие решения, но они хуже.

подтверждаю :( ладно, приду домой - исправлю.

Версия 0.0.1.1
Изменения:
- пофиксено несколько багов
- поддержка Flock
- экспериментальная поддержка Thunderbird

Yan пишет:

Версия 0.0.1.1
Изменения:
- пофиксено несколько багов
- поддержка Flock
- экспериментальная поддержка Thunderbird

Ян! Спасибо за новую версию, но вот, что я заметил. Полазил по разным расширениям и во всех обозначение русской локали идет как ru-RU. Именно такое обозначение я сделал в своей версии. Для Польской и английских окалей у тебя все прописано коррекно, но почему для русской прописано просто ru? И хоть расширение работает, но может лучше придерживаться какого-то стандартного обозначения? Просто мало ли каким боком это потом выйдет...

Lain_13
Начиная с Firefox 1.5 русская локаль обозначается как ru.
В этом можно убедиться на примере официальной локализации для Firefox:
http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/1.5.0.4/win32/xpi/ru.xpi
Зачем изменили обозначение - не знаю, но раз изменили, то IMHO последний вариант более "стандартный".

Извини, отстал от жизни. Ж)
з.ы. Честно говоря странно они придумали... Как я понял первая половина соотетствовала языку, а вторая его модификации. en - английский, US - United States, т.е. соединенные штаты... Интересно, с чего это им в голову стукнуло менять оформление названий?.. Или они решили таким вот макаром поменять в дальнейшем для всех языков не имеющих модификаций?..

Lain_13
Идея описана на http://wiki.mozilla.org/L10n:Simple_locale_names
Вкратце суть такова - если на одном языке говорят в нескольких странах и язык в этих странах более-менее един (то есть нет сильных различий в терминологии применительно к браузеру), то нет смысла указывать для языка код страны. Таким образом одна локализация будет работать в нескольких странах сразу.
Русский язык более-менее един во всех странах, где на нём говорят, поэтому когда мне предложили изменить с ru-RU на ru, я согласился.

P.S. А вообще зачинщиками изменений выступили немцы. Им оказалось лень делать отдельные локализации для Австрии (de-AT) и Германии (de-DE).

P.P.S Заканчиваю оффтопить :)

Версия 0.0.1.2
Основные изменения:
- в редактор кнопок добавил горячую клавишу F9, по которой происходит выполнение кода.
Работает только в поле Код (в Инициализации не работает). Думаю, так удобнее будет тестировать.
- добавил кнопку Apply. Опять же, для более удобного тестирования кнопок. По умолчанию скрыта. Для показа нужно в about:config создать параметр custombuttons.settings.editor.showApplyButton, и устаносить его в true.

P.S. По совету Dimanish создал тему на forums.mozillazine.org.

Та, я смотрю мой пост не прошёл... тогда реплей...
Исправленные BB-кнопки:

Выделить код

Код:

custombutton://%u041F%u043E%u043B%u0443%u0436%u0438%u0440%u043D%u044B%u0439%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAEALAAAAAAQABAAAAg4AAMIHEiwoMGDCBMaBMCwIcOEDQVGPDhx4sKHASwWdKhxI8aOAytivAhA4kiCHEEqXMmypcuBAQEAOw%3D%3D%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Bb%5D%22%3B%0A%09%09var%20close%3D%22%5B/b%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B
Выделить код

Код:

custombutton://%u041F%u043E%u0434%u0447%u0435%u0440%u043A%u043D%u0443%u0442%u044B%u0439%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAIALAAAAAAQABAAAAg+AAUIHEiwoMGDBwEoBCBgIcOEDxtGNKhwYEWEFyUi1CgwI8WIHgtmDElQYQABAUiWdLix5UeHC13KnElTYEAAOw%3D%3D%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Bu%5D%22%3B%0A%09%09var%20close%3D%22%5B/u%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B
Выделить код

Код:

custombutton://%u041A%u0443%u0440%u0441%u0438%u0432%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAPcAAAAAAHt7e4SEhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAMALAAAAAAQABAAAAgyAAcIHEiwoMGDCBMqBMCQoUKBDAU8HBDA4USGASZWBDBxAEaNFh9+XNgwZMeTKFMqDAgAOw%3D%3D%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Bi%5D%22%3B%0A%09%09var%20close%3D%22%5B/i%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B
Выделить код

Код:

custombutton://%u0426%u0438%u0442%u0430%u0442%u0430%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACCklEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAUSxAQABxAIiurq6OM+cOZPPx8fHaWZm1rp8+fLEDx8+aGVmZrZKSEgwT5s2rRPIFwKyj/38+fPbmzdvvHh5eV/v27cvGiCAwAY8fPgwfvfu3Q3e3t5Vx48fD7hy5UonNzf3opcvX34FSiuePHkyEGgAj6ys7P9v3759fPv2rSsPD88nkF6AAAJ7YceOHbFSUlLb+fn5Jx09ejRORkbmkomJSVVtbe1XZmZmVmBMMYLUsbOzf/n37x9YDysr63cQDRBAYM6TJ09kfv/+fXbz5s18QNO1vn//fnHNmjVfQHKioqLP/fz85ggKCr4DGsAVEhKyXkND4yJQPTtIHiCAGKDp4BnQSYcUFBSagBoeA/k3gC5Ki42N5QXJL1y4kEdVVfWks7PzBhA/NTW1AqjuHYgNEECwWPj79etXWyYmpkigLT+AfHU2NrbYI0eO8IEkga7i//HjhxQQXwfxgeJqwAB9BWIDBBDMAHagZoa/f/8yAp3GBhL4/Pnz36CgoH8LFizgX7Vq1XSggQympqbLBQQEEq5fvx6hq6u7AqQOIIDAsQAMtBPAwBIGmvoAaAsH0GnvhYWFL8rJyf3g5OQUBrrun7q6egGQfQsY1VE6OjozgXITQXoBAoiR0rwAEEAUp0SAAKLYAIAAotgAgAADANuDzfQSUmlqAAAAAElFTkSuQmCC%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Bquote%5D%22%3B%0A%09%09var%20close%3D%22%5B/quote%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B
Выделить код

Код:

custombutton://%u041A%u043E%u0434%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA60lEQVR42mL8//8/AyUAIICYGCgEAAFEsQEAAYQNKQHxfyieABWrRRJTQlYMEEBYNc9YtR2MoRoYsIjBDQEIIKyavTOb0RWC5ZJrJ2PIAQQQTs2g2EHH2AwBCCCQIIeNkweGzTgMwHAJQACBBLkUdC3BArqOgSDBSAaIE7AZADdk6dYD/+W0Tf8DBBAoGhk5GX+AZbx8A0DUMjwhDRK/C9TMsGzLYYZHV08zAAQQiqkgV5T3LcQV0nCbkb0KEEAYCnAYglMzQABhjUo0QxjwaQYIIEIpMQcqNgFXSgQIIEZKcyNAAFGcmQACDAB0jLqYK4uYbwAAAABJRU5ErkJggg%3D%3D%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Bcode%5D%22%3B%0A%09%09var%20close%3D%22%5B/code%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B
Выделить код

Код:

custombutton://%u0418%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABpUlEQVR42p2TP0gbURzHPxebwyEJVBw6aKZAxOUcbYYOpS0IRSgljVBMOLgxZA64SBY30RDp0HuEDraBQodChrQI/UNj3XRRoreYQfo3NF4kSo9ct4dHcsX4pvd77/v9/B7vva8CUKlU3E6nw7DDMAxFMU3TTSQSxGKxocyWZVGv1wkAvmYhBJqmoaoqmqYhhMBxHLrdrvTc8OsghODt6zXq7zZQ1RG6Z39YNPI4jkM6nZa6gB+gWCzy8sUGI73vXPz+SOB8j2crjyiVSh6dPIGqqn2Qm5P3aO0vyzoSHqXRaAwGAHxb0nFOmrKeKG8xNr3MZmmBubtTnNrnxONxf4Bz0uTv8ZFH8OnrLndmZ3j/ymD1+Wey2axnP/C/pyoUCuwc/gQgV/jCw8c5MpnM1QDlZpv780/40bLR8+tEo1F0Xe/T+QJ+PXjKwXELgPFbk9RqNarVap/OcwcT5S05317N8ebDvqz1/DrJZJJ2uz0YcDkLoVCI2zNTV/rSEuC6rly0bXuguNfrARAMBr0Ay7KuFaZIJIICYJqmO2yUw+EwqVRK+QdtIZCYwfQIRQAAAABJRU5ErkJggg%3D%3D%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Bimg%5D%22%3B%0A%09%09var%20close%3D%22%5B/img%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B
Выделить код

Код:

custombutton://%u0413%u0438%u043F%u0435%u0440%u0441%u0441%u044B%u043B%u043A%u0430%20%20%20%28L%20-%20%u043E%u0431%u0440%u0430%u043C%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u043E%u0435%3B%20C%20-%20%u0432%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043E%u0431%u0440%u0430%u043C%u043B%u0451%u043D%u043D%u043E%u0435%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%29%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAKIAAGZmZgAAAP///8zMzP///////////////yH5BAEAAAQALAAAAAAQABAAAAMxSLrc/jBKCYK16lpAqhBDaH3hEHimpoqBEJhkWJkpq17iXFZnaXK8S0bDmRiPyGQyAQA7%5D%5B%5D%5Bthis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3C2%29%0A%09%7B%0A%09%09var%20open%3D%22%5Burl%5D%22%3B%0A%09%09var%20close%3D%22%5B/url%5D%22%3B%0A%09%09var%20theBox%20%3D%20document.commandDispatcher.focusedElement%3B%0A%09%09var%20startPos%20%3D%20theBox.selectionStart%3B%0A%09%09var%20endPos%20%3D%20theBox.selectionEnd%3B%0A%09%09var%20pastetext%3D%20%28event.button%29%3FreadFromClipboard%20%28%29%3AtheBox.value.substring%28startPos%2C%20endPos%29%3B%0A%09%09var%20oPosition%20%3D%20theBox.scrollTop%3B%0A%09%09var%20oHeight%20%3D%20theBox.scrollHeight%3B%0A%09%09var%20text%3DtheBox.value.substring%280%2CstartPos%29%3B%0A%09%09text%20+%3Dopen+pastetext+close%3B%0A%09%09text%20+%3DtheBox.value.substring%28endPos%2C%20theBox.value.length%29%3B%0A%09%09theBox.value%20%3D%20text%3B%0A%09%09theBox.selectionStart%20%3D%20startPos%3B%0A%09%09theBox.selectionEnd%20%3D%20startPos%20+%20open.length%20+%20pastetext.length%20+%20close.length%3B%0A%09%09var%20nHeight%20%3D%20theBox.scrollHeight%20-%20oHeight%3B%0A%09%09theBox.scrollTop%20%3D%20oPosition%20+%20nHeight%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

Также модифицировал менюшку WebDeveloper от Zoolcar9 - по щелчку средней кнопкой теперь открывается/закрывается WebDeveloperToolbar.

Выделить код

Код:

custombutton://Web%20Developer%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH1AsQFRwsrPDCMgAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAL9SURBVHjarVN7SJNRFL/OTefSoSyYmoGBmaQYZisD8ZGaZYam5msuELMs0kqd4h9SGkFKoY0yIkxJU7F8BPkufJSpDcVHmfl+T3Gbzs3m3L7vdCdqJuRfHfh955x7zu/c7557LkL/WaipadkeWBtwudyjsYk54tspgnzs07y9A205HA/rXdk+ftd5Fe+/EqG8hFLsRi0r1kj/i7Hd2A7LyHkjTkrLG8I2858FbB0d3QpL6uXTc2Iy62mRemxGDM1tXUTm40LNzPIauJwKbcJpe7dzKNrPg+y3hU9eVErnF/TiVCoFwWazdKKvhFBX1WuIzjCkcJzsdL/19aOFRYmBPzfxS0raa+kxFxfOVpVzAddShsfFasAyv6QApQZAplCD4HkZVFa3ws+JOXhZUg2NwiGYWgKIisscxTRnDJ3NGthgZbV3fifHRGIYGJ4lD9mfrmYYMXgmrIP8pFSBSNgzCOV1QvAL5Utw/hkMxjrT/Swv+llelby6vo3s/jEC0wsyCAiPn9jYgaYtbuPgmVxa0QT5pbVQWtUO97LKNMGR9ztwTJ8iEs2rCLVGBxCJVlZW0Ro+N6FRAw4uYagxgEqlaahUXWTENER6dBoiCKSjUsoNccx08wgspG9Z8KFZSH5s7YLBURFpZedZTDeinzQ2tb90NyN3ckGmhN6hKQiJSFjE+ecxLLR/sM728o3h9wzOqpdJgPLaz1DXLASZfBVeFddC46duwMswvbgKc5JfoMR25I1HA5hmuXWNRziODuVl9UpTll3LyNikYkWpQjVNHYhCpyIloUG9Q9NILpYidzffzgtBN8f3GDLNzc2t7LT9oWoLPLwTzcOKbWZmcYLU0AqYxubQ1NBCOhy30ZXLVWRNTTPi8YIoJux9stoygQ/O1cVQavvz1yQ6e0VGZOc2Es6e4Q3YTe7oV4CH79U+bMfw04ukl+MFIzsncafQ3L0Dg7E+7Orq6RTIS5f4h916p23yAWtbDpNp4r3rW/gzVFsTZoKxf2Me0Lb1LfkN2BRevObpD7MAAAAASUVORK5CYII%3D%5D%5B%0A%5D%5Bvar%20webdev%20%3D%20document.getElementById%28%22webdeveloper-menu%22%29.getElementsByTagName%28%22menupopup%22%29%5B0%5D%3B%0Athis.appendChild%28webdev.cloneNode%28true%29%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0A%0Athis.onClick%3Dfunction%28event%29%0A%7B%0A%09if%28event.button%3D%3D1%29%0A%09%7B%0A%09%09var%20a%20%3D%20document.getElementById%28%22webdeveloper-toolbar%22%29%3B%0A%09%09a.collapsed%20%3D%20%21a.collapsed%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

Yan, а не подскажешь, как сделать так, чтобы попап-меню вылезало не по левой, а по средней кнопке?

Ну и для порядка кнопка "Панель закладок" теперь открывает/закрывает эту панель не только левой, но и средней кнопкой.

Выделить код

Код:

custombutton://%u041F%u0430%u043D%u0435%u043B%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACq0lEQVR4Xm2PzWtcVRiHn/fce2Ymk8ykk9YkpTWkCyvYVBvpImQhhdCYbgRdSYMLd5K0qaj0L2jpF+3GpVChGNSNllYMCn5uulEKJiGEiCQm1TSTTmYmmXvnfp1j6wwdAn3ggXPg/b0fYj4CLJg6+B67UIarQQyJ4TxNRMGff4HnQxiDookIOIoWll72qHHyatwYerGNmmoV4qTxBlC0QDlgAWshqTOWGj28v230xf31bcb8EMpV2CiCNbQyPAMTk5G8e1od3xQ9tCOS06dDn4zvt7bd3cA2TRrGNQb1sa4TstdDPVciPbjvhFdiMPAA09zAthoMI7wFTErGvSTZzLTu677lDKFRHiif7GuubjvUfUt3ZKadJzXC5P8Zy7CYc8zyUvcAx/KQqWG1Qnq6obAKdhMApAe7cZD6yhqRbwjWAta/8Vi7H8+JeZ/DJtsxLW+0H5fBIoQGIsCwGxdIAbFQ+tJh7tPkt1rJjov5AKIKL4SWjzOn1OvOEQNx60YUoJv/LQhmSO7d5vtanXOOZkkhoFIsmZC3K7fNnegXoNh0E5aXFBe/znHtqxzX7xY4+4NjKxETnZqlNKCSCJIErKJc3+Gi/wdb/ANsAI9gftFSLEzR/+YFgndG+LFfux8mRJMKphS4D1Z4ShKzN6/JswWYhoWyJf/KOrVDs2wvz5GKIlag6goAuMbQAo464FBqTL8ZtvNTlOKIttSDgKCeIEpICV+48BnwuTIJPDGJcVzFq+kqhIvw9wKe/t3/ZCnQiwNHewniAFccDgy3keTo9Aw/+wKyMEYTutJwP2vpe+jxaxhzpWb59t2Yg3teTs+MnDkwsLrq8+/l9WjfQ9trNCUAmT8JAAJ91nIvjLhhDTdJ2CpbeM+B7YDnpUu+66/Y/MQK5R6XUyGsAvwHk/0n+0qkvkwAAAAASUVORK5CYII%3D%5D%5B%5D%5Bthis.PTB%3D%20document.getElementById%28%22PersonalToolbar%22%29%3B%0A//this.PTB.collapsed%3D%20true%3B%0A%0Athis.onClick%3Dfunction%28event%29%20%7Bif%28event.button%3C2%29%20this.PTB.collapsed%3D%21this.PTB.collapsed%3B%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

ps: а почему кнопка "apply" по дефолту скрыта?

Ещё одна кнопка, для преобразования простых ссылок 'custombutton://...' в ссылку-картинку:

Выделить код

Код:

custombutton://%u041F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u0442%u044C%20%u0441%u0441%u044B%u043B%u043A%u0438%20%27custombutton%3A//...%27%20%u0432%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0441%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%u043C%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfWBgMQBxbn9GxKAAAAB3RJTUUH1gYDEBMzV1+MKAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADNQTFRF////mZmZMzMzZmZmzMzM/8yZ/5mZ/8xm/8wA///M/8wz/8zMzJmZ/5kA/5lmZmYz/5kzCyXdoQAAAAF0Uk5TAEDm2GYAAAB6SURBVHjaTc5bFsIgDATQCZOIJdZ2/6t1oNHKRwj3kAcaeZAVDACRXdcWAfiEI/rogT5GFCg9E3kqLGDu+1slmVXCiHwBNvMLsA7d/IY5QEO9YNMYNdRCVj/6c24iaQURD1xCB5qZ2uEWPVevryj+ARvXOj+oxBrrCD73jALvj0npfgAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20cbcodes%20%3D%20doc.%20evaluate%0A%28%0A%20%20%20%20%22//a%5B@href%20and%20starts-with%28@href%2C%27custombutton%3A//%27%29%5D%22%2C%0A%20%20%20%20doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%2C%20cn%2C%20cnt%2C%20cnf%2C%20nn%2C%20titletext%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20cbcodes.%20snapshotLength%3B%20i++%29%0A%7B%0A%20%20%20%20cn%20%3D%20cbcodes.%20snapshotItem%20%28i%29%3B%0A%20%20%20%20cnt%20%3D%20cn.%20getAttribute%20%28%22href%22%29%3B%0A%20%20%20%20cnf%20%3D%20cnt.%20split%20%28%22%255D%255B%22%29%3B%0A%20%20%20%20if%20%28cnf.%20length%20%21%3D%204%29%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20titletext%20%3D%20unescape%20%28cnf%20%5B0%5D.%20replace%20%28/custombutton%3A%5C/%5C//%2C%20%22%22%29%29%3B%0A%20%20%20%20nn%20%3D%20doc.%20createElement%20%28%22img%22%29%3B%0A%20%20%20%20nn.%20setAttribute%20%28%22src%22%2C%20unescape%20%28cnf%20%5B1%5D%29%20%7C%7C%20%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A%20%20%20%20nn.%20setAttribute%20%28%22class%22%2C%20%22toolbarimg%22%29%3B%0A%20%20%20%20nn.%20setAttribute%20%28%22title%22%2C%20titletext%29%3B%0A%20%20%20%20nn.%20setAttribute%20%28%22alt%22%2C%20titletext%29%3B%0A%20%20%20%20cn.%20innerHTML%20%3D%20%22%22%3B%0A%20%20%20%20cn.%20appendChild%20%28nn%29%3B%0A%7D%5D%5B

А в старых кнопках был лишний код, вот новые:

Выделить код

Код:

custombutton://%u041F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u0442%u044C%20%u043A%u043E%u0434%u044B%20custombuttons%20%u0432%20%u0441%u0441%u044B%u043B%u043A%u0438%20%28%u0441%u0442%u0440%u043E%u0433%u043E%u0435%20%u043F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u043D%u0438%u0435%29%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfWBgMQBxbn9GxKAAAAB3RJTUUH1gYDEBMzV1+MKAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADNQTFRF////mZmZMzMzZmZmzMzM/8yZ/5mZ/8xm/8wA///M/8wz/8zMzJmZ/5kA/5lmZmYz/5kzCyXdoQAAAAF0Uk5TAEDm2GYAAAB6SURBVHjaTc5bFsIgDATQCZOIJdZ2/6t1oNHKRwj3kAcaeZAVDACRXdcWAfiEI/rogT5GFCg9E3kqLGDu+1slmVXCiHwBNvMLsA7d/IY5QEO9YNMYNdRCVj/6c24iaQURD1xCB5qZ2uEWPVevryj+ARvXOj+oxBrrCD73jALvj0npfgAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20cbcodes%20%3D%20doc.%20evaluate%0A%28%0A%20%20%20%20%22//text%28%29%5Bstarts-with%28.%2C%27custombutton%3A//%27%29%5D%22%2C%0A%20%20%20%20doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%2C%20cn%2C%20cnt%2C%20cnf%2C%20nn%2C%20t%2C%20titletext%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20cbcodes.%20snapshotLength%3B%20i++%29%0A%7B%0A%20%20%20%20cn%20%3D%20cbcodes.%20snapshotItem%20%28i%29%3B%0A%20%20%20%20cnt%20%3D%20cn.%20textContent%3B%0A%20%20%20%20cnf%20%3D%20cnt.%20split%20%28%22%255D%255B%22%29%3B%0A%20%20%20%20if%20%28cnf.%20length%20%21%3D%204%29%0A%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20titletext%20%3D%20unescape%20%28cnf%20%5B0%5D.%20replace%20%28/custombutton%3A%5C/%5C//%2C%20%22%22%29%29%3B%0A%20%20%20%20nn%20%3D%20doc.%20createElement%20%28%22a%22%29%3B%0A%20%20%20%20nn.%20setAttribute%20%28%22href%22%2C%20cn.%20textContent%29%3B%0A%20%20%20%20t%20%3D%20doc.%20createElement%20%28%22img%22%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22src%22%2C%20unescape%20%28cnf%20%5B1%5D%29%20%7C%7C%20%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22class%22%2C%20%22toolbarimg%22%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22title%22%2C%20titletext%29%3B%0A%20%20%20%20t.%20setAttribute%20%28%22alt%22%2C%20titletext%29%3B%0A%20%20%20%20nn.%20appendChild%20%28t%29%3B%0A%20%20%20%20cn.%20parentNode.%20replaceChild%20%28nn%2C%20cn%29%3B%0A%7D%5D%5B
Выделить код

Код:

custombutton://%u041F%u0440%u0435%u043E%u0431%u0440%u0430%u0437%u043E%u0432%u0430%u0442%u044C%20%u043A%u043E%u0434%u044B%20custombuttons%20%u0432%20%u0441%u0441%u044B%u043B%u043A%u0438%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAFXRFWHRDcmVhdGlvbiBUaW1lAAfWBgMQBxbn9GxKAAAAB3RJTUUH1gYDEBMzV1+MKAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADNQTFRF////mZmZMzMzZmZmzMzM/8yZ/5mZ/8xm/8wA///M/8wz/8zMzJmZ/5kA/5lmZmYz/5kzCyXdoQAAAAF0Uk5TAEDm2GYAAAB6SURBVHjaTc5bFsIgDATQCZOIJdZ2/6t1oNHKRwj3kAcaeZAVDACRXdcWAfiEI/rogT5GFCg9E3kqLGDu+1slmVXCiHwBNvMLsA7d/IY5QEO9YNMYNdRCVj/6c24iaQURD1xCB5qZ2uEWPVevryj+ARvXOj+oxBrrCD73jALvj0npfgAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20cbcodes%20%3D%20doc.%20evaluate%0A%28%0A%20%20%20%20%22//text%28%29%5Bcontains%28.%2C%27custombutton%3A//%27%29%5D%22%2C%0A%20%20%20%20doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%2C%20j%2C%20cn%2C%20cnt%2C%20cnf%2C%20nn%2C%20t%2C%20titletext%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20cbcodes.%20snapshotLength%3B%20i++%29%0A%7B%0A%20%20%20%20cn%20%3D%20cbcodes.%20snapshotItem%20%28i%29%3B%0A%20%20%20%20cnt%20%3D%20cn.%20textContent.%20match%20%28/custombutton%3A%5C/%5C/.+/%29%3B%0A%20%20%20%20for%20%28j%20%3D%200%3B%20j%20%3C%20cnt.%20length%3B%20j++%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20cnf%20%3D%20cnt%20%5Bj%5D.%20split%20%28%22%255D%255B%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28cnf.%20length%20%21%3D%204%29%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20titletext%20%3D%20unescape%20%28cnf%20%5B0%5D.%20replace%20%28/custombutton%3A%5C/%5C//%2C%20%22%22%29%29%3B%0A%20%20%20%20%20%20%20%20nn%20%3D%20doc.%20createElement%20%28%22a%22%29%3B%0A%20%20%20%20%20%20%20%20nn.%20setAttribute%20%28%22href%22%2C%20cn.%20textContent%29%3B%0A%20%20%20%20%20%20%20%20t%20%3D%20doc.%20createElement%20%28%22img%22%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22src%22%2C%20unescape%20%28cnf%20%5B1%5D%29%20%7C%7C%20%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22class%22%2C%20%22toolbarimg%22%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22title%22%2C%20titletext%29%3B%0A%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22alt%22%2C%20titletext%29%3B%0A%20%20%20%20%20%20%20%20nn.%20appendChild%20%28t%29%3B%0A%20%20%20%20%20%20%20%20if%20%28j%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20%20%20%20%20cn.%20parentNode.%20replaceChild%20%28nn%2C%20cn%29%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20cn.%20parentNode.%20appendChild%20%28nn%29%3B%0A%20%20%20%20%7D%0A%7D%5D%5B

Решил тоже попробовать это расширение и кнопки описанные здесь выше. Одно маленькое пожелание, надо что-то делать с пояснительным текстом к кнопкам. Эти опусы невозможно прочитать в окне Настройки панелей инструментов (если только не растянуть его на весь экран) из-за налезания текста друг на друга. Если вытащить кнопку на панель, то при включённом отображении "Значки и текст" кнопка занимает много места.

Может быть стоит разделить текст, появляющийся при выборе "Значки и текст", и текст всплывающей подсказки, который может содержать более подробную информацию?

P.S. В рассмотрении участвовали кнопки Dark-Demon и Anton.

...Эти опусы невозможно прочитать в окне Настройки панелей инструментов...

Infant
Ну, не получилось у меня кратко описать назначение. И за иконку мне уже замечание делали. Не художник я.
Если кто может, переделайте и разместите, это несложно.

Что касается раздельных названия/описания - это уже к разработчику.

Вот, твою подправил:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA2LzE5LzA21AYRVQAAAX5JREFUeJyVkzGL1FAUhT/HbZYU0yhC6lcsA9nm2k0r+BOmdZoHFltOJ6wL1iJs9W6zAbFI49+w8YBsIFikEsV6isFSi2QymXFnxdMk5J373XNzkwer1eo3/6kQwjLGWAKcAFxevSFrasDZzK4HY3ZagwTAZvYCgKvLV3uwE4CsKQEBImsuAOsK5P1zyJodZKxJd9Fg7DpafxxHR3ZYu0vQGZ8ORZtZ0d0aQOpHKO4E7BJYAvuMRp3chUtHi4cE49nORmZJxBj58L7EzPbODhLs1L3QfpgYcXck4e58berjgOy07jfgZM0FWVNzNiuIMaJ+le5+HLD5tY233XsxjJRSGiDr9fq+EQxIoP2VHUIk3UgqAB7O5/PXP75/o779gn4CuTF99vyvqI8eP+k8EnmeI+llnucfJyGEZdu2mBlmNnS5S2/fXe953D1OYozlYrE4r6rqaOFY0+l0C/kE/XdgZjVwXlXVbQjhnxAzW6aUygGwhUhatm17c/jH3ac/OM+gHyNFEgQAAAAASUVORK5CYII=

И свою нарисовал:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX////////v7+/f39/MzMy/v7+vr6+ZmZmPj49/f39mZmZPT08/Pz8zMzMfHx8PDw+Fgb3WAAAAEHRSTlMA////////////////////wFCLQwAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA2LzE5LzA21AYRVQAAAFRJREFUeJxjYC8HgwIGdkEwQGOoCDpBGF2Cn4AMqULBq2IHgQzxQKGPUo1gKfGNco5ghnShH0SXvGIXiCFiGCt4DMSQmbhC6CNE6on4RnQrIAyoMwBNFh56ZTJDyQAAAABJRU5ErkJggg==

А вот и кнопочка "найти ссылки":

custombutton://%u041D%u0430%u0439%u0442%u0438%20%u0441%u0441%u044B%u043B%u043A%u0438%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAMFBMVEX////////v7+/f39/MzMy/v7+vr6+ZmZmPj49/f39mZmZPT08/Pz8zMzMfHx8PDw+Fgb3WAAAAEHRSTlMA////////////////////wFCLQwAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA2LzE5LzA21AYRVQAAAFRJREFUeJxjYC8HgwIGdkEwQGOoCDpBGF2Cn4AMqULBq2IHgQzxQKGPUo1gKfGNco5ghnShH0SXvGIXiCFiGCt4DMSQmbhC6CNE6on4RnQrIAyoMwBNFh56ZTJDyQAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0Avar%20cbcodes%20%3D%20doc.%20evaluate%0A%28%0A%20%20%20%20%22//text%28%29%5Bcontains%28.%2C%27%3A//%27%29%5D%22%2C%0A%20%20%20%20doc%2C%20null%2C%20XPathResult.%20ORDERED_NODE_SNAPSHOT_TYPE%2C%20null%0A%29%3B%0Avar%20i%2C%20j%2C%20cn%2C%20cnt%2C%20cnf%2C%20nn%2C%20t%2C%20titletext%3B%0Afor%20%28i%20%3D%200%3B%20i%20%3C%20cbcodes.%20snapshotLength%3B%20i++%29%0A%7B%0A%20%20%20%20cn%20%3D%20cbcodes.%20snapshotItem%20%28i%29%3B%0A%20%20%20%20cnt%20%3D%20cn.%20textContent.%20match%20%28/%5BA-Za-z%5D+%3A%5C/%5C/%5CS+/g%29%3B%0A%20%20%20%20for%20%28j%20%3D%200%3B%20j%20%3C%20cnt.%20length%3B%20j++%29%0A%20%20%20%20%7B%0A%09if%20%28cnt%20%5Bj%5D.%20match%20%28/custombutton%3A%5C/%5C//%29%29%0A%09%7B%0A%20%20%20%20%20%20%20%20%09cnf%20%3D%20cnt%20%5Bj%5D.%20split%20%28%22%255D%255B%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28cnf.%20length%20%21%3D%204%29%0A%20%20%20%20%20%20%20%20%09%20%20%20%20continue%3B%0A%09%20%20%20%20%20%20%20%20titletext%20%3D%20unescape%20%28cnf%20%5B0%5D.%20replace%20%28/custombutton%3A%5C/%5C//%2C%20%22%22%29%29%3B%0A%20%20%20%20%20%20%20%20%09nn%20%3D%20doc.%20createElement%20%28%22a%22%29%3B%0A%09%20%20%20%20%20%20%20%20nn.%20setAttribute%20%28%22href%22%2C%20cn.%20textContent%29%3B%0A%09%20%20%20%20%20%20%20%20t%20%3D%20doc.%20createElement%20%28%22img%22%29%3B%0A%20%20%20%20%20%20%20%20%09t.%20setAttribute%20%28%22src%22%2C%20unescape%20%28cnf%20%5B1%5D%29%20%7C%7C%20%22chrome%3A//custombuttons/skin/button.png%22%29%3B%0A%09%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22class%22%2C%20%22toolbarimg%22%29%3B%0A%20%20%20%20%20%20%20%20%09t.%20setAttribute%20%28%22title%22%2C%20titletext%29%3B%0A%09%20%20%20%20%20%20%20%20t.%20setAttribute%20%28%22alt%22%2C%20titletext%29%3B%0A%20%20%20%20%20%20%20%20%09nn.%20appendChild%20%28t%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28j%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20%09%20%20%20%20cn.%20parentNode.%20replaceChild%20%28nn%2C%20cn%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%09%20%20%20%20cn.%20parentNode.%20appendChild%20%28nn%29%3B%0A%09%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%09nn%20%3D%20doc.%20createElement%20%28%22a%22%29%3B%0A%09%20%20%20%20%20%20%20%20nn.%20setAttribute%20%28%22href%22%2C%20cnt%20%5Bj%5D%29%3B%0A%09%20%20%20%20%20%20%20%20t%20%3D%20doc.%20createTextNode%20%28%22%20@%20%22%29%3B%0A%20%20%20%20%20%20%20%20%09nn.%20appendChild%20%28t%29%3B%0A/*%09%20%20%20%20%20%20%20%20if%20%28j%20%3D%3D%200%29%0A%20%20%20%20%20%20%20%20%09%20%20%20%20cn.%20parentNode.%20replaceChild%20%28nn%2C%20cn%29%3B%0A%09%20%20%20%20%20%20%20%20else*/%0A%20%20%20%20%20%20%20%20%09%20%20%20%20cn.%20parentNode.%20appendChild%20%28nn%29%3B%0A%09%7D%0A%20%20%20%20%7D%0A%7D%5D%5B

кастомбутоны показывает как у тебя, плюс находит ссылки вида _http://mozilla.ru/ и тому подобные.

Кстати, что-то твоя новая кнопка не работает...

На основе примера из Canvas Tutorial (http://developer.mozilla.org/en/docs/Ca … _example_2) соорудил аналоговые часы:

Выделить код

Код:

custombutton://%u0410%u043D%u0430%u043B%u043E%u0433%u043E%u0432%u044B%u0435%20%u0447%u0430%u0441%u044B%5D%5B%5D%5B//%20based%20on%20canvas%20tutorial%20example%20code%0A//%20%28http%3A//developer.mozilla.org/en/docs/Canvas_tutorial%3ABasic_animations%23An_animation_example_2%29%5D%5Bif%20%28%21document.%20getElementById%20%28%22canvas-clock%22%29%29%0A%7B%0A%09var%20canvas%20%3D%20document.%20createElementNS%20%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22canvas%22%29%3B%0A%09canvas.%20setAttribute%20%28%22id%22%2C%20%22canvas-clock%22%29%3B%0A%09canvas.%20setAttribute%20%28%22width%22%2C%20%2224px%3B%22%29%3B%0A%09canvas.%20setAttribute%20%28%22height%22%2C%20%2224px%3B%22%29%3B%0A%09canvas.%20setAttribute%20%28%22style%22%2C%20%22min-width%3A24px%3Bmin-height%3A24px%3Bheight%3A24px%3Bwidth%3A24px%3Bmax-width%3A24px%3Bmax-height%3A24px%3B%22%29%3B%0A%09var%20button%20%3D%20this%3B%0A%09setTimeout%0A%09%28%0A%09%20%20%20%20function%20%28%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20button.%20parentNode.%20insertBefore%20%28canvas%2C%20button%29%3B%0A%09%09canvas.%20addEventListener%0A%09%09%28%0A%09%09%09%22click%22%2C%0A%09%09%09function%20%28event%29%0A%09%09%09%7B%0A%09%09%09%09button.%20hidden%20%3D%20%21button.%20hidden%3B%0A%09%09%09%7D%2C%0A%09%09%09false%0A%09%09%29%3B%0A%09%09button.%20hidden%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20var%20ctx%20%3D%20canvas.%20getContext%28%222d%22%29%3B%0A%09%20%20%20%20%20%20%20%20ctx.%20scale%20%2824%20/%20122%2C%2024%20/%20122%29%3B%0A%09%20%20%20%20%20%20%20%20var%20clock%20%3D%20function%20%28%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%09%09var%20now%20%3D%20new%20Date%20%28%29%3B%0A%09%09%09var%20canvas%20%3D%20document.%20getElementById%20%28%22canvas-clock%22%29%3B%0A%09%09%09var%20ctx%20%3D%20canvas.%20getContext%28%222d%22%29%3B%0A%09%09%09ctx.%20save%20%28%29%3B%0A%09%09%09ctx.%20clearRect%20%280%2C%200%2C%20150%2C%20150%29%3B%0A%09%09%09ctx.%20translate%20%2861%2C%2061%29%3B%0A%09%09%09ctx.%20scale%20%280.4%2C%200.4%29%3B%0A%09%09%09ctx.%20rotate%20%28-Math.%20PI%20/%202%29%3B%0A%09%09%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%09%09%09ctx.%20fillStyle%20%3D%20%22white%22%3B%0A%09%09%09ctx.%20lineWidth%20%3D%2012%3B%0A%09%09%09ctx.%20lineCap%20%3D%20%22round%22%3B%0A%09%09%09ctx.%20save%20%28%29%3B%0A%09%09%09ctx.%20beginPath%20%28%29%3B%0A%09%09%09for%20%28i%20%3D%200%3B%20i%20%3C%2012%3B%20i++%29%0A%09%09%09%7B%0A%09%09%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%206%29%3B%0A%09%09%09%20%20%20%20ctx.%20moveTo%20%28100%2C%200%29%3B%0A%09%09%09%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%09%09%09%7D%0A%09%09%09ctx.%20stroke%20%28%29%3B%0A%09%09%09ctx.%20restore%20%28%29%3B%0A%09%09%09ctx.%20save%20%28%29%3B%0A%09%09%09ctx.%20lineWidth%20%3D%205%3B%0A%09%09%09ctx.%20beginPath%20%28%29%3B%0A%09%09%09for%20%28i%20%3D%200%3B%20i%20%3C%2060%3B%20i++%29%0A%09%09%09%7B%0A%09%09%09%20%20%20%20if%20%28i%20%25%205%20%21%3D%200%29%0A%09%09%09%20%20%20%20%7B%0A%09%09%09%20%20%20%20%20%20%20%20ctx.%20moveTo%20%28117%2C%200%29%3B%0A%09%09%09%20%20%20%20%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%09%09%09%20%20%20%20%7D%0A%09%09%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%2030%29%3B%0A%09%09%09%7D%0A%09%09%09ctx.%20stroke%20%28%29%3B%0A%09%09%09ctx.%20restore%20%28%29%3B%0A%09%09%09var%20sec%20%3D%20now.%20getSeconds%20%28%29%3B%0A%09%09%09var%20min%20%3D%20now.%20getMinutes%20%28%29%3B%0A%09%09%09var%20hr%20%20%3D%20now.%20getHours%20%28%29%3B%0A%09%09%09canvas.%20setAttribute%20%28%22title%22%2C%20%5Bhr%2C%20min%2C%20sec%5D.%20join%20%28%22%20%3A%20%22%29%29%3B%0A%09%09%09hr%20%3D%20hr%20%3E%3D%2012%3F%20hr%20-%2012%3A%20hr%3B%0A%09%09%09ctx.%20fillStyle%20%3D%20%22black%22%3B%0A%09%09%09ctx.%20save%20%28%29%3B%0A%09%09%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%09%09%09ctx.%20rotate%20%28hr%20*%20%28Math.%20PI%20/%206%29%20+%20%28Math.%20PI%20/%20360%29%20*%20min%20+%20%28Math.%20PI%20/%2021600%29%20*%20sec%29%0A%09%09%09ctx.%20lineWidth%20%3D%2014%3B%0A%09%09%09ctx.%20beginPath%20%28%29%3B%0A%09%09%09ctx.%20moveTo%20%28-20%2C%200%29%3B%0A%09%09%09ctx.%20lineTo%20%2880%2C%200%29%3B%0A%09%09%09ctx.%20stroke%20%28%29%3B%0A%09%09%09ctx.%20restore%20%28%29%3B%0A%09%09%09ctx.%20save%28%29%3B%0A%09%09%09ctx.%20rotate%20%28%28Math.%20PI%20/%2030%29%20*%20min%20+%20%28Math.%20PI%20/%201800%29%20*%20sec%29%0A%09%09%09ctx.%20lineWidth%20%3D%2010%3B%0A%09%09%09ctx.%20beginPath%20%28%29%3B%0A%09%09%09ctx.%20moveTo%20%28-28%2C%200%29%3B%0A%09%09%09ctx.%20lineTo%20%28112%2C%200%29%3B%0A%09%09%09ctx.%20stroke%20%28%29%3B%0A%09%09%09ctx.%20restore%20%28%29%3B%0A%09%09%09ctx.%20save%28%29%3B%0A%09%09%09ctx.%20rotate%20%28sec%20*%20Math.%20PI%20/%2030%29%3B%0A%09%09%09ctx.%20strokeStyle%20%3D%20%22%23D40000%22%3B%0A%09%09%09ctx.%20fillStyle%20%3D%20%22%23D40000%22%3B%0A%09%09%09ctx.%20lineWidth%20%3D%206%3B%0A%09%09%09ctx.%20beginPath%20%28%29%3B%0A%09%09%09ctx.%20moveTo%20%28-30%2C%200%29%3B%0A%09%09%09ctx.%20lineTo%20%2893%2C%200%29%3B%0A%09%09%09ctx.%20stroke%20%28%29%3B%0A%09%09%09ctx.%20fillStyle%20%3D%20%22%23555%22%3B%0A%09%09%09ctx.%20arc%280%2C%200%2C%203%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%09%09%09ctx.%20fill%20%28%29%3B%0A%09%09%09ctx.%20restore%20%28%29%3B%0A%09%09%09ctx.%20beginPath%20%28%29%3B%0A%09%09%09ctx.%20lineWidth%20%3D%2014%3B%0A%09%09%09ctx.%20strokeStyle%20%3D%20%27%23325FA2%27%3B%0A%09%09%09ctx.%20arc%280%2C%200%2C%20142%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%09%09%09ctx.%20stroke%20%28%29%3B%0A%09%09%09ctx.%20restore%20%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20clock%20%28%29%3B%0A%09%20%20%20%20%20%20%20%20setInterval%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20function%20%28%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clock%20%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%201000%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%202000%0A%09%29%3B%0A%7D

второй вариант ("заводятся" только после открытия окна настройки панелей инструментов):

Выделить код

Код:

custombutton://%u0410%u043D%u0430%u043B%u043E%u0433%u043E%u0432%u044B%u0435%20%u0447%u0430%u0441%u044B3%5D%5B%5D%5B//%20based%20on%20canvas%20tutorial%20example%20code%0A//%20%28http%3A//developer.mozilla.org/en/docs/Canvas_tutorial%3ABasic_animations%23An_animation_example_2%29%5D%5Bthis.%20clock%20%3D%20function%20%28%29%0A%7B%0A%09var%20now%20%3D%20new%20Date%20%28%29%3B%0A%09var%20canvas%20%3D%20this.%20getElementsByTagNameNS%20%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22canvas%22%29%20%5B0%5D%3B%0A%09if%20%28%21canvas%29%0A%09%7B%0A%09%09var%20canvas%20%3D%20document.%20createElementNS%20%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22canvas%22%29%3B%0A%09%09canvas.%20setAttribute%20%28%22width%22%2C%20%2224%22%29%3B%0A%09%09canvas.%20setAttribute%20%28%22height%22%2C%20%2224%22%29%3B%0A%09%09canvas.%20setAttribute%20%28%22style%22%2C%20%22min-width%3A24px%3Bmin-height%3A24px%3Bheight%3A24px%3Bwidth%3A24px%3Bmax-width%3A24px%3Bmax-height%3A24px%3B%22%29%3B%0A%09%09this.%20image%20%3D%20%22data%3A%22%3B%0A%09%09this.%20disabled%20%3D%20true%3B%0A%09%09canvas%20%3D%20this.%20appendChild%20%28canvas%29%3B%0A%09%09var%20ctx%20%3D%20canvas.%20getContext%28%222d%22%29%3B%0A%09%20%20%20%20%20%20%20%20ctx.%20scale%20%2824%20/%20122%2C%2024%20/%20122%29%3B%0A%09%7D%0A%09var%20ctx%20%3D%20canvas.%20getContext%28%222d%22%29%3B%0A%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20clearRect%20%280%2C%200%2C%20150%2C%20150%29%3B%0A%20%20%20%20%09ctx.%20translate%20%2861%2C%2061%29%3B%0A%20%20%20%20%09ctx.%20scale%20%280.4%2C%200.4%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28-Math.%20PI%20/%202%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22white%22%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2012%3B%0A%20%20%20%20%09ctx.%20lineCap%20%3D%20%22round%22%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%2012%3B%20i++%29%0A%20%20%20%20%09%7B%0A%20%20%20%20%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%206%29%3B%0A%20%20%20%20%09%20%20%20%20ctx.%20moveTo%20%28100%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%205%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%2060%3B%20i++%29%0A%20%20%20%20%09%7B%0A%20%20%20%20%09%20%20%20%20if%20%28i%20%25%205%20%21%3D%200%29%0A%20%20%20%20%09%20%20%20%20%7B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20moveTo%20%28117%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%7D%0A%20%20%20%20%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09var%20sec%20%3D%20now.%20getSeconds%20%28%29%3B%0A%20%20%20%20%09var%20min%20%3D%20now.%20getMinutes%20%28%29%3B%0A%20%20%20%20%09var%20hr%20%20%3D%20now.%20getHours%20%28%29%3B%0A%20%20%20%20%09this.%20tooltipText%20%3D%20%5Bhr%2C%20min%20%3E%209%3F%20min%3A%20%220%22%20+%20min%2C%20sec%20%3E%209%3F%20sec%3A%20%220%22%20+%20sec%5D.%20join%20%28%22%20%3A%20%22%29%3B%0A%20%20%20%20%09hr%20%3D%20hr%20%3E%3D%2012%3F%20hr%20-%2012%3A%20hr%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20rotate%20%28hr%20*%20%28Math.%20PI%20/%206%29%20+%20%28Math.%20PI%20/%20360%29%20*%20min%20+%20%28Math.%20PI%20/%2021600%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-20%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2880%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28%28Math.%20PI%20/%2030%29%20*%20min%20+%20%28Math.%20PI%20/%201800%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2010%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-28%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%28112%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28sec%20*%20Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%206%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-30%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2893%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23555%22%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%203%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20fill%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%27%23325FA2%27%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%20142%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%09setTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%201000%29%3B%0A%7D%0AsetTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%202000%29%3B

Anton
Предупреждать надо о невидимости кода (или это только у меня). Хорошо кнопка преобразования custombuttons есть...

Infant пишет:

Anton
Предупреждать надо о невидимости кода (или это только у меня). Хорошо кнопка преобразования custombuttons есть...

Infant

О чём речь ?

В последних кнопках в поле код я текста не вижу, но он выделяется. В остальных — вижу. Видимо что-то в коде кнопки так воспринимается.
Если скопировать и вставить, а потом удалять по одному символу с начала строки, то начиная с:
3B%0A%20%20%20%20%09%20%20%20%20ctx.%20moveTo%20%28100%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%205%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%2060%3B%20i++%29%0A%20%20%20%20%09%7B%0A%20%20%20%20%09%20%20%20%20if%20%28i%20%25%205%20%21%3D%200%29%0A%20%20%20%20%09%20%20%20%20%7B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20moveTo%20%28117%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%7D%0A%20%20%20%20%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09var%20sec%20%3D%20now.%20getSeconds%20%28%29%3B%0A%20%20%20%20%09var%20min%20%3D%20now.%20getMinutes%20%28%29%3B%0A%20%20%20%20%09var%20hr%20%20%3D%20now.%20getHours%20%28%29%3B%0A%20%20%20%20%09this.%20tooltipText%20%3D%20%5Bhr%2C%20min%20%3E%209%3F%20min%3A%20%220%22%20+%20min%2C%20sec%20%3E%209%3F%20sec%3A%20%220%22%20+%20sec%5D.%20join%20%28%22%20%3A%20%22%29%3B%0A%20%20%20%20%09hr%20%3D%20hr%20%3E%3D%2012%3F%20hr%20-%2012%3A%20hr%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20rotate%20%28hr%20*%20%28Math.%20PI%20/%206%29%20+%20%28Math.%20PI%20/%20360%29%20*%20min%20+%20%28Math.%20PI%20/%2021600%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-20%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2880%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28%28Math.%20PI%20/%2030%29%20*%20min%20+%20%28Math.%20PI%20/%201800%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2010%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-28%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%28112%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28sec%20*%20Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%206%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-30%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2893%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23555%22%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%203%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20fill%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%27%23325FA2%27%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%20142%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%09setTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%201000%29%3B%0A%7D%0AsetTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%202000%29%3B
всё становится видным.

Infant пишет:

В последних кнопках в поле код я текста не вижу, но он выделяется. В остальных — вижу. Видимо что-то в коде кнопки так воспринимается.
Если скопировать и вставить, а потом удалять по одному символу с начала строки, то начиная с:
3B%0A%20%20%20%20%09%20%20%20%20ctx.%20moveTo%20%28100%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%205%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%2060%3B%20i++%29%0A%20%20%20%20%09%7B%0A%20%20%20%20%09%20%20%20%20if%20%28i%20%25%205%20%21%3D%200%29%0A%20%20%20%20%09%20%20%20%20%7B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20moveTo%20%28117%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%7D%0A%20%20%20%20%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09var%20sec%20%3D%20now.%20getSeconds%20%28%29%3B%0A%20%20%20%20%09var%20min%20%3D%20now.%20getMinutes%20%28%29%3B%0A%20%20%20%20%09var%20hr%20%20%3D%20now.%20getHours%20%28%29%3B%0A%20%20%20%20%09this.%20tooltipText%20%3D%20%5Bhr%2C%20min%20%3E%209%3F%20min%3A%20%220%22%20+%20min%2C%20sec%20%3E%209%3F%20sec%3A%20%220%22%20+%20sec%5D.%20join%20%28%22%20%3A%20%22%29%3B%0A%20%20%20%20%09hr%20%3D%20hr%20%3E%3D%2012%3F%20hr%20-%2012%3A%20hr%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20rotate%20%28hr%20*%20%28Math.%20PI%20/%206%29%20+%20%28Math.%20PI%20/%20360%29%20*%20min%20+%20%28Math.%20PI%20/%2021600%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-20%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2880%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28%28Math.%20PI%20/%2030%29%20*%20min%20+%20%28Math.%20PI%20/%201800%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2010%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-28%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%28112%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28sec%20*%20Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%206%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-30%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2893%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23555%22%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%203%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20fill%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%27%23325FA2%27%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%20142%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%09setTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%201000%29%3B%0A%7D%0AsetTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%202000%29%3B
всё становится видным.

Непонятно, что имеется в виду... Блоки "Код:" я оформлял как обычно, у меня отображаются нормально. Адресная строка ? Да, бывает, что в textbox'ах большой текст становится невидимым (впрочем, у меня код последних кнопок в адресной строке также виден).

http://people.mozilla.ru/infant/Images/NoCode.gif

Infant
Не, я тут не при чём. Это у тебя со стилями какой-то непорядок (userContent.css, greasemonkey или расширения).

А это:

Если скопировать и вставить, а потом удалять по одному символу с начала строки, то начиная с:...

где ? В локальном html ?

Копирую в поле создания сообщения и тоже не вижу текст. Вставляю в редактор FAR'а — вижу. Самому стало интересно, начал Ctrl+Del удалять символы и ... бац появилось.

Infant пишет:

Копирую в поле создания сообщения и тоже не вижу текст. Вставляю в редактор FAR'а — вижу. Самому стало интересно, начал Ctrl+Del удалять символы и ... бац появилось.

Бывает, про textbox'ы я уже говорил (у меня обсуждаемые коды видно и в полях создания сообщений : ) ).

скажите как сделать кнопку которая выводила бы смайл:P в  TextBox а то у мени ничего неполучаеться :whiteflag:

xXx пишет:

скажите как сделать кнопку которая выводила бы смайл:P в  TextBox а то у мени ничего неполучаеться :whiteflag:

Выделить код

Код:

custombutton://Smiley%3A%20%3A%29%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADYUExURWJiYv7xQ0ZGRioqKiQaAP/te//gAPeiAP7uZP7lAP/YAPz8Ef/UAP31Kv+zAP7qADcuFf+6APOgAP3yAP/dAP33AP/MAP/VZemdAP3yAf+sAP/eQsaHAP7sEf30Ef/gY//DIP/VVtaeLkM9If7MYv31Jv/jVv/AEf7tKt6jMeCpAOXNJ/GfAP/BAPz5AOfQOf7jGfikAP/dAf/he/33Af7kEf/FKv/aEf/IRv/FPv7lAv7xYv/WCv/jDvixKuSkGfW5Rf7qAuOgDvmqEf/cKuKbAAAAAP///7GsR/gAAABIdFJOU///////////////////////////////////////////////////////////////////////////////////////////////AJzs8mAAAACwSURBVHjaVM9FFsMwDARQBxpmhqbMzMytlfvfqHbSTedpob/SCOU0QFNsiKqd9urNowWlYS5VSNbhEKhhLJ0RkhAKOy0gthiGYVky6eFh5QgWA13nODKf3e0OCK5ZTVXVWrbd998vYsHs+jPfNQWtIWJiT4aN65qyd4EJtSLIEMfP0wqSiDjnFU8o+hkO5un9UaApWjA1RFyFoh+2bdtIHMqyP78UnQjzv/5//30FGACrUSaRymhFqgAAAABJRU5ErkJggg%3D%3D%5D%5Bvar%20smiley%20%3D%20%22%3A%29%22%3B%0Avar%20ie%20%3D%20document.%20commandDispatcher.%20focusedElement%3B%0Avar%20ss%20%3D%20ie.%20selectionStart%3B%0Avar%20se%20%3D%20ie.%20selectionEnd%3B%0Avar%20st%20%3D%20ie.%20scrollTop%3B%0Avar%20sh%20%3D%20ie.%20scrollHeight%3B%0Aie.%20value%20%3D%20ie.%20value.%20substring%20%280%2C%20ss%29%20+%20smiley%20+%20ie.%20value.%20substring%20%28se%29%3B%0Aie.%20selectionStart%20%3D%20ie.%20selectionEnd%20%3D%20ss%20+%20smiley.%20length%3B%0Aie.%20scrollTop%20%3D%20st%20+%20ie.%20scrollHeight%20-%20sh%3B%5D%5B

Спасибо :dumb: :)

Доработал часы. Теперь нормально "заводятся".

Выделить код

Код:

custombutton://%u0410%u043D%u0430%u043B%u043E%u0433%u043E%u0432%u044B%u0435%20%u0447%u0430%u0441%u044B3%5D%5B%5D%5B//%20based%20on%20canvas%20tutorial%20example%20code%0A//%20%28http%3A//developer.mozilla.org/en/docs/Canvas_tutorial%3ABasic_animations%23An_animation_example_2%29%5D%5Bthis.%20clockWidth%20%3D%2024%3B%0Athis.%20clockHeight%20%3D%2024%3B%0Athis.%20htmlNS%20%3D%20%22http%3A//www.w3.org/1999/xhtml%22%3B%0Athis.%20xulNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0Athis.%20clock%20%3D%20function%20%28%29%0A%7B%0A%09var%20now%20%3D%20new%20Date%20%28%29%3B%0A%09var%20canvas%20%3D%20this.%20getElementsByTagNameNS%20%28this.%20htmlNS%2C%20%22canvas%22%29%20%5B0%5D%3B%0A%09if%20%28%21canvas%29%0A%09%7B%0A%09%09var%20canvas%20%3D%20document.%20createElementNS%20%28this.%20htmlNS%2C%20%22canvas%22%29%3B%0A%09%09canvas.%20setAttribute%20%28%22width%22%2C%20this.%20clockWidth%29%3B%0A%09%09canvas.%20setAttribute%20%28%22height%22%2C%20this.%20clockHeight%29%3B%0A%09%09canvas.%20setAttribute%0A%09%09%28%0A%09%09%09%22style%22%2C%0A%09%09%09%22min-width%3A%22%20+%20this.%20clockWidth%20+%0A%09%09%09%22px%3Bwidth%3A%22%20+%20this.%20clockWidth%20+%0A%09%09%09%22px%3Bmax-width%3A%22%20+%20this.%20clockWidth%20+%0A%09%09%09%22px%3Bmin-height%3A%22%20+%20this.%20clockHeight%20+%0A%09%09%09%22px%3Bheight%3A%22%20+%20this.%20clockHeight%20+%0A%09%09%09%22px%3Bmax-height%3A%22%20+%20this.%20clockHeight%0A%09%09%29%3B%0A%09%09this.%20image%20%3D%20%22data%3A%22%3B%0A%09%09this.%20disabled%20%3D%20true%3B%0A%09%09this.%20setAttribute%20%28%22class%22%2C%20%22%22%29%3B%0A%09%09canvas%20%3D%20this.%20appendChild%20%28canvas%29%3B%0A%09%09var%20ctx%20%3D%20canvas.%20getContext%28%222d%22%29%3B%0A%09%20%20%20%20%20%20%20%20ctx.%20scale%20%28this.%20clockWidth%20/%20122%2C%20this.%20clockHeight%20/%20122%29%3B%0A%09%09var%20pn%20%3D%20this.%20parentNode%3B%0A%09%09var%20ns%20%3D%20this.%20nextSibling%3B%0A%09%09var%20button%20%3D%20pn.%20removeChild%20%28this%29%3B%0A%09%09if%20%28ns%29%0A%09%09%09pn.%20insertBefore%20%28button%2C%20ns%29%3B%0A%09%09else%0A%09%09%09pn.%20appendChild%20%28button%29%3B%0A%09%7D%0A%09var%20ctx%20%3D%20canvas.%20getContext%28%222d%22%29%3B%0A%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20clearRect%20%280%2C%200%2C%20150%2C%20150%29%3B%0A%20%20%20%20%09ctx.%20translate%20%2861%2C%2061%29%3B%0A%20%20%20%20%09ctx.%20scale%20%280.4%2C%200.4%29%3B%0A%09ctx.%20fillStyle%20%3D%20%22white%22%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%20142%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20fill%20%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28-Math.%20PI%20/%202%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22white%22%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2012%3B%0A%20%20%20%20%09ctx.%20lineCap%20%3D%20%22round%22%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%2012%3B%20i++%29%0A%20%20%20%20%09%7B%0A%20%20%20%20%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%206%29%3B%0A%20%20%20%20%09%20%20%20%20ctx.%20moveTo%20%28100%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%205%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%2060%3B%20i++%29%0A%20%20%20%20%09%7B%0A%20%20%20%20%09%20%20%20%20if%20%28i%20%25%205%20%21%3D%200%29%0A%20%20%20%20%09%20%20%20%20%7B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20moveTo%20%28117%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%20%20%20%20ctx.%20lineTo%20%28120%2C%200%29%3B%0A%20%20%20%20%09%20%20%20%20%7D%0A%20%20%20%20%09%20%20%20%20ctx.%20rotate%20%28Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09%7D%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09var%20sec%20%3D%20now.%20getSeconds%20%28%29%3B%0A%20%20%20%20%09var%20min%20%3D%20now.%20getMinutes%20%28%29%3B%0A%20%20%20%20%09var%20hr%20%20%3D%20now.%20getHours%20%28%29%3B%0A%20%20%20%20%09this.%20tooltipText%20%3D%20%5Bhr%2C%20min%20%3E%209%3F%20min%3A%20%220%22%20+%20min%2C%20sec%20%3E%209%3F%20sec%3A%20%220%22%20+%20sec%5D.%20join%20%28%22%20%3A%20%22%29%3B%0A%20%20%20%20%09hr%20%3D%20hr%20%3E%3D%2012%3F%20hr%20-%2012%3A%20hr%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20save%20%28%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22black%22%3B%0A%20%20%20%20%09ctx.%20rotate%20%28hr%20*%20%28Math.%20PI%20/%206%29%20+%20%28Math.%20PI%20/%20360%29%20*%20min%20+%20%28Math.%20PI%20/%2021600%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-20%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2880%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28%28Math.%20PI%20/%2030%29%20*%20min%20+%20%28Math.%20PI%20/%201800%29%20*%20sec%29%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2010%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-28%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%28112%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20save%28%29%3B%0A%20%20%20%20%09ctx.%20rotate%20%28sec%20*%20Math.%20PI%20/%2030%29%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23D40000%22%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%206%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20moveTo%20%28-30%2C%200%29%3B%0A%20%20%20%20%09ctx.%20lineTo%20%2893%2C%200%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20fillStyle%20%3D%20%22%23555%22%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%203%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20fill%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%20%20%20%20%09ctx.%20beginPath%20%28%29%3B%0A%20%20%20%20%09ctx.%20lineWidth%20%3D%2014%3B%0A%20%20%20%20%09ctx.%20strokeStyle%20%3D%20%27%23325FA2%27%3B%0A%20%20%20%20%09ctx.%20arc%280%2C%200%2C%20142%2C%200%2C%20Math.%20PI%20*%202%2C%20true%29%3B%0A%20%20%20%20%09ctx.%20stroke%20%28%29%3B%0A%20%20%20%20%09ctx.%20restore%20%28%29%3B%0A%09setTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%201000%29%3B%0A%7D%0AsetTimeout%20%28this.%20clock.%20bind%20%28this%29%2C%202000%29%3B

http://forum.mozilla.ru/uploaded/textbug.png

пачка новых кнопок. суть в том, что левый клик открывает в сайдбаре, а средний - в табе, причем если в одном из табов это уже открыто, то сей таб становится активным. повторное нажатие закрывает соответственно сайдбар и таб.
тестировал на FF2.0a3, так что насчёт работоспособности в более ранних версиях не ручаюсь.

Bookmark. в сайдбаре окрывает обычную панель закладок, а в табе - менеджер закладок.

Выделить код

Код:

custombutton://Bookmarks%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAACb0lEQVR4nGWSS29NYRSGn73P7jmnpz0uLY00DWnqVqQqISpCWgbiFgMTBsKIhl9ADMzFX/ArDIgBAwYiESJpxSUqLaE9PZfa+1z2931rGex9eorBylrfYD1533d9HuAB2bT7aXn/9PYMIEAIxKqq3sXr97cBk8A4MLmpb9346PZBujI+xWKBUnmF5WrIh88/qsDbtKrAc2AuKOSyc3t2DjG6Y4iDY8P0byzieT4vX85y7Ng+Hj76yuOPJQb2jm+Ym1+anPtUmmyGIdOnsnybX8KP6i1G9h/m9NQBBjb1EQQ5MpkssRUazmf6wSznL+9j4vQuLt04ykIpy/SZjYxNHEe7evER5c2nCqpdeF4Gz/cQD0ShYRSArkKeF19a/Ko4AO7cPJfsiCQANQbnIJNJUlJNACLJu1oXFkNLtZEAnAM1BkQIVBVJAU7BCVhJZrsKsFjjqEbJIZwFMQZ1QoAoahNA7DoA6/4GmNhSWqx3FFiDihIgrCpo2ES2FTAOYpsCwpioVkfUrALEGHBCwBoLrTjxbgVaDqIUUItiwlpIy9O/ACpCoGssRKZjoW5hJU4Ay5U6rWaTZpqqSGKBdgZiDCLwu9UJsmESIED4u8nyTJnCUP5/BWst1GzHQmQgTBX8el9hdHOOd7MrCUA6V/A1/QciUGuCGuhVGO7JMuLF9OQzXJ3q5+6tQ1w5txX81EL7H7SvoAojccjiUpmPCz958uQZr19t5dqRdZzc1k1Prcbts7s5MVxE2zuieBcu3NP1G/roLhRQ1RXnzGwYVZ5+X/g8EwQBWwZHJrpzPXt8P1MMguxhVSWfzxGGEeXSIn8AD3imeeFtcw8AAAAASUVORK5CYII%3D%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//browser/content/bookmarks/bookmarksManager.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20toggleSidebar%28%27viewBookmarksSidebar%27%29%3B%20break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

History. и там и там - обычную историю. в табе открываеть сие смысла мало, но всё же...

Выделить код

Код:

custombutton://History%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADEklEQVR4Xm2TXWwUVRiGn5mdbfenW4Ziba0pWSNLAokaJSrFwCJobEg0I3pDDNoVEmNIFEkAb7hqg14gmKbtjSlrmjSERO2GaAwlBRo1oIH4c7EqVLopNWgpy0qzdGdn5nzObPbCEt/kOZOTfO97zpnvHI17tOqNM6a4ylKOk1aOl1RVB+W4Bc92JpXr5ua+y5T4j5YEpDITlnheVplR88nH20i1x3A9IT9zh0sXZ6j+OltSVTdT/PntHHXp1LV619msFjHGtryy1jzd10X29RRNxQWMP/5kILOWr/pfYMfB50y9qXGsOXU0uyTAN1tao9Hz7p519HY/SEskRMWD7g0dvNi9Gk8gGtLY9XyS/f2vEkpEemIdhy0ALfXmhImS6a3+yvu3PEBYB78WDVACrkBVwYG3MjTEE+zu7Wd0fIqT+04Ex3lIF09ZsY5mc8f6tlqh7dWgEhDM6+Yzp75g3dZtzNuKzkc7aU61m8r1LF1cL51c1ULE0ANDjcX6Nwg56JvHffPeoRN4azZxbrbM9D82K59dE3QnrQetun9FlNGx37l2/Q53PVj06TvwHkfeyZAb/ZSNO/fwl61hCzRUXa6f+40V7cuCgKTuD2gC8zcXmC97zNtwy2e6UCCdTgNweugDhndvI1Itk9CFcLlM1NBABCO4JOVima7tT2CENEq2EAkJe48Nk79wnuMXr5BobafiCRUxiCdCbN65ngufXwYo+AHO5JXvCz1dz6ykMazTZPiENSKty0la2xEBRwl3XWHBUYSqClc08l/+BDAZ/IPcTP5G6e+rc8QMjYRvbm7QWdagYYYJ8OdagB+s+zU6s5cLFC5Nl4CccePsa6XWp4czJwe+GXts4GVisQjxEDWKJRvXcWm5Lw5oVBXcKlYYef8zgAwcLVEXyx8ZzKY2H5fhiRmZKovM2SKHs7/IoSPfyuyiSH5BZPDUVWnr7BXYd4z/U+Lhj6x454e3N700IkMjP8r4+Wvy9cSUfPzJD/LUxsHAeNvHWvoa71G0ra92w1TVSfskgzaLkgIwCeSWbBv4F2vVgQlhKqMWAAAAAElFTkSuQmCC%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//browser/content/history/history-panel.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20toggleSidebar%28%27viewHistorySidebar%27%29%3B%20break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

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

Выделить код

Код:

custombutton://Downloads%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACuklEQVR4XnWSS2hUVxiAv/OaezN3kpkmjVq1JV1FqNiF1D6gtAvbBIPo0oVdlOKuoO2iFlyUtjtxjIK4qMWFaHBREFyoFFoslvqor4yalqjEGtpOm8lMOnPncSe55/TCDEgQP/jgwOF85/xwBMEhwIETO3PZ/iPZbBDYBJ6AEInSk+X5v8LaXP4zmDkGPgACPQ6xRfr+5a/Gt7+xdWQl1aZFiOWBjKc4cXqO/L5dj7DfD0OqDaAxEnBIT6m1QwEvrFak62pZACCXgTUvpkH7Ae0oDVE3kFKgJfjaFkPHw3+hVuNJwIGQMGihGgHCWcDSRfOcD2EbehS1WDAfQtjozg14prO+fR9uTsdgFER0EBJNv98J+sY1liSlGjSaoBWoxKmi45e7MfcKjuKjGHwHoWjRtx6waBwgQ6xdisNIMh9CFEFzCW79DT/fh4UkQksgAgmiFbN6m2bFWJuZo2jlB2dTemANzg3PtcBUIGzC4wX4owzKCIJBTVwXxNay+PxbgyjvKt6qFkIdEOb14+FroyPBy0MZlJ8mRtNoQ72V2IZKHUqJYc0Rl5rECxFxS+PCSzD16Tlly4XHbblqdP2bm8zwSxoDeAp0IoBzYC1EVmAxQA+2egOmv5ilMrlPAJDZuKVvwwendnz8Ye7VdX38U+7cXE6cq3VtwHwZoqkL2Ot7f6Nc2AEUJNJAyjtXnZx4fyK/v3j97n+sXQn9vRB4HXsDUALav3+HvbL7RnJ4DCgASACEAi/1azh5/J2TB76euXitxEAOsmnozXT+XPHyBPFPe36kOj0KzNBF0gVhwKjpxTvHNp0++OXt8xdn6cnAfHmRO2ePuOiHT87Q/HMMKLEMaWDg7cR3IT0E3gAEQxmx7qNLr+ydctnN+RjZ+y0geRo0y+iOY0zoZs+/d++bW4epPqhga5/zDP4HPDMe0LQJb6wAAAAASUVORK5CYII%3D%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//mozapps/content/downloads/downloads.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20if%20%28document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%29%20//%20close%20sidebar%0A%09%09%09%09toggleSidebar%28%29%3B%0A%09%09%09else%20%20//%20open%20in%20sidebar%0A%09%09%09%09openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%20%0A%09%09%09break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

Add-ons. и там и там - менеджер расширений.

Выделить код

Код:

custombutton://Add-ons%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABUklEQVR4XqVTv0vDQBR+SS4m9tIOsQiKXR1EXMRVruKiIrgo6OIkmawKVlr8AxwUQbciOHbSQVyK+OMmQUdRRAouFXFxSMFBhJ7JQQ5r7qrQB4F399735ct7XzTGGLQTSHbZv5Peq1bfh37esRLL/psgBF9ulUl0Hisu0JYKNE+7ihV0C05rBzCdWQLRI1EjFFxvn5DfJBZKBERI1F7YI8xtFKj0Ewy9A85ey80EBoaLtyNxxq6tngHSTZjsW+Q5B0nCNjvVBMNr43RkcABmp0aJjRw5AUqIeQS9d7fLDyuRD0Rhf3NdSZDswiKfz+VpOEwUf4sTPFhK8OUDj1TaUfqAg1UKUm7yTx9wcLfbE2v063WwwQHizcjXWCs9811/NHxYPczTys15E0Fl95gEBGojGWDC0+c9zwOwaIoUhqayAKvX2OtlKLSIbG5CWm/7d/4GwUhlMxyCjq8AAAAASUVORK5CYII%3D%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//mozapps/content/extensions/extensions.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20if%20%28document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%29%20//%20close%20sidebar%0A%09%09%09%09toggleSidebar%28%29%3B%0A%09%09%09else%20%20//%20open%20in%20sidebar%0A%09%09%09%09openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%20%0A%09%09%09break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

View Source. соответственно просмотр исходников в сайдбаре и табе. при всплытии таба перегружает его автоматом.

Выделить код

Код:

custombutton://View%20Source%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABxklEQVR4XqVSS47aUBCs5w9GKOITAs4soxwhF8gtuAYcJIJjcIAsuEWySTRJVtHAxISR+NmYZ9nuuFojC8mbkVJS082jX1V3Pcx8Phf8Bzx+TKdTfP6RwWYFvj5YfFlbxJccSVogZtgSRQlABEQpBtGn91gsFkqg+BCWCFoBPr7zkFwDuJ6PsuTFssoCazMYY2Acg+v1ihpcgVg//Nb8uFlL9LgWkbKKoopcbBrLz/tvcomP8vT3j/y6/y4E79YTjMM7zf3Ba7RaLVUlOHVeGrwZ38HxAhg3x3D89tYDBXzfZ9LxjscjRqMRoiiC53kYDAZwHAd5niMIAuYGQY0sy9But1EUhXrQ6XS0fobWt3AA1Moign6/T1U1LAxDTqbnSZKQnDV7mwS73U7zdrvFfr+nujYT1lpsNhuWJGJv8xXiOJY0TeV0OknVxJpZz8/ns1S+SKXM3xn1K3CCWpmqh8OBNY1S1YqAK3EVTsIeRtNEus4mRq/Xo+vqR7fbrddYrVZ4RpOgGlPffzgccneaSCXuTBL9TkwmEyb9G89ms1f1ClRmE8N1XV2h8oFPWp8RN5d9eqomvhTL5VKNa6xAxheCygY3+AdSq3K+SO25KQAAAABJRU5ErkJggg%3D%3D%5D%5B%5D%5Bthis.onClick%3D%20function%28e%29%0A%7B%0A%09var%20current%3D%20content.document.location.href%3B%0A%09var%20url%3D%20%27view-source%3A%27%20+%20current%3B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20if%20%28document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%29%20//%20close%20sidebar%0A%09%09%09%09toggleSidebar%28%29%3B%0A%09%09%09else%20%20//%20open%20in%20sidebar%0A%09%09%09%09openWebPanel%28current%2C%20url%29%3B%20%0A%09%09%09break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20i%3D%20t.length%3B%20%0A%09%09%09while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28url%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Durl%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%0A%09%09%09%09%09BrowserReload%28%29%3B%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

Error Console. и там и там - консоль ошибок.

Выделить код

Код:

custombutton://Error%20Console%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAChklEQVR4Xn1TTUtbQRQ9L3lqIvnAWFNjQPxauOgPEPEn2J3iRkqzUASLRUSXLl1IQRdCu3VTN9L8ARGJkgrdCLbRmC4kIdqo0aZp8qJJnN4z9BWhtgcOj5m5d+45d+4zRkdHX87Ozs47HA7jXoD/QCml2dTUZB4fH+fm5uZeGQcHB9/6+vqenp2dwe1ywWmacDqdjyYTtVoNxWIR/f39mJ6efmc+aW11xeNx5C0LPo8HJ4eH+CkBhmHgMdTrdbDY6uoqmpubvaZE6oqpoyO8mJpCMBzG2+Vl3Eug4XD8dRFd+v1+lMtlqlGmeAfRFgohurGB+M4OMqenOtGkHaFtgXt3d3fsAUqlEgizoaEBt7e3mJmYgFsOgsEgno+MoLWtDV+TSezv7jKZ1TQvLi7Q0dEBGybl8+ZatYq6XFa2LMS2t+GShloikxXpm0UsOSMZzz2C+rXUlpYWBAIBeL1eWCKvWCiwD/TLPU2fzwePNLqxsVGrIRwCkPTldrsZYF/GL5OYzH2e6zja/qOAcii3p6cHXV1d6O7uJvW6t7dXf+0z+zwcDrMvfD3DzOfzlcHBQf/W1hZl0TP9sgKfzG4e1/Ru72sblUqlagwPD89EIpHXnJFCoVAKhUKdMpmBqjSVZAKrXV9f15PJZFr2fsgA+WRtra2tzUNgCL3C8OTk5JtYLPY9lUqpdDqtMpmM/kqikpFX0Wj0ZGhoKALAL/TgIcbHxxfUb1xdXanz83OVy+VUNptViURCrwm5vCjNfQbCfkZib29vf3NzM3t5eclOa9pP3N7ezrmHqMH6+nri5uamgH+gc2BgYEGsfFhaWvokP8yXlZWVz4uLix/HxsbeS2+mOPV4gF+2zl1OzFwo7QAAAABJRU5ErkJggg%3D%3D%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//global/content/console.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20if%20%28document.getElementById%28%27sidebar-box%27%29.getAttribute%28%27sidebarcommand%27%29%29%20//%20close%20sidebar%0A%09%09%09%09toggleSidebar%28%29%3B%0A%09%09%09else%20%20//%20open%20in%20sidebar%0A%09%09%09%09openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%20%0A%09%09%09break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

Stylish. и там и там - менеджер стилей. в табе не нажимайте кнопку "ОК", а то браузер закроется ;-)

Выделить код

Код:

custombutton://Downloads%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gQPFTcXrGmnbAAAAo9JREFUOMuNkk1sjEEYx38z79hd+1rd3aq2WlrEqjrhIIREiYuPg5BGpDiQCCIO4uSECIKERBBE4uNAhAvRRdKLCAckNDTiQKhU6lDdt/vO7nbfGYftllUJz2Uyz8z85/c8z1/sOXgpszgVV/wjPn3tH5oyrXX+1va23t/SgjWnegr2P+Psucv9F652NgEQiYedZPNB+cWzUmtNNpvF93183yeXy42uWmu01nz42Mfundtq+np7nuJOjoVrWx6GJtQ8VYXAEY7j4HkeAFJKjDElPiEASCQSNNYnAaitrqpW1TPT0YmJ3ED3g0dq2AohhCCZTFY8Koe1FmvBjuxPXLgWmlTXPC/77W0KQClhbKFQEGWCskhZKAgMgTF43hA7D5xgUAsZVdlL3uc3vQAqpLCu6+K67pjOW2sxxlIMDPsPn+bdF4/pDTXmZdftveU7KuRYtNYMDAwgpUQIgZRyFL0YBBw6eZ70s/e0zGymrTURvOz69YkKOQJrLfF4HCnlSAlylODMxevc6upm1ozpbF41j9j4aAWlHC7mbTQaJZ/Po7XG930ynsdgJkNnOs2Nm7dJNTXQvizFru1bsdZWCvT98OWxOy8Ih8NEIhFC4TBBMUe68z5udDz7dnSwoW0O7evXl6j+6JMaEjF55O5zIt9fUetkePHkHp9eP2Hy3JW0LFxNXX0DaxcvxRk37q8WV8M4tKbquf/4CrO/3SEkoXYCNDY2srFjCyAIjCUIzAhBJYPKFy0Z6lixbhfx50NE3BhNizaxYOES+vu/Y0xpGsYETK1LjqlBSWBSrIqjHfOhY3nF4dT6mrHegAqrqiplMsM9DwePHtfdQgg5MsOSvy1CCClLeYQQQuZz+eLvAj8BP0QydNxNldoAAAAASUVORK5CYII%3D%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//stylish/content/stylish.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20stylishBrowserOverlay.openSidebar%28%29%3B%20break%3B%0A%09%09case%201%3A%20%0A%09%09%7B%0A%09%09%09var%20t%3D%20gBrowser.mTabs%3B%0A%09%09%09var%20current%3D%20content.document.location.href%3B%0A%09%09%09var%20i%3D%20t.length%3B%0A%09%09%09if%20%28current%3D%3Dthis.url2xul%29%20gBrowser.removeCurrentTab%28%29%3B%20%0A%09%09%09else%20while%20%28true%29%0A%09%09%09%7B%0A%09%09%09%09if%20%28--i%3C0%29%20%0A%09%09%09%09%7B%0A%09%09%09%09%09if%20%28current%3D%3D%27about%3Ablank%27%29%20//%20replace%20blank%20tab%0A%09%09%09%09%09%09loadURI%28this.url2xul%29%3B%0A%09%09%09%09%09else%20//%20add%20new%20tab%20%0A%09%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.addTab%28this.url2xul%29%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%09if%20%28t%5Bi%5D.linkedBrowser.currentURI.spec%3D%3Dthis.url2xul%29%20//%20popup%20loaded%0A%09%09%09%09%7B%0A%09%09%09%09%09gBrowser.selectedTab%3D%20gBrowser.tabContainer.childNodes%5Bi%5D%3B%20%0A%09%09%09%09%09break%3B%0A%09%09%09%09%7D%3B%0A%09%09%09%7D%3B%0A%09%09%7D%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

Open Location. по средней кнопке просто открывает новый таб, а по левой - сайдбар с диалогом для ввода урла. не забываем, что в это поле можно дрегендропить текст, ссылки, табы и тд.

Выделить код

Код:

custombutton://Open%20Location%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAB+ElEQVR4nK2TP2hTURSHv/teXmpTi0iUalHbLq0IdqirolBcHBTqUgWtdBWKAa2bCC7axclZUXAoglsXcbG6dLFoaONkkNBKmpjiS9/fe+9xSFt1iYV6pgOH38c5v3OOEhF2E86u1P8DkNlKzlydfpJauWCs099O4Dq27Dlqbv7lzE0ANj1wR8YK5WKpJHG0LnG0LlHYkCisSxTUJQxqEjTXJGiuyeJSUUbGCmXAFZHtDpxUS9/gQC+NHzXS1EesIdeVQ6wgWLQ2eF6WwWN5Ui19m+ObLQ+U1hqlHBxXWKrmcV0Xq2OMjtBJiE4Cmn4dBLTWAOovD4wxWLvBno4Oaqvr5Aa6mV/8TLURINayvyvDo9JDKrrCyr7fq98GADhODs+LuHz+EGkacer4YUzaGiGNQ0oLy7y+94zRG+MAWSDJDF8qyMmLt1oA18WaCJsGmCSl0/PQyjAxd5uF7x+x2jD7c7bV/CS+unIAdfTspJTfzAAu2viIibFWo43Fak0QRpx4eo4Hd+7ytvqODc8n53lM5acYnRhH9Z6+3vaWxWpWD76CzgSA4UI/nx6XW8UwS2bl/fOhdoBNn3qAbq4x4/fEQ3h84QXTkPgZoPwPAMA3oANL8ev9VYNlGfgAxGqn36iUygJHgL1AE6iISLJjwB8QBYiIJAC/AEheAlhU2OEsAAAAAElFTkSuQmCC%5D%5B%5D%5Bthis.url2xul%3D%20%27chrome%3A//local/content/open_location.xul%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20openWebPanel%28this.tooltipText%2C%20this.url2xul%29%3B%20break%3B%0A%09%09case%201%3A%20gBrowser.selectedTab%3D%20gBrowser.addTab%28%27about%3Ablank%27%29%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B

чтобы это заработало нужно в папке с установленой мозиллой в папке chrome создать файл local.manifest с таким содержимым:

Выделить код

Код:

content local local/

потом создать там же папку local и внутри нее файл open_location.xul с такими потрохами:

Выделить код

Код:

<?xml version="1.0"?> 
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE window SYSTEM "chrome://browser/locale/openLocation.dtd">
 
<window id="openLocation" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" onload="document.getElementById('url2open').focus()">
    <hbox align="center">
            <textbox id="url2open" 
            flex="1" 
            type="autocomplete" 
            completeselectedindex="true" 
            autocompletesearch="history" 
            enablehistory="true" 
            style="height:1.75em" />
        <button 
            label="open" 
            oncommand="document.location=document.getElementById('url2open').value;" />
    </hbox>
</window>

весьма простенько, но с поставленной задачей справляется на ура.

не подскажите, как реализовать такие же кнопки для, например, Page Info или DOM Inspector'a?

Не знаю почему, но и одна из этих кнопок у мну сайдбар открыть не ухитрилась... Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1a3) Gecko/20060619... Более того Bookmark и History у мну не открылись даже в обычной панели... Ж(
Может дело в MR Tech's Local Install??? А может и нет...

Оформил страничку со своими кнопочками: http://dark-demon.nm.ru/soft/custombuttons/
Zoolcar9 тоже: http://zoolcar9.lhukie.net/mozilla/custombuttons.html

Lain_13 какая у тебя версия FF?

Dark-Demon
Чего-то твоя страничка не открывается.

Оформил страничку со своими кнопочками: http://dark-demon.nm.ru/soft/custombuttons/

Запрашиваемая страница не найдена.

Dark-Demon пишет:

Lain_13 какая у тебя версия FF?

см. мой пост внимательно. Ж)
Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1a3) Gecko/20060619
1.8.1a3 - вот это как раз и есть 2.0а3, возможно ночная сборка, в оригинале Gecko/20060619 был, кажется, меньше. Если это так, то, возможно, кнопки у тебя правильные.

Они к расширениям к каким либо привязаны или все должны работать отдельно?

з.ы. Есть идея для всех, тут присутствующих. Надо создать плагин со списком возможных кнопок из которого их можно будет установить при условии наличия в системе КастомБаттонсов. Или прямо в баттонсы такую панельку вшить со страничкой. Много не займет, но если ее обновлять, то тем, кто поставит себе расширение, не понадобится лезть в инет за кнопочками... Они сразу там будут! (Хотя, конечно, самые новые версии кнопок будут тут...)
з.з.ы. Странички работают обе, но как же медленно у Золкара9 она грузиццо... Видимо хостинг... А твоя, ДД, на редкость криво в ФФ отображается... Ж) ты ее под что делал... я ее в 1.5 открывать пробовал только-что... кнопки перекошены, ссылки раздирает пополам и переносит (слево одна такая) и это *БЕЗ* МР Техс Переносчика ссылок...
з.з.з.ы. НАМ НУЖЕН ОБЩИЙ ФОРМАТ ОФОРМЛЕНИЯ!!! Не только ведь для себя делаете, не так ли? Для всех! Поэтому нужно придумать какой-то общий формат оформления странички с кнопками (как по мне так наилучший - слева кнопки в столбик, а справа от них комментарии и все это разбито по тематическим группам). И так же срочно встроить этот документ в расширение... или отдельным плагином (для желающих). Было б у мну время сейчас, занялсо бы набросками, а так сорри, что дал инициативу и ничего для этого, пока что, не сделал...
з.з.з.з.ы. Посмотрел код сайта твоего, ДД. ЖЖОШ! А в таблицу засунуть? Текст в один столбец а картинки рядышком в другой. Самое ж очевидное решение. А то они не по вертикали а в разнобой идут Ж(.

Lain_13

з.ы. Есть идея для всех, тут присутствующих. Надо создать плагин со списком возможных кнопок из которого их можно будет установить при условии наличия в системе КастомБаттонсов. Или прямо в баттонсы такую панельку вшить со страничкой. Много не займет, но если ее обновлять, то тем, кто поставит себе расширение, не понадобится лезть в инет за кнопочками... Они сразу там будут! (Хотя, конечно, самые новые версии кнопок будут тут...)

Идея хорошая, но вшивать в расширение - это каждый раз обновлять само расширение. Сделать-то легко отдельное.

см. мой пост внимательно.

версия ядра мне ни о чём не говорит. а оффициальная альфа датируется 20060526, которая у меня и стоит. думаю, дело в твоей ночнушке...

Запрашиваемая страница не найдена.

Сори :) не думал, что вы так быстро среагируете... теперь всё залито.

Они к расширениям к каким либо привязаны или все должны работать отдельно?

Не привязаны. Окромя Stylish Button ес-сно.

Есть идея для всех, тут присутствующих. Надо создать плагин со списком возможных кнопок

нет, нужно просто создать сайт потипу http://userstyles.org/

А твоя, ДД, на редкость криво в ФФ отображается... Ж) ты ее под что делал...

под FF :) А перенос ссылок - это фича такая...

и это *БЕЗ* МР Техс Переносчика ссылок...

не понял фразу :-\

И так же срочно встроить этот документ в расширение...

как я уже сказал, создать сайт, а в расширении разместить ссылку на него.

Посмотрел код сайта твоего, ДД. ЖЖОШ! А в таблицу засунуть? Текст в один столбец а картинки рядышком в другой. Самое ж очевидное решение. А то они не по вертикали а в разнобой идут

а ты посмотри более древние странички :) там всё красиво и к месту... хотя, всё-равно сего сайта вскоре не станет ибо ожидается переезд на хостинг с PHP и соответственно на использования _движка, заместо текущих статических страниц... по поводу таблицы - это не профессионально :) то, о чём ты говоришь, несложно реализовать и на блоках.

Ой, глянул своё творение, - действительно жуть. Я забыл закачать обновлённую таблицу стилей. Сейчас всё в порядке. :angel:

Dark-Demon пишет:

1. нет, нужно просто создать сайт потипу http://userstyles.org/

2.
> и это *БЕЗ* МР Техс Переносчика ссылок...
не понял фразу :-\

3. по поводу таблицы - это не профессионально :) то, о чём ты говоришь, несложно реализовать и на блоках.

1. реализация в видео отдельного плагина с обновлением открывающегося в сайдбаре не менее удобна в плане юзабилити. не надо на сайт заходить. смотреть что там поменялось... просто нажал найти обновления и если нету значит нету Ж(. А генерировать плагин можно со страничке на сайте. Никто ее не отменяет, идея хорошая.
2. MR Tech's Link Wrapper - такой страшный плагин для нарезки особо длинных ссылок. Таких длинных, что ни в какие рамки не помещаются и эти рамки растягивают по горизонтали. ИЕ это автоматически делает, а вот для фокса нужен этот плагин. Впрочем иногда он и лажается. Дело в том, что он нарезает вообще все особо длинные матюки на странице, так что если там окажется магнетлинк ДЦ, то потом из него придется удалять 2-3 пробела.
3. не возражаю, созданием сайтов не занимаюсь просто там такой УЖОС был в плане оформления Ж). Теперь действительно все ОК. по поводу таблиц. вы б видели как Опера9 обрабатывает таблицы с незакрытыми внутри тегами... вот ужос... а ИЕ с Фоксом такие фокусы переваривают...

Новая кнопочка. Flip Tabbar. Если таббар у вас расположен вертикально (http://userstyles.org/style/show/603), то сия кнопка по среднему щелчку переключает режим увеличения ширины таббара при наведении.

Выделить код

Код:

custombutton://Flip%20Tabbar%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAABGklEQVR4nKWTO04DMRiEx3ayixZR0aAgRGjoSEHNNkg0FCBBRwFXIBQcgp7TcAEOgKKU2yGhhSwg2IcfQwEFyT6yUUZy5fHn8a+xIIllJBc9sBleTd24MGBWnbqN8OL2XjseWyf7jQSSpQVA7Z8No6fxmHmWMM8SZumEWfrK3sEl/3vrEkhtuL2708PkLYbWn6CzCFaDsrEGIIwxEEJCKmL0sg6lFJzJWwNgrYVzX1jxfcTPCYJgDY+jqD0AAKQM0O36OD/aQMfzEA76JU9pBoPTIfdOrn8BSsHZDE5/wxYapJsPSN4/ED3cAVAwRQzaHKSDkAJppucDrDXYOrxpetm0KjrQqNke1A3RaxugBPgjF1UNrUoolv3OP69LsdagzuDeAAAAAElFTkSuQmCC%5D%5B/*%20you%20need%20to%20install%20this%20stylesheet%3A%20http%3A//userstyles.org/style/show/603%20*/%20%5D%5Bthis.PS%3D%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Athis.pref%3D%20%27custombuttons.fliptabbar.enable%27%3B%0A%0Avar%20tb%3D%20gBrowser.mStrip%3B%0Atb.openwidth%3D%20tb.boxObject.width%3B%0Atb.closewidth%3D%2078%3B%0A%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20BrowserOpenTab%28%29%3B%20break%3B%0A%09%09case%201%3A%20this.PS.setBoolPref%28this.pref%2C%20%21getBoolPref%28this.pref%2Ctrue%29%29%3B%20break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B%0A%0Atb.fliptabbar%3D%20function%28s%29%0A%7B%0A%09if%20%28s%3D%3Dthis.tabbarstate%29%20this.width%3D%20%28s%29%3Ftb.openwidth%3Atb.closewidth%3B%0A%7D%3B%0A%0Athis.changeFTB%3D%20function%28%29%0A%7B%0A%09var%20tb%3D%20gBrowser.mStrip%3B%0A%09if%20%28getBoolPref%28this.pref%2Ctrue%29%29%0A%09%7B%0A%09%09tb.omov%3D%20tb.onmouseover%3B%20tb.omou%3D%20tb.onmouseout%0A%09%09tb.onmouseover%3D%20function%20%28%29%20%0A%09%09%7B%0A%09%09%09tb.tabbarstate%3Dtrue%3B%20%0A%09%09%09setTimeout%28%22gBrowser.mStrip.fliptabbar%28true%29%22%2C500%29%3B%0A%09%09%7D%3B%0A%09%09tb.onmouseout%3D%20function%20%28%29%20%0A%09%09%7B%0A%09%09%09tb.tabbarstate%3Dfalse%3B%20%0A%09%09%09setTimeout%28%22gBrowser.mStrip.fliptabbar%28false%29%22%2C250%29%3B%0A%09%09%7D%3B%0A%09%09tb.width%3D%20tb.closewidth%3B%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAABGklEQVR4nKWTO04DMRiEx3ayixZR0aAgRGjoSEHNNkg0FCBBRwFXIBQcgp7TcAEOgKKU2yGhhSwg2IcfQwEFyT6yUUZy5fHn8a+xIIllJBc9sBleTd24MGBWnbqN8OL2XjseWyf7jQSSpQVA7Z8No6fxmHmWMM8SZumEWfrK3sEl/3vrEkhtuL2708PkLYbWn6CzCFaDsrEGIIwxEEJCKmL0sg6lFJzJWwNgrYVzX1jxfcTPCYJgDY+jqD0AAKQM0O36OD/aQMfzEA76JU9pBoPTIfdOrn8BSsHZDE5/wxYapJsPSN4/ED3cAVAwRQzaHKSDkAJppucDrDXYOrxpetm0KjrQqNke1A3RaxugBPgjF1UNrUoolv3OP69LsdagzuDeAAAAAElFTkSuQmCC%27%3B%0A%09%7Delse%7B%0A%09%09tb.onmouseover%3D%20tb.omov%3B%0A%09%09tb.onmouseout%3D%20tb.omou%3B%0A%09%09tb.width%3D%20tb.openwidth%3B%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAB+ElEQVR4nK2TP2hTURSHv/teXmpTi0iUalHbLq0IdqirolBcHBTqUgWtdBWKAa2bCC7axclZUXAoglsXcbG6dLFoaONkkNBKmpjiS9/fe+9xSFt1iYV6pgOH38c5v3OOEhF2E86u1P8DkNlKzlydfpJauWCs099O4Dq27Dlqbv7lzE0ANj1wR8YK5WKpJHG0LnG0LlHYkCisSxTUJQxqEjTXJGiuyeJSUUbGCmXAFZHtDpxUS9/gQC+NHzXS1EesIdeVQ6wgWLQ2eF6WwWN5Ui19m+ObLQ+U1hqlHBxXWKrmcV0Xq2OMjtBJiE4Cmn4dBLTWAOovD4wxWLvBno4Oaqvr5Aa6mV/8TLURINayvyvDo9JDKrrCyr7fq98GADhODs+LuHz+EGkacer4YUzaGiGNQ0oLy7y+94zRG+MAWSDJDF8qyMmLt1oA18WaCJsGmCSl0/PQyjAxd5uF7x+x2jD7c7bV/CS+unIAdfTspJTfzAAu2viIibFWo43Fak0QRpx4eo4Hd+7ytvqODc8n53lM5acYnRhH9Z6+3vaWxWpWD76CzgSA4UI/nx6XW8UwS2bl/fOhdoBNn3qAbq4x4/fEQ3h84QXTkPgZoPwPAMA3oANL8ev9VYNlGfgAxGqn36iUygJHgL1AE6iISLJjwB8QBYiIJAC/AEheAlhU2OEsAAAAAElFTkSuQmCC%27%3B%0A%09%7D%3B%0A%7D%0A%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.changeFTB.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0A%0Athis.changeFTB%28%29%3B

Ребят, а реально замутить кнопку для SessionSaver, т.е., чтобы по нажатию левой кнопки мыши на кнопке SessionSaver выдвигался бы список, аналогичный SessionSaver из пункта меню "Инструменты"?
Кто сделает - от меня вечные плюсы в репутацию. :)
Anton? :)

Добавлено:
Сегодня наткнулся на расширение Session Manager, так что необходимость в кнопке отпала. :)

Ян, Люцифер тут интересную фишку сварганил (http://forums.mozillazine.org/viewtopic.php?p=2402639) не хочешь к своему расширению подцепить?

Люди, состряпайте кнопку Online\Offline для Thunderbird, пожалуйста.

Пытаюсь сделать кнопку с выпадающим списком букмарков. Результат - видны только 3 предопределённых пункта. Посоветуйте, пожалуйста, как добавить недостающее ^_^

kuroneko, там это меню специальным скриптом создаётся. смотри свойство onpopupshowing.
также глянь сюда: http://forums.mozillazine.org/viewtopic.php?p=2418562#2418562

Dark-Demon пишет:

kuroneko, там это меню специальным скриптом создаётся. смотри свойство onpopupshowing.

Угу. В том-то и дело, и вызов этого скрипта "в лоб" не срабатывает.

также глянь сюда: http://forums.mozillazine.org/viewtopic.php?p=2418562#2418562

Читал я эту тему. Устанавливать дополнительное расширение ради одной кнопки не хочется, а посмотреть, как оно реализовано... я не слишком силён в XUL-программировании, и пока не совсем понимаю.

Сейчас пытаюсь пойти по другому пути - имитировать клик по оригинальному меню.

kuroneko пишет:

...вызов этого скрипта "в лоб" не срабатывает.
...

Я как то делал скрипт для keyconfig, вроде работало.
http://forum.mozilla-russia.org/doku.ph … ps:hotkeys

Anton пишет:

kuroneko пишет:

...вызов этого скрипта "в лоб" не срабатывает.
...

Я как то делал скрипт для keyconfig, вроде работало.
http://forum.mozilla-russia.org/doku.ph … ps:hotkeys

Угу. До чего-то похожего я уже дошёл.
Вложенные папки показываются пустыми.....

http://custombuttons2.com/forum/

:D:beer:

kuroneko, попробуй внаглую выдрать это меню и вставить в свою кнопку.
Ян, а ведь для таких случаев не помешал бы деструктор ;)

Вот, может кому пригодится. При первом нажатии меняет заголовок активного таба на (Untitled) с соответствующей иконкой, при повторном - возвращает. Чтобы особо любопытные сотрудники не видели, что за табы открыты в фоне ^_^

Выделить код

Код:

custombutton://TRename%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHnSURBVDjLpZLbaxNREMZjk7obSHYtXmtD21QtxiIWJK2+GG+UilQsFaLWS0StiYpBFGkpGGmeauhFo1JFzVMRRCjkHwiCoA95zqOuDwEtirgPIqj5ObsJglC1iwMfw8yZ7zvnzIwLcP0P/mj3dXWdYGpCU9olXOJyakJ+kw+3M6OrbyX0OhIRcupZRws8SWP5m5oyIWllsWRd8Kk8dhYeXKE8dtp6xecexROUY/diBHKF3i5KiVOUUilK52MU9oWZ0pSncqz+ixzJrdEx71zFmM5gmXErg3nvMlZ+xLf0oJR5/iZQKB7ZC9mLGPFoVSARpZI9RzG6k6ymvpQy/4INFfLJ2dZV8HAYknswdm2oCoRW8i2ynsroCWYDy0n7laSU1y/cuOFBuC43H9uK0dnE80iE163L+LJ5BV8HtlGO9doN7VM9zUKr+21s+c42mLwABzbBjiBGLld9gXgz1MDHNh/fL/WTDwUY9yuTvxoq5NUCzBsxKoPbqXQH+BFuojw3ZwtY/n3Qx7tmLx+6WjATfVj1h731G+2xWuta3N8N43FID1UhOzAfP4SRPMP8UD+MHoeRo3AtaqO4ewsZTXlkb6j8afqurr64ramvnEAEHnd46hpdtbk2CKxgrQM01ni2uWtCTuH+CTReO8ZCTKnoAAAAAElFTkSuQmCC%5D%5Bvar%20CurTab%20%3D%20document.getElementById%28%27content%27%29.selectedTab%3B%0Aif%20%28CurTab.hasAttribute%28%22prev_label%22%29%29%20%7B%0A%20CurTab.setAttribute%28%22label%22%2CCurTab.getAttribute%28%22prev_label%22%29%29%3B%0A%20CurTab.removeAttribute%28%22prev_label%22%29%3B%0A%20CurTab.setAttribute%28%22image%22%2CCurTab.getAttribute%28%22prev_image%22%29%29%3B%0A%20CurTab.removeAttribute%28%22prev_image%22%29%3B%0A%7D%20else%20%7B%0A%20CurTab.setAttribute%28%22prev_label%22%2CCurTab.getAttribute%28%22label%22%29%29%3B%0A%20CurTab.setAttribute%28%22label%22%2C%22%28Untitled%29%22%29%3B%0A%20CurTab.setAttribute%28%22prev_image%22%2CCurTab.getAttribute%28%22image%22%29%29%3B%0A/*%20CurTab.setAttribute%28%22image%22%2C%22chrome%3A//browser/skin/Bookmarks-folder.png%22%29%3B%0A*/%0A%20CurTab.setAttribute%28%22image%22%2C%22%22%29%3B%0A%7D%0A%5D%5B/*Initialization%20Code*/
Выделить код

Код:

custombutton://TRename%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHnSURBVDjLpZLbaxNREMZjk7obSHYtXmtD21QtxiIWJK2+GG+UilQsFaLWS0StiYpBFGkpGGmeauhFo1JFzVMRRCjkHwiCoA95zqOuDwEtirgPIqj5ObsJglC1iwMfw8yZ7zvnzIwLcP0P/mj3dXWdYGpCU9olXOJyakJ+kw+3M6OrbyX0OhIRcupZRws8SWP5m5oyIWllsWRd8Kk8dhYeXKE8dtp6xecexROUY/diBHKF3i5KiVOUUilK52MU9oWZ0pSncqz+ixzJrdEx71zFmM5gmXErg3nvMlZ+xLf0oJR5/iZQKB7ZC9mLGPFoVSARpZI9RzG6k6ymvpQy/4INFfLJ2dZV8HAYknswdm2oCoRW8i2ynsroCWYDy0n7laSU1y/cuOFBuC43H9uK0dnE80iE163L+LJ5BV8HtlGO9doN7VM9zUKr+21s+c42mLwABzbBjiBGLld9gXgz1MDHNh/fL/WTDwUY9yuTvxoq5NUCzBsxKoPbqXQH+BFuojw3ZwtY/n3Qx7tmLx+6WjATfVj1h731G+2xWuta3N8N43FID1UhOzAfP4SRPMP8UD+MHoeRo3AtaqO4ewsZTXlkb6j8afqurr64ramvnEAEHnd46hpdtbk2CKxgrQM01ni2uWtCTuH+CTReO8ZCTKnoAAAAAElFTkSuQmCC%5D%5Bvar%20CurTab%20%3D%20document.getElementById%28%27content%27%29.selectedTab%3B%0A%0Aif%20%28CurTab.hasAttribute%28%22prev_label%22%29%29%20%7B%0A%20CurTab.setAttribute%28%22label%22%2CCurTab.getAttribute%28%22prev_label%22%29%29%3B%0A%20CurTab.removeAttribute%28%22prev_label%22%29%3B%0A%20CurTab.setAttribute%28%22image%22%2CCurTab.getAttribute%28%22prev_image%22%29%29%3B%0A%20CurTab.removeAttribute%28%22prev_image%22%29%3B%0A%20this.image%20%3D%20this.truetitle%3B%0A%7D%20else%20%7B%0A%20CurTab.setAttribute%28%22prev_label%22%2CCurTab.getAttribute%28%22label%22%29%29%3B%0A%20CurTab.setAttribute%28%22label%22%2C%22%28Untitled%29%22%29%3B%0A%20CurTab.setAttribute%28%22prev_image%22%2CCurTab.getAttribute%28%22image%22%29%29%3B%0A/*%20CurTab.setAttribute%28%22image%22%2C%22chrome%3A//browser/skin/Bookmarks-folder.png%22%29%3B%0A*/%0A%20CurTab.setAttribute%28%22image%22%2C%22%22%29%3B%0A%20this.image%20%3D%20this.falsetitle%3B%0A%7D%0A%5D%5Bthis.truetitle%20%3D%20this.image%3B%0Athis.falsetitle%20%3D%20%22data%3Aimage/png%3Bbase64%2C%5C%0AiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%5C%0A/9hAAACRElEQVR4XpWSS0hUURzGf+fcedy66owKcp%5C%0A3RwbJEfJRklglGSAsfgSRSgyZkExHiC3pgBbVrUwt%5C%0AbuDVyF0RQ0NqF0QOiLMzS0opepIKINjovTzIXQZ0M%5C%0A+sHHdw6H7+PPnyMGy/krdsG2aJTTp0a4M7nIOJsgN%5C%0AWCjhAJp4/quKi5fyuMGYGMTxOMDJKBCVGbu1wa3dx%5C%0AVoU32jHOmP1b/4zUMSQUYUrFU4irTrXMturtbIe0J%5C%0AGczXdO+nRBQaJIIY2TBBb5OiOWuN+qLWPoac6FWVB%5C%0AvHfbaboVDDyYpf+fOxAxnEnpXM1sbWDkQwrDL1/x/%5C%0AI2DLf562oq44IS0hALWEuGkWeMqEbl+tjqWUAqS9Q%5C%0AjkHaOiITm/KYMzCQVhBStiKYzbyKLH9NcCBl5PmFg%5C%0AshGkuATrG8SrO7qUjXeJbV2AXYAMciq6sxtQc6SkH%5C%0AJjHNeaQMkuVdAMbALGR3U5LnhEl3wg4I43Pl05nWs%5C%0AAeYAyZwu3/Q2Kgwze9WATM46nMJHCJgahRjgVy2Ps%5C%0A15b4uRJgwX8Bb4yOzsGPPz35ieHovf4T0YdgoDjpT%5C%0A2HM4BAkBGQxSnlhJwH3YDn4HxeGBgYJS6umF6e98B%5C%0An6w3fiIOOmmpwV+kUwkgnS6u+DrkVrQg8AX4Gvei0%5C%0Al+U7FtY8Zl4EKYtaYtkd+Jsy+eiBF1M+FnwdUpDaH%5C%0AZQglWkTQEK1DKxyOpZgVBoEl7fJFx2jwLR7KG1IJm%5C%0AKiEICCoRlgBDxPCjWoQnEsznGH01xW2BhAyT/RwxQ%5C%0AfwCvBroM3KF3TQAAAABJRU5ErkJggg%3D%3D%22%3B

:D

m435tr0d пишет:

:D

Не идеально. Если переключиться на другой таб, иконка кнопки не поменяется.

я понимаю :/

что-то кнопочки в новых окнах не работают, только в первом... видимо не инициализируются.

Кнопка "Быстро процитировать":

Выделить код

Код:

custombutton://%u0411%u044B%u0441%u0442%u0440%u043E%20%u043F%u0440%u043E%u0446%u0438%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%7C%20%u0432%u044B%u0434%u0435%u043B%u0438%u0442%u044C%20%u0436%u0438%u0440%u043D%u044B%u043C%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACfElEQVQ4jc2SXUiTYRTHd5NYkIEfVEgXhbtQRCiNEQ1iZmhR70owQ2TsKlvdlKVBZFRY1ruZX2u6EG3BTGtapqn0MZN07SP3adqWH6lUrpZzbs5M9N/eZ7iLCKm7DhyeA8/z/50/5zks1n8R7WptTiDl/5g56zZEryEAVccr+bzrHn54uv4qmbeMJgCIIADFw6dy5sJt2gK3OQ4zA8nwjgjhG8+HdzgX3tE8+J018E0WYaURowkAoghAWtco909VofwmhdISClViPjyDezDrOATZLT6qyw6Tul6WiblPVwiI0YQA18vvEAefNVGY0kUTByuAmQFOoE6Fb6Iw6GC6mThgNCFA4WU65KCCpuB6uxHSUj6pZWVZ6FHXwz0zjZ+Li9COfEND9xtcEkt0O7icbQRw/PQF4uCLNio0A7dpM2Y/ZMM5cQ0DY3q09k9CZXMhUW6CqLMXT3SK7z06ZToBHBWeJA6Yrk59DDmlEj7Ghm/AMK2GxGrEQbkeKbdNSFPa0GbXQONQLduGe5sIICMzN/gL5q2YtR+BZ2g/mTxteIe0+0ZwKl8HxAYk15iRQb/Ec6seDwzvYfs4/pUAdu/j/3EPtrcMIq7GgviSPiRWGhFf3IOiF3Z4/T7Mzc/D7RxbIICEZG5eEoen+D3PND1D8+hjJFUbEXOuD5HCBsg6NXCMWGCxtGKovzHogAlmLZnNCn1NIKSq2rp22ylUaYtBidsQcawWEYK72JtfgRP0+aWO7tJG1mohLChgXy0XOVvUouXsyjqspWiwcmsRdkC8RJ2lrWLxxcxVAQlZWWECQQ5vFzdVGb5p5xRrffoCK5LnCo9NecRJF1BsNjv2F9wYBxnBxXjGAAAAAElFTkSuQmCC%5D%5B%5D%5Bthis.onclickFunction%3Dfunction%28event%29%7B%0Aswitch%20%28event.button%29%7B%0A%20%20case%200%3A%20loadURI%28%22javascript%3A%7Bta%20%3D%20%09%09%20%09window.document.getElementsByTagName%28%27textarea%27%29%3B%20%09ta%5Bta.length-1%5D.value%20+%3D%20%27%5Bquote%5D%27+document.getSelection%28%29+%27%5B/quote%5D%5Cn%27%3B%20ta%5Bta.length-1%5D.focus%28%29%3B%7D%22%29%3B%20break%3B%0A%20%20case%201%3A%20loadURI%28%22javascript%3A%7Bta%20%3D%20%09%09%20%09window.document.getElementsByTagName%28%27textarea%27%29%3B%20%09ta%5Bta.length-1%5D.value%20+%3D%20%27%5Bb%5D%27+document.getSelection%28%29+%27%5B/b%5D%5Cn%27%3B%20ta%5Bta.length-1%5D.focus%28%29%3B%7D%22%29%3B%20break%3B%0A%7D%0A%7D%0Athis.setAttribute%28%27onclick%27%2C%27this.onclickFunction%28event%29%3B%27%29%3B

Работает на форумах.
Принцип работы - выделите текст на странице, нажмите левую кнопку мыши, выделенный текст вставится в форму ответа с символами цитирования, среднюю кнопку - с символами выделения жирным. Нагло спёрта с оперы, модифицирована.

Что случилось с Yan ом? Кто-нибудь знает? Его уже два месяца не видно. Может в армию забрали?:(

petrovich
[offtopic]
Я жив-здоров, и полон сил. :)
Просто отдыхал от компьютера по полной программе....
Перепробовал почти все способы. Понравилось. :)
[/offtopic]


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

Yan
Надо бы организовать складирование кнопок в отдельный файл, например в ini.
Так не хочется захламлять prefs.js...

Dimanish
Будет, правда с форматом файла я пока не определился.


nn-zh пишет:

Dark-Demon

Switch Proxy очень и очень полезен при работе в разных местах.

можно заменить с помощью более лёгого custombuttons c соответствующей кнопкой.

Можно поподробнее? У меня 4 набора прокси-серверов и пара автоконфигурационных файлов.
Как custombuttons настроить на это дело так, чтобы в результате оно занимало места меньше,
чем switchproxy в статусной строке? Ну и имя конфигурации было говорящим откуда и куда
нужно использовать это прокси.

( url )

Вот "Enhanced Proxy" кнопка:

Выделить код

Код:

custombutton://Enhanced%20Proxy%20Button%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUA/wCIiIgAAADd3d3///8AAICAAAD/AAAAAP8pkhnQAAAAAXRSTlMAQObYZgAAAF1JREFUeF4tyUERg0AQRNEJDjprAAYFQztYCglYWAlwzi2y053kn17Vj4AK9djJmo3jPP94exqv7zR6prFXvy8D+AG59DGExiJpoKC0gFQ9pmxUzwhNbqsBJ2iq+QNw+RI4rlZUrAAAAABJRU5ErkJggg%3D%3D%5D%5B/*%0AEnhanced%20Proxy%20Button%20by%20Yan%0A%0AEdit%20proxy%20settings%20in%20the%20Initialization%20Code.%0A%0A*/%5D%5Bvar%20Proxies%3D%5B%5D%3B%0Avar%20AutoCfgProxyFiles%3D%5B%5D%3B%0A//------Proxies--------%0AProxies.push%28%5B%27localhost%20%28example%29%27%2C%27127.0.0.1%27%2C%278080%27%5D%29%3B%0AProxies.push%28%5B%27Proxomitron%20%28example%29%27%2C%27127.0.0.1%27%2C%279090%27%5D%29%3B%0AAutoCfgProxyFiles.push%28%5B%27autoconf%20file1%20%28example%29%27%2C%27http%3A//localhost/conf.pac%27%5D%29%3B%0AAutoCfgProxyFiles.push%28%5B%27file2%20%28example%29%27%2C%27http%3A//example.com//file.pac%27%5D%29%3B%0A//------/Proxies-------%0A%0Athis.pref%3D%27network.proxy.type%27%3B%0Athis.setProxy%3Dfunction%28prtype%2Cprvalue%2Cport%29%7B%0A%20switch%28prtype%29%7B%0A%20%20case%20%27http%27%3A%09%7Bthis.PS.setIntPref%28this.pref%2C1%29%3B%0A%09%09%20this.PS.setCharPref%28%27network.proxy.http%27%2Cprvalue%29%3B%0A%09%09%20this.PS.setIntPref%28%27network.proxy.http_port%27%2Cport%29%3B%0A%20%20%09%09%7D%3Bbreak%3B%0A%20%20case%20%27file%27%3A%09%7Bthis.PS.setIntPref%28this.pref%2C2%29%3B%0A%09%09%20this.PS.setCharPref%28%27network.proxy.autoconfig_url%27%2Cprvalue%29%3B%0A%20%20%09%09%7D%3Bbreak%3B%0A%20%20case%20null%3A%09%7Bthis.PS.setIntPref%28this.pref%2C0%29%3B%0A%20%20%09%09%7D%3Bbreak%3B%0A%20%7D%0A%7D%0A%0A%20var%20nMItem%3Dfunction%28label%2Cp1%2Cp2%2Cp3%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.setProxy.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%27+%28p1%3F%28%27%22%27+p1+%27%22%27%29%3A%28%27null%27%29%29+%27%2C%27+%28p2%3F%28%27%22%27+p2+%27%22%27%29%3A%28%27null%27%29%29+%27%2C%27+%28p3%3F%28%27%22%27+p3+%27%22%27%29%3A%28%27null%27%29%29+%27%29%27%29%3B%0A%20%20%20var%20pr%3Dnull%3B%20%0A%20%20%20if%20%28p1%26%26p2%29%20pr%3Dp1+%27%3A%27+p2+%28p3%3F%28%27%3A%27+p3%29%3A%28%27%27%29%29%3B%0A%20%20%20if%20%28pr%29%20m.setAttribute%28%27pr%27%2Cpr%29%3B%0A%20%20%20m.setAttribute%28%27type%27%2C%27radio%27%29%3B%0A%20%20%20m.setAttribute%28%27name%27%2C%27radio%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20%20for%20%28var%20i%3D0%3Bi%3CProxies.length%3Bi++%29%7B%0A%20%20%20mP.appendChild%28nMItem%28Proxies%5Bi%5D%20%5B0%5D%2C%27http%27%2CProxies%5Bi%5D%20%5B1%5D%2CProxies%5Bi%5D%20%5B2%5D%2Cthis%29%29%3B%0A%20%20%7D%0A%20%20if%20%28AutoCfgProxyFiles.length%3E0%29%7B%0A%20%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%20%20for%20%28var%20i%3D0%3Bi%3CAutoCfgProxyFiles.length%3Bi++%29%7B%0A%20%20%20%20mP.appendChild%28nMItem%28AutoCfgProxyFiles%5Bi%5D%20%5B0%5D%2C%27file%27%2CAutoCfgProxyFiles%5Bi%5D%20%5B1%5D%2Cnull%2Cthis%29%29%3B%0A%20%20%20%7D%0A%20%20%7D%0A%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%20mP.appendChild%28nMItem%28%27No%20proxy%27%2Cnull%2Cnull%2Cnull%2Cthis%29%29%3B%0A%20%20mP.f%3Dfunction%28%29%7B%0A%20%20%20var%20PS%3Dthis.parentNode.PS%3B%0A%20%20%20var%20pref%3D%27network.proxy.type%27%3B%0A%20%20%20var%20pr%3Dnull%3B%0A%20%20%20switch%28PS.getIntPref%28this.parentNode.pref%29%29%7B%0A%09case%201%3A%20pr%3D%27http%3A%27+PS.getCharPref%28%27network.proxy.http%27%29+%27%3A%27%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20+PS.getIntPref%28%27network.proxy.http_port%27%29%3Bbreak%3B%0A%09case%202%3A%20pr%3D%27file%3A%27+PS.getCharPref%28%27network.proxy.autoconfig_url%27%29%3Bbreak%3B%0A%20%20%20%7D%0A%20%20%20if%20%28%21pr%29%20this.lastChild.setAttribute%28%27checked%27%2Ctrue%29%3B%0A%20%20%20for%20%28var%20i%3D0%3Bi%3Cthis.childNodes.length%3Bi++%29%7B%0A%20%20%20%20if%20%28this.childNodes%5Bi%5D.getAttribute%28%27pr%27%29%3D%3Dpr%29%7B%0A%20%20%20%20%20this.childNodes%5Bi%5D.setAttribute%28%27checked%27%2Ctrue%29%3B%0A%20%20%20%20%20break%3B%0A%20%20%20%20%7D%0A%20%20%20%7D%0A%20%20%7D%0A%20%20mP.setAttribute%28%27onpopupshowing%27%2C%27this.f%28%29%3B%27%29%3B%0A%20%20this.type%3D%22menu%22%3B%0A%20%20this.orient%3D%22vertical%22%3B%0A%20%20this.appendChild%28mP%29%3B%0A%20%20this.PS%3D%0A%20Components.classes%5B%27@mozilla.org/preferences-service%3B1%27%5D%0A%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A%0A%0A/*images*/%0Athis.offImage%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAElBMVEUA/wAAAACIiIjd3d2AgID///9WXziYAAAAAXRSTlMAQObYZgAAAFRJREFUeF4tydERgCAMBNFABUQr8KjAXAcODTD034s5cb/ezJohs6wuMpow3X8MTeH5prBnXTHHEIAN+LHRGSQFBLJcgGfTindml1lO3qcAJRTP2gv/MBEl7nzAMAAAAABJRU5ErkJggg%3D%3D%27%3B%0Athis.onImage%3Dthis.image%3B%0A%0Athis.setState%3Dfunction%28%29%7B%0A%20var%20state%3Dthis.PS.getIntPref%28this.pref%29%3B%0A%20if%20%28state%3D%3D0%29%7B%0A%20%20this.image%3Dthis.offImage%3B%0A%20%7Delse%7B%0A%20%20this.image%3Dthis.onImage%3B%0A%20%7D%0A%7D%0A%0Athis.ob%3D%7B%7D%3B%0Athis.ob.observe%3Dthis.setState.bind%28this%29%3B%0Athis.PS.addObserver%28this.pref%2Cthis.ob%2Cfalse%29%3B%0Athis.setState%28%29%3B

HTTP-прокси и URL'ы настройки прокси задаются вручную в коде инициализации.

Ян, не вижу смысла изобретать велосипед. http://www.xulplanet.com/references/elemref/ref_toolbarpalette.html

надо просто создать XUL-файл с кнопками и оверлеить им стандартную "BrowserToolbarPalette". более того этот механизм позволяет подвергнуть редактированию и неCustomButtons кнопки. к томуже кнопки будут появляться сразу и не будет проблем с новыми окнами.

Dark-Demon
Ну, во-первых, велосипед уже изобретен, как-никак. :) Но это оффтоп.

Второе, и самое важное. Код:

Выделить код

Код:

var element=document.getElementById('BrowserToolbarPalette');
alert(element);

Получаем null. Это значит, что <toolbarpalette id="BrowserToolbarPalette"> удаляется из документа после создания панелей инструментов. Т.е. после загрузки браузера его уже никак не достать.

Можно было бы конечно, создавать статический оверлей в каталоге расширения, НО:
- это жуткий хак;
- также имеет много проблем, каждая из которых напоминает создание небольшого велосипедика...

К счастью, Anton нашёл отличное решение, как из скрипта добраться-таки до <toolbarpalette>, и добавить туда нужные кнопки. Оно и будет использовано в след. версии.
Подробности могу в PM написать, а то они довольно объёмны, и не так "просты" :)

А поддержка второй версии браузера планируется? А то я давно уже сижу на ней и без CB уж очень не уютно.

Просьба о создании кнопки.

Требуется следующее: чтобы кнопки "Прервать..." и "Обновить..." были бы "кнопками-списками" (при нажатии непосредственно на кнопку действие осуществлялось только для текущей страницы, а при нажатии на кнопку из выпадающего списка - чтобы действие осуществлялось для ВСЕХ страниц, загруженных в текущем окне ФФ, т.е. "Обновить все страницы" или же "Прервать загрузку всех страниц").

Чтобы было более наглядно: если кто юзает (юзал) плагин для Осла под названием Avant Browser, там как раз такая фича реализована.

Philip
Планируется
Пит Бэнкман
Reload:

Выделить код

Код:

custombutton://Reload%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAwZJREFUeNpdkktoXHUUxn//+5g7D5N5GidMk7QxtWpL09aAOC4MmkWplNKC4oMaFETBlTs3UulCKlZMLS5URMVNRSi1KApNShdCHk1LMp3QJg2ZppOkmSE2d2aSm5l7596/i6Q15qwOB74H33cEW6dntA34BOgGtm9c7yC933CtM1zpztEz2gv00d+VEFvAvcFGve/FI82Rlo4Qiqbi86mslR1ujZmMXClilas/64bvuGN70N8VE5vAncEGbeyND3ZQNKtULIGi+9AMA39AJ9Wk8lijx+/n8hx4LsY3p6agvyupbdLv6znWjG4IDFeQaPIRTwaoOoL7q5LF+x6rNcErva0oinwI0japd09mKlz8ISeRLggxqPv96X3pOC8cbMLTNRZMycQ8PJFUHhKsb9I7alXq5LL5e4o9N07pxjtcTh92Jr5svzowe+7Hr2ZojgoiQYkQHup/+A0HUu70+a1hv8xdKle9LNffPw+4tL/Xhuo/2NkVYWZyBU2BsAKF3FaC1emPog3zUbPgCmriLuCs+/O1Ib3MwIVZdeCCVP7XmPRKAEJ/+fpyOG5Etr6DVXGwyrWTDDx7CgiROhYPpXbE9IZY0FwKKox/mAHqWjhuRD7+7EmqDrieJKgLhoZLnP9+OsvtMz9t5FSi7fgRIyWTZjn1LnE5DLwFuBrAkgULpgRP8ngCios2SFmm9fVDtLz6F4g3UQKH1uzwzm0d0ejdzMzXgA442nqGAk0VrNUlN+95dD4f46m9DenstVJ67o6FY3skkga79oW59Os8FPovAx4gNYB4SBALwO0imCsKc0t1pAvbdj/Crv0h3LpLwK8wfbPG0mzhO6ZO5zeCXk92ZMjk8xO30NaqtCYEfl3gOBKz4lL4x0bXFYqLkr//yE8wffY0UAVcABE8Oibrtp21CzdO+Jr2nOzY++jup/eHaWkPIQQUFqpkri4zOVoYtMc/fZuFi0Vg5UHVgpdG+pj64iz5X5YBm2e+PUBo+2HUwB6E2ki9Moi9nGXotT+BGmAB9oO6/wVl0kFzmdAMvwAAAABJRU5ErkJggg%3D%3D%5D%5Bif%20%28event.shiftKey%29%20BrowserReloadSkipCache%28%29%3B%20else%20BrowserReload%28%29%3B%5D%5Bthis.ReloadAll%3Dfunction%28%29%7B%0A%20%20gBrowser.reloadAllTabs%28gBrowser.mContextTab%29%3B%20%20%0A%7D%0A%0A%20var%20nMItem%3Dfunction%28label%2Cimg%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.ReloadAll.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%29%27%29%3B%0A%20%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20mP.appendChild%28nMItem%28%27Reload%20All%20Tabs%27%2Cthis.image%2Cthis%29%29%3B%0A%0A%20this.appendChild%28mP%29%3B%0A%20this.type%3D%22menu-button%22%3B%0A%0A

Stop:

Выделить код

Код:

custombutton://Stop%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkPDzESY3gWcgAAAqFJREFUeNplkz1sE0kYhp9dZzfBXq8HYpQUBxjOinQUVhBQRKIB3XFSjkgIAlQUAV1/6VPS5yip0FFCwU8kBxSJSG7QFXBgCayDIEwgQPjd7Np79s7uDIWDiXOfNBppPj2v3u9nDDbEpdzAqOtkFp1MWmx8x4BGM/RW/ebPf/itB4DekPoO57dtXTw2dULYfQriBJK4c8cxkWExd/WO//D9p/ELjegeoLoCXfj8KWF/eQuvlkFKiNaPlDA8TLTrR+auLfSIpLrw76eFHXxg6e8aq6GJSMWk0Mh2zNPWFtZWPpA32hQPHej3l99NjsioUomSFdN1MovHzk0K21tl6d4Ttl/8i+L1BapBmjCMqMbbKM5X2H7lBs+erGDUakycOOzuFdkykDGdTFrYtobXy0jTJl0oYAlB6WaZ2q4xSrfmsYQgXSggtzjIF3VSzYCsk3aBnAl0GiUlxWxM9fg40vOwhGD/5ctYQiA9j0fjRynITyil0bo7BKsjkMQQxVhofur7QnV6umeK1elpRoKXmIBSCrTq5r47iCQybFGTgtLsbI9AaXaWf7M7acsYlSi00t0FMDHWHUjJUtOmdHO+a/v+1FS3nNHyAi/tPEmyyUGjGXqR7oOhIaymT1ivd2r+7Sgj98s8Gv8F6XmE9TpmsIa9ewfazRE0Qh/A+NMd2P9DfuvdiTO/uvbzpzx7/Ao54FCIP5NC04pi6lYeM/Ao7Bmkf1+JuRsV/9bKx7NX/pMPUrfb8bsRGVX8+pvJ4qGD/YO6Re7zW3SiSJIEnSiybZ/B3cOb4X+AtW9/wZxx7LHRocHyxMkjbioMQOtOs7RCK4V2c5thD2gaG5ptzjj22F6RLa8vSc93Cxqhf/uj3wMDyqA3TCAD5ACL/4cE1r7BAF8BBX1jYyT/fJkAAAAASUVORK5CYII%3D%5D%5BBrowserStop%28%29%3B%5D%5Bthis.StopAll%3Dfunction%28%29%7B%0A%20try%7B%0A%20%20for%20%28var%20i%3D0%3Bi%3CgBrowser.browsers.length%3Bi++%29%7B%0A%20%20%20%20gBrowser.browsers%5Bi%5D.stop%28%29%3B%0A%20%20%7D%0A%20%7Dcatch%28ex%29%20%7B%7D%0A%7D%0A%20var%20nMItem%3Dfunction%28label%2Cimg%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.StopAll.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%29%27%29%3B%0A%20%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20mP.appendChild%28nMItem%28%27Stop%20All%20Tabs%27%2Cthis.image%2Cthis%29%29%3B%0A%0A%20this.appendChild%28mP%29%3B%0A%20this.type%3D%22menu-button%22%3B

Так?

Update: в пред. раз забыл картинку в base64 отконвертировать. Исправил.

Yan Спасибо! Это то, что нужно! Давно хотел наличие этой фичи в ФФ.

Лови "+" :)

А поддержка второй версии браузера планируется? А то я давно уже сижу на ней и без CB уж очень не уютно.

Планируется

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

Philip
Вот тут LouCypher выложил подправленную версию, которая работает в последних сборках FF2.

Yan пишет:

Philip
Вот тут LouCypher выложил подправленную версию, которая работает в последних сборках FF2.

Скачал, попробовал, но... в общем после долгих опытов, выяснил:

Создано: Sat Sep 16 2006 19:15:20 GMT+0400
User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.8.1b2) Gecko/20060913 BonEcho/2.0b2
ID сборки: 2006091303

Используемые расширения: [39]
- Adblock Plus 0.7.1.2
- All-in-One Gestures 0.17.4
- All-in-One Sidebar 0.7 RC 4
- autoHideStatusbar 0.3.9.3
- BBCodeXtra 0.2.5.5
- CoLT 2.1.1
- Custom Buttons 0.0.1.2
- CuteMenus - Crystal SVG 1.2
- DOM Inspector 1.8.1b2
- Download Statusbar 0.9.4.1
- Drag de Go 0.2.5
- Extended Link Properties 1.2.3
- External Application Buttons mod 0.7.3.4
- Fission 0.8.6
- FlashGot 0.5.96.060910
- Forecastfox l10n 0.7.2006091401
- Gmail Manager 0.5.1
- IE Tab 1.1.0.6
- ImgLikeOpera 0.6.12
- keyconfig 20060828
- Launchy 4.2.0
- MenuManipulator 20060418.1.1
- MinimizeToTray 0.0.1.2006030906+
- MR Tech Local Install 5.2
- NoScript 1.1.4.3
- Pearl Crescent Page Saver Basic 1.2
- Proxy FlightGhost 1.2.08082006
- QuickNote 0.6.0.2
- RSS Ticker 1.8.5
- Save Image in Folder 0.9.3
- Save Link in Folder 1.1.2
- ScrapBook 1.2.0.4
- ScrapBook CopyPageInfo 1.3.3
- SuperScroll 1.5.2
- Tab Mix Plus 0.3.0.60915
- Talkback 2.0b2
- Text Link 1.3.2006032801
- UI Tweaker (Formerly Toolbar Cleanup) 1.7.0
- Unsorted menu 0.0.9

Подсветил те расширения, присутствие которых "убивает" работоспособность Custom Buttons. :(

Philip
Принцип работы расширения в следующих версиях будет в корне отличаться от нынешнего. Надеюсь, в лучшую сторону, и проблем с совместимостью не появится. А пока, увы, надо подождать..

Yan
Ладно :) сроков не узнал, но ждать не перестану. Расширение из ряда Must Have.

Установил сегодня это расширение и наслаждался его функционалом, а именно кнопками BBcode. Хотелось бы выразить огромный респект создателю! :)
Но случился у меня BSOD, вызванный Outpost FireWall в момент открытия ссылки в новом табе. У меня установлено расширение TabMix Plus и включен в нем менеджер сессий, соответственно при запуске FF я восстановил сессию. Но при этом кнопки с панели исчезли, нет их и в настройках. FF 1.5.0.7 Как лечить? Переустановить расширение или только кнопки?

ЗЫ: Кнопки были у меня помещены на панель меню. Сейчас восстановил кнопки, пока вроде работает.

GASon
Переустановить кнопки.
Когда Firefox вылетает, кнопки, установленные за последний сеанс, не сохраняются.

Т.е. после загрузки браузера его уже никак не достать.

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

Когда Firefox вылетает, кнопки, установленные за последний сеанс, не сохраняются.

и таких проблем бы небыло.... а также кнопки бы появлялись сразу, и во всех окнах, а не только в первом.

Dark-Demon пишет:

...просто правим оверлеящий файл...

Эх, если бы... Но не так просто на самом деле:

1. Местонахождение оверлея должно быть известно до первого запуска расширения. Т. е., оверлей должен находиться в каталоге расширения. А иначе придётся править chrome.manifest, extensions.ini и/или ещё что-нибудь.
2. Не факт, что в каталог установленного расширения имеются права на запись.
3. Динамические оверлеи через loadOverlay(...) бесполезны, в связи с отсутствием на момент их применения toolbarpalette.

Вроде бы я правильно обрисовал суть проблемы, если вкратце.

К слову, своё решение я идеальным не считаю, с оверлеями было бы проще. Возможно, имеет смысл подумать о feature request на bugzill'у.

Расширение однозначно супер! У меня на работе юзеры FF уже заценили.
Вопрос, не планируется ли это расширение прикрутить на Thunderbird?

Yan пишет:

Philip
Планируется
Пит Бэнкман
Reload:

Выделить код

Код:

custombutton://Reload%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAwZJREFUeNpdkktoXHUUxn//+5g7D5N5GidMk7QxtWpL09aAOC4MmkWplNKC4oMaFETBlTs3UulCKlZMLS5URMVNRSi1KApNShdCHk1LMp3QJg2ZppOkmSE2d2aSm5l7596/i6Q15qwOB74H33cEW6dntA34BOgGtm9c7yC933CtM1zpztEz2gv00d+VEFvAvcFGve/FI82Rlo4Qiqbi86mslR1ujZmMXClilas/64bvuGN70N8VE5vAncEGbeyND3ZQNKtULIGi+9AMA39AJ9Wk8lijx+/n8hx4LsY3p6agvyupbdLv6znWjG4IDFeQaPIRTwaoOoL7q5LF+x6rNcErva0oinwI0japd09mKlz8ISeRLggxqPv96X3pOC8cbMLTNRZMycQ8PJFUHhKsb9I7alXq5LL5e4o9N07pxjtcTh92Jr5svzowe+7Hr2ZojgoiQYkQHup/+A0HUu70+a1hv8xdKle9LNffPw+4tL/Xhuo/2NkVYWZyBU2BsAKF3FaC1emPog3zUbPgCmriLuCs+/O1Ib3MwIVZdeCCVP7XmPRKAEJ/+fpyOG5Etr6DVXGwyrWTDDx7CgiROhYPpXbE9IZY0FwKKox/mAHqWjhuRD7+7EmqDrieJKgLhoZLnP9+OsvtMz9t5FSi7fgRIyWTZjn1LnE5DLwFuBrAkgULpgRP8ngCios2SFmm9fVDtLz6F4g3UQKH1uzwzm0d0ejdzMzXgA442nqGAk0VrNUlN+95dD4f46m9DenstVJ67o6FY3skkga79oW59Os8FPovAx4gNYB4SBALwO0imCsKc0t1pAvbdj/Crv0h3LpLwK8wfbPG0mzhO6ZO5zeCXk92ZMjk8xO30NaqtCYEfl3gOBKz4lL4x0bXFYqLkr//yE8wffY0UAVcABE8Oibrtp21CzdO+Jr2nOzY++jup/eHaWkPIQQUFqpkri4zOVoYtMc/fZuFi0Vg5UHVgpdG+pj64iz5X5YBm2e+PUBo+2HUwB6E2ki9Moi9nGXotT+BGmAB9oO6/wVl0kFzmdAMvwAAAABJRU5ErkJggg%3D%3D%5D%5Bif%20%28event.shiftKey%29%20BrowserReloadSkipCache%28%29%3B%20else%20BrowserReload%28%29%3B%5D%5Bthis.ReloadAll%3Dfunction%28%29%7B%0A%20%20gBrowser.reloadAllTabs%28gBrowser.mContextTab%29%3B%20%20%0A%7D%0A%0A%20var%20nMItem%3Dfunction%28label%2Cimg%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.ReloadAll.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%29%27%29%3B%0A%20%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20mP.appendChild%28nMItem%28%27Reload%20All%20Tabs%27%2Cthis.image%2Cthis%29%29%3B%0A%0A%20this.appendChild%28mP%29%3B%0A%20this.type%3D%22menu-button%22%3B%0A%0A

Stop:

Выделить код

Код:

custombutton://Stop%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1gkPDzESY3gWcgAAAqFJREFUeNplkz1sE0kYhp9dZzfBXq8HYpQUBxjOinQUVhBQRKIB3XFSjkgIAlQUAV1/6VPS5yip0FFCwU8kBxSJSG7QFXBgCayDIEwgQPjd7Np79s7uDIWDiXOfNBppPj2v3u9nDDbEpdzAqOtkFp1MWmx8x4BGM/RW/ebPf/itB4DekPoO57dtXTw2dULYfQriBJK4c8cxkWExd/WO//D9p/ELjegeoLoCXfj8KWF/eQuvlkFKiNaPlDA8TLTrR+auLfSIpLrw76eFHXxg6e8aq6GJSMWk0Mh2zNPWFtZWPpA32hQPHej3l99NjsioUomSFdN1MovHzk0K21tl6d4Ttl/8i+L1BapBmjCMqMbbKM5X2H7lBs+erGDUakycOOzuFdkykDGdTFrYtobXy0jTJl0oYAlB6WaZ2q4xSrfmsYQgXSggtzjIF3VSzYCsk3aBnAl0GiUlxWxM9fg40vOwhGD/5ctYQiA9j0fjRynITyil0bo7BKsjkMQQxVhofur7QnV6umeK1elpRoKXmIBSCrTq5r47iCQybFGTgtLsbI9AaXaWf7M7acsYlSi00t0FMDHWHUjJUtOmdHO+a/v+1FS3nNHyAi/tPEmyyUGjGXqR7oOhIaymT1ivd2r+7Sgj98s8Gv8F6XmE9TpmsIa9ewfazRE0Qh/A+NMd2P9DfuvdiTO/uvbzpzx7/Ao54FCIP5NC04pi6lYeM/Ao7Bmkf1+JuRsV/9bKx7NX/pMPUrfb8bsRGVX8+pvJ4qGD/YO6Re7zW3SiSJIEnSiybZ/B3cOb4X+AtW9/wZxx7LHRocHyxMkjbioMQOtOs7RCK4V2c5thD2gaG5ptzjj22F6RLa8vSc93Cxqhf/uj3wMDyqA3TCAD5ACL/4cE1r7BAF8BBX1jYyT/fJkAAAAASUVORK5CYII%3D%5D%5BBrowserStop%28%29%3B%5D%5Bthis.StopAll%3Dfunction%28%29%7B%0A%20try%7B%0A%20%20for%20%28var%20i%3D0%3Bi%3CgBrowser.browsers.length%3Bi++%29%7B%0A%20%20%20%20gBrowser.browsers%5Bi%5D.stop%28%29%3B%0A%20%20%7D%0A%20%7Dcatch%28ex%29%20%7B%7D%0A%7D%0A%20var%20nMItem%3Dfunction%28label%2Cimg%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20m.f%3Dobj.StopAll.bind%28obj%29%3B%0A%20%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%29%27%29%3B%0A%20%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0A%20var%20mP%3Ddocument.createElement%28%27menupopup%27%29%3B%0A%20mP.appendChild%28nMItem%28%27Stop%20All%20Tabs%27%2Cthis.image%2Cthis%29%29%3B%0A%0A%20this.appendChild%28mP%29%3B%0A%20this.type%3D%22menu-button%22%3B

Так?

Update: в пред. раз забыл картинку в base64 отконвертировать. Исправил.

Возникла одна проблема: со всплывающими подсказками. Если вывести всплывающую подсказку для любой другой кнопки панели инструментов (к примеру, "Открывает новую вкладку"), а потом посмотреть ее для кнопки "Stop All Tabs", то она будет такой же (т.е. "Открывает новую вкладку"). И только после повторного обращения к кнопке "Stop All Tabs" ее всплывающая подсказка становится адекватной содержанию кнопки.

Аналогочно и с кнопкой "Reload All Tabs".

Вопрос.
Код кнопки – понятно.
Установил кнопки, которые сами реализуют функционал BBCode (из сайта - Домашняя страница)
Поле “код”, уже заполнено.
А что необходимо вводить в другое поле, или добавлять некий дополнительный файл, чтобы эта кнопка, функционировала?
(При нажатии, к примеру, открывала Promt, находящийся на диске?)
Спасибо.

Вопрос, не планируется ли это расширение прикрутить на Thunderbird?

Custom Buttons работает в Thunderbird.

Custom Buttons работает в Thunderbird.

Отлично! Может тогда кто-нибудь кнопочки наваяет "получить всё" и "удалить всё помеченное как спам"? Заранее признателен. :)

GASon
Картинки искать лень, прикрути сам какие-нибудь.
1. "получить всё":

Выделить код

Код:

goDoCommand('cmd_getNewMessages')

2. "удалить всё помеченное как спам":

Выделить код

Код:

goDoCommand('cmd_deleteJunk');

Anton, во первых, путь вегда можно определить: %путькпапке профиля%/extensions/custombuttons@xsms.org/что-тотам
во вторых, права на запись точно есть иначе бы расширение было бы попросу не поставить.
в третьих, я не предлагаю использовать динамические оверлеи.
ну и в четвёртых, у тебя с Яном одна шизофрения? :)

Пит Бэнкман

Возникла одна проблема: со всплывающими подсказками...

Не знаю, воспроизвести не получается. Возможно, что-то с чем-то конфликтует..
Levabati

А что необходимо вводить в другое поле, или добавлять некий дополнительный файл, чтобы эта кнопка, функционировала?
(При нажатии, к примеру, открывала Promt, находящийся на диске?)
Спасибо.

Не очень понял, какой функционал нужен для кнопки?

GASon
Картинки искать лень, прикрути сам какие-нибудь.

Зачет! Большое человеческое спасибо! Всё работает. :) За исключением того, что почту надо было забирать со всёх ящиков и так же удалять...

ЗЫ: Видимо я криво сделал постановку задачи...сорри. :(

Dark-Demon
Все эти способы (и аналогичные) давно обдуманы, обмусолены, и протестированы самыми разными способами. НЕ ВЫХОДИТ.
(а если и выходит, то через страшные извращения)

Я так понимаю, ты предлагаешь:
1. Использовать статический оверлей, расположенный в %путькпапке профиля%/extensions/custombuttons@xsms.org/buttons.xul, что то же самое, что и chrome://custombuttons/content/ ?
2. Записывать в него новые кнопки при создании оных ?
3. Чтоб этот оверлей обрабатывался стандартным способом, и добавлял кнопки после следующего запуска?

Внимание, вопрос:
ты не видишь в этом способе никаких недостатков? :)

ну и в четвёртых, у тебя с Яном одна шизофрения? :)

Ага, свою справку могу тебе предъявить. :)

Yan
Просто, не могу понять, что необходимо сделать, чтобы кнопка, уже установленная на панели
инструментов, при нажатии на нее, "включала" некую программу?
(При нажатии, к примеру, открывала Promt, находящийся на диске?)
Спасибо.

Levabati
Вот тут кнопка для запуска внешних приложений:
http://forum.mozilla-russia.org/viewtopic.php?pid=109330#p109330

Или попроще, только для одного приложения, например "Блокнота":

Выделить код

Код:

custombutton://Launch%20Notepad%5D%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhCwAQAPcAAFVVVWRkZKmpqa+wr7SztLa2tr28vL2+vcLDw8TDxMfHx8nJysrKys7Ozc/P0NHR0dLR0tTU1NbW1tfX19va2tvb29zc3d7e3eDh4eLi4uTj4+Xm5ebm5ufn5+jo6Orq6uzr7O7u7e/v7vDv7/Hw8PPz8vT09PX19fn4+fn6+vr6+/z8/P/+/v///v/+//7//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///yH5BAEAAP8ALAAAAAALABAAAAhxAP8RGEiQIAACMBIqVHhwocOGASJKDACjYUIXMF4wRNjCIYsUECdGHGGxIwwUJUBssPhixQkRHjJUCCkSwkEVJkJ0wEAhQgMFB0l80HBhwgMGCQ4c5CAyIoGDFiQ4WIDAQIEBAqBKpWoVK4CvYMN+DQgAOw%3D%3D%5D%5Bvar%20path%3D%27C%3A%5C%5Cwindows%5C%5Cnotepad.exe%27%3B%0A%0Avar%20arguments%3D%5B%27%27%5D%3B%0Avar%20file%20%3D%20Components.classes%5B%27@mozilla.org/file/local%3B1%27%5D%0A%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0Avar%20process%20%3D%20Components.classes%5B%27@mozilla.org/process/util%3B1%27%5D%0A%20%20%20%20.getService%28Components.interfaces.nsIProcess%29%3B%0A%20file.initWithPath%28path%29%3B%20%0A%20process.init%28file%29%3B%0A%20process.run%28false%2Carguments%2Carguments.length%29%3B%5D%5B

Yan
Не получается.
Все вроде делаю, как здесь описано.
По кнопке, правой кнопкой мышки.
Редактировать.
Код, вставляю в поле “код”.
Инициализация, ничего не меняю.
Не работает.
В чем, проблема?

(Для установки кнопки нужно выделить код из пред. сообщения и вставить его в адресную строку)
Т.е. в поле код кнопки должно получиться:

Выделить код

Код:

var path='C:\\windows\\notepad.exe';

var arguments=[''];
var file = Components.classes['@mozilla.org/file/local;1']
    .createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
    .getService(Components.interfaces.nsIProcess);
 file.initWithPath(path); 
 process.init(file);
 process.run(false,arguments,arguments.length);

Соответственно, путь к notepad.exe может быть другой.

Yan
Предлагаю другой вариант:
По клику средней(левой, если приложение не выбрано) открывается проводник в кот. пользователь указывает путь к программе.

ты не видишь в этом способе никаких недостатков?

нет :sick:

Dark-Demon

нет :sick:

Недостаток номер 1:
При установке новой версии расширения файлик с кнопками потрется.. Нехорошо получится, правда? :)

Dark-Demon пишет:

...
...права на запись точно есть иначе бы расширение было бы попросу не поставить.
...

Логично. Во время установки расширения права есть. Потом может не быть.

...
у тебя с Яном одна шизофрения?...

На этом форуме у меня нет раздвоения личности. idee fix по поводу статических оверлеев была, я даже бредил чего-то на xml Yan'у в PM. Но логика победила, и я поправился... В очередной раз : )

Yan!
Спасибо, с "Notepad", получилось.
А вот здесь:

Вот тут кнопка для запуска внешних приложений:
http://forum.mozilla-russia.org/viewtop … 30#p109330

ничего не выходит.
Видимо писали код, для определенной машины.
Только для нее он и подходит?
Я так понимаю, соответствующий код, может написать, только специалист?
Или спец.программа для этого, есть?

При установке новой версии расширения файлик с кнопками потрется.. Нехорошо получится, правда?

хранить копию в корне профиля.
а если есть возможность (сам ещё не пробовал) то оттуда и оверлеить. что-то вроде

Выделить код

Код:

content profile ../
overlay    чттототам chrome://profile/content/custombutton.xul

Логично. Во время установки расширения права есть. Потом может не быть.

думаю, стоит проверить...

в общем на днях помучаю лису оверлеями и отпишусь...

Levabati

ничего не выходит.
Видимо писали код, для определенной машины.

Контекстное меню на кнопке -> редактировать -> код инициализации
Там можно (и нужно) поменять пути к программам на нужные.

Добавлено Срд 20 Сен 2006 13:10:01 :
Dark-Demon

хранить копию в корне профиля.

Ну да, но при переустановке расширения пользователь запустит Лису, а там нет ни одной кнопки! Копия из профиля сработает только при следующем запуске. Вот такие пироги.

а если есть возможность (сам ещё не пробовал) то оттуда и оверлеить. что-то вроде

На сколько я знаю, нет такой возможности.

Добавлено Срд 20 Сен 2006 13:12:27 :

в общем на днях помучаю лису оверлеями и отпишусь...

Да не мучайся. :) Сейчас будет немного побольше времени, и я доделаю новую версию с новым принципом через xbl. Всё должно быть тип-топ. :)

На сколько я знаю, нет такой возможности.

есть :) http://dark-demon.nm.ru/etc/files/cb2-tp1.rar
с xpi пока не возился, в общем содержимое архива следует распаковать в папку профиля. после перезагрузки должна появиться кнопка imageSH. Правда она ещё не доделана - я не знаю как отлавливать изменение соответствующей настройки....

я доделаю новую версию с новым принципом через xbl.

одно другому не мешает...

Dark-Demon пишет:

На сколько я знаю, нет такой возможности.

есть :) http://dark-demon.nm.ru/etc/files/cb2-tp1.rar
...

Здорово : ) :beer:

Dark-Demon
Хех, класс!
Я рад, что был не прав.

Yan, ну так что, берёшь на вооружение? :rock:

Dark-Demon
Обязательно. А вообще, протестирую оба варианта в поисках плюсов и минусов, и может быть даже буду использовать их одновременно. :)

не работают кнопки. в чем может быть проблема?

Крыска
Firefox 1.5?
Есть сообщения в JS-консоли?

Люди, напишите пожалуйста кнопку Multi-Scrapbook, аналогичную кнопке, входящей в Scrapbook.

Dimanish

Кнопка Multi-ScrapBook:

Выделить код

Код:

custombutton://Multi-ScrapBook%5D%5Bchrome%3A//scrapbook/skin/main_16.png%5D%5B%5D%5B%20var%20nMItem%3Dfunction%28label%2Cp%2Cobj%29%7B%0A%20%20%20var%20m%3Ddocument.createElement%28%27menuitem%27%29%3B%0A%20%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20%20if%20%28p%29%7B%20m.setAttribute%28%27path%27%2Cp%29%3B%0A%20%20%20%7Delse%7B%0A%20%20%20%20%20m.setAttribute%28%27isDefault%27%2Ctrue%29%0A%20%20%20%7D%0A%20%20%20m.setAttribute%28%27type%27%2C%27radio%27%29%3B%0A%20%20%20m.setAttribute%28%27name%27%2C%27radio%27%29%3B%0A%20%20%20return%20m%3B%0A%20%7D%0A%0Athis.%20orient%20%3D%20%22vertical%22%3B%0Athis.type%3D%27menu%27%3B%0Avar%20popup%3Ddocument.createElement%28%27menupopup%27%29%3B%0Apopup.setAttribute%28%27oncommand%27%2C%27this.parentNode.changeScrapbookDirectory%28event%29%27%29%3B%0Apopup.f%3Dfunction%28%29%7B%0A%09while%20%28this.childNodes.length%3E0%29%20this.removeChild%28this.childNodes%5B0%5D%29%3B%0A%0A%09var%20file%3DsbCommonUtils.DIR.get%28%22ProfD%22%2C%20Components.interfaces.nsIFile%29.clone%28%29%3B%0A%09file.append%28%22ScrapBook%22%29%3B%0A%09file.append%28%22multibook.txt%22%29%3B%0A%0A%09var%20ret%20%3D%20%5B%5D%3B%0A%09var%20lines%20%3D%20sbCommonUtils.convertToUnicode%28sbCommonUtils.readFile%28file%29%2C%20%0A%09%09%09%09%09%09%09%09%22UTF-8%22%29.split%28%22%5Cn%22%29%3B%0A%09for%20%28%20var%20i%20%3D%200%3B%20i%20%3C%20lines.length%3B%20i++%20%29%0A%09%7B%0A%09%09var%20item%20%3D%20lines%5Bi%5D.replace%28/%5Cr%7C%5Cn/g%2C%20%22%22%29.split%28%22%5Ct%22%29%3B%0A%09%09if%20%28%20item.length%20%3D%3D%202%20%29%20ret.push%28item%29%3B%0A%09%7D%0A%0A%09var%20i%3D0%3B%0A%09while%20%28i%3Cret.length%29%7B%0A%09%09this.appendChild%28nMItem%28ret%5Bi%5D%20%5B0%5D%2Cret%5Bi%5D%20%5B1%5D%2Cthis%29%29%3B%0A%09%09i++%3B%0A%09%7D%0A%09this.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%09this.appendChild%28nMItem%28%27Profile%20Folder%27%2Cnull%2Cthis%29%29%3B%0A%09/*----*/%0A%09var%20PS%3Dthis.parentNode.PS%3B%0A%09if%20%28PS.getBoolPref%28%27scrapbook.data.default%27%29%29%7B%0A%09%09this.getElementsByAttribute%28%27isDefault%27%2C%27true%27%29%5B0%5D%0A%09%09%09.setAttribute%28%27checked%27%2Ctrue%29%3B%0A%09%7Delse%7B%0A%09%09var%20path%3DPS.getCharPref%28%27scrapbook.data.path%27%29%3B%0A%09%09for%20%28var%20i%3D0%3Bi%3Cthis.childNodes.length%3Bi++%29%7B%0A%09%09%09if%20%28this.childNodes%5Bi%5D.nodeType%3D%3D1%29%7B%0A%09%09%09%20%20%20%20if%20%28this.childNodes%5Bi%5D.getAttribute%28%27path%27%29%3D%3Dpath%29%7B%0A%09%09%09%09this.childNodes%5Bi%5D.setAttribute%28%27checked%27%2Ctrue%29%3B%0A%09%09%09%09break%3B%0A%09%09%09%20%20%20%20%7Delse%7B%0A%09%09%09%20%20%20%20%20%20%20%20this.childNodes%5Bi%5D.removeAttribute%28%27checked%27%29%3B%0A%09%09%09%20%20%20%20%7D%0A%09%09%09%7D%0A%09%09%7D%09%0A%09%7D%0A%7D%0Apopup.setAttribute%28%27onpopupshowing%27%2C%27this.f%28%29%3B%27%29%3B%0Athis.%20appendChild%20%28popup%29%3B%0A%0Athis.%20changeScrapbookDirectory%20%3D%20function%20%28event%29%7B%0A%09if%20%28event.%20target.%20getAttribute%20%28%22isDefault%22%29%3D%3D%27true%27%29%7B%0A%09%09this.PS.setBoolPref%28%27scrapbook.data.default%27%2Ctrue%29%3B%0A%09%7Delse%7B%0A%09%09var%20path%3Devent.target.getAttribute%28%22path%22%29%3B%0A%09%09var%20title%3Devent.target.getAttribute%28%22label%22%29%3B%0A%09%09this.PS.setBoolPref%28%27scrapbook.data.default%27%2Cfalse%29%3B%0A%09%09this.PS.setCharPref%28%27scrapbook.data.path%27%2Cpath%29%3B%0A%09%09this.PS.setCharPref%28%27scrapbook.data.title%27%2Ctitle%29%3B%0A%09%7D%0A%09try%20%7B%0A%09%09var%20winEnum%20%3D%20sbCommonUtils.WINDOW.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%09%09while%20%28%20winEnum.hasMoreElements%28%29%20%29%7B%0A%09%09%09var%20win%20%3D%20winEnum.getNext%28%29%0A%09%09%09%09.QueryInterface%28Components.interfaces.nsIDOMWindow%29%3B%0A%09%09%09try%20%7B%0A%09%09%09%09win.sbBrowserOverlay.refresh%28%29%3B%0A%09%09%09%09win.sbBrowserOverlay.onLocationChange%28%29%3B%0A%09%09%09%09win.document.getElementById%28%22sidebar%22%29.contentWindow%0A%09%09%09%09%09.sbMainService.refresh%28%29%3B%0A%09%09%09%7D%20catch%28ex%29%20%7B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%20catch%28ex%29%20%7B%0A%7D%0A%7D%0A%0Athis.PS%3Dcustombuttons.ps%3B

Тестировалась для ScrapBook 1.2.0.5

P.S. С днём рождения!

Yan
Что-то не работает. Появляется кнопка с дропмаркером, щёлкнув на который открывается пустой список:
http://forum.mozilla-russia.org/uploaded/Multi_Scrapbook_1.png
P.S. Спасибо :)
P.S.S. Кнопка очень нужна товарищу Крыска.

Yan
ааа. наверное у тебя как всегда не включены подписи :)
My FF 2.0 [20060918] Rus
как только пересел на 2,0, так кнопки и не работали. переустановили расширение, но не помогло. удалял, ставил кнопки....

Кнопка нужна очень-очень :blush::blush::blush:

Крыска
http://forum.mozilla-russia.org/viewtopic.php?pid=131940#p131940

Dimanish

Что-то не работает. Появляется кнопка с дропмаркером, щёлкнув на который открывается пустой список:

Ага, оказывается, у меня Scrapbook старой версии стоял, и имена функций не совпадали.
Исправил. Устанавливать из предыдущего сообщения.

Yan, я тут продолжаю развивать мысль...
http://dark-demon.jino-net.ru/~files/cb2-tp2.rar
переделал всё на xbl, доделал кнопку imageSH.
но меня смущает некоторая неопрятность с обсервом. чувствую, что если написать

Выделить код

Код:

<implementation implements="nsIPrefBranch">

, то можно его добавить более эстетично :)
никто не работал с имплементсами?

Dark-Demon
Что-то я не очень понимаю твою мысль.
Зачем реализацию кнопки запихивать в xbl?

Yan, xbl более удобен для писателей кнопок. С его помощью можно задавать конструктор и деструктор, хендлеры позволяют вешать обработчики событий без нагромождения яваскрипт условий, да и вообще, код получается красивым и понятным.

я думаю окно редактирования кнопки можно сделать так:
поле id (cb2- в начале добавляется автоматом)
поле label - подпись у кнопки (по дефолту равна id)
поле image - дефолтовая картинка
поле css - тут задаётся стиль отображения, иконки и тп (привязка xbl осуществляется автоматом)
поле xbl - тут собственно код кнопки (без обрамляющих <binding> и <bindings>)
в табах смысла не вижу, а вот сплиттер между двумя последними полями не помешает...

Dark-Demon
Гм, не знаю-не знаю. Получится, что чтобы написать кнопку, нужно знать JS+DOM+CSS+XBL. Не великоват наборчик получается? :)

IMHO, надо наоборот идти по пути упрощения написания кнопки. В общем, пока я к таким радикальным преобразованиям не готов. Надо всё хорошенько обдумать.

Yan, достаточно снабдить хорошими примерами и любой интересующийся разберётся. я с xbl освоился разбирая нехитрый пример.

не работает... отключение указанных расширений и установка 1,2 mod не помогла :(

Крыска, юзай мою модификацию :) "код" пихай в <handler event="click" button="0">, а "инициализация" в <constructor>

Dark-Demon
хм... че-то не совсем ясно. а в каком файле чего менять?

и новые кнопки создаются в одном и том же файле или под каждую кнопку новый файл?

Крыска, в одном файле. custombuttons2.xbl
а чтобы добавить несколько кнопок, нужно править ещё и custombuttons2.xul с custombuttons2.css, действуя по аналогии (идентификаторы главное поменять, а остальное не важно)

а вообще, какие кнопки-то интересуют?

Можно ли создать кнопку, которая бы удаляла текущую страницу из закладок?
(И если можно, то может ли она еще и историю удалений писать куда-нибудь...)

Dark-Demon
bbcode и кнопка мульти-скрэпбука (код выше)

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

например  ББ-код "Цитата". правая кнопка выделить цитату, а левая - вставить как цитату :)

Если всё таки можно, накропайте кнопочку для TB "Получить почту из всех ящиков". :)

GASon

Если всё таки можно, накропайте кнопочку для TB "Получить почту из всех ящиков". smile

А ведь же есть такая в mr.tech local install!!!

custombuttons 0.0.2 alpha
Внимание! Это тестовая версия, со всеми вытекающими отсюда последствиями.

Совместимость: FF 1.5.0.* - 2.0

Функциональных изменений никаких, но изменился принцип работы расширения и формат хранения кнопок. Теперь они хранятся в каталоге custombuttons профиля. При установке расширение удалит все кнопки из prefs.js и сохранит их в новом формате. Так что если Вы планируете в будущем вернуться на старую версию, сделайте backup файла prefs.js.

Скачать custombuttons 0.0.2 alpha
(Ниже есть более новая версия)

При тестировании просьба особое внимание обратить на совместимость с другими расширениями.
________________________________________________________

Если в Firefox2 не работает кнопка с выпадающем меню, нужно в коде её инициализации поместить this.type='menu'. Из-за этого в частности не работала кнопка "Multi-ScrapBook".

Опаньки.... :sick:
Кнопки заработали!!! Вот только пропали ВСЕ элементы фокса которые стояли... т.е. кнопки вперед, назад, стоп, строка адреса....

фигасе компромисик :lol::lol::lol:

Добавлено Птн 29 Сен 2006 01:14:51 :
Оххх... нашлись.. оказывается произошел резет всех элементов... они оказались на панелях где по умолчанию и стояли, а не там куда я их в одну строчку сгрупировал.

но самое интересное, что теперь у меня 2е!!! строки поиска!

Добавлено Птн 29 Сен 2006 01:20:26 :
Правда поисковики не могут быть разными :)
http://img237.imageshack.us/img237/879/untitled11yr7.th.jpg

Добавлено Птн 29 Сен 2006 01:21:20 :
Скриншот 173,4 Кб (предупреждаю)

Добавлено Птн 29 Сен 2006 01:23:36 :
Кнопка Мульти-бука пока что-то не работает :(

вставил код из сообщения 133681 и добавил код инициализации (появилась стрелочка)...

trolll пишет:

А ведь же есть такая в mr.tech local install!!!

Точно есть.

И ещё на один шажок ближе к идеалу: http://dark-demon.jino-net.ru/~files/cb2-tp3.rar
добавил бб-кнопки (при этом заюзал ООП в плане наследования ;)), а также Multiscrapbook, правда не уверен работает ли он...

Yan, ща посмотрим, что ты там замутил... :)

Крыска
Мда.. Такого хулиганства я не ожидал...
Попробовал воспроизвести - не получается.
AIOS у меня никак не хочет заводиться, ни 0.6.4, ни 0.7 RC4, даже на чистом профиле.

Кнопка Мульти-бука пока что-то не работает :(
вставил код из сообщения 133681 и добавил код инициализации (появилась стрелочка)...

Странно. У меня работает. Scrapbook 1.2.0.4, кнопка из 133681 (неизмененная, я её уже там отредактировал).
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1) Gecko/20060928 BonEcho/2.0
В JS-консоле что-нибудь есть?

Dark-Demon

Yan, ща посмотрим, что ты там замутил... :)

Одну явную ошибку я уже нашел - не определяется event в oncommand-коде.
Попозже перевыложу исправленную версию.

Продолжу аггитировать за xul+css+xbl...
1. иконки в base64 занимают прилично места, так что нет смысла пихать их прямо в код.
лучше в цсс, где им и место. хотя, ещё лучше - отдельными файлами, тогда они и прокешируются нормально, а не будут каждый раз из строки декодироваться.
2. возможность в простой и наглядной форме организовывать не только кнопки, но и поля ввода, добавлять меню и прочие xul-елементы. в тех ужасах, что сейчас реализуют это с помощью DOM - сам чёрт ногу сломит. на xbl же достаточно просто вставить соответствующие теги.

Dark-Demon
Принципиально я не против.
Но к перечисленному ранее у меня еще вопросы появились, например:
- можно ли будет быстро отредактировать кнопку без перезагрузки браузера?

В общем, пока у меня большие сомнения. Впрочем, я опять буду рад, если я ошибаюсь. :)

возможность в простой и наглядной форме организовывать не только кнопки, но и поля ввода, добавлять меню и прочие xul-елементы. в тех ужасах, что сейчас реализуют это с помощью DOM - сам чёрт ногу сломит. на xbl же достаточно просто вставить соответствующие теги.

Это безусловный плюс. Правда, я не думаю, что xbl для большинства так уж и прозрачен.
Но можно пойти по другому пути. Сделать wizard, по аналогии с Customizable toolbar buttons, только расширенный, с выпадающими меню, и т.п. А кнопку формировать через DOM.

Добавлено Птн 29 Сен 2006 15:56:03 :
Забыл сказать. Кнопка Multi-book в твоей сборке почему-то не работает, хотя код вроде верный (this.type='menu' я добавлял).

Добавлено Птн 29 Сен 2006 15:59:14 :
P.S. Если есть возможность, подтвердите кто-нибудь, или опровергните баг, который я отписал на xpoint:
http://xpoint.ru/forums/programming/XUL/thread/38351.xhtml
Это важно для работы расширения.

можно ли будет быстро отредактировать кнопку без перезагрузки браузера?

думаю да, ведь в xul хранится только указание, что кнопка наличиствует, а xbl подключается через css. потом попробую сделать...

Dark-Demon пишет:

Продолжу аггитировать за xul+css+xbl...

имхо, на каждую кнопку по xbl - слишком расточительно.

...
2. возможность в простой и наглядной форме организовывать не только кнопки, но и поля ввода, добавлять меню и прочие xul-елементы. в тех ужасах, что сейчас реализуют это с помощью DOM - сам чёрт ногу сломит. на xbl же достаточно просто вставить соответствующие теги.

не уверен. можно попробовать соорудить какую-нибудь кнопку на xbl, чтобы посмотреть - будет ли это проще.

Yan пишет:

...
- можно ли будет быстро отредактировать кнопку без перезагрузки браузера?
...

Можно.
js для cb

Выделить код

Код:

var b = document. getElementById ("go-button");
//b. style. MozBinding = "url(chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton)";
b. style. MozBinding = "url(chrome://custombuttons/content/bind1.xml#bind1)"; // или document. addBinding (b, "chrome://custombuttons/content/bind1.xml#bind1"); // жаль, removeBinding не работает

+ xbl

Выделить код

Код:

<?xml version="1.0" encoding="UTF-8"?>

<bindings id="binds1"
          xmlns="http://www.mozilla.org/xbl"
          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
          xmlns:xbl="http://www.mozilla.org/xbl"
          xmlns:html="http://www.w3.org/1999/xhtml">

    <binding id="bind1" extends="chrome://global/content/bindings/toolbarbutton.xml#toolbarbutton">
        <handlers>
            <handler event="click">
                alert ("bind1");
            </handler>
        </handlers>    
    </binding>

</bindings>

правда, после привязки bind1 не получилось отредактировать его из внешнего редактора.

Yan
вроде консоль по поводу кнопок или расширения молчит.

Продолжаю радовать всех своими глюками...

на этот раз под раздачу влетела версия Dark-Demon:)

обнаружил там свою желанную кнопку мульти-бука... ставлю.... а она сразу пропадает.... и нет её. стер и поставил заново... понажимал пару раз на кнопку (кстати не естественно приподнятой) результат нулевой.

в настройках кнопок новые кнопки "дрожат"...

вобщем надо бы с нуля попробовать все сделать. а то моему профилю уже стока времени (не меньше года так точно).

на время теста отключался оригинальный кастомбуттонс

кстати скрэпбуки находяться на другом логическом диске, если конечно это может влиять.

Anton

правда, после привязки bind1 не получилось отредактировать его из внешнего редактора.

Не очень понял. Т.е. привязать bind1, потом его изменить, и потом попробовать опять привязать?
Крыска
Только что поставил последнюю версию Scrapbook'а, последнюю сборку custombuttons, и кнопку отсюда. Работает.. Так что помогай, говори, что еще поставить, чтоб она перестала работать. Сам я не справляюсь. :)

Добавлено Сбт 30 Сен 2006 01:08:46 :
Крыска

вобщем надо бы с нуля попробовать все сделать. а то моему профилю уже стока времени (не меньше года так точно).

Пожалуй, действительно стоит попробовать на чистом профиле.

Dark-Demon

Крыска пишет:

обнаружил там свою желанную кнопку мульти-бука... ставлю.... а она сразу пропадает.... и нет её. стер и поставил заново... понажимал пару раз на кнопку (кстати не естественно приподнятой) результат нулевой.

Подтверждаю.
Это из-за того, что для всех custom-кнопок указывается
-moz-binding: url('chrome://cb2-profile/content/custombuttons2.xbl#allbuttons');
А нужно для каждого типа кнопки (обычная, menu, menu-button) указывать свой MozBinding, а то для кнопок с меню не отрабатывают дефолтные binding'и #menu (или #menu-button) из chrome://global/content/bindings/toolbarbutton.xml

По-моему так, я в xbl не силён. Но в последней своей сборке я так сделал, и вроде всё прошло успешно.

Добавлено Сбт 30 Сен 2006 01:12:27 :
Крыска
Забыл спросить про кнопку Scrapbook'а.
Выпадающее меню вообще не появляется, или в нём есть только "Profile Folder"?

Yan
чистый профиль не спас. на нем поставил плагин для установки "несертифицированных" расширений, Ббкод и кастом последний, скрап последний... результат нулевой.

при нажатиии на кнопку она выделяется, но ничего не происходит. даже меню не появляется....

есть у меня подозрения, что я что-то не то делаю....:blush:

Добавлено Сбт 30 Сен 2006 01:24:36 :
кстати на новом профиле сгенерировал альбомы внутри профиля.... явно глюк не в этом.

Добавлено Сбт 30 Сен 2006 01:33:37 :
может виноват тот факт, что у меня релиз ФФ не бета и не РК1, а между ними.

Крыска
Какие-нибудь другие кнопки с выпадающим меню работают? Эти, например?

Yan пишет:

Anton

правда, после привязки bind1 не получилось отредактировать его из внешнего редактора.

Не очень понял. Т.е. привязать bind1, потом его изменить, и потом попробовать опять привязать?
...

Да.

Yan
не работают и они :( где ж ручки то кривые у меня... не ясно :(

Интересно, у кого-нибудь кроме меня эта последняя alpha работает?
Сдаётся мне, что ручки-то кривые у меня, только вот никак не пойму, где именно...

Yan, а ты не можешь в .htaccess прописать

Выделить код

Код:

AddType application/x-xpinstall .xpi

?

INFOMAN
Не могу. На newmail.ru вообще мало что можно.

Сборку поставил, добавил кнопку, после перезапуска кнопка исчезла.
Посмотрел в профиль, почему-то папка custombuttons имеет права 644 (т.е. без права выполнения), а надо 755 или 700.
:::: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.8.1) Gecko/20060918 Firefox/2.0

Добавлено Пнд 02 Окт 2006 02:24:35 :
Поменял вручную права на 700, вроде работает

INFOMAN
Чёрт! Ну конечно! Copy-past'нул, а подумать головой забыл!
Огромное спасибо!

Это из-за того, что для всех custom-кнопок указывается
-moz-binding: url('chrome://cb2-profile/content/custombuttons2.xbl#allbuttons');

сорри, забыл убрать extends для #allbuttons - теперь он совершенно не нужен :) а биндинг этот не трож - он жизнено необходим :)

Не могу. На newmail.ru вообще мало что можно.

переезжай на jino-net.ru :)

поковырялся xbl-ками. динамически их применять можно, но трабла в том, что они кешируются, а потому единственное решение, что я смог пока придумать - это объявлять кнопки так:

Выделить код

Код:

<toolbaritem id="cb2-images" class="custombutton" style="-moz-binding: url('chrome://cb2-profile/content/custombuttons2.xbl#cb2-imagesh');" />

,а после редактирования xbl-файла создать его временную копию с другим именем и выполнить такого плана код:

Выделить код

Код:

button.style.cssText= "-moz-binding: url('chrome://cb2-profile/content/cb2-temp-234.xbl#cb2-imagesh'); ";

Dark-Demon, на jino-net тоже AddType запрещён

Добавлено Пнд 02 Окт 2006 14:24:50 :
Я там php-скрипт юзал, чтобы правильный Content-Type выдавать

по ходу дела xbl-ки надо править через вот эту функцию:
http://www.xulplanet.com/references/objref/XULDocument.html#method_loadBindingDocument

ща буду ковырять... ;)

custombuttons 0.0.2 alpha
Внимание! Это тестовая версия, со всеми вытекающими отсюда последствиями.

Совместимость: FF 1.5.0.* - 2.0

Скачать custombuttons 0.0.2 alpha

New:
- исправил права доступа на папку custombuttons в профиле
_____________________________________________________________________

custombuttons 0.0.1.3 alpha

Совместимость: FF 1.5.0.* - 2.0

Скачать custombuttons 0.0.1.3 alpha

New:
- по сравнению с версией 0.0.1.2 добавил только совместимость с Firefox2, а именно пару хаков, чтобы исправно работали кнопки, использующие метод bind.

Yan
Зачем две версии?

Dimanish
Потому что с 0.0.2 возникли некоторые трудности. Видимо, придётся существенно доработать.

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

в общем через ту функцию сделать ничего не получится :( xbl-ки править на лету нельзя и это диагноз :sick: остаётся только вариант с временными файлами...

Dark-Demon пишет:

в общем через ту функцию сделать ничего не получится :( xbl-ки править на лету нельзя и это диагноз...

Интересно, можно сделать ссылку на якорь (#) в data:// ?

Anton, что ты имеешь ввиду?

Если можно сделать ссылку на якорь, можно было бы "подшивать" образ *.xbl-файла по data:// протоколу.

ой какой изврат... зачем?

Dark-Demon пишет:

ой какой изврат... зачем?

Ладно-ладно, не буду спорить. : ) Конечно, временные файлы гораздо естественней и, скорее всего, единственный приемлимый вариант.

Anton, в общем, как и обещал сделал кнопку к своему расширению реализующую выпадающее меню.

в xul надо добавить такой код:

Выделить код

Код:

<toolbaritem id="cb2-useragent" class="chromeclass-toolbar-additional" style="-moz-binding: url('chrome://cb2-profile/content/custombuttons2.xbl#cb2-useragent');" />

а в xbl такой:

Выделить код

Код:

<binding id="cb2-useragent" extends="chrome://custombuttons2/content/custombuttons2.xbl#allbuttons">
    <content context="">
        <xul:menulist>
            <xul:menupopup>
                <xul:menuitem label="default UA" value="" />
                <xul:menuitem label="FF 2.0b2 UA" value="Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2" />
                <xul:menuitem label="IE 6.0sp2 UA" value="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" />
                <xul:menuitem label="Op 9.00 UA" value="Opera/9.00 (Windows NT 5.1; U; ru)" />
            </xul:menupopup>
        </xul:menulist>
    </content>
    <implementation>
        <field name="prefservice">Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch)</field>
        <field name="prefname"> 'general.useragent.override' </field>
        <property name="pref"> 
            <getter>    return navigator.userAgent;    </getter>
            <setter>
                <![CDATA[
                    if (val=='') this.prefservice.clearUserPref(this.prefname);
                    else this.prefservice.setCharPref(this.prefname,val);
                    return val;
                ]]>
            </setter>
        </property>
    </implementation>
    <handlers>
        <handler event="command">    this.pref= this.boxObject.firstChild.value;    </handler>
    </handlers>
</binding>

css в данном случае не используется. есть мысль вообще от него отказаться...

К сожалению, в прошлый раз никто не ответил. Спрашиваю еще раз.

Можно ли создать кнопку, которая бы удаляла текущую страницу из закладок?
(И если можно, то может ли она еще и историю удалений писать куда-нибудь...)

pongo, можно, разрешаю.

Dark-Demon, здорово! Но дело в том, что я не разбираюсь в программировании расширенией. Может быть, кто-нибудь напишет?

pongo
Слишком уж никому не нужная кроме вас кнопка.

pongo

Выделить код

Код:

custombutton://%u0423%u0434%u0430%u043B%u0438%u0442%u044C_%u0412%u0421%u0415_%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438_%u043D%u0430_%u0442%u0435%u043A%u0443%u0449%u0438%u0439_%u0430%u0434%u0440%u0435%u0441%5D%5B%5D%5Btry%0A%7B%0A%20%20%20%20var%20rdfs%20%3D%20Components.%20classes%20%5B%22@mozilla.org/rdf/rdf-service%3B1%22%5D.%20getService%20%28Components.%20interfaces.%20nsIRDFService%29%3B%0A%20%20%20%20var%20bmds%20%20%3D%20rdfs.%20GetDataSource%20%28%22rdf%3Abookmarks%22%29%3B%0A%20%20%20%20var%20urlr%20%3D%20rdfs.%20GetResource%20%28%22http%3A//home.netscape.com/NC-rdf%23URL%22%29%3B%0A%20%20%20%20var%20urlv%20%3D%20rdfs.%20GetLiteral%20%28getBrowser%20%28%29.%20currentURI.%20spec%29%3B%0A%20%20%20%20var%20tbms%20%3D%20bmds.%20GetSources%20%28urlr%2C%20urlv%2C%20true%29%3B%0A%20%20%20%20var%20tbm%2C%20alo%2C%20res%2C%20tar%2C%20ali%2C%20src%3B%0A%20%20%20%20while%20%28tbms.%20hasMoreElements%20%28%29%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20tbm%20%3D%20tbms.%20getNext%20%28%29%3B%0A%20%20%20%20%20%20%20%20if%20%28tbm%20instanceof%20Components.%20interfaces.%20nsIRDFResource%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20alo%20%3D%20bmds.%20ArcLabelsOut%20%28tbm%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20%28alo.%20hasMoreElements%20%28%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20alo.%20getNext%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28res%20instanceof%20Components.%20interfaces.%20nsIRDFResource%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tar%20%3D%20bmds.%20GetTarget%20%28tbm%2C%20res%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28tar%20instanceof%20Components.%20interfaces.%20nsIRDFResource%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmds.%20Unassert%20%28tbm%2C%20res%2C%20tar%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20ali%20%3D%20bmds.%20ArcLabelsIn%20%28tbm%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20while%20%28ali.%20hasMoreElements%20%28%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20res%20%3D%20ali.%20getNext%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28res%20instanceof%20Components.%20interfaces.%20nsIRDFResource%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20src%20%3D%20bmds.%20GetSource%20%28res%2C%20tbm%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28res%20instanceof%20Components.%20interfaces.%20nsIRDFResource%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bmds.%20Unassert%20%28src%2C%20res%2C%20tbm%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20var%20rds%20%3D%20bmds.%20QueryInterface%20%28Components.%20interfaces.%20nsIRDFRemoteDataSource%29%3B%0A%20%20%20%20setTimeout%20%28function%20%28%29%20%7Brds.%20Flush%20%28%29%7D%2C%20100%29%3B%0A%7D%0Acatch%20%28e%29%0A%7B%0A%20%20%20%20alert%20%28e%29%3B%0A%7D%5D%5B

Удаляет все закладки на текущий адрес. Историю удалений не ведёт.

Dark-Demon пишет:

Anton, в общем, как и обещал сделал кнопку к своему расширению реализующую выпадающее меню.

Ну, во-первых, если перечитаешь старые PM, то заметишь, что я говорил о контекстном меню.
А во-вторых - почему доступна только с клавиатуры ?

Anton, спасибо, но мне кажется, что код слижком сложный. Есть же BookmarksCommand.deleteBookmark или http://home.netscape.com/NS-rdf#command?cmd=deletebookmark. Вот только я не знаю что с ними делать

pongo пишет:

Anton, спасибо, но мне кажется, что код слижком сложный. Есть же BookmarksCommand.deleteBookmark или http://home.netscape.com/NS-rdf#command?cmd=deletebookmark. Вот только я не знаю что с ними делать

Я начинал разработку кнопки с DoCommand, но не разобрался с аргументами cmd=deletebookmark, так что я тоже не знаю, что с ним делать. И BookmarksCommand/BookmarkRemoveTransaction тоже копал, но, имхо, с ними проще не будет, так как перед их вызовом надо формировать массив аргументов node/parentNode/nodeProperties - но, коль скоро они найдены, зачем их помещать их в массив и вызывать функцию ? Лишняя работа, проще сделать вызов Unassert.

Anton, понятно. Но можете написать код, который бы удалял только текущую страницу из закладок?

pongo пишет:

...только текущую страницу из закладок?

Вот именно это кнопка и делает.

Anton, ой. Извините. Я прочитал «адрес» как «сеанс».
Всё работает, огромное спасибо

новый билд: http://dark-demon.jino-net.ru/~files/cb2-tp4.rar
совсем отказался от css. картинки теперь переключаются через deck.
[b]Anton[/и] специально для тебя сделал кнопку с контекстным меню :)

Dark-Demon пишет:

...
[b]Anton[/и] специально для тебя сделал кнопку с контекстным меню :)

Опять эти <toolbaritem>... Чтобы нужная кнопка появилась в диалоге нужно вручную править xul и/или extens'ы в xbl. Очень юзабельно.
Не убедительно, понимаешь. Смотри, как эти две кнопки можно сделать без xbl:
Кнопка с выпадающим меню:

Выделить код

Код:

<script type="application/x-javascript" src="chrome://global/content/nsUserSettings.js"/>
<script type="application/x-javascript">
    <![CDATA[
        function showAlert (v)
        {
            var sa = Components. classes ["@mozilla.org/alerts-service;1"]. getService (Components.interfaces.nsIAlertsService);
            sa. showAlertNotification (null, "User Agent:", v, false, "", null);
        }
    ]]>
</script>
<toolbaritem id="cb2-useragent">
    <menulist oncommand="nsPreferences.setUnicharPref('general.useragent.override',this.value);showAlert(this.value);">
        <menupopup>
            <menuitem label="default UA" value="" />
            <menuseparator />
            <menuitem label="FF 2.0b2 UA" value="Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1b2) Gecko/20060821 Firefox/2.0b2" />
            <menuitem label="IE 6.0sp2 UA" value="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)" />
            <menuitem label="Op 9.00 UA" value="Opera/9.00 (Windows NT 5.1; U; ru)" />
        </menupopup>
    </menulist>
</toolbaritem>

2. Кнопка с контекстным меню

Выделить код

Код:

<toolbarbutton id="cb2-about" context="cb2-about-context" oncommand="openAboutDialog();">
    <label value="[about]" />
    <menupopup id="cb2-about-context" onclick="event.stopPropagation()">
        <menuitem label="config" oncommand="loadURI('about:config');" />
        <menuitem label="mozilla" oncommand="loadURI('about:mozilla');" />
        <menuitem label="plugins" oncommand="loadURI('about:plugins');" />
        <menuitem label="license" oncommand="loadURI('about:license');" />
        <menuitem label="neterror" oncommand="loadURI('about:neterror');" />
        <menuitem label="blank" oncommand="loadURI('about:blank');" />
        <menuitem label="buildconfig" oncommand="loadURI('about:buildconfig');" />
        <menuitem label="feeds" oncommand="loadURI('about:feeds');" />
        <menuitem label="credits" oncommand="loadURI('bout:credits');" />
        <menu label="cache">
            <menupopup>
                <menuitem label="memory" oncommand="loadURI('about:cache?device=memory')" />
                <menuitem label="disk" oncommand="loadURI('about:cache?device=disk')"/>
            </menupopup>
        </menu>
    </menupopup>
</toolbarbutton>

Кратко и без всяких namespaces, handlers, getters/setters.

Опять эти <toolbaritem>... Чтобы нужная кнопка появилась в диалоге нужно вручную править xul и/или extens'ы в xbl. Очень юзабельно.

ничего подобного. xul генерится автоматом и пользователю его править не надо. только xbl.

Не убедительно, понимаешь. Смотри, как эти две кнопки можно сделать без xbl:

в кокретном примере с контекстным меню преимуществ у xbl практически нет. однако в других случаях (bb-кнопки, например) xbl смотрится много более привлекательно, чем xul или dom.

Кратко и без всяких namespaces, handlers, getters/setters.

ну давай меряться пиписьками... реализуй тогда cb2-imagesh на xul.
если очень хочется сделать через xul - никто не мешает вставить этот xul в xbl. а вот с обратным у тебя будут проблемы...

Dark-Demon пишет:

...
ничего подобного. xul генерится автоматом и пользователю его править не надо. только xbl.
...

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

...
в кокретном примере с контекстным меню преимуществ у xbl практически нет. однако в других случаях (bb-кнопки, например) xbl смотрится много более привлекательно, чем xul или dom.
...

(кстати, и с выпадающим тоже). Вот как частный случай: а если пользователю не нужен тег [ code] из твоего расширения ? Вот либо придётся ставить ненужную кнопку, либо все преимущества насмарку. Это ведь смотря как организовать.

...

Кратко и без всяких namespaces, handlers, getters/setters.

ну давай меряться пиписьками... реализуй тогда cb2-imagesh на xul.
если очень хочется сделать через xul - никто не мешает вставить этот xul в xbl. а вот с обратным у тебя будут проблемы...

Ну давай. Вот твоя:
xul:

Выделить код

Код:

<toolbaritem id="cb2-imagesh" class="custombutton" style="-moz-binding: url('chrome://cb2-profile/content/custombuttons2.xbl#cb2-imagesh')" />

+xbl:

Выделить код

Код:

<binding xbl:id="cb2-imagesh" id="cb2-imagesh" extends="chrome://custombuttons2/content/custombuttons2.xbl#allbuttons">
    <content context="" tooltiptext="image show/hide" >
        <xul:deck xbl:inherits="selectedIndex=image" >
            <xul:toolbarbutton label="show all images" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg==" />
            <xul:toolbarbutton label="hide all images" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC" />
            <xul:toolbarbutton label="hide external" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACdklEQVR42mL4//8/g3zm6f8AAcQAYvz69es/QACBeSAOQAAx/Pnz5//Z20/+AwQQWOrHv///n7x89R8kCxBAYIEuXdb/f//+/X/w8oP/AAHEADMFphcggEAc1pdv3vyHCQIEEMPPnz//gwy8dPcpWAAggMCmnzp16v+Rqw/BAgABBDOD9RfQpncf3v1/9RahHSQHEEBwBd+BCh4DnXLv6Yv/Nx89/3/l/jOwIoAAAisAGXv9+vX/MOedvvn4//Frj8AKAAII7keQBAj//v37//M///8/+/0frAAggFD8gYxB4iAMEEBwBR8+vvv/5v1bYJC8/v/733+4IoAAgit4/e7t/+evX/9/9OIVskmsAAEEV/D01ev/D56//H/78Yv/1x48+//uD9gUVoAAYlizZg04pGAYxD8PjIbXUAUAAQRWMMmA9f+VK1f+dwK9CeKfuP7o/0uoAoAAAivo02f9f+7cuf9tOhAFh4DR9BziTVaAAAIrgIUBCIP4IEloOLACBBADzL8gDsixIC+C4uUnFP+AYmxhBMIAAYRhwE9wpL79/wYYLKCIfQEMmofPIUHz6e///2///EcxCCCAMAwA2fYCmKCeATWC0uFDYNDdf/by/50nL/5fBQbf5ftP/7//CzeEFSCAwJpB/iKErwJTz6V7T/9fBCZMJFewAgQQ3ABQAE0BBjcoyCcAQxUUsj16rP///fsHNuAcMG7OAFPZqRuP/79CMgAggOAGgCIRpBEUX6BkCYqWDh1WeMiD4u4oMBeAcsILJAMAAgjFgF6gjSDNII2gOG3RRhhw+MrD/wcvPfi//+J9eFIGGQAQQESHAa4kDxBgAMjdAQviliYiAAAAAElFTkSuQmCC" />
        </xul:deck>
    </content>
    <implementation>
        <constructor>
            <![CDATA[
                /*this.observer= {observe: Function.prototype.bind.apply(this.observe,[this]) };*/ //работает только до загрузки браузера %-/
                this.observer=
                {
                    el:this,
                    observe: function() {this.el.observe();},
                };
                this.prefservice.addObserver(this.prefname,this.observer,false);
                this.observe();
            ]]>
        </constructor>
        <destructor>
            <![CDATA[
                this.prefservice.removeObserver(this.prefname,this.observer);
            ]]>
        </destructor>
        <method name="observe">
            <body>
                <![CDATA[
                    this.setAttribute('image', this.pref-1);
                ]]>
            </body>
        </method>
        <field name="prefservice"> Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch) </field>
        <field name="prefname"> 'permissions.default.image' </field>
        <property name="image" onget="return this.getAttribute('image')" onset="this.setAttribute('image',val);return val" />
        <property name="pref" onget="return this.prefservice.getIntPref(this.prefname)" onset="this.prefservice.setIntPref(this.prefname,val); return val" />
    </implementation>
    <handlers>
        <handler event="click" button="0" modifiers="any"><![CDATA[        this.pref= 1;        ]]></handler>
        <handler event="click" button="1" modifiers="any"><![CDATA[        this.pref= 3;        ]]></handler>
        <handler event="click" button="2" modifiers="any"><![CDATA[        this.pref= 2;        ]]></handler>
    </handlers>
</binding>

а вот моя:

Выделить код

Код:

<script type="application/x-javascript" src="chrome://global/content/nsUserSettings.js"/>
<script type="application/x-javascript">
    <![CDATA[
        function setDeckImage ()
        {
            document. getElementById ("cb22-imageshdeck"). selectedIndex = nsPreferences. getIntPref ('permissions.default.image', 0);
        }
        var ps = nsPreferences. mPrefService;
        var ps2 = ps. QueryInterface (Components. interfaces. nsIPrefBranch2);
        var imageshObserver =
        {
            observe: function (s, t, d)
            {
                setDeckImage ();
            }
        };
        ps2. addObserver ('permissions.default.image', imageshObserver, false);
        setTimeout (setDeckImage, 0);
    ]]>
</script>
<toolbarbutton id="cb22-imagesh">
    <deck id="cb22-imageshdeck" onclick="nsPreferences.setIntPref('permissions.default.image',event.button)">
        <toolbarbutton label="show all images" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACp0lEQVR42mL4//8/g3zm6f8AAcQAYvz4uuc/QACBeSAOQAAx/P75/X/ukY//AQIILHXhz///lZe//wfJAgQQWOBui9D/P78t/6ftffcfIIAYYKbA9AIEEIjDWnPtx3+YIEAAMXz7/P7/75+v/mcADQQJAAQQ0HTt/y9nqv73W/caLAAQQDAzWC8CbWq89et//fWf/5HNBAgguIJzIKdc+v6/7Py3/8Wnv/wvPPkZrAgggMAKfv+c8P/f+8r//x+mAZ03/X/g5nf/sw68BysACCCIH78p///zSeb/n4ci/39d4P+/4+f//0d//QcrAAggFH8gY5A4CAMEEFxB0+1f/xtu/vxfc+X7f5CDYYoAAgiuoP7Gz//VV378r7j4HdkkVoAAgisA6Sy/8O1/ydmvYB+c+g02hRUggBgaw6T+g4Iegq//B/Fzj376fwLiSFaAAAIr+HI17f//l4X//9+JAyvIPPjh/3GoAoAAAit4MEns/71Gof+f1hmCFaQCownqTVaAAAIr+PNb4f+fFxL//9wUACsAScIUAAQQA8y/IA7IsSAvgvAFKD4PxdjCCIQBAgjDgAvQSK0DRmrtNWDQXAUFzTewxjNAn5/8/R/FIIAAwjAAZFsdMEFVAcMUFPkgzaAEUAoKvlOfkYMQ7AWAAAJrBvmLEC4Aasw/DsTHPiG7ghUggOAG/PkFTCG/p/3//6P///+PLf//vwamrsc5///+WQc2IHLX+//Zhz/+zz4EjwKwAQABBDfg90/d/w+mSvx/DEztPy+G//9/K/r//6vBwBhoBhvgv/HN//T97/9n7Hv//xiSAQABhDDgl8b/B33C/++3C/6/38T//34d7//7Vdz//0Kjzm/dq/9pe979T939Fp6UQQYABBDRYSAZdghrkgcIMAD5xMj+kGsEXgAAAABJRU5ErkJggg==" />
        <toolbarbutton label="hide all images" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAD1BMVEUfact50/fF+v/M//////8mt18DAAAABXRSTlP/////APu2DlMAAAAJcEhZcwAACvAAAArwAUKsNJgAAAAgdEVYdFNvZnR3YXJlAE1hY3JvbWVkaWEgRmlyZXdvcmtzIE1Yu5EqJAAAADhJREFUeJxjcHFgAAIXFwYXB2NjYwYWEMNQUJCZAcYwYIEwGBigDEFhDIYQ+QygpUZKIAbIGQwsANX+EGaBLn8yAAAAAElFTkSuQmCC" />
        <toolbarbutton label="hide external" image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsSAAALEgHS3X78AAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACdklEQVR42mL4//8/g3zm6f8AAcQAYvz69es/QACBeSAOQAAx/Pnz5//Z20/+AwQQWOrHv///n7x89R8kCxBAYIEuXdb/f//+/X/w8oP/AAHEADMFphcggEAc1pdv3vyHCQIEEMPPnz//gwy8dPcpWAAggMCmnzp16v+Rqw/BAgABBDOD9RfQpncf3v1/9RahHSQHEEBwBd+BCh4DnXLv6Yv/Nx89/3/l/jOwIoAAAisAGXv9+vX/MOedvvn4//Frj8AKAAII7keQBAj//v37//M///8/+/0frAAggFD8gYxB4iAMEEBwBR8+vvv/5v1bYJC8/v/733+4IoAAgit4/e7t/+evX/9/9OIVskmsAAEEV/D01ev/D56//H/78Yv/1x48+//uD9gUVoAAYlizZg04pGAYxD8PjIbXUAUAAQRWMMmA9f+VK1f+dwK9CeKfuP7o/0uoAoAAAivo02f9f+7cuf9tOhAFh4DR9BziTVaAAAIrgIUBCIP4IEloOLACBBADzL8gDsixIC+C4uUnFP+AYmxhBMIAAYRhwE9wpL79/wYYLKCIfQEMmofPIUHz6e///2///EcxCCCAMAwA2fYCmKCeATWC0uFDYNDdf/by/50nL/5fBQbf5ftP/7//CzeEFSCAwJpB/iKErwJTz6V7T/9fBCZMJFewAgQQ3ABQAE0BBjcoyCcAQxUUsj16rP///fsHNuAcMG7OAFPZqRuP/79CMgAggOAGgCIRpBEUX6BkCYqWDh1WeMiD4u4oMBeAcsILJAMAAgjFgF6gjSDNII2gOG3RRhhw+MrD/wcvPfi//+J9eFIGGQAQQESHAa4kDxBgAMjdAQviliYiAAAAAElFTkSuQmCC" />
    </deck>
</toolbarbutton>

ой... и правда короче : ) Зато выглядит аккуратнее и работает, в отличие от первой.

Использовать по отдельной привязке на каждый отдельный элемент управления - всё равно что тексты на одном компьютере набирать, музыку слушать - на другом, а чтобы кино посмотреть или интернет посерфить - позарез нужны третий и четвёртый. Но тебя, я чувствую, не переубедить, посему пустой этот спор со своей стороны прекращаю. Удачи, может кто и оценит такой подход.

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

смешной ты человек :) ты больно много хочешь от расширения, которое даже не пре-альфа :dumb: я говорю, что в будущем пользователи будут править только то, что находится внутри <binding> и ничего более.

Вот либо придётся ставить ненужную кнопку, либо все преимущества насмарку. Это ведь смотря как организовать.

я не вижу тут ничего особо зазорного. впрочем, если очень хочется, то можно сделать эту кнопку невидимой, тобишь специальным флагом указывать - добавлять ли для неё запись в xul.

а вот моя:

уже вижу, что она работает неправильно :) сам догадаешься? впрочем, лови критику:
1. ты создаёшь глобальные переменные, да ещё и с такими короткими именами, а это всегда черевато.
2. setTimeout (setDeckImage, 0); - это по твоему "выглядит аккуратнее?"
3. если настройка является не числом, а строкой, то тебе придётся делать честную проверку на нажатую клавишу.
4. при создании другой кнопки на базе этой придётся искать все вхождения 'permissions.default.image'. у тебя в этом примитивном случае их уже 3, а с более-менее сложной кнопкой, да с таким стилем программирования - туши свет бросай гранату...

такой ценой и я могу сократить свои кнопки раза в два, однако я намеренно этого не делаю, дабы тем, кто их будет переделывать было бы проще это сделать.

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

кстати, это было бы весьма неплохо! но дорого... пока...

Yan, может ты выскажешься по этому поводу?

Я бы прежде всего предложил не превращать эту ветку в холивар "xbl vs xul", и перенести обсуждение в форум Разработка. Всё-таки здесь лучше обсуждать уже готовые релизы расширения, и кнопки к нему. Короче, создаю тему "Разработка Сustom Buttons", и предлагаю продолжить там.

И снова приходится редактировать - баг вернулся.
Делается ли что-то для прекращения конфликта с флешгот?

Я уже спрашивал здесь, спрошу теперь и в этой теме. :)
Можно ли сделать кнопку для Custom Buttons, при нажатии на которую открывается окно, в которое надо ввести фразу. На текущей странице перебираются все ссылки, и название которых содержит эту фразу, будут открываться в новых табах.
Например, захожу на форуме на страницу Последние сообщения и открываю все ссылки Новые сообщения.

stoneflash
Ссылки надо автоматически открыть в новых табах, или только добавить к ним аттрибут target="_blank"?
Если первое, то:

Выделить код

Код:

custombutton://%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0442%u0430%u0431%u0430%u0445%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0441%20%u0444%u0440%u0430%u0437%u043E%u0439%5D%5B%5D%5Bvar%20caseSensitive%3Dtrue%3B%0Avar%20s%3Dprompt%28%27%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0442%u0430%u0431%u0430%u0445%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0441%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0441%20%u0444%u0440%u0430%u0437%u043E%u0439%3A%27%29%0Aif%20%28%21caseSensitive%29%20s%3Ds.toLowerCase%28%29%3B%0Avar%20doc%3Dcontent.document%3B%0Avar%20ar%3Ddoc.getElementsByTagName%28%27a%27%29%3B%0Avar%20hrefs%3D%7B%7D%3B%0Afor%20%28var%20i%3D0%3Bi%3Car.length%3Bi++%29%7B%0A%20%20var%20text%3Dar%5Bi%5D.innerHTML%3B%0A%20%20if%20%28%21caseSensitive%29%20text%3Dtext.toLowerCase%28%29%3B%0A%20%20if%20%28%20%20%28text%09.replace%28/%26nbsp%3B/g%2C%27%20%27%29%0A%20%20%09%09.replace%28/%26amp%3B/g%2C%27%26%27%29%0A%20%20%09%09.replace%28/%26quot%3B/g%2C%27%22%27%29%0A%20%20%09%09.indexOf%28s%29%21%3D-1%0A%09%29%0A%09%26%26%28ar%5Bi%5D.href%29%0A%09%29%0A%20%20%7B%0A%09hrefs%5Bar%5Bi%5D.href%5D%3D1%3B%0A%20%20%7D%0A%7D%0Afor%20%28var%20h%20in%20hrefs%29%7B%0A%20%20%20%20gBrowser.addTab%28h%29%3B%0A%7D%5D%5B

По умолчанию поиск регистрозависим.
Настраивается указанием var caseSensitive=false; в коде.

Yan
Огромное спасибо! Именно то, что надо!

Yan
А нельзя ещё сделать так, чтобы открывались только непосещённые ссылки? Желательно чтоб это было опционально, галочкой. Заранее спасибо.

stoneflash

Выделить код

Код:

custombutton://%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0442%u0430%u0431%u0430%u0445%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0441%20%u0444%u0440%u0430%u0437%u043E%u0439%5D%5B%5D%5Bvar%20caseSensitive%3Dtrue%3B%0Avar%20promptService%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/prompt-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPromptService%29%3B%0Avar%20onlyUnVisited%20%3D%20%7B%7D%3B%0Avar%20s%3D%7B%7D%3B%0ApromptService.prompt%28window%2C%27%27%2C%0A%20%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0432%20%u043D%u043E%u0432%u044B%u0445%20%u0442%u0430%u0431%u0430%u0445%20%u0432%u0441%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%20%u0441%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0441%20%u0444%u0440%u0430%u0437%u043E%u0439%3A%22%2Cs%2C%0A%20%20%22%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u043D%u0435%u043F%u043E%u0441%u0435%u0449%u0451%u043D%u043D%u044B%u0435%20%u0441%u0441%u044B%u043B%u043A%u0438%22%2C%0A%20%20onlyUnVisited%29%3B%0AonlyUnVisited%3DonlyUnVisited.value%3B%0As%3Ds.value%3B%0Aif%20%28s%29%7B%0A%09if%20%28%21caseSensitive%29%20s%3Ds.toLowerCase%28%29%3B%0A%09var%20doc%3Dcontent.document%3B%0A%09var%20ar%3Ddoc.getElementsByTagName%28%27a%27%29%3B%0A%09var%20hrefs%3D%7B%7D%3B%0A%09var%20z%3D0%3B%0A%09var%20his%3DComponents.classes%5B%22@mozilla.org/browser/global-history%3B2%22%5D%0A%09%09.getService%28Components.interfaces.nsIGlobalHistory2%29%3B%0A%09var%20IO%3DComponents.%20classes%5B%22@mozilla.org/network/io-service%3B1%22%5D.%0A%09%09getService%28Components.interfaces.nsIIOService%29%3B%0A%09for%20%28var%20i%3D0%3Bi%3Car.length%3Bi++%29%7B%0A%09%20%20var%20text%3Dar%5Bi%5D.innerHTML%3B%0A%09%20%20if%20%28%21caseSensitive%29%20text%3Dtext.toLowerCase%28%29%3B%0A%09%20%20if%20%28%20%20%28text%09.replace%28/%26nbsp%3B/g%2C%27%20%27%29%0A%09%20%20%09%09.replace%28/%26amp%3B/g%2C%27%26%27%29%0A%09%20%20%09%09.replace%28/%26quot%3B/g%2C%27%22%27%29%0A%09%20%20%09%09.indexOf%28s%29%21%3D-1%0A%09%09%29%0A%09%09%26%26%28ar%5Bi%5D.href%29%0A%09%09%26%26%28%28%21onlyUnVisited%29%7C%7C%28%21his.isVisited%28%20IO.newURI%28ar%5Bi%5D.href%2Cnull%2Cnull%29%20%29%29%29%0A%09%09%29%0A%09%20%20%7B%0A%09%09hrefs%5Bar%5Bi%5D.href%5D%3D1%3B%0A%09%09z++%3B%0A%09%20%20%7D%0A%09%7D%0A%09//alert%28z%29%3B%0A%09for%20%28var%20h%20in%20hrefs%29%7B%0A%09%20%20%20%20gBrowser.addTab%28h%29%3B%0A%09%7D%0A%7D%5D%5B/*Initialization%20Code*/

Исправил код 8.11.06 в 20:39

Yan
хм, не пашет. после нажатия ничего не происходит.

stoneflash
Точняк. Забыл, что я в 0.0.2 кое-что изменил. Отредактировал предыдущее сообщение.

Yan
Спасибо. работает, вроде. :)

Можно попросить помощи в создании кнопки с ниспадающим списком фильтров URL corrector - чтоб можно было быстро отключить один из них. Сам, не зная основ создания расширений, уже вторую неделю пытаюсь, но ничего не выходит.

Пиплы, а как зафигачить кнопку на панельку, шоб страницу сразу в Scrapbook отправлять? В этой теме было что-то подобное, но там средняя кнопка учавствовала и у меня не перло. Так вот, хотца обычную без всяких средних кликов и др. наворотов...:blush:

AK-74
Нужна кнопка "Захватить" или "Захватить как...", которая вызывает настройки сохранения?

Добавлено Втр 14 Ноя 2006 21:40:22 :
Собственно, вот 2 кнопки:
Захватить:

Выделить код

Код:

custombutton://Capture%20with%20Scrapbook%5D%5Bchrome%3A//scrapbook/skin/capture_entire_as.png%5D%5BsbBrowserOverlay.execCapture%28false%2Cfalse%2Cfalse%2C%27%27%29%3B%5D%5B

Захватить как...:

Выделить код

Код:

custombutton://Capture%20web-page%20as...%5D%5Bchrome%3A//scrapbook/skin/capture_entire_as.png%5D%5BsbBrowserOverlay.execCapture%28false%2Cfalse%2Ctrue%2C%27%27%29%3B%5D%5B

А можно сделать кнопочку, считающую, сколько раз на странице встречается та или иная фраза?

Yan

Захватить как...:

у меня не работает почему-то.

AndreyD
Расширение Scrapbook какой версии? :)

Modex Версия 1.2.0.6

Scrapbook 1.2.0.8. — всё работает :)
Спасибо!

Обновил до 1.2.0.8, все равно не работает, может я делаю что-то не так?
Разобрался. Я, идиот, пихал этот код в поле "код" создания новой кнопки.

Как выглядит код при создании кнопки для вставки текста в позицию курсора в форме (для смайла например?)

Примерно так:

Выделить код

Код:

var open="[b]";
var close="[/b]";
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
var text=theBox.value.substring(0,startPos);
text +=open+theBox.value.substring(startPos, endPos)+close;
text +=theBox.value.substring(endPos, theBox.value.length);
theBox.value = text;
theBox.selectionStart = startPos;
theBox.selectionEnd = endPos + open.length + close.length;
var nHeight = theBox.scrollHeight - oHeight;
theBox.scrollTop = oPosition + nHeight;

Yan, я так понимаю, этот код вставляет b перед выделенным текстом и /b после него. А просто вставка тескста? Извините, но в программировании не силен.

AndreyD
Сделай так же, но перед текстом ничего не вставляй, а после - то, что тебе надо. Или наоборот. По пути наименьшего сопротивления. :)

AndreyD
Следующий код вставляет смайлик на позиции курсора, если есть выделение текста, то заменяет его смайликом.

Выделить код

Код:

var t=":)";
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
theBox.value=theBox.value.substring(0,startPos)
    +t
    +theBox.value.substring(endPos, theBox.value.length);
theBox.selectionStart=theBox.selectionEnd=startPos+ t.length;
var nHeight = theBox.scrollHeight - oHeight;
theBox.scrollTop = oPosition + nHeight;

stoneflash
Не хочется ипользовать избыточный код.

Добавлено Вск 18 Фев 2007 13:29:47 :
Yan, спасибо. Расширение отличное. Еще бы домашнюю страницу побогаче сделать, с готовыми кнопками и заготовками кодов, чтобы простому юзеру проще было. Надеюсь, сабж будет развиваться.

А можно сделать кнопку, которая прячет-показывает другие панели, как панель закладок? Если да, расскажите, как.

http://forum.mozilla-russia.org/viewtopic.php?pid=147506#p147506

Dark-Demon, такая кнопка у меня есть. Что нужно поменять, чтобы пряталась другая панель? Я пробовал вместо "Personal toolbar" вставить имя настраиваемой панели со смайлами (smiles), но так не работает.

AndreyD, возьми dom inspector и посмотри какой идентификатор у этой панели.

Dark-Demon, вы меня пугаете!:)

Ну а как ты хотел? мне отсюда не видно что там у тебя за панелька... могу предложить поставить расширение Inspect Context, тогда на панельке можно щёлкнуть ПКМ, выбрать inspect, после чего откроется дом инспектор. потом нужно перейти вверх по дереву до элемента toolbar И посмотреть его id во 2 колонке.

Я разобрался с ID панелей с помощью поиска Total Comander в папке профиля по имени панели. Настриваемые панели имеют вид "__customToolbar_имя"

Афигенное расширение!!!! Все действия, которые часто приходится делать в браузере и раньше выполнялись набором кликов-нажатий, теперь выполняются единственным нажатием на нужную кнопку. Еще сделал панели для BB code и 3D смайлов, которые прячутся-вызываются кнопками на меню баре.
Всегда любил всякие макросы. Теперь они есть и в Firefox. Жаль, не очень знаком с жабаскрипт, делал все по  примерам из ветки.

угу, а вот когда поставишь keyconfig - совсем о тулбарах и кнопочках забудешь ;)

ребята, никак не могу разобраться в этом коде, на котором нужно писать кнопки.
приведите, пожалуйста, пример кода, по которому кнопка будет открывать какой-либо сайт, ну например mozilla.ru. и, если это возможно, подскажите пожалуйста, как можно быстро добавлять кнопки такого же рода.

http://forum.mozilla-russia.org/viewtop … 68#p100868
Ещё полезно было бы всю тему прочитать.

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

itomonster
Есть куча (я нашёл через гугль три) сайтов с готовыми кнопками. Чем не примеры для желающего разобраться?

в текущей вкладке

Выделить код

Код:

loadURI('http://ya.ru')

в новой вкладке

Выделить код

Код:

getBrowser().addTab('http://ya.ru')

Infant
Пожалуйста, не надо мне читать мораль. Когда у меня получается, я нахожу информацию сам. В конце концов, я просто попросил привести пример, черт возьми. Извините, если флейм.
Anton
Спасибо большое.

itomonster

ребята, никак не могу разобраться в этом коде, на котором нужно писать кнопки.
приведите, пожалуйста, пример кода, по которому кнопка будет открывать какой-либо сайт, ну например mozilla.ru. и, если это возможно, подскажите пожалуйста, как можно быстро добавлять кнопки такого же рода.

Извини, но стоит ли для этого делать кнопку. Не проще ли использовать закладки.

AndreyD
Мне проще с кнопками, поскольку разрешение экрана 800х600 -- дорог каждый мм экрана, а кнопки меньше :) Плюс еще я использую расширение del.icio.us, а оно для меня неудобно в том случае, если по одной и той же закладке надо заходить каждый день несколько раз.

Собственно, для меня Custom Buttons тем и ценно, что все сайты нужные я могу на кнопки повесить :)

Простите, если ужЕ обсуждалось: я не нашёл :-(
Как вставить готовую кнопку (custombutton://...) в Thunderbird?

Как вставить готовую кнопку (custombutton://...) в Thunderbird?

Вообще-то я custombuttons в Thunderbird не пользуюсь, возможно, изобретаю велосипед. Сделай новую кнопку с кодом

Выделить код

Код:

var bc = prompt ("код кнопки: ");
if (bc) custombuttons.installWebButton(bc);

Потом с помощью этой кнопки инсталлируй готовые.

2Anton: Спасибо, работает! :-) (только я не кнопку добавил, а пункт меню).

Значится так. Долго не мог понять, почему custombuttons и кнопки BBcode с домашней страницы расширения у меня напрочь не работали. Причем совсем.
Стал проверять расширения, заподозрив конфликт. Поотключал все блокираторы рекламы, скриптов, флешек и проч. Не помогло. После долгой возни снес (удалил) NoScript. Кнопки заработали! Просто отключение NoScript не помогало, попытки прописать в нем разрешение для custombutton:// результата не давало. (Возможно, неправильно прописывал. Но тогда почему общее разрешение на все скрипты и вообще отключение расширения не сработали?)

369
Наверное надо было ещё и file: разрешить :)

369
У меня не воспроизводится.
Какая версия custombuttons, noscript?
На чистом профиле та же проблема?
"Не работали кнопки" - это значит при нажатии на ссылку "custombuttons://..." кнопка не устанавливалась? Или после установки кнопка не вставляла в текстовое поле "[ b][ /b]"?
Не работали только кнопки bb-кода, или вообще все?
Modex
А при чем тут "file:"?

Yan
Ну мало ли какие файлы могли "подключаться" с жесткого? :) хотя толком я вряд ли объясню

...ничего не понимаю... Снес NoScript в другой сборке - кнопки по прежнему не работают...
Версии custombuttons - та, что на домашней странице сейчас, noscript - обновлено.
Видно, в чем-то другом проблема...
Кнопки BBcode, взятые с домашней страницы, установились нормально, вытащил их на панель и они там стоят как красивые картинки: при нажатии на них ничего не происходит.
User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.8.1) Gecko/20061010 Firefox/2.0   ID сборки: 2006101023 - не работает и без NoScript, и с ним не работало.
А в других сборках - все работает на ура!
User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061106 lolifox/0.3.0  ID сборки: 2006110620 - с NoScript не работало, после удаления NoScript - работает вот как видите...
User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2   ID сборки: 2007021917 без NoScript - работает...

при нажатии на них ничего не происходит.

иногда происходит, не уловил только, какие действия приводят к их (временной) работе. кажется, проблема связана с

Выделить код

Код:

var theBox = document.commandDispatcher.focusedElement;

Добавлено Срд 28 Фев 2007 22:30:12 :
хм..
1. После редактирования кода кнопки работают, после настройки панелей перестают. Это бб-коды. Это с одной стороны.
2. С другой стороны, они могут начать работать без редактирования - не поймал до сих пор как.
3. Старые кнопки, например, 'convert custombuttons://...' работают независимо. После их использования запускаются бб-коды.
4. Бб-коды установлены давно, вытащил на панель сегодня парочку.
5. no script имеется, последние несколько дней.

не пойму только, что тут к чему.


после перезапуска бб-коды "завелись".

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

чтобы небыло поля с названием самой кнопки

1. Правой кнопкой по панели инструментов, "Настроить...", в списке "Показывать" выбрать "Только значки"
или
2. Правой кнопкой по добавленной кнопке, "Редактировать...", в появившемся диалоге очистить поле "Имя"

Спасибо, но это не совсем то. Хотелось бы запихнуть кнопку на панель с главным меню. При этом чтобы панель главного меню не расширялась, а текст у кнопок с тулбара оставался виден. Если сделать так как ты предлагаешь:
1 - пропадают наименования у всех кнопок на тулбаре
2 - Само пустое "поле" с именем кнопки не исчезает, а панель с главным меню расширяется

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

чтобы панель главного меню не расширялась

можно прописать в секцию "Инициализация" одной из этих кнопок строку

Выделить код

Код:

this. parentNode. setAttribute ("mode", "icons");

я так понимаю нужно всего-лишь поменять ориентацию охватывающего бокса - это можно сделать через userCrome.css

To Anton:
При добавлении в код инициализации "this. parentNode. setAttribute ("mode", "icons");" слетают подписи кнопок на тулбаре :(

to Dark-Demon:
а можно подробнее, пожалуйста...

Добавлено Втр 06 Мар 2007 21:43:37 :
Спасибо Anton! Заработало: кнопку надо было сначало перетащить на панель меню :)

И всё таки хотелось бы подробностей от Dark-Demon :)

не, мне лень ковыряться %-)

to Dark-Demon:
Бывает :)

А кто нибудь может сделать кнопки:
- для выбора кодировки страницы;
- загрузки(именно загрузки, а не отображения) картинок, аудио, видео и скриптов для конкретной страницы;
как это сделано в Maxthon-е?

На вопрос зачем всё это, отвечу так: перехожу с макстона на лису и хочется сохранить макстоновскую функциональность.

для выбора кодировки страницы

где-то была в этой теме

загрузки(именно загрузки, а не отображения) картинок, аудио, видео и скриптов для конкретной страницы

и как оно там это в Maxthone'е реализовано ?

К сожелению не знаю как выложить свой скриншот этой кнопки. Поэтому попытаюсь объяснить на словах:
- кнопка с ниспадающим меню, типа кнопок Reload и Stop, выложеных в этой теме;
- в самом меню следующие пункты:
    - загружать изображения;
    - загружать видео;
    - загружать аудио;
    - разрешить скрипты;
    - разрешить аплеты Java;
    (есть ещё "разрешить ActivX", но думаю, что для лисы это не актуально :) )
- напротив каждого элемента в меню ставиться/снимается галочка(checkbox).
В самом Maxthone задаётся действие кнопки по умолчанию, т.е. что отключать/подключать при нажатии на кнопку(не выбор из меню), у меня стоит отключение/подключение загрузки изображений. При включении/отключении кнопка меняет своё состояние(нажата/отжата).

Кнопка для выбора кодировки (выкладываю снова, т. к., в старой у меня почему-то перестали работать кириллические имена функций и переменных):

Выделить код

Код:

custombutton://%u0412%u044B%u0431%u043E%u0440%20%u043A%u043E%u0434%u0438%u0440%u043E%u0432%u043A%u0438%5D%5B%5D%5B%5D%5Bvar%20menu%20%3D%0A%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%20%20%20oncommand%3D%22this.parentNode.changeEncoding%28event%29%22%3E%0A%09%3Cmenuitem%20charset%3D%22KOI8-R%22%20label%3D%22%u041A%u0438%u0440%u0438%u043B%u043B%u0438%u0446%u0430%20%28KOI8-R%29%22/%3E%0A%09%3Cmenuitem%20charset%3D%22IBM866%22%20label%3D%22%u041A%u0438%u0440%u0438%u043B%u043B%u0438%u0446%u0430/%u0420%u043E%u0441%u0441%u0438%u044F%20%28CP-866%29%22/%3E%0A%09%3Cmenuitem%20charset%3D%22windows-1251%22%20label%3D%22%u041A%u0438%u0440%u0438%u043B%u043B%u0438%u0446%u0430%20%28Windows-1251%29%22/%3E%0A%09%3Cmenuitem%20charset%3D%22UTF-8%22%20label%3D%22Unicode%20%28UTF-8%29%22/%3E%0A%3C/menupopup%3E%3B%0Amenu%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28menu.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Athis.%20orient%20%3D%20%22horizontal%22%3B%0Athis.%20type%20%3D%20%22menu-button%22%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20changeEncoding%20%3D%20function%20%28event%29%0A%7B%0A%09var%20encoding%20%3D%20event.%20target.%20getAttribute%20%28%22charset%22%29%3B%0A%09SetForcedCharset%20%28encoding%29%3B%0A%09SetDefaultCharacterSet%20%28encoding%29%3B%0A%7D

Что касается второй кнопки, я думаю для custombuttons-кнопки это будет сложно, особенно, если выяснится, что при выборе, например, "загружать изображения" нужно будет загрузить изображения для текущей/всех страниц. Поэтому, лучше поискать расширения - ILO, NoScript, например.

В общем, это конечно в принципе реализуемо, но потребует немалых затрат времени. Лучше поискать готовые решения.

Спасибо за кнопку со сменой кодировки, в сообщениях выше я её так ине нашёл :)

По поводу загрузки изображений: нужно что б данная кнопка работала только для текущей страницы(вкладки). Жаль что ни кто не возьмётся за реализацию :(

Есть такое расширение ImageShack Toolbar.
Можно ли сделать кнопки для всего что там есть? Или хотя бы для элементов основного меню?
А то очень уж убого выглядит он. И неудобно :(


UPD:

Поиграл с DOM инспектором... Понял, что расширение это великая вещь... Еще бы понять, как делать radio buttons (я правильно называю, дырочки
http://img64.imageshack.us/img64/9823/untitled3xl2.gif
эти?) отмеченными...

ЗЫ
Вот кнопка Upload для тулбара...

Выделить код

Код:

custombutton://Upload%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAACXBIWXMAAAsSAAALEgHS3X78AAABa0lEQVR4nJWSLWjDQBiGP3kyVMUGagKDEjExO1OojKiIjRmcW8QIsaFqYqKmI6aiUBMZqImNKpGBmZiJyKr1y2reiWuTaynddvBwfzz3fncc8b7Fif0lzNgzQ0g6jtsz6DdZSMJ4M4SQBG6//yh/9eLL5yOm29GxAl3mFtcQkuAszU6cbkdwlqaq4BhGzC0ci5AGivdngpAEMzLglw6m2xHGmyHuMxPW2sBgJroD6CSq9goh6Qx7bnTi5R7p4iXlxxMGM9ElunMbK73sNCCA46tkhYfBTMBIBERImGeTK/Iu6u6sE0iCiAliTjCkeg99X8mN7O/NeUeUeUoOCXZsApyjKWOAq17m2lfybgU0AdAEiNIHiFAl25EBPq6X6zswp1py5fVyLeEntnrRkOAnNprKA2oJ1FLJO10uXaQB4dAsgMq7iZJXWtnFRCXXb0Dhggv3rIc2LxMLh2ahyXkvcz65yZmsf83/4FiEH0rWltfnBPlKAAAAAElFTkSuQmCC%5D%5BImageShack_upload%28event%29%3B%20event.preventBubble%28%29%3B%5D%5B/*Initialization%20Code*/

Можно ли отменить действие прописанное в секции "CODE", при выполнении действия по нажатию на пункт в ниспадающем меню кнопки?
И как? У меня кнопка по умолчанию(при нажатии) выполняет определённое действие, а ниспадающее меню используется, соответственно, для других функций.

to Yan:
В кнопке "External Applications" не появляется ни стрелочка ни сам список добавленных программ (не разворачивается меню), это можно как-нибудь исправить? Или это я накосячил? Хотя кроме путей ничего не менял, да и в варианте взятом, непосредственно, с форума - тоже самое:(

alexmac, опиши по шагам чего ты хочешь...

У меня есть кнопка с ниспадающим меню, по нажатию на саму кнопку должно происходить 1-ое действие, при нажатии на 1-ый пункт в ниспад. меню 2-ое действие, при нажатии на 2-ой пункт в ниспад. меню 3-е действие и т.д. Но возникает проблемма: при нажатии на любой пункт в нисп. меню (1-ый или 2-ой) происходит нужное действие (2-ое или 3-е) + 1-ое.

а, понял, тебе нужно вставить event.stopPropagation(), чтобы событие не всплывало дальше.

а куда именно?

Выделить код

Код:

/*Initialization Code*/
this.SaveSelToMaf=function(){
  MafGUI.addSelectedTabsToArchive(Maf);
}

this.SaveAllToMaf=function(){
  MafGUI.addAllTabsToArchive(Maf);
}

 var nMItem=function(label,img,obj){
   var m=document.createElement('menuitem');
   m.setAttribute('label',label);
   m.f=obj.SaveSelToMaf.bind(obj);
   m.setAttribute('oncommand','this.f()');
   m.setAttribute('image',img);
   m.setAttribute('class','menuitem-iconic');
   return m;
 }

 var nMItem2=function(label,img,obj){
   var m=document.createElement('menuitem');
   m.setAttribute('label',label);
   m.f=obj.SaveAllToMaf.bind(obj);
   m.setAttribute('oncommand','this.f()');
   m.setAttribute('image',img);
   m.setAttribute('class','menuitem-iconic');
   return m;
 }


 var mP=document.createElement('menupopup');
 mP.appendChild(nMItem('Save selection to MAF',this.image,this));
 mP.appendChild(nMItem2('Save all to MAF',this.image,this));

 this.appendChild(mP);
 this.type="menu-button";

Замечания по реализации приветствуются :)

Был бы очень благодарен,если бы кто-нибудь написал кнопочку для удаления с диска просматриваемой страницы по протоколу file://. Заранее спасибо.

а куда именно?

у меня не выполняется первое действие при выполнении второго. я, правда, заменил MafGUI.xxx alert'ами, может, это особенность maf ?

stoneflash

Выделить код

Код:

custombutton://%u0423%u0434%u0430%u043B%u0438%u0442%u044C%20%u0444%u0430%u0439%u043B%5D%5B%5D%5Btry%0A%7B%0A%09var%20file%20%3D%20Components.%20classes%20%5B%22@mozilla.org/file/local%3B1%22%5D.%20createInstance%20%28Components.%20interfaces.%20nsILocalFile%29%3B%0A%09var%20fn%20%3D%20getBrowser%20%28%29.%20contentDocument.%20location.%20href.%20replace%20%28/file%3A%28%5C/%29%7B2%2C3%7D/%2C%20%22%22%29%3B%0A%09fn%20%3D%20fn.%20replace%20%28/%2520/g%2C%20%22%20%22%29%3B%0A%09fn%20%3D%20fn.%20replace%20%28/%5C//g%2C%20%22%5C%5C%22%29%3B%20//%20for%20windows%0A%09file.%20initWithPath%20%28fn%29%3B%0A%09file.%20remove%20%28false%29%3B%0A%09file.%20initWithPath%20%28fn.%20replace%20%28/%5C.%28htm%7Chtml%29%24/%2C%20%22%22%29%20+%20%22_files%22%29%3B%0A%09file.%20remove%20%28true%29%3B%0A%7D%20catch%20%28e%29%20%7Balert%28e%29%3B%7D%5D%5B

может, это особенность maf?
Хотел бы я знать...
Я не силён в данной области программирования, поэтому сорри за глупый вопрос а что такое alert'ы?

Anton
Спасибо, правда возникли маленькие проблемки.
При удалении файл выдаёт предупреждение:

[Exception... "Component returned failure code: 0x80520012 (NS_ERROR_FILE_NOT_FOUND) [nsILocalFile. remove]" nsresult: "0x80520012 (NS_ERROR_FILE_NOT_FOUND)" location: "JS frame :: chrome://browser/content/browser.xul:: oncommand :: line 10" data: no]

Но файл удаляется.

Если файл с русскими буквами в названии, то выдаёт примерно такое же сообщение, но файл не удаляется. Хотя стоило, в принципе, ожидать. Никак не фофиксить? например взять кусок кода из Human URL ?

alexmac, вроде должно работать так...

Выделить код

Код:

var mP=document.createElement('menupopup');
mP.onclick="event.stopPropagation()"

Не помогло :(

а так?

Выделить код

Код:

mP.setAttribute('onclick',"event.stopPropagation()");

также попробуй вместо onclick поставить oncommand

Спасибо, Dark-Demon!!! Поставил в этот код oncommand и всё заработало :)

stoneflash

При удалении файл выдаёт предупреждение...Но файл удаляется.

Вероятно, файл не имеет сопутствующей директории с картинками, css и т. п. Определённо, я забыл убрать отладочный alert из кода кнопки.

В общем, надо открыть код кнопки и удалить символы

Выделить код

Код:

alert(e);

Подскажите, пожалуйста, код кнопки, аналогичной кнопки "Перейти(перейти по введённому адресу)". Хочу "прикрутить" к ней ниспадающее меню, с дополнительными функциями.
Также интересует, как по нажатию кнопки получить текущий URL.

а какие функции ты хочешь прикрутить? :)~

Хочется иметь такую же кнопку как в maxthone с функциями перевода на различные языки используя веб-сервисы типа промт и т.д. Ну и ещё чего-нибудь, про запас :) что-то , где необходимо передавать ссылку на загруженную страницу. Знаю, что для перевода существует несколько "приятных" расширений, но хочется именно так :)
Да! И ещё вопрос: а в чём отличия между Custom Buttons и Custom Items? Понятно, что второе-это развитие первого... а можно подробней, но без углубления в "формулы" :)

alexmac, второе использует XBL и все его прелести (конструктор, деструктор, евенты, наследование итп), а первое - только яваскрипт: есть только конструктор и обработчик клика, который во многих случаях без надобности. часть кнопок custombuttons совместимо с customitems, но не все. если установлены оба расширения, то конфликтов быть не должно.

Dark-Demon, спасибо за ответ. Может по поводу кнопки что-нибудь подскажите?
В файлах browser.js и minit.js(от TMP) нашёл функции handleURLBarCommand и TMP_goButtonClick соответственно. В goButtonClick есть вызов handleURLBarCommand, но как это прикрутить к нужной мне кнопке я не знаю :(

alexmac
https://addons.mozilla.org/en-US/firefox/addon/3361

To Nem
Спасибо, но про это расширение мне известно. Хочется сделать именно так как я сказал выше, в посте 408.

alexmac
Кнопка там есть - в statusbar-е. Перевод через разные сервисы.
А Maxthon стоит далеко не у всех, поэтому не совсем понятно, что именно нужно.
А так еще посмотрите http://www.concisefreeware.com/foxlingo.php
Удачи.

Спасибо за участие :) FoxLingo у меня уже есть. Функциональность в виде сервисов перевода была взята для примера :)
Нужен аналог кнопки "Перейти", реализованной через Custom Buttons и кнопка, которая бы получала текущий URL.

alexmac
Пардон, я забыл что нахожусь в теме "Custom Buttons" :-)

Вот простой пример такой кнопки, переводящей через Google с de на en
custombutton://GoogleTrans%20de%7Cen%5D … B%0A%5D%5B

Чуть позже доделаю и выложу вариант, где будет с выпадающим списком.

Спасибо.
Правильно ли я понял, что :content.document.location.href -получение текущего URL, а loadURI(...) - функция перехода по какому-либо URL? И будет ли loadURI(...)+Custom Buttons  работать как кнопка "Перейти"?

Вот с меню.
custombutton://Open%20URL%20with%20serv … P%29%3B%0A

Да, "content.document.location.href" - текущий URL, а "loadURI()" - переход по адресу.

И будет ли loadURI(...)+Custom Buttons  работать как кнопка "Перейти"?

Не понял вопроса. А как работает функция "Перейти"?

:) Вопрос вот в чём :
  content.document.location.href = текущий URL- это только набранный или уже с загруженой страницы? или и тот и другой?

Добавлено Птн 30 Мар 2007 15:55:16 :
Проверил, -это URL уже загруженой страницы :( а как получить "и тот и другой" ?

alexmac
Понял. Именно тот текст, который находится в строке URL:

Выделить код

Код:

document.getElementById("urlbar").value

To Nеm:Спасибо, помогло! А, вообще, это что за язык, javs script?

alexmac
Да, JavaScript.
Удачи.

Кто-нибудь может подсказать, как при помощи Custom Buttons сделать так, что бы при наведении курсора мыши кнопка меняла свой цвет (менялась картинка)?

вот так:

Выделить код

Код:

this. mouseover = function (event)
{
    this. oldimage = this. image;
    this. image = "file:///H:/greenicon.png";
}
this. mouseout = function (event)
{
    this. image = this. oldimage;
}
this. setAttribute ("onmouseover", "this.mouseover()");
this. setAttribute ("onmouseout", "this.mouseout()");

например, в разделе "Инициализация".

Народ, подскажите, как функцию из TMP "Закрыть вкладки справа" реализовать в кнопку??

To Anton:
             Спасибо!
To Jarov:

Выделить код

Код:

custombutton://%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0441%u043F%u0440%u0430%u0432%u0430%5D%5B%5D%5B/*CODE*/%0AgBrowser.closeRightTabs%28gBrowser.mCurrentTab%29%3B%5D%5B/*Initialization%20Code*/

код взял отсюда _http://tmp.garyr.net/forum/rss.php?p=15016 (может тебе пригодится)

А у когонить открывается сайт custombuttons.phpbbnow.com?
Просто суда по кешу гугли там очень много всего полезного, но к сожалению гугль не все успел прокешировать



UPD:
Нашел на мой взляд довольно интересную кнопку. Создает html список установленных кнопок.

Выделить код

Код:

custombutton://Export%20Custom%20Buttons%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACq0lEQVR4Xm2PzWtcVRiHn/fce2Ymk8ykk9YkpTWkCyvYVBvpImQhhdCYbgRdSYMLd5K0qaj0L2jpF+3GpVChGNSNllYMCn5uulEKJiGEiCQm1TSTTmYmmXvnfp1j6wwdAn3ggXPg/b0fYj4CLJg6+B67UIarQQyJ4TxNRMGff4HnQxiDookIOIoWll72qHHyatwYerGNmmoV4qTxBlC0QDlgAWshqTOWGj28v230xf31bcb8EMpV2CiCNbQyPAMTk5G8e1od3xQ9tCOS06dDn4zvt7bd3cA2TRrGNQb1sa4TstdDPVciPbjvhFdiMPAA09zAthoMI7wFTErGvSTZzLTu677lDKFRHiif7GuubjvUfUt3ZKadJzXC5P8Zy7CYc8zyUvcAx/KQqWG1Qnq6obAKdhMApAe7cZD6yhqRbwjWAta/8Vi7H8+JeZ/DJtsxLW+0H5fBIoQGIsCwGxdIAbFQ+tJh7tPkt1rJjov5AKIKL4SWjzOn1OvOEQNx60YUoJv/LQhmSO7d5vtanXOOZkkhoFIsmZC3K7fNnegXoNh0E5aXFBe/znHtqxzX7xY4+4NjKxETnZqlNKCSCJIErKJc3+Gi/wdb/ANsAI9gftFSLEzR/+YFgndG+LFfux8mRJMKphS4D1Z4ShKzN6/JswWYhoWyJf/KOrVDs2wvz5GKIlag6goAuMbQAo464FBqTL8ZtvNTlOKIttSDgKCeIEpICV+48BnwuTIJPDGJcVzFq+kqhIvw9wKe/t3/ZCnQiwNHewniAFccDgy3keTo9Aw/+wKyMEYTutJwP2vpe+jxaxhzpWb59t2Yg3teTs+MnDkwsLrq8+/l9WjfQ9trNCUAmT8JAAJ91nIvjLhhDTdJ2CpbeM+B7YDnpUu+66/Y/MQK5R6XUyGsAvwHk/0n+0qkvkwAAAAASUVORK5CYII%3D%5D%5Bvar%20rv%20%3D%20new%20Object%28%29%3B%0Avar%20cbPrefs%20%3D%20gPrefService.getChildList%28%22custombuttons.button%22%2C%20rv%29%3B%0AcbPrefs.sort%28%29%3B%0A%0Avar%20btnSource%2C%20btnValue%2C%20btnLabel%2C%20btnImage%2C%20btnURL%3B%0Avar%20btnLink%20%3D%20%22%22%3B%0A%0Afor%28var%20i%20%3D%200%3B%20i%20%3C%20cbPrefs.length%3B%20i++%29%20%7B%0A%20%20btnValue%20%3D%20gPrefService.getCharPref%28cbPrefs%5Bi%5D%29%3B%0A%20%20btnSource%20%3D%20%5B%5D%3B%0A%20%20btnSource%20%3D%20btnValue.split%28/%5C%5D%5C%5B/%29%3B%0A%20%20btnLabel%20%3D%20btnSource%5B0%5D%3B%0A%20%20btnImage%20%3D%20%28btnSource%5B1%5D%20%3D%3D%20%22%22%20%7C%7C%20btnSource%5B1%5D%20%3D%3D%20%22data%3A%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3F%20%22chrome%3A//custombuttons/skin/button.png%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3A%20btnSource%5B1%5D%3B%0A%20%20btnURL%20%3D%20%22custombutton%3A//%22%20+%20escape%28btnValue%29%3B%0A%0A%20%20btnLink%20+%3D%20%22%3Cli%20style%3D%27list-style-image%3A%20url%28%22%20+%20btnImage%20+%20%22%29%27%3E%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22%3Ca%20href%3D%27%22%20+%20btnURL%20+%20%22%27%3E%22%20+%20btnLabel%20+%20%22%3C/a%3E%3C/li%3E%5Cn%22%3B%0A%7D%0A%0A%0Avar%20htmlData%20%3D%20%22%3C%21DOCTYPE%20html%20PUBLIC%20%5C%22-//W3C//DTD%20XHTML%201.0%20Strict//EN%5C%22%5Cn%5C%0A%20%20%20%20%5C%22http%3A//www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd%5C%22%3E%5Cn%5C%0A%3Chtml%20xmlns%3D%5C%22http%3A//www.w3.org/1999/xhtml%5C%22%3E%5Cn%5C%0A%3Chead%3E%5Cn%5C%0A%3Ctitle%3EMy%20Custom%20Buttons%3C/title%3E%5Cn%5C%0A%3Cstyle%20type%3D%5C%22text/css%5C%22%3E%5Cn%5C%0A/*%3C%21%5BCDATA%5B*/%5Cn%5C%0Aul%20%7B%20-moz-column-count%3A%203%3B%20-moz-column-gap%3A%201em%3B%20%7D%5Cn%5C%0Aa%20%7B%20text-decoration%3A%20none%3B%20%7D%5Cn%5C%0Aa%3Ahover%20%7B%20text-decoration%3A%20underline%3B%20%7D%5Cn%5C%0A/*%5D%5D%3E*/%5Cn%5C%0A%3C/style%3E%3C/head%3E%5Cn%5C%0A%3Cbody%3E%5Cn%5C%0A%3Ch1%3EClick%20the%20links%20to%20install%20the%20buttons%3C/h1%3E%5C%0A%3Cul%3E%5Cn%22%3B%0A%0Avar%20htmlSource%20%3D%20htmlData%20+%20btnLink%20+%20%22%3C/ul%3E%5Cn%3C/body%3E%5Cn%3C/html%3E%22%3B%0A%0Avar%20nsIFilePicker%20%3D%20Components.interfaces.nsIFilePicker%3B%0Avar%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20.createInstance%28nsIFilePicker%29%3B%0Afp.init%28window%2C%20%22%22%2C%20fp.modeSave%29%3B%0Afp.defaultString%20%3D%20%22my_custombuttons.html%22%3B%0Afp.appendFilters%28fp.filterHTML%29%3B%0Afp.appendFilters%28fp.filterAll%29%3B%0Aif%28fp.show%28%29%20%3D%3D%20fp.returnCancel%29%20return%3B%0A%0Avar%20stream%20%3D%20Components.classes%5B%27@mozilla.org/network/file-output-stream%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0A%0Astream.init%28fp.file%2C%200x20%7C0x02%7C0x08%2C%200666%2C%200%29%3B%0Astream.write%28htmlSource%2C%20htmlSource.length%29%3B%0Astream.close%28%29%3B%0A%0A%0A%0A%5D%5B

Одна проблема у меня при попытке вставить в код строчку:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n\
Кнопка перестает работать, а без выставления кодировки криво отображает русские буквы.

И еще одна кнопка, которая должна оправлять тебя в низ страницы:


Выделить код

Код:

custombutton://Go%20to%20bottom%20of%20the%20page%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAABAQEKAAAACwAAAAkAAAAGAAAAAAAAAPoAAAD3AAAA9f////YAAAAAAAAAAAAAAAAB////AAAAAAArKysGC/X1EvQOMCsEDRVfAwAGQgEBARsAAAAA////5f79/cv79uiUDPLQ1fULC+7V1dX6AAAAAAH///8AVlZWBg3s7BnS/Shf/f0CgSlCRwA9QDIAKSQbAPr8AADS1eIAxb/QAODKugADA/5/LgPYofMUFOeqqqr6BAAAAABCCgoapQU3YwMG/3x1h3QAIBcUAPDpAADv4/8A/Pn7ABsLGABbW0oA4z8yAKaVk4HaATcFWwrnnQAAAOADK/LyErr7Nzzm5+CTdI56AB8TFADx6QAA9/QAAPz5/QD6+P4A+/f7APfw+wAMDgoAHScsAM/Fvz72FjrG/sCi6AQWKioX6LDgWypIRwAKCggAhoCoAPr39AD/Af8A//z/AP///gD///8A////AAYHCABHVkkAHC0+AOjj1lsWOCrUBBUbGxrz9tc6WEIyAOzm9gBNQSEAZV03AAAAAAAAAAAAAAAAAAAAAAAAAAAAm6PJAOXm8wAtLioAu9nJOhUbGxoCCxMTGPz6+RUvKBsAGRoWAMfa8QDU2egAAAAAAAAAAAAAAAAAAAAAANTZ6AC6x+kAExEQABwbGQD8+vkVCxMTGAIIEBALAAAAAP4AAAD/AQAARUs9AH+RwQDy8vcAAAAAAAAAAADy8vcAfoi7ADk1MQD///8A/Pz/AAAAAAAIEBALAgQICPkICArv0NnkAAIEAAAIDAgAP0k9AHmJugAAAAAAAAAAAHmEugAuNjcABQkHAAACAADh4OQACAgK7wQICPkEBQkJ6x4iLdvBvM82KWYcAPb4AQAbHRcA4uIdAI6WwQAAAAAAABAXABgaEwD7+f4AAQUCANbW1QAXGiPjBQkJ6wIB/PzfcGc+z9m5uQDd5+wACQwAAP8FAQA1Oi0A4wAMAN/6CgAwNSsAAAIBAAQLAgDq7ewA6NjHAHdvSMcB/PzfA4aMjOwWDgQK9f8RFqOXoiAkNTAAFBILAPv+AQAXGRcAGRgUAAEC/wAABgMA5ujsALemnABYV1DBUUIjqgoTE8EEAAAAAPn//79yYTcVBQEBB5dxgDghREgANzsvACEgHAD6BAEA3dbeAM/GzwDkzcIAXlxWyG1gNqv2+/u/BgAAAAH///8AAAAAAAAAABb9/f1L2d3tUpOexinW0s4Z8/LuCgAAAAANDhL2Ki4y521iOtcnIxOuAwMDtQAAAOoAAAAAAf///wAAAAAAAAAAAAAAAAAAAAAz/f39NAMDAykAAAAeAAAAAAAAAOL9/f3XAwMDzAAAAM0AAAAAAAAAAAAAAAAbzVfefBtHvQAAAABJRU5ErkJggg%3D%3D%5D%5Bcontent.scrollTo%280%2Cwindow.innerHeight*2%29%3B%0A%0A%5D%5B

У меня она отправлает роно на одно нажатие Page Down и больше не работает.

UPD2:

Грубо, но заставил ее работать:

Выделить код

Код:

custombutton://Go%20to%20bottom%20of%20the%20page%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAABAQEKAAAACwAAAAkAAAAGAAAAAAAAAPoAAAD3AAAA9f////YAAAAAAAAAAAAAAAAB////AAAAAAArKysGC/X1EvQOMCsEDRVfAwAGQgEBARsAAAAA////5f79/cv79uiUDPLQ1fULC+7V1dX6AAAAAAH///8AVlZWBg3s7BnS/Shf/f0CgSlCRwA9QDIAKSQbAPr8AADS1eIAxb/QAODKugADA/5/LgPYofMUFOeqqqr6BAAAAABCCgoapQU3YwMG/3x1h3QAIBcUAPDpAADv4/8A/Pn7ABsLGABbW0oA4z8yAKaVk4HaATcFWwrnnQAAAOADK/LyErr7Nzzm5+CTdI56AB8TFADx6QAA9/QAAPz5/QD6+P4A+/f7APfw+wAMDgoAHScsAM/Fvz72FjrG/sCi6AQWKioX6LDgWypIRwAKCggAhoCoAPr39AD/Af8A//z/AP///gD///8A////AAYHCABHVkkAHC0+AOjj1lsWOCrUBBUbGxrz9tc6WEIyAOzm9gBNQSEAZV03AAAAAAAAAAAAAAAAAAAAAAAAAAAAm6PJAOXm8wAtLioAu9nJOhUbGxoCCxMTGPz6+RUvKBsAGRoWAMfa8QDU2egAAAAAAAAAAAAAAAAAAAAAANTZ6AC6x+kAExEQABwbGQD8+vkVCxMTGAIIEBALAAAAAP4AAAD/AQAARUs9AH+RwQDy8vcAAAAAAAAAAADy8vcAfoi7ADk1MQD///8A/Pz/AAAAAAAIEBALAgQICPkICArv0NnkAAIEAAAIDAgAP0k9AHmJugAAAAAAAAAAAHmEugAuNjcABQkHAAACAADh4OQACAgK7wQICPkEBQkJ6x4iLdvBvM82KWYcAPb4AQAbHRcA4uIdAI6WwQAAAAAAABAXABgaEwD7+f4AAQUCANbW1QAXGiPjBQkJ6wIB/PzfcGc+z9m5uQDd5+wACQwAAP8FAQA1Oi0A4wAMAN/6CgAwNSsAAAIBAAQLAgDq7ewA6NjHAHdvSMcB/PzfA4aMjOwWDgQK9f8RFqOXoiAkNTAAFBILAPv+AQAXGRcAGRgUAAEC/wAABgMA5ujsALemnABYV1DBUUIjqgoTE8EEAAAAAPn//79yYTcVBQEBB5dxgDghREgANzsvACEgHAD6BAEA3dbeAM/GzwDkzcIAXlxWyG1gNqv2+/u/BgAAAAH///8AAAAAAAAAABb9/f1L2d3tUpOexinW0s4Z8/LuCgAAAAANDhL2Ki4y521iOtcnIxOuAwMDtQAAAOoAAAAAAf///wAAAAAAAAAAAAAAAAAAAAAz/f39NAMDAykAAAAeAAAAAAAAAOL9/f3XAwMDzAAAAM0AAAAAAAAAAAAAAAAbzVfefBtHvQAAAABJRU5ErkJggg%3D%3D%5D%5Bcontent.scrollTo%280%2Cwindow.innerHeight*1000000%29%3B%0A%0A%5D%5B

Одна проблема у меня при попытке вставить в код строчку:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />\n\
Кнопка перестает работать, а без выставления кодировки криво отображает русские букв

Может быть, нужно заэкранировать (\") кавычки ?

Подскажите, что я не так делаю.
Я установил расширение, добавил кнопку с названием "Добавить закладку" в Code написал: addBookmarkAs(document.getElementById(’content’), false); Вынес кнопку на панель. Жму ничего не происходит.
Мне, собственно, это расширение понравилось возможностью создать интересующие меня три кнопки: Добавить закладку, Сохранить страницу как... и Вызвать Оутлук. И на первой же команде - неудача. Подскажите плз. что не так. Код взял на указанной выше странице _http://forum.mozilla-russia.org/doku.php?id=general:tips:hotkeys

FireFox 2.0.0.3 + Windows XP SP2 (и все последующие)

Заренее спасибо.

добавил кнопку с названием "Добавить закладку" в Code написал: addBookmarkAs(document.getElementById(’content’), false); Вынес кнопку на панель. Жму ничего не происходит.

коды в wiki не рассчитаны на copy-paste : )

Замени вот эти:

Выделить код

Код:

addBookmarkAs(document.getElementById(’content’), false);
                                      ^       ^

символы символами одинарной (') или двойной (") кавычек.

p.s. wiki-страничку поправил, copy-paste сейчас должен работать корректно.

Спасибо Anton. Сработало.

Еще один коротенький вопросик. Где взять коды? MenuManipulator, на который тут ссылались не становится на FF 2.0 - говорит не та версия.

Меня сейчас интересует код вызова меню кодировки страницы (KOI8-R, Windows-1251 и т. д.). (Save as... вроде нашел).

vadi61
MenuManipulator ставится, если исправить версию или отключить проверку на совместимость (как - искать на форуме, обсуждалось множество раз).

Где взять коды?

Dom Inspector, сырцы firefox, расширений

код вызова меню кодировки страницы (KOI8-R, Windows-1251 и т. д.)

Кнопка выбора кодировок есть где-то в этой теме.

OK, поищем

А кто-нибудь может создать несколько кнопок следующего характера (все действия выполняются применительно к текущей вкладке по нажатию на соответствующую кнопку):
- загрузка/перезагрузка вкладки со включ/отключ java;
- загрузка/перезагрузка вкладки со включ/отключ java script;
- загрузка/перезагрузка вкладки со включ/отключ flash;
Видел кнопки для java и java script, но они не перезагружают вкладку :(

Не подскажите сайтики, где можно достать различные кнопки? (кроме официального сайта и сайта дарк-демона)

Mr. JeCk
В этой теме должны быть ссылки.

хе-хе... набрёл сейчас на https://addons.mozilla.org/ru/firefox/addon/5066 которое ничем от custombuttons не отличается кроме нескольких незначительных настроек. Ян, естественно, в соавторах не указан...

а я ужо было испугался, что зря делал customitems, ведь уже есть custombuttons в квадрате... :)

Ян, естественно, в соавторах не указан...

На странице не указан, в install.rdf:

Выделить код

Код:

em:developer="Custom Buttons Forum Development Group members are:
        Yan: Original Creator,
...
        em:contributor="Dark-Demon,

гм... а мне за что такая честь? :) я для custombuttons только кнопки делал...

ps: проверил несколько ссылок - битые. в том числе и тот форум с кнопками..

Добавлено Птн 13 Июл 2007 19:48:03 :
похоже живых источников на данный момент только четыре:
эта ветка
http://forums.mozillazine.org/viewtopic.php?t=428688
http://minidata.googlepages.com/BackupCustomButtonsForMiniData.html
http://dark-demon.nm.ru/soft/custombuttons/

а мне за что такая честь?

не скромничай, решение с оверлеями ты нашёл

"идеи не подлежат потенции" :) всё-равно реализовывал мою идею и обеспечивал обратную совместимость Ян..

Очень нужна кнопочка для бекапа Custom Buttons, нашел вот такую:

Выделить код

Код:

custombutton://Backup%20Custom%20Buttons%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAkVJREFUeJx90UtPE2EUxvF/59KWaaENhYIGSIgRTWPKxrgRooms0L0LvwNfg09h3LBz50Kj0YQYF2q6wcQbRcFekF5oOyntzLzvO/O6Mikk5ezO4vnlOTkxRmZ1dfXh9vb2TjqdNnv9ftQ6rmOYFjPz86SSSbtcLte2trY2gyD49T9jXAA2CoVC1g/E5OnBj0zhaj6zciWf8bqdzISTcorF4srS0tL6aMYaXbLZ7MKfWp3v717xZDFFzpHQOKL+4Q0vmw8wsznS6fTCWCCZTE43mk2sZIJk5SdUv0G/ywQ22jQZekMcx8mPBQzDSIeBT5Rf5AVzFGcz6JjJ177A6w8wlCKRSEyNBQBLKcVEPM5RZ8h+p4ppmphGgripMU0T27ZTY4EoilBKUa9XWZ6zWVtbR0Xw8VOJWivAtuNore1LgaEvmTJbPL6XI576Al6V+Wt7PHPvMpAWWutzlc+9UUpJFIZE1jTdZhvOyiB6uKwQxhykEIRheP7mCw1CtEIwyfO9HDeXc2gdY7/So+u2iKFRSumxgBAiCMMQopBq7YRq6y+WYUFgECExDAMhhH8ZMFBS0e6ecGt9gY37m0jl83b3NYclgZQSIcRgLOC6rqtERHwmIH2nwufhU9riN80bRzgHj2jXBgyHw95YIAiCTqgVlpfj7EAzd91hIZ4l1blNeSDxvAG+7zcua1Cz4xZC2Jy8dzAOZ9EajitNXPeUSEd4nlcZC5RKpR0p5WIsFssopcIw1GgdEUUaw8Dyfb/ZaDR2RzP/ACJMLvfI0dt2AAAAAElFTkSuQmCC%5D%5B%0A//%20Sun%20Jan%2028%202007%204%3A09%3A01%20PM%20GMT-0800%20%28Pacific%20Standard%20Time%29%20cblover%20http%3A//minidata.googlepages.com/%0A%0A//%20This%20button%20was%20given%20birth%20by%20deepakjoshi04%2C%20Custom%20Buttons%20Forum%20since%2014%20Aug%202006%0A//%20http%3A//custombuttons.phpbbnow.com/viewtopic.php%3Ft%3D199%26postdays%3D0%26postorder%3Dasc%26start%3D0%0A%0A//%20The%20purpose%20of%20this%20button%20is%20to%20create%20a%20backup%20HTML%20file%20of%20the%20Customs%20Buttons.%0A%0A//%20Creates%20an%20HTML%20file%20with%20no%20errors%20or%20warnings%20from%20Firefox%20Extension%20Html%20Validator%200.7.9.5%0A//%20as%20long%20as%20one%20uses%20no%20special%20characters%2C%20such%20as%20%26%20or%20%27%2C%20in%20the%20button%20name%2C%20uses%20an%20image%2C%0A//%20and%20does%20not%20use%20an%20imagelike%20the%20image%20for%20Yan%27s%20Clock%20button%3B%20even%20in%20these%20cases%20one%20only%0A//%20gets%20warnings%2C%20not%20errors.%0A%0A//%20See%20https%3A//addons.mozilla.org/firefox/249/%20or%20http%3A//users.skynet.be/mgueury/mozilla/%0A//%20and%20read%20the%20entire%20thread%20at%20http%3A//custombuttons.phpbbnow.com/viewtopic.php%3Ft%3D199%0A%0A//%20The%20file%20created%20will%20have%20a%20unique%20name.%0A%0A//%20This%20button%20and%20the%20Open%20File...%20button%20--%20BrowserOpenFileWindow%28%29%3B%20--%20will%20enable%20one%20to%20load%20the%0A//%20HTML%20file%20into%20Firefox%20for%20a%20printed%20output.%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20Get%20the%20Date%20%26%20Time%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%0A/*%20Constants%20%20%20%20*/%20var%20c%3D%22%3A%22%3Bb%3D%22%20%22%3B%0A/*%20Date%20%20%20%20%20%20%20%20%20*/%20var%20t%3Dnew%20Date%28%29%3B%0A/*%20Year%20%20%20%20%20%20%20%20%20*/%20var%20y%3D1900+t.getYear%28%29%3B%0A/*%20Minutes%20%20%20%20%20%20*/%20var%20min%3Dt.getMinutes%28%29%3B%20if%20%28min%3C10%29%7Bmin%3D%220%22+min%7D%3B%0A/*%20Seconds%20%20%20%20%20%20*/%20var%20s%3Dt.getSeconds%28%29%3B%20if%20%28s%3C10%29%7Bs%3D%220%22+s%7D%3B%0A/*%20Time%2012%20Hour%20*/%20var%20h%3Dt.getHours%28%29%3B%20var%20ap%3D%22AM%22%3B%20if%20%28h%3E%3D12%29%20ap%3D%22PM%22%3B%20if%20%28h%3E12%29%20h%3Dh-12%3B%20if%20%28h%3D%3D0%29%20h%3D12%3B%20h%3Dh+c+min+c+s+b+ap%3B%0A/*%20Day%20of%20Week%20%20*/%20var%20dw%3Dt.getDay%28%29%3Bswitch%28dw%29%7Bcase%200%3A%20dw%3D%22Sun%22%3Bbreak%3Bcase%201%3A%20dw%3D%22Mon%22%3Bbreak%3Bcase%202%3A%20dw%3D%22Tue%22%3Bbreak%3Bcase%203%3A%20dw%3D%22Wed%22%3Bbreak%3Bcase%204%3A%20dw%3D%22Thu%22%3Bbreak%3Bcase%205%3A%20dw%3D%22Fri%22%3Bbreak%3Bdefault%3A%20dw%3D%22Sat%22%3B%7D%0A/*%20Month%20%20%20%20%20%20%20%20*/%20var%20m%3Dt.getMonth%28%29%3Bswitch%28m%29%7Bcase%200%3A%20m%3D%22Jan%22%3Bbreak%3Bcase%201%3A%20m%3D%22Feb%22%3Bbreak%3Bcase%202%3A%20m%3D%22Mar%22%3Bbreak%3Bcase%203%3A%20m%3D%22Apr%22%3Bbreak%3Bcase%204%3A%20m%3D%22May%22%3Bbreak%3Bcase%205%3A%20m%3D%22Jun%22%3Bbreak%3Bcase%206%3A%20m%3D%22Jul%22%3Bbreak%3Bcase%207%3A%20m%3D%22Aug%22%3Bbreak%3Bcase%208%3A%20m%3D%22Sep%22%3Bbreak%3Bcase%209%3A%20m%3D%22Oct%22%3Bbreak%3Bcase%2010%3A%20m%3D%22Nov%22%3Bbreak%3Bdefault%3A%20m%3D%22Dec%22%3B%7D%0A/*%20Day%20of%20Month%20*/%20var%20d%3Dt.getDate%28%29%3B%0A/*%20Time%20Zone%20%20%20%20*/%20var%20tz%3DString%28t%29.substring%2825%29%3B%0A/*%20Output%20%20%20%20%20%20%20*/%20var%20p%3Ddw+b+m+b+d+b+y+b+h+b+tz%3B%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20End%20of%20Get%20the%20Date%20%26%20Time%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%0Avar%20dataURL%3D%22%5Cn%3C%21DOCTYPE%20html%20PUBLIC%20%27-//W3C//DTD%20XHTML%201.0%20Transitional//EN%27%22%3B%0A%0AdataURL%3DdataURL+%22%27http%3A//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%27%3E%5Cn%3Chtml%20xmlns%3D%27http%3A//www.w3.org/1999/xhtml%27%3E%22%3B%0A%0AdataURL%3DdataURL+%22%5Cn%3Chead%3E%3Clink%20rel%3D%27shortcut%20icon%27%20href%3D%27favicon.ico%27%20/%3E%22%3B%0A//D6D6D6%20gray%20background%0AdataURL%3DdataURL+%22%3Ctitle%3EMy%20Custom%20Buttons%3C/title%3E%3C/head%3E%5Cn%3Cbody%20style%3D%27background-color%3A%20%23E1E5C4%27%3E%5Cn%3Ccenter%3E%3Ch2%3EMy%20Custom%20Buttons%3C/h2%3E%3Cstrong%3E%22+p+%22%3C/strong%3E%3C/center%3E%5Cn%3Col%3E%5Cn%22%3B%0A%0Avar%20NumOfButtons%3B%0Avar%20buttons%3DgetButtons%28%29%3B%0A%0AdataURL+%3Dbuttons.sort%28%29+%22%5Cn%5Cn%3C/ol%3E%5Cn%3Ccenter%3E%3Ch1%3E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%3C/h1%3E%3C/center%3E%3C/body%3E%5Cn%3C/html%3E%5Cn%22%3B%0AdataURL%3DdataURL.replace%28/%3E%2C%3C/g%2C%27%3E%3C%27%29%3B%0A%0AwriteFile%28dataURL%29%3B%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20getButtons%28%29%0A%20%20%7B%0A%20%20var%20buttons%3Dnew%20Array%3B%0A%20%20var%20i%3D0%3B%0A%20%20for%20%28var%20j%3D0%3Bj%3Ccustombuttons.gToolbox.palette.childNodes.length%3Bj++%29%0A%20%20%20%20%7B%0A%20%20%20%20var%20but%3Dcustombuttons.gToolbox.palette.childNodes%5Bj%5D%3B%0A%20%20%20%20if%20%28but.getAttribute%28%27id%27%29.indexOf%28%27custombuttons-button%27%29%21%3D-1%29%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20var%20num%3Dcustombuttons.getNumber%28but.getAttribute%28%27id%27%29%29%3B%0A%20%20%20%20%20%20var%20but_code%3DgetHyperlink%28num%29%3B%0A%20%20%20%20%20%20if%28but_code.length%3E2%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20buttons%5Bi++%5D%3D%22%3Cli%3E%22+but_code+%22%3C/li%3E%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20NumOfButtons%3Di%3B%0A%20%20%20%20return%20buttons%3B%0A%20%20%7D%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20getHyperlink%28num%29%0A%20%20%7B%0A%20%20var%20values%20%3D%20custombuttons.getButtonParameters2%28num%29%3B%0A%20%20var%20altext%20%3D%20values.name%3B%0A%20%20var%20uri%3D%27custombutton%3A//%27+escape%28values.name+%27%5D%27+%27%5B%27+values.image+%27%5D%27+%27%5B%27+values.code+%27%5D%27+%27%5B%27+values.initCode%29%3B%0A%20%20var%20link%20%3D%20%22%5Cn%5Cn%3Ca%20href%3D%27%22%20+%20uri%20+%20%22%27%3E%5Cn%3Cimg%20alt%3D%27%22%20+%20altext%20+%20%22%27%20src%3D%5C%22%22%20+%20unescape%28values.image%29%20+%0A%20%20%20%20%22%5C%22%20border%3D%270%27%20height%3D%2716%27%20/%3E%5Cn%22%20+%20unescape%28values.name%29%20+%20%22%3C/a%3E%22%3B%0A%20%20return%20link%3B%0A%20%20%7D%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20writeFile%28str%29%0A%20%20%7B%0A%20%20var%20nsIFilePicker%20%3D%20Components.interfaces.nsIFilePicker%3B%0A%20%20var%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28nsIFilePicker%29%3B%0A%20%20fp.init%28window%2C%20%22Save%20CB%20backup%20as%20%22%2C%20nsIFilePicker.modeSave%29%3B%0A%20%20/*%20The%20file%20name%20will%20be%20unique%20given%20MS%27%20time-stamp%20and%20will%20also%20have%20the%20number%20of%20buttons%20indicated%20*/%0A%20%20fp.defaultString%20%3D%20%22BackupCustomButtons%20%22+new%20Date%28%29.getTime%28%29+%22%20%28%22+NumOfButtons+%22%29.html%22%3B%0A%20%20fp.appendFilters%28fp.filterHTML%29%3B%0A%20%20fp.appendFilters%28fp.filterAll%29%3B%0A%20%20//%20other%20filters%0A%20%20var%20res%3Dfp.show%28%29%3B%0A%20%20if%20%28res%20%3D%3D%20nsIFilePicker.returnOK%20%7C%7C%20res%3D%3DnsIFilePicker.returnReplace%29%0A%20%20%20%20%7B%0A%20%20%20%20var%20outputStream%20%3D%20Components.classes%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.%0A%20%20%20%20%20%20createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0A%20%20%20%20outputStream.init%28%20fp.file%2C%200x04%20%7C%200x08%2C777%2C%200%20%29%3B%0A%20%20%20%20var%20result%20%3D%20outputStream.write%28%20str%2C%20str.length%20%29%3B%0A%20%20%20%20outputStream.close%28%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%5D%5B

но она коверкает кириллицу в названиях кнопок. :(

Philip
сойдёт:

Выделить код

Код:

custombutton://Backup%20Custom%20Buttons%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAAkVJREFUeJx90UtPE2EUxvF/59KWaaENhYIGSIgRTWPKxrgRooms0L0LvwNfg09h3LBz50Kj0YQYF2q6wcQbRcFekF5oOyntzLzvO/O6Mikk5ezO4vnlOTkxRmZ1dfXh9vb2TjqdNnv9ftQ6rmOYFjPz86SSSbtcLte2trY2gyD49T9jXAA2CoVC1g/E5OnBj0zhaj6zciWf8bqdzISTcorF4srS0tL6aMYaXbLZ7MKfWp3v717xZDFFzpHQOKL+4Q0vmw8wsznS6fTCWCCZTE43mk2sZIJk5SdUv0G/ywQ22jQZekMcx8mPBQzDSIeBT5Rf5AVzFGcz6JjJ177A6w8wlCKRSEyNBQBLKcVEPM5RZ8h+p4ppmphGgripMU0T27ZTY4EoilBKUa9XWZ6zWVtbR0Xw8VOJWivAtuNore1LgaEvmTJbPL6XI576Al6V+Wt7PHPvMpAWWutzlc+9UUpJFIZE1jTdZhvOyiB6uKwQxhykEIRheP7mCw1CtEIwyfO9HDeXc2gdY7/So+u2iKFRSumxgBAiCMMQopBq7YRq6y+WYUFgECExDAMhhH8ZMFBS0e6ecGt9gY37m0jl83b3NYclgZQSIcRgLOC6rqtERHwmIH2nwufhU9riN80bRzgHj2jXBgyHw95YIAiCTqgVlpfj7EAzd91hIZ4l1blNeSDxvAG+7zcua1Cz4xZC2Jy8dzAOZ9EajitNXPeUSEd4nlcZC5RKpR0p5WIsFssopcIw1GgdEUUaw8Dyfb/ZaDR2RzP/ACJMLvfI0dt2AAAAAElFTkSuQmCC%5D%5B%0A//%20Sun%20Jan%2028%202007%204%3A09%3A01%20PM%20GMT-0800%20%28Pacific%20Standard%20Time%29%20cblover%20http%3A//minidata.googlepages.com/%0A%0A//%20This%20button%20was%20given%20birth%20by%20deepakjoshi04%2C%20Custom%20Buttons%20Forum%20since%2014%20Aug%202006%0A//%20http%3A//custombuttons.phpbbnow.com/viewtopic.php%3Ft%3D199%26postdays%3D0%26postorder%3Dasc%26start%3D0%0A%0A//%20The%20purpose%20of%20this%20button%20is%20to%20create%20a%20backup%20HTML%20file%20of%20the%20Customs%20Buttons.%0A%0A//%20Creates%20an%20HTML%20file%20with%20no%20errors%20or%20warnings%20from%20Firefox%20Extension%20Html%20Validator%200.7.9.5%0A//%20as%20long%20as%20one%20uses%20no%20special%20characters%2C%20such%20as%20%26%20or%20%27%2C%20in%20the%20button%20name%2C%20uses%20an%20image%2C%0A//%20and%20does%20not%20use%20an%20imagelike%20the%20image%20for%20Yan%27s%20Clock%20button%3B%20even%20in%20these%20cases%20one%20only%0A//%20gets%20warnings%2C%20not%20errors.%0A%0A//%20See%20https%3A//addons.mozilla.org/firefox/249/%20or%20http%3A//users.skynet.be/mgueury/mozilla/%0A//%20and%20read%20the%20entire%20thread%20at%20http%3A//custombuttons.phpbbnow.com/viewtopic.php%3Ft%3D199%0A%0A//%20The%20file%20created%20will%20have%20a%20unique%20name.%0A%0A//%20This%20button%20and%20the%20Open%20File...%20button%20--%20BrowserOpenFileWindow%28%29%3B%20--%20will%20enable%20one%20to%20load%20the%0A//%20HTML%20file%20into%20Firefox%20for%20a%20printed%20output.%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20Get%20the%20Date%20%26%20Time%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%0A/*%20Constants%20%20%20%20*/%20var%20c%3D%22%3A%22%3Bb%3D%22%20%22%3B%0A/*%20Date%20%20%20%20%20%20%20%20%20*/%20var%20t%3Dnew%20Date%28%29%3B%0A/*%20Year%20%20%20%20%20%20%20%20%20*/%20var%20y%3D1900+t.getYear%28%29%3B%0A/*%20Minutes%20%20%20%20%20%20*/%20var%20min%3Dt.getMinutes%28%29%3B%20if%20%28min%3C10%29%7Bmin%3D%220%22+min%7D%3B%0A/*%20Seconds%20%20%20%20%20%20*/%20var%20s%3Dt.getSeconds%28%29%3B%20if%20%28s%3C10%29%7Bs%3D%220%22+s%7D%3B%0A/*%20Time%2012%20Hour%20*/%20var%20h%3Dt.getHours%28%29%3B%20var%20ap%3D%22AM%22%3B%20if%20%28h%3E%3D12%29%20ap%3D%22PM%22%3B%20if%20%28h%3E12%29%20h%3Dh-12%3B%20if%20%28h%3D%3D0%29%20h%3D12%3B%20h%3Dh+c+min+c+s+b+ap%3B%0A/*%20Day%20of%20Week%20%20*/%20var%20dw%3Dt.getDay%28%29%3Bswitch%28dw%29%7Bcase%200%3A%20dw%3D%22Sun%22%3Bbreak%3Bcase%201%3A%20dw%3D%22Mon%22%3Bbreak%3Bcase%202%3A%20dw%3D%22Tue%22%3Bbreak%3Bcase%203%3A%20dw%3D%22Wed%22%3Bbreak%3Bcase%204%3A%20dw%3D%22Thu%22%3Bbreak%3Bcase%205%3A%20dw%3D%22Fri%22%3Bbreak%3Bdefault%3A%20dw%3D%22Sat%22%3B%7D%0A/*%20Month%20%20%20%20%20%20%20%20*/%20var%20m%3Dt.getMonth%28%29%3Bswitch%28m%29%7Bcase%200%3A%20m%3D%22Jan%22%3Bbreak%3Bcase%201%3A%20m%3D%22Feb%22%3Bbreak%3Bcase%202%3A%20m%3D%22Mar%22%3Bbreak%3Bcase%203%3A%20m%3D%22Apr%22%3Bbreak%3Bcase%204%3A%20m%3D%22May%22%3Bbreak%3Bcase%205%3A%20m%3D%22Jun%22%3Bbreak%3Bcase%206%3A%20m%3D%22Jul%22%3Bbreak%3Bcase%207%3A%20m%3D%22Aug%22%3Bbreak%3Bcase%208%3A%20m%3D%22Sep%22%3Bbreak%3Bcase%209%3A%20m%3D%22Oct%22%3Bbreak%3Bcase%2010%3A%20m%3D%22Nov%22%3Bbreak%3Bdefault%3A%20m%3D%22Dec%22%3B%7D%0A/*%20Day%20of%20Month%20*/%20var%20d%3Dt.getDate%28%29%3B%0A/*%20Time%20Zone%20%20%20%20*/%20var%20tz%3DString%28t%29.substring%2825%29%3B%0A/*%20Output%20%20%20%20%20%20%20*/%20var%20p%3Ddw+b+m+b+d+b+y+b+h+b+tz%3B%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20End%20of%20Get%20the%20Date%20%26%20Time%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0A%0Avar%20dataURL%3D%22%5Cn%3C%21DOCTYPE%20html%20PUBLIC%20%27-//W3C//DTD%20XHTML%201.0%20Transitional//EN%27%22%3B%0A%0AdataURL%3DdataURL+%22%27http%3A//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd%27%3E%5Cn%3Chtml%20xmlns%3D%27http%3A//www.w3.org/1999/xhtml%27%3E%22%3B%0A%0AdataURL%3DdataURL+%22%5Cn%3Chead%3E%3Clink%20rel%3D%27shortcut%20icon%27%20href%3D%27favicon.ico%27%20/%3E%5Cn%3Cmeta%20http-equiv%3D%5C%22content-type%5C%22%20content%3D%5C%22text/html%3B%20charset%3DUTF-8%5C%22%20/%3E%22%3B%0A//D6D6D6%20gray%20background%0AdataURL%3DdataURL+%22%3Ctitle%3EMy%20Custom%20Buttons%3C/title%3E%3C/head%3E%5Cn%3Cbody%20style%3D%27background-color%3A%20%23E1E5C4%27%3E%5Cn%3Ccenter%3E%3Ch2%3EMy%20Custom%20Buttons%3C/h2%3E%3Cstrong%3E%22+p+%22%3C/strong%3E%3C/center%3E%5Cn%3Col%3E%5Cn%22%3B%0A%0Avar%20NumOfButtons%3B%0Avar%20buttons%3DgetButtons%28%29%3B%0A%0AdataURL+%3Dbuttons.sort%28%29+%22%5Cn%5Cn%3C/ol%3E%5Cn%3Ccenter%3E%3Ch1%3E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%3C/h1%3E%3C/center%3E%3C/body%3E%5Cn%3C/html%3E%5Cn%22%3B%0AdataURL%3DdataURL.replace%28/%3E%2C%3C/g%2C%27%3E%3C%27%29%3B%0A%0AwriteFile%28dataURL%29%3B%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20getButtons%28%29%0A%20%20%7B%0A%20%20var%20buttons%3Dnew%20Array%3B%0A%20%20var%20i%3D0%3B%0A%20%20for%20%28var%20j%3D0%3Bj%3Ccustombuttons.gToolbox.palette.childNodes.length%3Bj++%29%0A%20%20%20%20%7B%0A%20%20%20%20var%20but%3Dcustombuttons.gToolbox.palette.childNodes%5Bj%5D%3B%0A%20%20%20%20if%20%28but.getAttribute%28%27id%27%29.indexOf%28%27custombuttons-button%27%29%21%3D-1%29%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20var%20num%3Dcustombuttons.getNumber%28but.getAttribute%28%27id%27%29%29%3B%0A%20%20%20%20%20%20var%20but_code%3DgetHyperlink%28num%29%3B%0A%20%20%20%20%20%20if%28but_code.length%3E2%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20buttons%5Bi++%5D%3D%22%3Cli%3E%22+but_code+%22%3C/li%3E%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20NumOfButtons%3Di%3B%0A%20%20%20%20return%20buttons%3B%0A%20%20%7D%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20getHyperlink%28num%29%0A%20%20%7B%0A%20%20var%20values%20%3D%20custombuttons.getButtonParameters2%28num%29%3B%0A%20%20var%20altext%20%3D%20values.name%3B%0A%20%20var%20uri%3D%27custombutton%3A//%27+escape%28values.name+%27%5D%27+%27%5B%27+values.image+%27%5D%27+%27%5B%27+values.code+%27%5D%27+%27%5B%27+values.initCode%29%3B%0A%20%20var%20link%20%3D%20%22%5Cn%5Cn%3Ca%20href%3D%27%22%20+%20uri%20+%20%22%27%3E%5Cn%3Cimg%20alt%3D%27%22%20+%20altext%20+%20%22%27%20src%3D%5C%22%22%20+%20unescape%28values.image%29%20+%0A%20%20%20%20%22%5C%22%20border%3D%270%27%20height%3D%2716%27%20/%3E%5Cn%22%20+%20unescape%28values.name%29%20+%20%22%3C/a%3E%22%3B%0A%20%20return%20link%3B%0A%20%20%7D%0A%0A%0A//%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0A%0Afunction%20writeFile%28str%29%0A%20%20%7B%0A%20%20var%20nsIFilePicker%20%3D%20Components.interfaces.nsIFilePicker%3B%0A%20%20var%20fp%20%3D%20Components.classes%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28nsIFilePicker%29%3B%0A%20%20fp.init%28window%2C%20%22Save%20CB%20backup%20as%20%22%2C%20nsIFilePicker.modeSave%29%3B%0A%20%20/*%20The%20file%20name%20will%20be%20unique%20given%20MS%27%20time-stamp%20and%20will%20also%20have%20the%20number%20of%20buttons%20indicated%20*/%0A%20%20fp.defaultString%20%3D%20%22BackupCustomButtons%20%22+new%20Date%28%29.getTime%28%29+%22%20%28%22+NumOfButtons+%22%29.html%22%3B%0A%20%20fp.appendFilters%28fp.filterHTML%29%3B%0A%20%20fp.appendFilters%28fp.filterAll%29%3B%0A%20%20//%20other%20filters%0A%20%20var%20res%3Dfp.show%28%29%3B%0A%20%20if%20%28res%20%3D%3D%20nsIFilePicker.returnOK%20%7C%7C%20res%3D%3DnsIFilePicker.returnReplace%29%0A%20%20%20%20%7B%0A%20%20%20%20var%20outputStream%20%3D%20Components.classes%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.%0A%20%20%20%20%20%20createInstance%28Components.interfaces.nsIFileOutputStream%29%3B%0Avar%20suc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Components.%20interfaces.%20nsIScriptableUnicodeConverter%29%3B%0Asuc.charset%3D%22UTF-8%22%3B%0Astr%20%3D%20suc.%20ConvertFromUnicode%20%28str%29%3B%0A%20%20%20%20outputStream.init%28%20fp.file%2C%200x04%20%7C%200x08%2C777%2C%200%20%29%3B%0A%20%20%20%20var%20result%20%3D%20outputStream.write%28%20str%2C%20str.length%20%29%3B%0A%20%20%20%20outputStream.close%28%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%5D%5B

?

Anton
Большое, нечеловеческое, спасибо. :)

хе-хе... набрёл сейчас на https://addons.mozilla.org/ru/firefox/addon/5066 которое ничем от custombuttons не отличается кроме нескольких незначительных настроек. Ян, естественно, в соавторах не указан...

Меня-то указали, а вот Anton'а по каким-то причинам убрали, хотя в install.rdf из версии, на которой они базировались, было:

Выделить код

Код:

    <em:creator>Yan</em:creator>
    <em:developer>Anton</em:developer>
    <em:developer>Dark-Demon</em:developer>
    ...

Anton пишет:

коды в wiki не рассчитаны на copy-paste : )

Замени вот эти:

Выделить код

Код:

addBookmarkAs(document.getElementById(’content’), false);
                                      ^       ^

символы символами одинарной (') или двойной (") кавычек.

p.s. wiki-страничку поправил, copy-paste сейчас должен работать корректно.

А можно сделать, что бы окно добавления закладки не появлялось, а она скажем автоматом добавлялась в "Unsorted"?

Xaber

Выделить код

Код:

custombutton://%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%5D%5B%5D%5Bvar%20docshell%20%3D%20getBrowser%20%28%29.%20webNavigation%3B%0Avar%20doc%20%3D%20docshell.%20document%3B%0Avar%20url%20%3D%20getBrowser%20%28%29.%20currentURI.%20spec%3B%0Avar%20title%2C%20charset%20%3D%20null%3B%0Avar%20description%3B%0Atry%0A%7B%0A%09title%20%3D%20doc.%20title%20%7C%7C%20url%3B%0A%09charset%20%3D%20doc.%20characterSet%3B%0A%09description%20%3D%20BookmarksUtils.%20getDescriptionFromDocument%20%28doc%29%3B%0A%7D%0Acatch%20%28e%29%0A%7B%0A%20%20%20%20title%20%3D%20url%3B%0A%7D%0Avar%20bmroot%20%3D%20RDF.%20GetResource%20%28%22NC%3ABookmarksRoot%22%29%3B%0Avar%20res%20%3D%20BMDS.%20createBookmark%20%28title%2C%20url%2C%20%22%22%2C%20description%2C%20charset%2C%20null%29%3B%0Avar%20sel%20%3D%20BookmarksUtils.%20getSelectionFromResource%20%28res%29%3B%0Avar%20target%20%3D%20BookmarksUtils.%20getTargetFromFolder%20%28bmroot%29%3B%0ABookmarksUtils.%20insertAndCheckSelection%20%28%22newbookmark%22%2C%20sel%2C%20target%29%3B%0Avar%20rds%20%3D%20BMDS.%20QueryInterface%20%28Components.%20interfaces.%20nsIRDFRemoteDataSource%29%3B%0Ards.%20Flush%20%28%29%3B%5D%5Bthis.%20mouseover%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20oldimage%20%3D%20this.%20image%3B%0A%09this.%20image%20%3D%20%22file%3A///H%3A/redicon.png%22%3B%0A%7D%0Athis.%20mouseout%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20image%20%3D%20this.%20oldimage%3B%0A%7D%0Athis.%20setAttribute%20%28%22onmouseover%22%2C%20%22this.%20mouseover%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22onmouseout%22%2C%20%22this.%20mouseout%28%29%22%29%3B

Подскажите, пожалуйста, как задействовать сабж для тулбаров в окнах чтения, составления письма в Tb?

А как создать новую тему?

Anton пишет:

Xaber

Выделить код

Код:

custombutton://%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%5D%5B%5D%5Bvar%20docshell%20%3D%20getBrowser%20%28%29.%20webNavigation%3B%0Avar%20doc%20%3D%20docshell.%20document%3B%0Avar%20url%20%3D%20getBrowser%20%28%29.%20currentURI.%20spec%3B%0Avar%20title%2C%20charset%20%3D%20null%3B%0Avar%20description%3B%0Atry%0A%7B%0A%09title%20%3D%20doc.%20title%20%7C%7C%20url%3B%0A%09charset%20%3D%20doc.%20characterSet%3B%0A%09description%20%3D%20BookmarksUtils.%20getDescriptionFromDocument%20%28doc%29%3B%0A%7D%0Acatch%20%28e%29%0A%7B%0A%20%20%20%20title%20%3D%20url%3B%0A%7D%0Avar%20bmroot%20%3D%20RDF.%20GetResource%20%28%22NC%3ABookmarksRoot%22%29%3B%0Avar%20res%20%3D%20BMDS.%20createBookmark%20%28title%2C%20url%2C%20%22%22%2C%20description%2C%20charset%2C%20null%29%3B%0Avar%20sel%20%3D%20BookmarksUtils.%20getSelectionFromResource%20%28res%29%3B%0Avar%20target%20%3D%20BookmarksUtils.%20getTargetFromFolder%20%28bmroot%29%3B%0ABookmarksUtils.%20insertAndCheckSelection%20%28%22newbookmark%22%2C%20sel%2C%20target%29%3B%0Avar%20rds%20%3D%20BMDS.%20QueryInterface%20%28Components.%20interfaces.%20nsIRDFRemoteDataSource%29%3B%0Ards.%20Flush%20%28%29%3B%5D%5Bthis.%20mouseover%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20oldimage%20%3D%20this.%20image%3B%0A%09this.%20image%20%3D%20%22file%3A///H%3A/redicon.png%22%3B%0A%7D%0Athis.%20mouseout%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20image%20%3D%20this.%20oldimage%3B%0A%7D%0Athis.%20setAttribute%20%28%22onmouseover%22%2C%20%22this.%20mouseover%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22onmouseout%22%2C%20%22this.%20mouseout%28%29%22%29%3B

Делал копипастом, не пашет :( Тут ничего менять не надо?

Xaber пишет:

...не пашет :( Тут ничего менять не надо?

Нет, не надо - у меня работает.
Разве что, попробуй в секции "Код" кнопки в начало первой строки поставить

, а в конце последней -

Выделить код

Код:

}catch(e){alert(e);}

- что там выдаст алерт ?

Мб я вас не правильно понял?

Выделить код

Код:

custombutton://%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%5D%5B%5D%5Bvar%20docshell%20%3D%20getBrowser%20%28%29.%20webNavigation%3B%0Avar%20doc%20%3D%20docshell.%20document%3B%0Avar%20url%20%3D%20getBrowser%20%28%29.%20currentURI.%20spec%3B%0Avar%20title%2C%20charset%20%3D%20null%3B%0Avar%20description%3B%0Atry%0A%7B%0A%09title%20%3D%20doc.%20title%20%7C%7C%20url%3B%0A%09charset%20%3D%20doc.%20characterSet%3B%0A%09description%20%3D%20BookmarksUtils.%20getDescriptionFromDocument%20%28doc%29%3B%0A%7D%0Acatch%20%28e%29%0A%7B%0A%20%20%20%20title%20%3D%20url%3B%0A%7D%0Avar%20bmroot%20%3D%20RDF.%20GetResource%20%28%22NC%3ABookmarksRoot%22%29%3B%0Avar%20res%20%3D%20BMDS.%20createBookmark%20%28title%2C%20url%2C%20%22%22%2C%20description%2C%20charset%2C%20null%29%3B%0Avar%20sel%20%3D%20BookmarksUtils.%20getSelectionFromResource%20%28res%29%3B%0Avar%20target%20%3D%20BookmarksUtils.%20getTargetFromFolder%20%28bmroot%29%3B%0ABookmarksUtils.%20insertAndCheckSelection%20%28%22newbookmark%22%2C%20sel%2C%20target%29%3B%0Avar%20rds%20%3D%20BMDS.%20QueryInterface%20%28Components.%20interfaces.%20nsIRDFRemoteDataSource%29%3B%0Ards.%20Flush%20%28%29%3B%5D%5Bthis.%20mouseover%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20oldimage%20%3D%20this.%20image%3B%0A%09this.%20image%20%3D%20%22file%3A///H%3A/redicon.png%22%3B%0A%7D%0Athis.%20mouseout%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20image%20%3D%20this.%20oldimage%3B%0A%7D%0Athis.%20setAttribute%20%28%22onmouseover%22%2C%20%22this.%20mouseover%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22onmouseout%22%2C%20%22this.%20mouseout%28%29%22%29%3B

Я тоже писал в Код.
Теперь у меня в "Коде" получилось:

Выделить код

Код:

try{
custombutton://%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%5D%5B%5D%5Bvar%20docshell%20%3D%20getBrowser%20%28%29.%20webNavigation%3B%0Avar%20doc%20%3D%20docshell.%20document%3B%0Avar%20url%20%3D%20getBrowser%20%28%29.%20currentURI.%20spec%3B%0Avar%20title%2C%20charset%20%3D%20null%3B%0Avar%20description%3B%0Atry%0A%7B%0A%09title%20%3D%20doc.%20title%20%7C%7C%20url%3B%0A%09charset%20%3D%20doc.%20characterSet%3B%0A%09description%20%3D%20BookmarksUtils.%20getDescriptionFromDocument%20%28doc%29%3B%0A%7D%0Acatch%20%28e%29%0A%7B%0A%20%20%20%20title%20%3D%20url%3B%0A%7D%0Avar%20bmroot%20%3D%20RDF.%20GetResource%20%28%22NC%3ABookmarksRoot%22%29%3B%0Avar%20res%20%3D%20BMDS.%20createBookmark%20%28title%2C%20url%2C%20%22%22%2C%20description%2C%20charset%2C%20null%29%3B%0Avar%20sel%20%3D%20BookmarksUtils.%20getSelectionFromResource%20%28res%29%3B%0Avar%20target%20%3D%20BookmarksUtils.%20getTargetFromFolder%20%28bmroot%29%3B%0ABookmarksUtils.%20insertAndCheckSelection%20%28%22newbookmark%22%2C%20sel%2C%20target%29%3B%0Avar%20rds%20%3D%20BMDS.%20QueryInterface%20%28Components.%20interfaces.%20nsIRDFRemoteDataSource%29%3B%0Ards.%20Flush%20%28%29%3B%5D%5Bthis.%20mouseover%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20oldimage%20%3D%20this.%20image%3B%0A%09this.%20image%20%3D%20%22file%3A///H%3A/redicon.png%22%3B%0A%7D%0Athis.%20mouseout%20%3D%20function%20%28event%29%0A%7B%0A%09this.%20image%20%3D%20this.%20oldimage%3B%0A%7D%0Athis.%20setAttribute%20%28%22onmouseover%22%2C%20%22this.%20mouseover%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22onmouseout%22%2C%20%22this.%20mouseout%28%29%22%29%3B
}catch(e){alert(e);}

Алерта нету...

Xaber пишет:

Мб я вас не правильно понял?...

Да, похоже что неправильно.

...

Выделить код

Код:

custombutton://%u0414%u043E%u043...

Я тоже писал в Код.
...

Строки такого вида надо помещать не в секцию "Код" кнопок, а в адресную строку браузера.

Спасибо, заработало, но:
1.Закладка добавляется не в папку, а в корень (в общем то меня это устраивает).
2.После первого нажатия иконка (звёздочка) на кнопе исчезла и кнопку теперь почти невидно :(
3.Ну а в общем - супер, спасибо :)))

Xaber пишет:

Спасибо, заработало, но:
1.Закладка добавляется не в папку, а в корень (в общем то меня это устраивает).

Xaber пишет:

А можно сделать, что бы окно добавления закладки не появлялось, а она скажем автоматом добавлялась в "Unsorted"?

А я так понял, что "Unsorted" и есть корень. Так что, не ко мне претензия.

2.После первого нажатия иконка (звёздочка) на кнопе исчезла и кнопку теперь почти невидно :(

Надо убрать код в секции "Инициализация".

привет, может кто знает, почему этот код не робит:

Выделить код

Код:

var path='c:\\windows\\notepad.exe';
var arguments=['c:\\aa.txt'];

var file = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);
file.initWithPath(path);
process.init(file);
process.run(false,arguments,arguments.length);

Вставляю его в code и по нажатию на кнопку ни чего не происходит, однако в initalization он срабатывает :(

globik пишет:

...почему этот код не робит:...

Переименование arguments в что-нибудь другое решит проблему.

благодарю )

Однако я нашел еще более изощренное решение :

Выделить код

Код:

function yo()
{
var path='c:\\windows\\notepad.exe';
var arguments=['c:\\aa.txt'];

var file = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);
file.initWithPath(path);
process.init(file);
process.run(false,arguments,arguments.length);
}

yo();

:)

arguments - некорректно, потому что это зарезервированное слово.

Обновил код кнопки "Fit to width":

Выделить код

Код:

custombutton://Fit%20to%20Page%20Width%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC%5D%5B%5D%5Bvar%20is_active%3D0%3B%0Avar%20rule%3D0%3B%0Athis.checked%3Dfalse%3B%0Athis.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20Off%22%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%0A%20if%20%28event.button%20%3D%3D%200%29%20%7B%0A%0A%20%20if%20%28is_active%20%3D%3D%200%29%20%7B%0A%20%20%20%20var%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0A%20%20%20%20rule%3Ds.insertRule%28%27div%2Ctable%2Ctbody%2Ctr%2Ctd%2Cp%2Col%2Cul%2Ch1%2Ch2%2Ch3%2Chr%20%7Bmax-width%3A99%25%21important%3B%7D%27%2C1%29%3B%0A%0A%20%20%20%20var%20i%3Dcontent.document.images%3B%0A%20%20%20%20for%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20%20%20%20%20var%20k%3Dcontent.window.innerWidth/i%5Bj%5D.width*.95%3B%0A%20%20%20%20%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20is_active%3D1%3B%0A%0A%20%20%20%20this.checked%3Dtrue%3B%0A%20%20%20%20this.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20On%22%0A%20%20%7D%20else%20%7B%0A%20%20%20%20var%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0A%20%20%20%20if%20%28rule%20%21%3D%200%20%29%20%7Bs.deleteRule%28rule%29%3B%20rule%3D0%3B%7D%0A%0A%20%20%20%20var%20i%3Dcontent.document.images%3B%0A%20%20%20%20for%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20%20%20%20%20var%20k%3D%20content.window.innerWidth/i%5Bj%5D.width/.95%3B%0A%20%20%20%20%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20is_active%3D0%3B%0A%0A%20%20%20%20this.checked%3Dfalse%3B%0A%20%20%20%20this.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20Off%22%0A%20%20%7D%0A%0A%20%7D%0A%7D%0A%0Athis.setAttribute%28%22onleftclick%22%2C%20%22this.onclick%28%29%22%29%3B%0A

Теперь она умеет включать-выключать режим...
Правило одно, остальные просто убивали страницу...

Подправил код - теперь и правда ужимает страницу (забыл про <pre>).

Выделить код

Код:

custombutton://Fit%20to%20Page%20Width%5D%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAA3NCSVQICAjb4U/gAAAAFVBMVEX///8AzP8AAAAAzP8Amf8AAMwAAACWs84cAAAAB3RSTlMAd3f/////1grLHQAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADA1LzI4LzA2GvIWfQAAAEpJREFUeJxjYMAErKGhgRCGi0uIAJjhbBxiCGO4AIUUgIzQ0AAmhiQgw9gkQI0hTRXECEpDiChAGExgXUAGxEAXlwCIFUDtWOwGAHj3ENTzyS3QAAAAAElFTkSuQmCC%5D%5B%5D%5Bvar%20is_active%3D0%3B%0Avar%20rule1%3D0%3B%0Avar%20rule2%3D0%3B%0Athis.checked%3Dfalse%3B%0Athis.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20Off%22%0A%0Athis.onclick%20%3D%20function%28event%29%20%7B%0A%0A%20if%20%28event.button%20%3D%3D%200%29%20%7B%0A%0A%20%20if%20%28is_active%20%3D%3D%200%29%20%7B%0A%20%20%20%20var%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0A%20%20%20%20rule1%3Ds.insertRule%28%27div%2Ctable%2Ctbody%2Ctr%2Ctd%2Cp%2Col%2Cul%2Cdl%2Ch1%2Ch2%2Ch3%2Chr%20%7Bmax-width%3A99%25%21important%3B%7D%27%2C1%29%3B%0A%20%20%20%20rule2%3Ds.insertRule%28%27pre%20%7Bmax-width%3A99%25%21important%3B%20white-space%3Anormal%21important%3B%7D%27%2C1%29%3B%0A%0A%20%20%20%20var%20i%3Dcontent.document.images%3B%0A%20%20%20%20for%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20%20%20%20%20var%20k%3Dcontent.window.innerWidth/i%5Bj%5D.width*.99%3B%0A%20%20%20%20%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20is_active%3D1%3B%0A%0A%20%20%20%20this.checked%3Dtrue%3B%0A%20%20%20%20this.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20On%22%0A%20%20%7D%20else%20%7B%0A%20%20%20%20var%20s%3Dcontent.document.styleSheets%5B0%5D%3B%0A%20%20%20%20if%20%28rule2%20%21%3D%200%20%29%20%7Bs.deleteRule%28rule2%29%3B%20rule2%3D0%3B%7D%0A%20%20%20%20if%20%28rule1%20%21%3D%200%20%29%20%7Bs.deleteRule%28rule1%29%3B%20rule1%3D0%3B%7D%0A%0A%20%20%20%20var%20i%3Dcontent.document.images%3B%0A%20%20%20%20for%20%28var%20j%3D0%3B%20j%3Ci.length%3B%20j++%29%20%7B%0A%20%20%20%20%20%20var%20k%3D%20content.window.innerWidth/i%5Bj%5D.width/.99%3B%0A%20%20%20%20%20%20if%20%28k%3C1%29%20%7Bi%5Bj%5D.width*%3Dk%3B%20i%5Bj%5D.height*%3Dk%3B%7D%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20is_active%3D0%3B%0A%0A%20%20%20%20this.checked%3Dfalse%3B%0A%20%20%20%20this.tooltipText%3D%22Fit%20to%20Page%20Width%3A%20Off%22%0A%20%20%7D%0A%0A%20%7D%0A%7D%0A%0Athis.setAttribute%28%22onleftclick%22%2C%20%22this.onclick%28%29%22%29%3B%0A

Одно плохо - пока не умеет сохранять настройки для каждой вкладки.

Два вопроса:
1) Взял c этой темы несколько BB кнопок, но они не следят за буфером обмена. Как это поправить?
2) Mожет кто-нибудь дать код на BB кнопку, чтобы c её помощью можно было менять цвет текста?

1. http://dark-demon.nm.ru/soft/custombuttons/

Dark-Demon
Спacибо, твои же кнопки и брал, только не знал что надо средней кнопкой жать:)
Можно cделaть тaк: нaжимaешь левой кнопкой, еcли еcть выделенный текcт, то он обрaбaтывaетcя тегaми, a  еcли выделенного текcтa нет, то вcтaвляетcя cодержимое буферa c тегaми?

Второй вопроc чacтично решен, оcтaлоcь узнaть кaк cделaть выпaдaющее меню у кнопки??

custombuttons 0.0.2 beta
Совместимость: FF2/3b (проверял на 2.0.0.11/3b2), TB2 (2.0.0.9).
http://forum.mozilla-russia.org/uploade … -0.0.2.xpi

Может кто-ниудь написать кнопку что бы при нажатии на неё вставлялся следующий текст:
[url = текст из буфера обмена]текст из буфера обмена[/url] ?

obana-obana
Написали уже давно. Поищи по ссылке Dark-Demon'а из сообщения #464.

Anton
По той ссылки нет такого, да и все что я находил  выдавали :  [url = текст из буфера обмена]пусто[/url]. Мне же нужно что бы ссылка из буфера вставлялась сразу и в поле для ссылки, и в поле для названия.

у меня емнип по мидлклику вставляет [ url ]текст из буфера обмена[ /url ]

Dark-Demon
Мне же нужно что бы ссылка из буфера вставлялась сразу и в поле для ссылки, и в поле для названия.
[url = текст из буфера обмена]текст из буфера обмена[/url]

зачем?

Dark-Demon
Ступил, уже не надо, спасибо.

Сори , помогите я так и непонял как сделать просто , чтоб по кнопке открывался адрес url из буфера обмена ?
И ещё нужна кнопочка , которой можно переключать значения "показывать все рисунки" , "не показывать рисунки вобще" и "показывать кэшированные рисунки" :rolleyes:

чтоб по кнопке открывался адрес url из буфера обмена ?

Paste and Go Button

переключать значения "показывать все рисунки" , "не показывать рисунки вобще" и "показывать кэшированные рисунки"

ImagesLikeOpera

чтоб по кнопке открывался адрес url из буфера обмена

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%09%3Cname%3Egoto%3C/name%3E%0A%09%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%09%3Cmode%3E0%3C/mode%3E%0A%09%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%2520onClick%2520%253D%2520function%2520%2528ev%2529%250A%257B%250A%2509if%2520%2528ev%2520%2526%2526%2520ev.%2520button%2520%253D%253D%25202%2529%2520return%253B%250A%2509openUILinkIn%2520%2528readFromClipboard%2520%2528%2529%252C%2520whereToOpenLink%2520%2528ev%252C%2520false%252C%2520false%2529%2529%253B%250A%257D%253B%250A%250Athis.%2520setAttribute%2520%2528%2522onclick%2522%252C%2520%2522this.%2520onClick%2520%2528event%2529%253B%2522%2529%253B%5D%5D%3E%3C/initcode%3E%0A%09%3Ccode%3E%3C%21%5BCDATA%5Bthis.%2520onClick%2520%2528%2529%253B%5D%5D%3E%3C/code%3E%0A%09%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%3C/custombutton%3E

переключать значения "показывать все рисунки" , "не показывать рисунки вобще" и "показывать кэшированные рисунки"

можно, конечно, и кнопку сделать, но лучше ilo.

спасибо Anton и Al_H .
Но ещё ... что такое ilo ?

musTANK
Расширение ImgLikeOpera.

Сэнкс за разьяснения .

Ещё очень бы хотелось кнопку для заливания картинок на _http://radikal.ru

з.ы. /оффтоп/ если невозможно сделать такой батон , то подскажите может есть какаоето расширение типа ImageBot (работает с imageshack) , но чтоб он с радикалом дружил . Типа выбераеш на страничке картинку , правой кнопкой и "Upload Image" .

Проблема с расширением. При изменении кода в кнопке не могу нажать OK (окно не закрывается), то есть ничего не могу изменить. Кто знает как бороться ?

vurdalak
Нужны подробности.
Новые версии в настоящий момент не размещаются на официальном сайте расширения. Ищите на addons.mozilla.org или custombuttons.mozdev.org. Или на custombuttons2.com, но там другая ветка расширения.

Мне ктонибудь поможет ? :whiteflag:

Доброго времени суток. Значит, обновил недавно (вчера что ли) до 0.0.2.5 и сегодня заметил глюк, точнее trueглюк[/b]. Вот именно так, как написано: вместо всех открывающих тегов пишется true. В свойства кнопок лазил, но там всё как положено:

Выделить код

Код:

var open="[b]";
var close="[/b]";
var theBox =

Никто не сталкивался с такой проблемой? Как исправить можно? Я, конечно, ещё попробую downgrade версии...
Обидно такого инструмента лишаться.:|

Вот ещё обновился, проблема также и осталась.

А чем CustomButtons 2 и 1 отличаются?

Robert Ingil

Вот ещё обновился, проблема также и осталась.

Подтверждаю, в 0.0.2.5 такая ошибка была. В 0.0.2.6 не наблюдаю.

TLemur
CB² поддерживает несколько дополнительных возможностей.

Подскажите код запуска внешнего приложения , например открыть текущую страницу в IE ?

Мужики,а че надо писать в этой штуке,если я хочу вывести на панель кнопку из настроек "Автоматическая загрузка изображений"???я так то впринципе почитал,что вы тут пишите,но ровным счетом ничего не понял :(
Что мне нужно написать в "КОД" и в "ИНИЦИАЛИЗАЦИЯ"??
помогите пожалуйста :)

vurdalak
Код запуска внешнего приложения в теме был. Открыть текущую страницу в IE:

Выделить код

Код:

var file = Components. classes ["@mozilla.org/file/local;1"].
           createInstance (Components. interfaces. nsILocalFile);
var process = Components. classes ["@mozilla.org/process/util;1"].
    getService (Components. interfaces. nsIProcess);
file. initWithPath ("H:\\Program Files\\Internet Explorer\\iexplore.exe"); 
process. init (file);
process. run (false, [getBrowser (). contentDocument. location. href], 1);

ПысКо
Я думаю, в секцию "Код":

Выделить код

Код:

var pdi = nsPreferences. getIntPref ("permissions.default.image");
nsPreferences. setIntPref ("permissions.default.image", 3 - pdi);

Anton
На «голом» профиле объект nsPreferences отсутствует:

Выделить код

Код:

alert(typeof nsPreferences);

Так что надо

Выделить код

Код:

var prefs = Components.classes["@mozilla.org/preferences-service;1"]
    .getService(Components.interfaces.nsIPrefBranch);

и

Выделить код

Код:

prefs.getIntPref(name);
prefs.setIntPref(name, value);

:)

Anton
Спасибо пребольшое

Можно ли реализовать с помощью кнопки вот такое расширение ?
http://chrispederick.com/work/user-agent-switcher/

Можно ли реализовать с помощью кнопки вот такое расширение ?
http://chrispederick.com/work/user-agent-switcher/

Как-то так:

Выделить код

Код:

var ps = Components. classes ["@mozilla.org/preferences-service;1"]. getService (Components. interfaces. nsIPrefService). getBranch ("general.");
ps. setCharPref ("appname.override", "");
ps. setCharPref ("appversion.override", "");
ps. setCharPref ("platform.override", "");
ps. setCharPref ("useragent.vendor", "");
ps. setCharPref ("useragent.vendorSub", "");

А смысл ?

Подскажите код кнопки  для того чтоб открыть ссылку http://mail.ru в боковой панеле (sidebar)

openWebPanel ("Заголовок", "Адрес")

Еще вопрос .Как сделать кнопку чтоб при на ведении на нее она подсвечивалась и изменялась подсветка если клик зажать на ней .Пример кнопки из панели расширения FoxLingo.
Заранее Спасибо:)

А кто знает код кнопки "домашняя страница" и когд "bookmarks manager"

на сайте расширения не приводятся коды разных кнопок, только парочка готовых приводятся и все.

Попробовал смастерить свою кнопку для открывания УРЛ, вроде работает, но открывает страницу только в активной вкладке, подскажите что изменить в коде что бы открывалась страница в новой вкладке при нажатии на кнопку?

Выделить код

Код:

if (event.ctrlKey)
gBrowser.selectedTab = gBrowser.addTab('http://www.mail.ru/');
else
gBrowser.loadURI('http://www.mail.ru/');

Bruce
Не понятно, что требуется. Опишите подробней.

alabanco

"домашняя страница"

в раздел "Инициализация":

Выделить код

Код:

this. onclick = function (event)
{
    if (event. button != 2)
        BrowserHomeClick(event);
}

"bookmarks manager"

в раздел "Код":

Выделить код

Код:

toggleSidebar('viewBookmarksSidebar');

Dizeloid
Я не помню, чтобы обработка onclick раньше выполнялась в разделе "Код"; будем считать, что эта возможность сломана в текущих сборках, я постараюсь исправить ситуацию в следующей версии. Пока что, в качестве замены предлагаю поместить в раздел "Инициализация":

Выделить код

Код:

this. onclick = function (event)
{
    if (event. button == 2)
        return;
    if (event. ctrlKey)
        gBrowser. addTab ('http://www.mail.ru/');
    else
        gBrowser. loadURI ('http://www.mail.ru/');
}

Anton
Кнопка на панели инструментов выглядит просто значком .Как добавить немного анимации кнопке?
1).При наведении курсора на кнопку чтоб кнопка подсвечивалась (выделялась)
2).При нажатии на кнопку чтоб вид кнопки (подсветка) менялась на значение соответсвующее данному состоянию
Пример  на панели расширения FoxLingo .К сожалению других примеров не могу привести.

1).При наведении курсора на кнопку чтоб кнопка подсвечивалась (выделялась)

Так она и выделяется, как и все прочие кнопки. Если нужно что-то особенное, можно в раздел "Инициализация" добавить что-нибудь вроде

Выделить код

Код:

this. onmouseover = function (event)
{
    this. style. setProperty ("opacity", "1", null);
}
this. onmouseout = function (event)
{
    this. style. setProperty ("opacity", "0.5", null);
}

2).При нажатии на кнопку чтоб вид кнопки (подсветка) менялась на значение соответсвующее данному состоянию

Аналогично, только в onmousedown, onmouseup.

Dizeloid
Я не помню, чтобы обработка onclick раньше выполнялась в разделе "Код"; будем считать, что эта возможность сломана в текущих сборках, я постараюсь исправить ситуацию в следующей версии. Пока что, в качестве замены предлагаю поместить в раздел "Инициализация":
Код:

this. onclick = function (event)
{
    if (event. button == 2)
        return;
    if (event. ctrlKey)
        gBrowser. addTab ('http://www.mail.ru/');
    else
        gBrowser. loadURI ('http://www.mail.ru/');
}

К сожалению ничего не изменилось. Сайт как открывался в активной вкладке так и продолжает это делать. А хочется что бы в новой. :(

Dizeloid
Если просто щёлкнуть мышкой - то открывается в активной. Если при этом удерживать Ctrl - откроется в новой вкладке.

Dizeloid
В теме был  такой вопрос на 15 старнице 366 сообщение

Выделить код

Код:

getBrowser().addTab('http://mail.ru')

Bruce, спасибо большое! Всё работает :rock:

Вопрос к пользователям расширения. Какое поведение пользовательского интерфейса более предпочтительно при клонировании/добавлении/удалении custom-кнопок в одном из окон приложения:
1. Соответствующие изменения происходят также во всех открытых окнах
2. Соответствующие изменения происходят только во вновь открываемых окнах ('стандартное' поведение UI браузера)

Anton
1.
Частенько приходилось перегружать браузер, дабы изменения коснулись всех окон.

Подтверждаю, в 0.0.2.5 такая ошибка была. В 0.0.2.6 не наблюдаю.

Ну, не знаю. Я со своей стороны всё на «косячность» проверил... В итоге сделал downgrade до 0.0.1.3 — всё заработало. А недавно сделал обновление (хотя и боялся) до 0.0.2.6. Пару раз перезагрузил Firefox, кнопки удалил, а затем заново поставил, а то они в двух экземплярах у меня вылезли  (по-умолчанию что ли теперь в составе есть). И теперь всё работает как часы. (Пробовал до этого манипуляции без downgrad'а — не помогало).
Спасибо за расширение.

проблема с кнопкой "External Applications" та что 2006 года, она у меня не работает, не выпадает дроп даун меню.
вот initialization code:

Выделить код

Код:

var apps=new Array;
//------menu items--------
apps.push(['Notepad','c:/windows/notepad.exe']);
apps.push('separator');
apps.push(['IE','c:/Program files/Internet Explorer/IEXPLORE.EXE']);
//------/menu items-------

var nMItem=function(label,path,args,obj){
  var m=document.createElement('menuitem');
  m.setAttribute('label',label);
  m.f=obj.startProcess.bind(obj);
  m.setAttribute('oncommand','this.f("'+path+'","'+args+'")');
  return m;
}
this.startProcess=function(path,args){
var file = Components.classes['@mozilla.org/file/local;1']
    .createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
    .getService(Components.interfaces.nsIProcess);
 file.initWithPath(path.replace(/\//g,'\\\\')); 
// file.launch();
 process.init(file);
 process.run(false,[args],1); 
}

this.orient="vertical";
var mP=document.createElement('menupopup');
for (var i=0;i<apps.length;i++){
 if (apps[i] =='separator'){
  mP.appendChild(document.createElement('menuseparator'));
 }else{
  if (!apps[i] [2]) apps[i] [2]='';
  mP.appendChild(nMItem(apps[i] [0],apps[i] [1],apps[i] [2],this));
 }
}
this.appendChild(mP);

может у кого есть более новая версия? или кто знает как заставить работать ту что есть?

pshenk
надо добавить строку

Выделить код

Код:

this. type = "menu";

Anton
ага работает. но как теперь избавиться от черной стрелочки вниз (которая мол показывает что здесь попапменю)?

pshenk
Если не устраивает перемещение стрелочки вправо (this. orient="horizontal" или type="menu-button" (немного отличающиеся по виду варианты)), тогда не знаю подходящего способа.

эх, тот вид кнопки который я хочу, реализован в расширении "SwitchProxy Tool" и замечательно выглядит на статусбаре, посему придется копать код в этом адоне.

... как ... избавиться от черной стрелочки вниз (которая мол показывает что здесь попапменю)?

Сообразил только сегодня. Надо убрать this.type=.... и установить атрибут popup

Выделить код

Код:

this.setAttribute("popup","mypopupid");

Мне на AMO и mozdev три человека пожаловались, что у них на 0.0.2.7/0.0.2.8 "сломались" кнопки, которые сами строят своё контекстное меню. Мне такие не попадались, может кто-нибудь показать подобную ?

С домашней страницы расширения не добавляются кнопки для BBcode, хотя BBcode установлено.
Custom Buttons 0029, BBcode 0522.

Сообразил только сегодня. Надо убрать this.type=.... и установить атрибут popup

не работает. не появляется всплывающие меню.
вот кнопка:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAACvUlEQVR4nO2Uz2tcVRTHP+ecN3ltM2kwEESiGbSx6EawIkK7aUAQoSi4cu0/4EYYCykONLSMdOF/4dKN4F5adKEL3bTVbNog2TlpJ5nM3PfuPS7e/LImcWxc9guXe9/l3e/n3nPOvfBM/yJxdwA2N29+FmNsA3pCz2RmzY2Nq7cAcHfcnVbregwh+EkVQvBW63oc+WZTZFU13vz4K3a7/afa+tLZ0/z89adMR2EaQBkTj/f6XHznDcyEzHTYJuPj9M13P/5jLjvkP8qYcAQRwdRBFBcBqUACOFV4cSf5cHyIDgUkdzI1VBU1Q9QwVdQE1clJ3J00jHVKswIE1CbmajpuFaQC9UPk0f6A/X5B76Bg7yDMegIBmZjK2NQQUwYx8sefA7q9QHInxURMjprNHiLRCiIiqBqmRpmcTm/AICQcOJXXiMmJMRFjpNQ0O8AdokOIEIn0iirpqkqeG+AT8zJSyqHeRwP6ZSISqdWEGkaWKbXMqgpSwZNTxkQpcbyhNEsVZaacref8+tMvR2/pGC0tnjkeYKZ8e+ujpzI/StOAVBSFrqysnsiwKAqAccbHADNr3rjR/t9e09GHHHXFR7rZ3vT8VM7c3NwTrcbvv21xtblxTA0NASJi7S/bW6q69NrrawtqKmZGjJH/0heh8Ht3t7oxps7nzeaau5fWarVweHt5efmTK1fef+7x3q5kWcbc6Rr1+QUw54XnVwixz7mXX2W/3+WVYT+ar59ZgKx6Hi9dvJTv7OykCxfe+n798uVtBUjJ322sri6mlCiKkhACMTidTof5vM7D7Qf0ugfcu3+XXveA+8P+4fYD5vM6nd0OMVRrU0o0Go3FlPw9GCZZRT5YX1/P8jxn7dz5E+YYXnqxYXdu//Ah8EUGMBgEu3at9UikupXAMHEuUzXwRDL/VhxC9XrLyMNMFeAvxD6eG31AG3sAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20login%20%3D%20%22Administrator%22%3B%20%20%20%20%20%20%20%20%20%20//%20Here%20put%20your%20login%20name%21%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20//%20So%20you%20can%20use%20%22Show%20Desktop%22%20command%21%0A%0A/*%0AIf%20you%20deleted%20%22Show%20Desktop%22%20from%20your%20Quick%20Launch%20toolbar%2C%20just%20enter%20this%20URI%0Ain%20your%20Firefox%20and%20save%20the%20file%20as%20%22Show%20Desktop.scf%22.%20Then%20you%20can%20put%20it%20in%20you%20Quick%20Launch%21%21%0AShowDesktop%3D%22data%3Aapplication/x-unknown-content-type%3Bbase64%2CW1NoZWxsXQ0KQ29tbWFuZD0yDQpJY29uRmlsZT1leHBsb3Jlci5leGUsMw0KW1Rhc2tiYXJdDQpDb21tYW5kPVRvZ2dsZURlc2t0b3ANCg%3D%3D%22%3B%0A*/%0A%0Avar%20apps%20%3D%20new%20Array%3B%0ADefault%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACkElEQVR4XqXNa2jVZQAG8N//nJ3jmbs4l6XZhSGI0sWhQ9CCpKhcWljOYCLZDZEgsA+RFEQWCcEsF8vsy9yHLiKCGxgsVnZZzLm2BV2kYdgWJ7cyN6Zn7nLO8bwh9KmBX/rB8/F5niiE4H/r2qX+xLPaTu4TPt1mvG2LyfYnjaAYcdcQXS1PxBzOZnh4L0bI/M7oKL+ccD6W1Vt7VB1yKMwauPpcvd6m6+7BcWQxByVkphjKcbbd4cfa7MDUf0dilzM2Dg0gzfRl6e//sG84q7Ww0ExZDVVLyOdsbqn1IlKIAEDfHiH0C6FTSO/ViuW4teEFa3/rrSyEv4WZHuHI1lRI7vwod8u2lqeQQASxzBky3chy8002vVHnelw8OPXJK5svNEcqSMb5NXOnxTXriiZnHCqrb0nfsKV5OxKxfNLuzi9cchGlole3+ybT6UC5P28zXkEBw6xeNGDZYJ/b77s/mn/XqoX5bHYDSiMkv3zG5XvvVqQYU5iLxYhjEEmG0rxz7vn+gQdfW1UqGX1+sp++gY4YcoWk/EiCn0bJ1mAMP+MvXKL7K3q+lW7a/97TUTT8VmpJifLVa2QrylfGEKbH7Ow56nTXcQ2nWl2BoTGGKrGCsYvzfLbmyHlMd9RWN5bk4yZGZ4TxTCoCJFCO4o5dTi99VHnPuy4cG1u3oG7FDxpT+5294wk3zg0SybiRqci5HLraRYAIRYg3r7c15NUeiuq/O7Xs8YbUvMpocnkVySpGUYoJ/NguMXAmbTYJzMeiBRvffq7ykaYPyjYc6PX+YPDmSHCwO/g6hKjuwwKqzSZCEZIoRmXZA417vHwsxHd8PD1n7esNsYeapotW7n4JSyPXFiGOJEr/DVxBwOQ/YMb/YyJTjUkAAAAASUVORK5CYII%3D%27%3B%0AShowDesk%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAioFc/4lLHf9dPCL/Sj8u/zZMRv86Ukv/O1RN/0VhWf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALZbEv+tSQT/p0wR/8F4MP/BeDD/wXgw/8F4MP9FOCj/OUc+/ztTTf8+Vk//RmNb/1p+dP8AAAAAAAAAAAAAAAC2WxL/tlsS/7/WzP++8vv/t/D7/7fw+/+37vv/wXgw/8F4MP/BeDD/wXgw/1M3H/8+Qjf/TGpi/wAAAAAAAAAAtlsS/8fQvf/F8/z/xfP8/8x6O//Mejv/zHo7/7fu+/+37vv/t+77//DOpv+1UAH/tVAB/ztUTf8AAAAAAAAAANiBJ//L0bz/yvX7/8r1+//3ozD//+PH///lzP/Mejv/zHo7/8x6O//Q9vz/8M6m/8xnAf87VE3/AAAAAAAAAADYgSf/z9K9/9D2/P/Q9vz/96Mw///lzP//5cz//+XM///lzP/Mejv/0Pb8/9D2/P/MZwH/PldQ/wAAAAAAAAAA2IEn/9Tt7P/U9vz/1Pb8//ejMP//8+f/AQ4U/wEOFP/Zhzf/2Yc3/9mHN//U9vz/zGcB/zZMRv8AAAAAAAAAANiBJ//c+P3/3Pj9/9z4/f/3ozD///Pn///y5f9hhJL//+TJ//XDkP/Zhzf/2Yc3/8xnAf8pOTX/Ql1V/2eShv/YgSf/4fn9/+H5/f/h+f3/96Mw///8+f//8uX///Pn/9mHN///5Mn//+XM//zRpv/Zhzf/ETG5/y9CPf9UeG7/2IEn/+Xi0P/o+v7/6Pr+//ejMP////////r1///y5f//7dz/2Yc3/9mHN///5cz/H1zV/y6G8v8RMbn/bJiL/9iBJ//YgSf/7Pv+/+z7/v/3ozD/+7JB//uyQf//+vX///Ll/8x6O//s+/7/2Yc3/9mHN/8eJJb/AAAAAAAAAADYgSf//+26/9iBJ//0/P7/9Pz+//T8/v/w2L//+7JB//uyQf/Mejv/9Pz+//T8/v/Zhzf/O1RN/wAAAAAAAAAA2IEn/++mRv/vpkb/2IEn//DOpv/w2L///P7///z+///8/v///P7///z+///vpkb/2Yc3/ztUTf8AAAAAAAAAAAAAAACOn4b/oLac/6ilhf/vpkb/76ZG/++mRv/vpkb/8tKf//LRo//vpkb//L12/9mHN/9Sc2n/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO+mRv/vpkb/76ZG/++mRv/vpkb/AAAAAAAAAAAAAAAA//9zQQD/c0EAB3NBAANzQQADc0EAA3NBAANzQQADc0EAAHNBAABzQQAAc0EAA3NBAANzQQADc0GAA3NB/wdzQQ%3D%3D%27%3B%0AIExplorer%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAgtJREFUOE+NU99LU2EYnvSHdNP0uHUcw7n8RTmNgYKgWESXQexGNAoSIsoiutDhUDbndEmLWo1ayEydgV1FXWi1HINipC1rP9x2cptnJoo8nu+Dc9xxg3XggcP3ve/zvu/zPl8FAMX/fuaVGA0+keMUN9rYCppHCMphZCmI4eWoEHYUS85o8VLJ5FJE15s1dAR2ce62j0KML0kgJplCMRAYV3eg9Weh8nLQvN6C3p2QSIoICtu0hLNo9P2C8r4fpyyfwbiiqHr0B6wriQb3pqwTaYSxLynanuFjHo0zETBd/dC0XsaZi9dRfXMB1Y4YTk/EUf8sW0xQmEwImAeLULb3SvMSAv1wAKw9AZ3zL4Woh0zE1g95sN40Kh8LLdvXwdgiUFkjUFt/g7XGoR3fRMNUBoYnXDHB2SUe7CsOldNRqAe/loWsA5N/A3VzPFSuBJTjGzhpegpd97WykHzQPL+DWu82agSVVfYoGHMY6ksPZcYhOjR5ePQFD3DH//1ohCuC4uzkGq2mf56D1plCjTCvZjRONyBuweDj0Rvah/UbL99C52waLbde0mqUxCGsypmBfkIwztQWml/k0P3uHwZCexhaTtJkEic6UmGc4SQCkaT27ns02dZh9CTRM5fB1dmf9F/UpdD+ih73D9TfeysxXnCsSlWOC1nq3VAfnLcFoBv6BJJc7mUevz8EdJ2boXU7oPQAAAAASUVORK5CYII%3D%27%3B%0AWExplorer%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAADNmjT/////AP7+/gD+/v4AOWzSCwAAAPj////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AzJkz///////////////////////Cjyn/AAAAEQAAAAL///8A////AP///wD///8A////AP///wD///8AAcyZM/8zZswAAACaAAAAAAAAAAAAAAAAAAAAZgC+iyUA/f39AP39/QD+/v4A/v7+AP39/QBQg+kLAAAA+P////4E////AAD4kgAA/f0A9fYCAMTVKQD1DjIA/P/nAA87uQAhFAsAJiYXAAAAAAAAAAAAr3wWAAAAAB8AAADhAAAA9gT+/v4AAPT0APPp6QCitxQAIl1DAAkFAwAKAwAANw8AANrd7AC1kFEACPrTAPz8/AAGBgYAs4Aa1urq6gABAQELBP7+/gAA9fUA49fXABE6mQAaFwMA+foAAPn7AADL6gAADxsUAA9AmAA8MBcAAAAAAADngQDq+PgAroeNAAAAAB8E/v7+AP3x8QDn3t4ADScFABYAAAACBgAA8QYAAN/5AAD89gAA/QPxAAAAsQAAAAAA+d/fAN/n5wDq+A8AAADsCgL9/f0A6ODgABUWGAAA9vcAFgAAABEAAAAHAAAACAcAAPn8AAAS/NcAAPj4AAD4+AD39/cA387OAH+j7D4AAAD5Av7+/gDi4uIAIjBLABf/8gDp7/UA8QAAAPkAAAADAQAA4szdAA334AAA7+0AAPT0AODg4AAEBgYAAAAA+QAAAOgE/Pz8AAICAgAMLVMANvDWANnaygDpBDQA9fv7AALy6AAZ8OYA9t7NAAD49gAAHSEA3d3dANvl/AAAAAD9AAAA+AT7+/sAISEhAAD8/AAA68oAJwz1ACcA2AAACAAAAA0AAO4QEAC7vzcACM+3ACf+3QD69/cAeqL2PgAAAPkAAAD+BAUFBQDY2NgA1tZFAP39/QD+/v4A/f39AP39/QD9/f0A/v7+APsIMADICVQABNK7ADgsKgAAAMz5AAAA6AAAAPgERHfdCwAAAB8AAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAAxgCggI3MCPXUAAAAzP0AAAD4/////gEAAAACAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAA/QAAAOH////2Af///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAgAAAAAAAAA+P////59OFeo8fymrgAAAABJRU5ErkJggg%3D%3D%27%3B%0ACtrlPanel%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAAIuuYjyvIgAAACBjSFJNAACHGwAAi/8AAP/YAAB91AAAgSAAAOmkAAAz8AAAJVC/P0EaAAAEG0lEQVR42mJkTDzG8P/ffwYpEU6Gzz/+8H//9Y+dh4s1+cOn3+zMbMwWf/8wWAAVMOi/nLtX8uet4L+MrAz/GBgYmIHY/ft3BoAAYgHSOYyMjCIfv/2x+Pnnv8WfH/+YPnz4zMsAVMbC+p9BQYCV4dNfNoYvf9j4vn37wvCXkZ3hF9BADyFhBtVv3xgAAoiF4e/fif+//Wb6+ukvAzvrPwYtUVYGSyM+Bl15HgYTLSkGRUkOhty5txkOXP//F+TSv/9+MrCxsjBICggw/H73jgEggFgYvn37HGXEx+9lJMpgqCrEoCTJw8DBycoAAh++vGP4y8TO8O8/IwMj0FaGf38Y2ISUGZgktBlYGR4x/P//nwEggFj+//jBkO2py2BlIAnW9Auo7uMvBoYfP38zvD2aycBr1MPAxsLO8PsvM8PPb58ZhByDGb4x8TAwPL0HNJiJASCAmFhYWRkevvoG1vz9NwPDN5Dm/wwMX57sZPjLrcnAwCfLwMXJzPDr19//X8XNGX5JWzP8/flVjOnLq5lC7G+XAwQQCwsLE8PHL7/BBvwG2v7zL9AVQAO+3V/E8E86juEvkP3/90+GbyzCzJ90wsRUuDhmGqgKO6v/4ufl/HiCASCAWJgYGRlefQBay/Cf4fsfRoZfjEDNTw4x/P5wiYHVyInh/hsGhhc//jEEhwU4OFmo3/vOxMN98Yo8w+p/ir8EX0uvBggAQQC+/wQBAAAA8fkCAPf25ADuzJEABC2AAPnkrgD/FUcA6ujpAMTU2gBKOz4ADgkHBcfU4wXNzbvV8efcyCAD8ZMlFRvSAgBBAL7/BAYFAwDz9vgA+AcnAP8IHAD0vkgAAAUPAPkplQCyqrAAEQDYAKTmJQDhz8HdGv3XbBUE9L8QAQT5BgIBAAP+/QACiAUc8n/+Mvz8DYw6pVyGf68OAWML6CUuBQYG23yGHwxfGMwefmK4/fj2dQbu5zsYhIFpjJmNAehZcLgBBBALIxMTw2dgIH79AQo8YGjrLWb4/fEWw+8/DAyaAowMh9/zMnAy/2L4w8TP+uLjK4a33xkZ+Pn/M8gKAh3K+I8BIIBY/gDN+gNMYT+AGn4AI+M3IzfDT35DsOninAwM8m9+Mxy5+Yrhz5+/zIzAhPPr1x+Gly+/MHz78p/h5x8hBoAAYvnz9x/DT6BrmNiAOoCGfAUmiRcf/jLcuPmU4eS5+wy3rt1g+Pfuyk8VtkefeNk+gxMPCAC9z/CekZkBIIBY/v/5wvL8LQfDtGW3GO49eMXwCpjCvjy7+Ov/99cf2P5/mKvO/eseA/v7E0wsbPc5OHmByfcfAzIACCAW9t9v3t6/+vzP0wub//D+f3pGkPnZaQHmP2t4eTjvMTKzfmZj4wAmbXagRiag7f+BNIp+BoAAAwDAMqTgcw5bNAAAAABJRU5ErkJggg%3D%3D%27%3B%0AMSNotepad%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAoJJREFUOE+lk/tL01EUwO0fy1ely6IUMoi0AoM0Sy1TMDMitZyvfLDNdM5HPle6RNt0mlvz0ebmYzoVN5vO4cQ5yxQFAz/NbxTo9Kcu3Hu4h3s/fM6BcwYI+q91CBBXdGDtjaG88LUQywoK/9yLJEKseaulRnzX/5Sg41tIiKsWaauX0mdxolUr6Btz0NpWh9Ls4ZNugHbbDpklMvKkTQEQAVD4YQmN+yeGzX00qzvUu9aodKwhc25TurhLtnWbuNb10wF5ygUqnD4UTg8Sxwa5Nhc5026eTnpIG18lYWSdBO3B6QCF2krutI838z7ypzdJNS+RZHJz3/idWyNeLvd7iFEfkKYwnFxCl95Mnm2FdPMGj81bxA25uKZfJla3wZXPm4R0exC93yGtdysAIvRAPWSm1rlEvP4H8UM+ogZcRPS5idKsc6HHQ7BymUj5Kum6A15KWo5YCIAeg5ku7xTXtV5itD7CuhcIVzm41LlChNLO2Xoboko7qV1bpFQNHLEQAB/9JUzsWUkaXOVih4tz7dOENU8gejeLqMFGsMyCqGCSpFoHyU32QIBKb8G6byR/fJmLTQ5C60Y5LzchqrYQKflKcNEXIrMNJBaP8ah1jVdVzf/KEAxUOgsLv6ZodM5xtWGe0LIBQkq0RBSPEF48TIjYRLTYRkqd3W+wyL2c0qOADp2ZyT0jet8Md1Quf8OMxCqnSO63kzVuJ2d2huhMKS8KyykqrQ5sYrfBb8AExt1hVOtzlLkHkXtHaVxxIJuZJ7trnhsJz0+fhXqNlc5lO3LTN3I7p3hQMcjNrBZuP6wkOb2EfLH0xM/CJB8eGc+kJGbIeJJTISge1zxpCv/mfgPvVs+ANDa5fgAAAABJRU5ErkJggg%3D%3D%27%3B%0AMSWordpad%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAAIuuYjyvIgAAACBjSFJNAACHGwAAi/8AAP/YAAB91AAAgSAAAOmkAAAz8AAAJVC/P0EaAAAD5ElEQVR42gBBAL7/Af///wDgz3tx+e7eSe7mDMcTHwhq3d3+lhQQ9Tfb4fDGGxEsa+z105z+AkJFDP3M9PEQRo8qKSyz1d3qAFlVRwACiBFkwPKlJz9+e7WVT1hYgOHZGy4GKcHHDM8/mzIoi55kePEzhEGQcRUDi0gSA9OHVQwfGdUYWCXkTa89en+mOsGTASCAWBiAgJFdgkHbyJ5B21Cb4em9lwwS0h4MHz6zMkiIGDJ8+yPM8O9vAQMXDx8D458Yhv5FhxgOv/s9lf/fvyag1q0AAQQxgPMDg7y9IcP7n38ZBLSkGX4xMDFw8P1mePmHgeEX4zOGv6wMDFyMnxhefWdiWPNZkeH9dwmzIL73y4Ba+QECCGzAH6A33v98z/Dz2y8GZkYGBlZGJgZuFi4GFqBBXKxCDMwsPxnOPvrJMO8gK8Ozj2IMfI/3Mbzn+wjU6ccAEEBgA5gYmRlYmTkZ2Ni5GH78+crw+98vhtc/3gK1/2cQ5eZheHLjP8OWQ78YTj1jY+D/eZNB8dcdBk4uoRcgvQABBDbg59/vQL9+ZWD/z8XAAbSZnYmf4c/fnwzsLL8ZDt78yrBk+x8Gpk//GEwYfzJ8//aUQYCf9a20lKgPSC9AAIENYGPmYmADavzx+ycDw78/DD8ZWRiEONkYdlz8x9C7hZXh0Yd/DOrCnAzm0swMHz69ZbA3MXomLCJ8G6QXIIDABvz+/4vhF9DZTEysDH+B4fGb8TvD8Qd/GCbv/M3w4O1vBj0ZDgYPPUEGA4VvDNc+izAY6GkyCAoKgLQyAAQQE4j4C7L132+g5n8M3Bw8DKz/BBiWbPzEcPflLwYjOW4GGxURBluNvwyWSowMjEzMDMxMTAwsoNAGAoAAArsAFIAg20Hh8OfXV4Yv11kZOF/+YHDTlmLQV+Zg0JT9yCAm8Jfhww9ggIOCFuhKIAIDgAACG/D3/1+giZwMLOwcDO8ufWfYsOk5g5ieGIO2Fj+Drsx/BmHebwzffv1i+Pz7L8N/uMMhLgAIIKgBvxk+/3rPwPqXjeEt628GeRceBlmVPwzS/M8YuNnYGf4BY4edGRg+fz8B2f8YkAFAAIENYGbkYmBl4WX48fMzg7DiPwZpNV4GblYOYIz8Yvj+5zvDX6bvDHzs3Ay87OLgNPMf6g4QAAggsAH/WX4w/GcVZBDgE2FgBdrw48d3hj9ffjNw/AI68xcnw9vX7xgefnjG8PPzD2A6YWXg4+F+x8bKCjYAIIDABiiKcq97e/lN2KfHr7/9+AAMxK/fGH7++Al0wC+wk7m4OBl4eLgZ+Hi52a0tjG5xc3NEMUNjASDAAGRtWmcAXa/AAAAAAElFTkSuQmCC%27%3B%0ATimenDate%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAqBJREFUOE+Fk2tIk1EAho9F2J8uFF0gol92g6j+WEFGTGrQBYYynGnrYllOwbIx2aJWUEiJoZiFIYSaoJFdSEFrXcwaUZFz4Vrq5mWX+lz25UQpop62SaOLowPn1+F5znvOeU8cIGKN7FcbIosJc3cK24cvQozPF9/erxDXM5PjokxYMNk8+HI9xe5cmkbrqQtcJK9DwdKGvUw55UNdawkhE1xMWNW2nKLegzR+rqM52MQxu5mVjcXEnStHnJrNsfKrEcmkgk1VPlbfSCacwuRI4aSzkNwOWHCtH1EqEEbB4kOpmEymf+OLomHmmxzMuHCGNXcWktSyhM2tXpbU/0CUeBFnQ4Kjgpm7M2ILpu9rR+R3Ma9Ex5zLK5hWqSIsFqfVCIMg/vAsFqnzSU9PR9hbS/l7Omr34yrdDucToWg9WWdXhWIrEAcsTM3IIyF7G2tTDBOCkeeVcD0NKhSgX8ZY8Q6C5XuQm0oYtbfyfegt2Zf2InYdQSgbiVdUosi6wDplDoWFhQh32x1s927x7FEb7a5hbN4RXIExPIHPBIY/IffZOFF1l+kba5inqGdD+iMSd5xDo9FM3MHN1qdYB0Z5EoLtLi+DVguyvZ2gz4Xs6kAe6KTmtoct+5+TpH3A2q1G1Gp1BI48Y1jQ0j3O6/4A3X2DSD1vkD3d+Ls7kboe43c85M07H2k5FSiVSnQ6XRSOCpq7RpAkiaDdyteAB39/D/6BHiRHC0FZYrCvl/x8I2azOdrAP5p494Ubr8/HR3sbX9/eJzj8gUG3E1mWsTo/UXC8InLjv2L/Xv1IE8PHkIYCkRRhyO+XsFieUVZ2hbTduWRmZk4KR6scFjidbqqrGygoMJKaqonsqNfrY4L/fCatVotKpcJgMPwX+v0IPwEurq5/p1hhrwAAAABJRU5ErkJggg%3D%3D%27%3B%0AAddRemove%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAs9JREFUOE+Vk91L02EUx+2q/yII6iJIxRoRRlHdiRBGF0KglFIkpRWKdKEpJlqEkQRR1txsbqY1dM40Naf5sqm/+ba20sxyc75szqHzNTf36fdb2Bh104EvPJznnA/PeXn2COZJov7DZEcP7IkIlwBPhTUemfxUmYPUDoNOVPsomKygrR9g8quHYBCMRiMGgwHRonYVJQGMY+M8GQrwsG8Hee8Wyg4fqhYP6oZ5uno9uN3g9QZJTk4mMTExEiCRJMj73nFyCt9ReE9PWVk7iso+6moERs0TbK24cTkdZGbeiEiWckNP+fLZxo/ZJUyjMywvuHC5PNhnXUw45miyzlPYaueWbpq0q7f/Deju/BAq47YJigQ/d3q3udYZIKlhk5TnNp41O3hrmKe8vIX8fPnfJTyo6+d+ywy53ZDaCte6RDUHKK224HYusuGDqUkYFpvbLPrz8hr/QEIlZNZYOP/Gh8YCLwY2UHVPUakR8LqWpECWl8EiQJMeXqlAoQiQnl4UgoQAjTod+q8b1FvWWddexv80np6qGnzr4PeLEavwzeBD+LhDpQL0Iqi0pIPs7Ozf85QAbrcX/bdV3k2nMKg5xnu1kaER+D4FP2xOKlRtmIUlBLFHg8I2avUQ8fHxYYDD6cFgX+X63AUO6/Yh1/ZjHoBBUWOmOeobTDinV1hb38K3toVa00VsbGwYYHcsMDC7wtmeOPYqo8iRK+hoAWUVtOlgtD3ApljKrl25kodMJgsDRkasfFpc5qB2P/vrDpFe8ZJqcWJKJbzVQoe4wdJGStbTYyUu7kS4B69f12C1fcG3A599DuyrP5F/9FJQYuRN7ab4B2BiAjyeoJhs49Spc8TExISnIDWyuLgYVbWGu3kFpKSkcvrMWY7KjpOQcImMjPvk5Dzm4sWbHDlykujo6Mg92P1ZaWlpJCUlhZ4madcvnXNzc8nKyorwS/e/AIz06Svr2XfUAAAAAElFTkSuQmCC%27%3B%0ACmdPrompt%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAQ1JREFUOE9j/P//PwNFAGQAJZiB17Xrv17m9v+G2bv/G2TtwonN8vf+N83b+9+8YN9/6+wN/yU8W4H2Al0vXHbzv3jPh//iXW9xYrHOt/+jN//677/29//4zT/+T+tb/N8yZuH/4uLi/wwupQv+G0YV/DeOLcOLLePL/lsAMYh2jMv5rxXQAjHAwSsOFIokYxHNQIgBtp7xYM0eHh4gP4EBiI1sKMSzqJYIa0ANsHKNBkvCNMIMgokhyyEbgtUAXF5BNhSmBm4AzAv4XIDNFRgG4AsD5DDC6QJSYwLuAkfvRJKjEGSZqGYQJBqN/ev/K5iG/le2iCIaq1hE/Je3K4EYAIpiEINcTFFOBFkOAK4+5J3cVDxkAAAAAElFTkSuQmCC%27%3B%0AComputers%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAZRJREFUOE+NUz1Lw1AUtT/Hn9BVcDDgYDe7iTiFTsFJXCRjcAod5FmhkA6FdCikW7oE4lCIg5AMhdehwxscInTI4HC898XU2tqPwOF93XPeffee1AAcbfueX7K1w08den1Vry05LFBBdFJodBO43RTBMIbox3CHCcRE6vHk1EbzzCJKyVuSecFE5ynQweJVISyAhA7iL8BfAK7CHgG6TWQFnBkgPkpSQODRozXvGxfO7gzEpMBdVgYLurGCM4fev77xdwhQBuFYwnwHLAq2p79gsvlGuE+2C3Ad/H6CRkQ3TX4ITCLw2qD9ZlvuFnDbJDDIYYyhhSrw2hgdIGB3Yy1QHwB1IjDMqNBtNVvl+7e2seqt1ZM4HlLRohx+n2rSimGcBxvkDR9UAs5jgmAk4dGtPOfWrRvoXyNVm5xusSig5oqEUmqdpzOwH8osVt37x4najWRlJud5DjmTiCPOIkTj0j1QgOyslIKcKqSZJF+k8Hoh1cHTQnsz4CysWwF/ENPPlOhRdFhAHF5EFqnatT6uvp/n35Q1zXl/mKThAAAAAElFTkSuQmCC%27%3B%0AMagnifier%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAqxJREFUOE+Vkt1L01EYx48vFQRFdwVdVFQ3URFBd0HQjf9AhXWnBGLRMtdUiLLCt8RGbxZoQvaiglhRai03Z9Za5dbUueb2U/emNXx3upkv26ffFrndlRdfznkOz/dznuecJwkQmwsdpK7bIEJLEZEkksUyEbEmOVlEksJiYTFZLIbDYtP6tSKSkiI2igWxR/jF1lS3qFYdSxJRwJZzWnYrdexS6dmp1MfWv/tovCNXx4FCA3sLP3Hospbs6/VsO14kWxExQKXBD0sOAn4rgdE+ZmUFZS3O2CEowZyDcECS4wHmAwNRI+l59+MAdccoBGz4nF2MDJrxeyyM+yyYDB08b3iJtllLt6GT0JiN5ZlB2bhMeu7dOKBM5ycy3kv/dyOSowunzYjmTQfvPlh5YRumsX+KZwYfD6pbcNs/xio4kXM7DijV/iQy3ceA04zXbUHfYaTzq0QoMI7GPUGtbYI3E3PUmMZQ36yVjUFO5dxKALT9gKlehpxf8di/0KjrQTf8g0bzEA02FxqXG63HR1ckzLXqNiSrgQxVQgulOhkwaWHQYaTP9J6mD/08+SbxyGhHM+Dgs9uJZdiFNTRFTXs3LU31nFYltFCmjwJMDNoNOLr11L/tkW/2USdDDJ4hHB4XIyNeRiO/uNfUTuvzx2TlqeMt1PTOysEIhIdZCHnRtJl42jXJx/kg5tlpXLOT8jfPsSBnqfKLCAftZBfciQOOKppJO9/K0TOv6dFUYGytovi2jrfyeIzH3hwWZV26+pjtBzPIqbSyPy0/YQ7UatSymisz4dU+zCVZnEzPpKL8LorcEi4WlJN5OjeWk6iVSYxu8NaB/jDSDQXKs/djibHzf+hPgiSPZfMRrMU5KM/X/Ld5pYKWKiXSrXwuKh6uyrwCiJaruHBl1eYo4DduhgDBD20V8AAAAABJRU5ErkJggg%3D%3D%27%3B%0AOnScrKeyb%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAJVJREFUOE9j/P//PwNFAGQAJRismSHz/H9SMLKFDAxtb/6Tg0tLS4HmgLwPNCD62H+SsELPhf8YBvz9+/f/zDNf///79w+FBlkDEgfJb7gPsQirAaS4AqcLGs78///r19//6DTIBTBx2rkAZDLIZpA/Qf4FARANshnkAmQvUj8MQCaSiuHRCEoMIA45GJyQKMkHg8MAACArvHlXxbSqAAAAAElFTkSuQmCC%27%3B%0AWinTskMngr%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAJ5JREFUOE+VU9EOgCAIxPXQY7/sp/lnxpFMTEpkYzST4+AwEVFir+yUc5YYMb6LvG5ILqUsvbK1Qr0YDqKGu58AYNDacSP+xwGqzMX40+IaAImabCN/xwCGqgaMogwEAHLOHmKwkvI1g0MWQQ+jEcO1Uv5K58k6sNhZIl02F8Dr3as+DVIZyBY2rT0w+1YMg/0BmuSTGV76HHcHiWSxG7luAcTplZKTAAAAAElFTkSuQmCC%27%3B%0ASystProps%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAiRJREFUOE99kj9o21AQxl82jx67Crpo9FZDlxoyWNDBKhki8BCMBmMyBOGhuF2MmyFoKsKD0VRQh4A8GORNWQLyUFAGgzy4KEOGN3Tw0MGFDl/vnSu5TkgFH/p397vv7t0RAPHc9en7B/4pf2kckizeidSuHh3EK8BjjdYDKPnSgzv34axMGDcaxGWE2mRD4fscTo7mGQ40ixBeJwinKYIvSQmo0rPo5wQyS0gJSBYUfJMiWuasWG753b3bwFtk5CBDZexDXNUghgJG12NICXCXW7IMhOQw/g1E5MJ/70J9d6YS+gw7wGWFXJDsBqy2tetF2VeBo3swxP9BOu3AW20wWAPWZ7I9ocCPLjkQEBekJwCy6izBCQwiwGAFdO6A+jDjASrrnNytQLctGE1j78BfkNVxCKdPU1d3krUAzNu/gH4Kcd6BONOh2QZqzR4ax+b+ODxqozEHA9yXNRoaWKp/NTBxEkO8jVBpuqjbDvQTD2brH4CagzYFy7nOMJpTS/2ErYr2AOI4hHgVQGsFqJ8GXL0cYjnIb3R0MwlvnKF3nqBDUpWqb0K8IIDeitFo07fXFnrd3uEx5g8bJLc58rXkpRoNI3IQ8yIZZ8kukWBF5WIby2Pc/txCSUpJoIw30b2KCJBSNbdMLCo/AeT3OeSDhLpHc7XCIbUSw58k3OvjxAOAenEuHEoIEHyNubp6Lio/l1yuckFTEBWsjkctyf8qFzl/ABIpmnDaTkSAAAAAAElFTkSuQmCC%27%3B%0ACalculator%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAmhJREFUOE91k99PklEYx18vyrXVRbeuu278T7zK1kWtrVbO8qLwoiybM12aLEdz5mqaqUPE3JJUwAQhfwBq4i/wxwSFyECSgZZaJpaSnw5stlq+Z3v3PO+z8/2e7/d5zkkDpIM15VvjaPoRaXPrpxTf/SXF99OkldiGdOp0hnT8xDHpZEa65O1blK5kZab9ASUJkl/PgF8ECO7Bkoifkvk+hEX0/4De2S1GgjDqjye3pTCpww+SDvM8YYEaEYgyTZCrj0Ncrlwmu2SJ86WLnFHGOVsaoK3XdziBxe4nHIFO1zbZynUu1MGl55DXDPltUNAu4otNjIMppf8rsNp9+IXErsk4ReooNTZQdSd4oA1RrvmAShej0fadoemonIIFZgS5/SM0277yrCtEi2019e9cFfXpeUbcXszjXw4nMA94GJ8XzVoAs3uTFmsAy1wCozNAo2OHmO4aa9qiVE22iY4peCtUNOu9uNZBWTuKeU5Y6dhg9mYm1sIs3CkHMlOwjkF/ABRl/SgeTmAUii4qXmL0QJ3pPZpZmPJtyxMYHQlMwoLOEUHnDKOzbxHahYaeEAZnnPo3EQYnYvIEBtse3eIUtcGPTTTvVoUFVesala1Bbj8ao6h2ieGZz/IEr6y7WEUP8pVDXC8epm8Zcu5o6F2E9qFltLYYAxNr8gRa0w76GehwRDG6olRrvQgHKJvm0JhWKW+O4HDJjDF5lZv031IWnrZ5UA9CRYOHnHt91BgS3K1eILfMi2NyRV6BWty8fvGSCp+4KajyU9W5R16JhRvFr/8BHTrGZPFcbj0Fqnco7utlAX+Dk/lvcXcJCTRwbTMAAAAASUVORK5CYII%3D%27%3B%0ANetConnect%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAtxJREFUOE91k2tI01EYh8/SDxVaGpQVVAYV+CEQchRppandEMEP2WXa1Uq7MUShIk2taGWIdr86M0vn0ka1NishHTMj3RKMxtBIa00zoxxUhPH0/09mSnXghXP58Zzf+573KADhG87v3+j80Sxs/QOi5cNYERroFCF+iSL450SxKyJYMSwcOZEBclS6zZR0H+D2p7NoezTkOpJJagxj2vVjBBZ+5NKLz5JsSDsyvIsiZyl77Mu46Mqh/ruZewO1FHcdZb11PlPLNYh8N4qCZHKrn/wF8QLCayLY/HwBxzu2UtpzhcuufCo+NrHB+ppJ2gYUp7MRBQL/LBUWi2UURKj0bgJOGVj+aDZbJMheezTqtvVkt38gygT+F1skiwKRI1DsCyJibfZoQNgJB2MO2gmtnEnE/eksNc9iibmZ+QaYd+0ra27ZyHxgQK2rZsq+MOYlZYxyIeYcsiEy7IzJfcC48ykElYUwvlTJjOI+7tp60bX2Y+gc5NZLD1ctXagOXUKr1Q67EMo8CbCuHrGrFZHpkHLdjygULC5OJ++2g6qWT5idA7R+AWsf1L37xdHz+j+AvLpeRLwekWRCqBoQ22sQBwQxmiwvoOSRi6o2D/cdHkpM7ym4001S6n70+iGIkAHTUk0oosoRcdWIVbWMSw/GLzkFZcoNih52U946QL6uE31LH82ub+zIPDJcB+8zypAZqfWExOqYvOIyczdmERB1gwmRpShVRoqMbvL1XewuuInWbONZzyB36p4POfB1lQxZuLWM8J3NxO18TKJUk8gtTSiTDShX7iE2fjXR0dFoNBqqrG+50uDGZJLSHtmWMkQWhK/aRnjcJhbFJJKwNo1N6dlUGF/wtL0fa6eHe85BTta0k5CQ8Hdv+4B11lfUtn3B+AZ0dg+VNimk/3DG2EHeGZ3XUVpa2v8BZZZezjV6SD98wWvdF/KtarXa63RUDf7102SxL+9/nct7vwFQw5ZrKBhJFQAAAABJRU5ErkJggg%3D%3D%27%3B%0APowOptions%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAetJREFUOE+lk99rklEYx9e/0VU3QfdB/0JMyEaoF17JZNlg8cqsi8naClSaiBk2jOY71BbOC3/UunBBGkHEgkZu5KiGroiRWxJa6rrp03sOOHS+FNGBL5zDc57PeZ7vwzkGDP3XEoBexdQIR3X0Tu9ZN7m2W+Pzq2eUc3HUxA6j9qtaTv9D3fMAoLWdo7G/xutHyyRv3OH+1GPsdh+BQEAXIgFLiTjpdEaW3infhY9uWr6TPDkxROSUmUvjQSZdk/qARTVK6FYQj8cjAV+rT+GTn4b/NPkzx4nZgsQSL5jzRw/V54HT6SQyP4/b7ZaA2n6dTusbb9deknnwnMzDLyjKLAaDgYmJywMQ2YKAdFWv12m3D3izWSGd3SSb29U8mNLkIJFIkUplJURRFNlSn4kCsre3R6fTplR6Ty5XIhwWKrCxUWVrq0E+v8PY2Aw226g+oNlsaoFflMtVVlbe4fUWKRYrVCo/WV//QaHQYnX1Ow7H9UGAKEl4cWjYXFxzP43PG+d2KEkoVCKqftBUZXo6Kdvua6HrrghYrVZMJjMXRi7KsbqUa8zMbsv9orqkVRDDYrHoA3rHpC5EZNJy2MTw8Ljc37vp4pzxCmaz+e8AARPJQmKUC76zWEbOYzSa9D3408fRi+l68C+Q35MrucWVT9wHAAAAAElFTkSuQmCC%27%3B%0AMSPaint%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAZZJREFUOE+NkjFowkAUhnVzdMxYoYubdhM6uTWbgQ7tJodDkQwiTuIimUJwEHEKHYRkKMShoFtcCnYoOGY8x4zt1m5/711MjEZbDw6O4973vvfe5QHkaG21G/xcfclzecTz8nDJIgBt3qjCuysi6JTAWkxcRffpbZh+5j55sNAZ7EoR9m11D/jIwerVkiACsJZzADnI0O9N0NYtqPfd6FEKQMHWLABr2OcBk7kPzQwSwKfLEgMC+FM7U96BAQEexxxqx5NZ/FFhX0JTkeV5D/uS5ADSTXLcANpgA2MsNIW+NyrDWoUIXQuo5CSAdjomY1A3F5HmDtCdcYS6hvBaAHoWqE9nAcbrGvWXMpRmAYEbTYB6QiMmCDX4X4D97oDNGPiyhoVQ91ZrcFPF91ycXR/d4R8GpEYW6lQTHS9hLUCBCISuINxupMHx58r+th3AGRbRf27L7KRPEzrOnpmCNHA30sB4UqQBBiXZPAq+CEAQ6oFm1iOA0D9Ve1xKpgRpsTRAvfDfuPx9VPup7CdLiMmx8jn1+N0vr+ulS/dQUwwAAAAASUVORK5CYII%3D%27%3B%0A%0A%0Avar%20directoryService%20%3D%20Components.classes%5B%27@mozilla.org/file/directory_service%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIProperties%29%3B%0Avar%20profileFolder%20%3D%20directoryService.get%28%27ProfD%27%2C%20Components.interfaces.nsIFile%29%3B%0Avar%20profilePath%20%3D%20profileFolder.QueryInterface%28Components.interfaces.nsILocalFile%29.path%3B%0A%20%20%20%20profilePath%20%3D%20profilePath.replace%28/%5C%5C/g%2C%27/%27%29%3B%0A%0A%0A//%20------%20Menu%20Items%20------%0Aapps.push%28%5B%27Show%20Desktop%27%2C%20%20%20%20%20%20%20%20ShowDesk%2C%20%20%27C%3A/Documents%20and%20Settings/%27+login+%27/Application%20Data/Microsoft/Internet%20Explorer/Quick%20Launch/Show%20Desktop.scf%27%5D%29%3B%0Aapps.push%28%5B%27Open%20My%20Computer%27%2C%20%20%20%20Computers%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27%3A%3A%7B20D04FE0-3AEA-1069-A2D8-08002B30309D%7D%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Open%20Drive%20C%3A%27%2C%20%20%20%20%20%20%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27C%3A/%27%5D%29%3B%0Aapps.push%28%5B%27Open%20Drive%20D%3A%27%2C%20%20%20%20%20%20%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20%27D%3A/%27%5D%29%3B%0Aapps.push%28%5B%27Open%20Profile%20Folder%27%2C%20WExplorer%2C%20%27C%3A/WINDOWS/explorer.exe%27%2C%20profilePath%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Internet%20Explorer%27%2C%20%20%20IExplorer%2C%20%27C%3A/Program%20Files/Internet%20Explorer/IEXPLORE.EXE%27%5D%29%3B%0Aapps.push%28%5B%27Notepad%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20MSNotepad%2C%20%27C%3A/WINDOWS/notepad.exe%27%5D%29%3B%0Aapps.push%28%5B%27WordPad%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20MSWordpad%2C%20%27C%3A/Program%20Files/Windows%20NT/Accessories/wordpad.exe%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Control%20Panel%27%2C%20%20%20%20%20%20%20CtrlPanel%2C%20%27C%3A/WINDOWS/system32/control.exe%27%5D%29%3B%0Aapps.push%28%5B%27Add/Remove%20Programs%27%2C%20AddRemove%2C%20%27C%3A/WINDOWS/system32/control.exe%27%2C%20%27C%3A/WINDOWS/system32/Appwiz.cpl%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0Aapps.push%28%5B%27Magnifier%27%2C%20%20%20%20%20%20%20%20%20%20%20Magnifier%2C%20%27C%3A/WINDOWS/system32/magnify.exe%27%5D%29%3B%0Aapps.push%28%5B%27On-Screen%20Keyboard%27%2C%20%20OnScrKeyb%2C%20%27C%3A/WINDOWS/system32/osk.exe%27%5D%29%3B%0Aapps.push%28%5B%27Task%20Manager%27%2C%20%20%20%20%20%20%20%20WinTskMngr%2C%27C%3A/WINDOWS/system32/taskmgr.exe%27%5D%29%3B%0Aapps.push%28%5B%27Calculator%27%2C%20%20%20%20%20%20%20%20%20%20Calculator%2C%27C%3A/WINDOWS/system32/calc.exe%27%5D%29%3B%0Aapps.push%28%5B%27Paint%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MSPaint%2C%20%20%20%27C%3A/WINDOWS/system32/mspaint.exe%27%5D%29%0Aapps.push%28%5B%27Command%20Prompt%27%2C%20%20%20%20%20%20CmdPrompt%2C%20%27C%3A/WINDOWS/system32/cmd.exe%27%5D%29%3B%0A//%20------------------------%0A%0A%0Avar%20nMItem%20%3D%20function%28label%2Cimg%2Cpath%2Cargs%2Cobj%29%20%7B%0A%20%20var%20m%20%3D%20document.createElement%28%27menuitem%27%29%3B%0A%20%20m.setAttribute%28%27label%27%2Clabel%29%3B%0A%20%20m.f%20%3D%20obj.startProcess.bind%28obj%29%3B%0A%20%20m.setAttribute%28%27oncommand%27%2C%27this.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%29%27%29%3B%0A%20%20m.setAttribute%28%27class%27%2C%27menuitem-iconic%27%29%3B%0A%20%20if%20%28%21img%29%20img%20%3D%20Default%3B%0A%20%20m.setAttribute%28%27image%27%2Cimg%29%3B%0A%20%20m.tooltipText%20%3D%20label%3B%0A%20%20return%20m%3B%0A%7D%0A%0Athis.startProcess%20%3D%20function%28path%2Cargs%29%20%7B%0A%20%20var%20file%20%3D%20Components.classes%5B%27@mozilla.org/file/local%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsILocalFile%29%3B%0A%20%20var%20process%20%3D%20Components.classes%5B%27@mozilla.org/process/util%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIProcess%29%3B%0A%20%20file.initWithPath%28path.replace%28/%5C//g%2C%27%5C%5C%5C%5C%27%29%29%3B%0A%20%20args%20%3D%20args.replace%28/%5C//g%2C%27%5C%5C%27%29%3B%0A%20%20if%20%28args%3D%3D%27%27%29%20%7B%20file.launch%28%29%3B%20return%3B%20%7D%20%0A%20%20process.init%28file%29%3B%0A%20%20process.run%28false%2C%5Bargs%5D%2C1%29%3B%20%0A%7D%0A%0Avar%20mP%20%3D%20document.createElement%28%27menupopup%27%29%3B%0Afor%20%28var%20i%3D0%3B%20i%3Capps.length%3B%20i++%29%20%7B%0A%20%20if%20%28apps%5Bi%5D%20%3D%3D%20%27separator%27%29%20%7B%0A%20%20%20%20mP.appendChild%28document.createElement%28%27menuseparator%27%29%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20if%20%28%21apps%5Bi%5D%20%5B3%5D%29%20apps%5Bi%5D%20%5B3%5D%3D%27%27%3B%0A%20%20%20%20mP.appendChild%28nMItem%28apps%5Bi%5D%20%5B0%5D%2C%20apps%5Bi%5D%20%5B1%5D%2C%20apps%5Bi%5D%20%5B2%5D%2C%20apps%5Bi%5D%20%5B3%5D%2C%20this%29%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.appendChild%28mP%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22vertical%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

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

AndreyD

С домашней страницы расширения не добавляются кнопки для BBcode, хотя BBcode установлено.
Custom Buttons 0029, BBcode 0522.

Установил с AMO BBCode 0.5.2.2, Custom Buttons 0.0.2.9 с mozdev. Кнопки устанавливаются.
Как раз в версиях до 0.0.2.9 была ошибка связанная с определением валидности кнопки, в 0.0.2.9 исправлено.

pshenk

не работает. не появляется всплывающие меню.

Объясняю. Надо убрать строку this. type = ... - это уберёт стрелочку, и установить атрибут popup. То есть, оконцовка кода должна выглядеть примерно так:

Выделить код

Код:

this.appendChild(mP);
//this.type = "menu";
this. setAttribute ("popup", mP. id = "cbFavoriteApplications-" + this. id);

спасибо, заработало :)
я просто не знал что надо поле ID заполнять таким образом.

Можно без +this.id, это так, для пущего избежания коллизий с клонами этой же кнопки.
Можно последовательно, сначала установить id для менюшки, потом установить значение атрибута popup.

Anton пишет:

AndreyD

С домашней страницы расширения не добавляются кнопки для BBcode, хотя BBcode установлено.
Custom Buttons 0029, BBcode 0522.

Установил с AMO BBCode 0.5.2.2, Custom Buttons 0.0.2.9 с mozdev. Кнопки устанавливаются.
Как раз в версиях до 0.0.2.9 была ошибка связанная с определением валидности кнопки, в 0.0.2.9 исправлено.

Не все кнопки доступны, в частности нет активно используемой кнопки "сделать из выбранного текста ссылку"

Вот так это у меня выглядит:
http://i43.photobucket.com/albums/e373/perforator2568/_2.jpg

А вот мои расширения:

http://i43.photobucket.com/albums/e373/perforator2568/_3.jpg

В общем я поковырялся немного следующим образом:

Посмотрел исходный код домашней страницы.
Кнопка "Сделать из выбранного текста ссылку" имеет код

Выделить код

Код:

custombutton://%u0421%u0434%u0435%u043B%u0430%u0442%u044C%20%u0438%u0437%20%u0432%u044B%u0431%u0440%u0430%u043D%u043D%u043E%u0433%u043E%20%u0442%u0435%u043A%u0441%u0442%u0430%20%u0441%u0441%u044B%u043B%u043A%u0443%5D%5Bchrome%3A//bbcode/skin/menuicons/url.gif%5D%5Bbbcode.bbcode%28%27urlclip%27%2C%20%27bbcode%27%29%3B

Я с помощью этого кода сделал кнопку, которая нормально работает, но не имеет иконки. Дело в том, что кнопка берет иконку из скина BBcode url.gif, а BBcode 0.5.2.2 иконки в формате PNG. Заменил url.gif на url.png и кнопка обрела иконку.

AndreyD
Изменить что-нибудь на xsms.nm.ru может только Yan

Дано: Thunderbird 2.0.0.12, Custom Buttons 0.0.2.9
Код кнопки в окне составления сообщений:

Выделить код

Код:

var mp = document.createElement("menupopup");
var mi = document.createElement("menuitem");
mi.setAttribute("label", "test");
mp.appendChild(mi);
this.appendChild(mp);
this.type = "menu-button";

Наблюдаю растягивание иконки в высоту. И все :/

В Firefox все работает:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMenu-button%20test%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20mp%20%3D%20document.createElement%28%22menupopup%22%29%3B%0Avar%20mi%20%3D%20document.createElement%28%22menuitem%22%29%3B%0Ami.setAttribute%28%22label%22%2C%20%22test%22%29%3B%0Amp.appendChild%28mi%29%3B%0Athis.appendChild%28mp%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Balert%28event.target.nodeName%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Судя по DOM Inspector'у, не применяется XBL на toolbarbutton[type="menu-button"] :|

Infocatcher

Наблюдаю растягивание иконки в высоту.

Есть такое дело.

Судя по DOM Inspector'у, не применяется XBL на toolbarbutton[type="menu-button"]

Здесь вот не знаю - может тема или расширение какое-нибудь; у меня DOM Inspector xbl показывает.

Я посмотрел несколько стандартных кнопок Thunderbird'а - у них стоит type="menu", не "menu-button". Вот этот тип (#menu-vertical) нет расширяющего биндинга. Исправлю.

Anton

Я посмотрел несколько стандартных кнопок Thunderbird'а - у них стоит type="menu", не "menu-button".

Эмм...

Выделить код

Код:

<toolbarbutton oncommand="goDoCommand('cmd_saveDefault')"
               class="toolbarbutton-1" type="menu-button" id="button-save" label="Сохранить"
               tooltiptext="Сохранить это сообщение" command="cmd_saveDefault">
  <menupopup>
    <menuitem label="Файл..." accesskey="Ф" command="cmd_saveAsFile"/>
    <menuseparator/>
    <menuitem label="Черновик" accesskey="Ч" command="cmd_saveAsDraft"/>
    <menuitem label="Шаблон" accesskey="Ш" command="cmd_saveAsTemplate"/>
  </menupopup>
</toolbarbutton>

Здесь вот не знаю - может тема или расширение какое-нибудь; у меня DOM Inspector xbl показывает.

Не совсем точно выразился... Смотрю в DOM Inspector'е: атрибут type есть, CSS для toolbarbutton[type="menu-button"] есть. Эффекта нет. А вот на Computed Style глянуть забыл, а то понял бы, что

Выделить код

Код:

toolbarbutton[id^="custombuttons-button"] {
    -moz-binding: url(chrome://custombuttons/content/toolbarbutton.xml#toolbarbutton)
}

Infocatcher

Эмм...

До исходников птицы далеко ) Я из DOM Inspectora смотрел - type="menu". Может и врёт, конечно.

атрибут type есть, CSS для toolbarbutton[type="menu-button"] есть.

http://pastebin.mozilla-russia.org/91122
Для menu-type в CB есть расширяющий binding. Для menu - есть, но не расширяющий.
Для type="menu" binding CB виден только в computed style, для type="menu-button" - в выпадающем списке.

Всё равно разбираться надо, если стандартным кнопкам TB ставишь (через инспектор) type="menu-button" - их не растягивает. С другой стороны, стрелка оказывается в этом случае дальше от кнопки, чем обычно.

Anton

Я из DOM Inspectora смотрел - type="menu". Может и врёт, конечно.

Именно из него и смотрел...

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

Гм, хорошо, как создать «обычную» кнопку-меню? И на какой версии Thunderbird все это проверялось (есть у меня смутные подозрения...)?

Гм, хорошо, как создать «обычную» кнопку-меню?

Ну очевидно же - type="menu";

И на какой версии Thunderbird все это проверялось (есть у меня смутные подозрения...)?

2.0.0.12, инспектор 1.8.1.2

Плюс ещё из кнопки

Выделить код

Код:

var bt = document. getElementById ("button-tag");
alert (bt. getAttribute ("type"));
alert (bt. type);

Anton

Ну очевидно же - type="menu";

Ну, type="menu" и type="menu-button" – разные вещи. Например, «Получить новые сообщения» – и кнопка, и список (что я и хотел получить).

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

В этом и дело.
Для menu-button слева – кнопка, справа – список. А у menu – только список. Потому-то первая и шире.

P.S. Версии совпали.

Добавлено Thu Apr 10 00:29:21 2008 :
Кстати, из-за того, что атрибут orient="vertical" не работает в Firefox 2.0, есть смысл привязать к
toolbarbutton[type="menu"]
chrome://global/content/bindings/toolbarbutton.xml#menu-vertical
(причем в Firefox 1.5 данный binding отсутствует)
Тогда «треугольничек» будет справа, а не снизу.

Добавлено Thu Apr 10 00:34:06 2008 :
Причем я еще менял класс "menu-iconic-icon" на "blah-blah-blah-menu-iconic-icon". Насколько я помню, в одной из альф fx 3.0 в дефолтной теме было ограничение в 16px на размеры иконки, что жутко корявило картинки большего размера.

атрибут orient="vertical" не работает в Firefox 2.0,

Почему у меня работает ?
2.0.0.12/13

Почему у меня работает ?

http://pastebin.mozilla-russia.org/91123
Кнопка:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EMenu-button%20test%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20mp%20%3D%20document.createElement%28%22menupopup%22%29%3B%0Avar%20mi%20%3D%20document.createElement%28%22menuitem%22%29%3B%0Ami.setAttribute%28%22label%22%2C%20%22test%22%29%3B%0Amp.appendChild%28mi%29%3B%0Athis.appendChild%28mp%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20alert%28event.target.nodeName%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.setAttribute%28%22orient%22%2C%20%22vertical%22%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

После клика по кнопке:
fx 1.5.0.12: http://i019.radikal.ru/0804/d6/aa360f2d86fc.png
fx 2.0.0.13: http://i017.radikal.ru/0804/46/fb49bff3036e.png

Добавлено Thu Apr 10 14:33:55 2008 :
А без
this.setAttribute("orient", "vertical");
вид у кнопок будет одинаковый.

может быть, это наоборот в 1.5 что-то не поддерживается, или просто разное поведение по умолчанию ?
попробуй

Выделить код

Код:

this. type = "menu";
this. orient = "horizontal"; // this. setAttribute ("orient", "horizontal");

Ошибка связана с отсутствием четырёх строчек в chrome.manifest. В 0.0.3 добавлю недостающие.
Для временного обхода ошибки могу предложить записать в userChrome.css содержимое chrome://custombuttons/content/overlay.css

Выделить код

Код:

toolbarbutton[id^='custombuttons-button'] {
  -moz-binding: url("toolbarbutton.xml#toolbarbutton");
}

toolbarbutton[id^='custombuttons-button'][type="menu"] {
  -moz-binding: url("toolbarbutton.xml#menu");
}

toolbarbutton[id^='custombuttons-button'][type="menu-button"] {
  -moz-binding: url("toolbarbutton.xml#menu-button");
}

или дополнительный код в init-секцию (только для menu-button)

Выделить код

Код:

if (!this. getAttribute ("cbMenuButtonBindingFix"))
{
    this. setAttribute ("cbMenuButtonBindingFix", "true");
    document. addBinding (this, "chrome://custombuttons/content/toolbarbutton.xml#menu-button");
}

может быть, это наоборот в 1.5 что-то не поддерживается, или просто разное поведение по умолчанию ?

Это смотря как посмотреть...
Реакцию на orient="vertical" я уже показал (см. скриншоты). И в 1.5 нет chrome://global/content/bindings/toolbarbutton.xml#menu-vertical.
Насколько я помню (давно это было), способ изменения положения «треугольничков» (через binding на #menu-vertical) я подсмотрел в Tab Mix Plus... Про orient="vertical" – тоже где-то подсмотрел. :)
В общем, хорошо, что компактная по высоте менюшка получилась с помощью уже имеющихся средств :)

Infocatcher

Это смотря как посмотреть...

Заинтриговал ты меня этим orient'ом. Объясни на словах, пожалуйста, что значит, что этот атрибуте "не работает" ?

Заинтриговал ты меня этим orient'ом. Объясни на словах, пожалуйста, что значит, что этот атрибуте "не работает" ?

(Ну вот, опять все дело в словах)
Не работает == не дает никакого эффекта.

Выделить код

Код:

this.type = "menu";
this.orient = "vertical";

На что Firefox 1.5 выдает стрелочку справа, без «this.orient = "vertical";» – стрелочку снизу. Firefox 2.0 на «this.orient = "vertical";» не реагирует никак (стрелочка всегда снизу).

Firefox 1.5 выдает стрелочку слева

Очепятка ?

Firefox 2.0 на «this.orient = "vertical";» не реагирует никак

Реагирует же на orient="horizontal" ?

Очепятка ?

Да. Исправил.

Реагирует же на orient="horizontal" ?

Реагирует. Это я уже понял, спасибо за помощь.
В общем, имеет место изменение реакции на orient="vertical", на этом предлагаю данную тему закрыть. =)

Ок. Просто, сейчас не в силах объять всё в комплексе, из-за этого опасения, что я что-то упустил, вплоть до "а не CB ли "ломает" orient ?".
Найдёшь другую ошибку - пиши )


Ещё одни часы, как у Яна, но на canvas'е:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EDigital%20clock%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bfunction%20CanvasPixelPrinter%20%28canvas%29%0A%7B%0A%09this.%20init%20%28canvas%29%3B%0A%7D%0ACanvasPixelPrinter.%20prototype%20%3D%0A%7B%0A%09canvas%3A%20null%2C%0A%09font%3A%20null%2C%0A%09%0A%09_context%3A%20null%2C%0A%09get%20context%20%28%29%0A%09%7B%0A%09%09if%20%28%21this.%20_context%29%0A%09%09%7B%0A%09%09%09if%20%28this.%20canvas%29%0A%09%09%09%09this.%20_context%20%3D%20this.%20canvas.%20getContext%20%28%222d%22%29%3B%0A%09%09%09else%0A%09%09%09%09throw%20%28%22SimpleCanvas%20error%3A%20no%20canvas%22%29%3B%0A%09%09%7D%0A%09%09return%20this.%20_context%3B%0A%09%7D%2C%0A%09%0A%09init%3A%20function%20%28canvas%2C%20font%29%0A%09%7B%0A%09%09if%20%28typeof%20%28canvas%29%20%3D%3D%20%22string%22%29%0A%09%09%09this.%20canvas%20%3D%20document.%20getElementById%20%28canvas%29%3B%0A%09%09else%0A%09%09%09this.%20canvas%20%3D%20canvas%3B%0A%09%7D%2C%0A%09%0A%09putch%3A%20function%20%28ch%29%0A%09%7B%0A%09%09if%20%28this.%20font%20%26%26%20this.%20font%20%5Bch%5D%29%0A%09%09%7B%0A%09%09%09var%20chr%20%3D%20this.%20font%20%5Bch%5D%3B%0A%09%09%09var%20chw%20%3D%20chr%20%5B0%5D%3B%0A%09%09%09var%20chh%20%3D%20chr%20%5B1%5D%3B%0A%09%09%09var%20i%2C%20j%2C%20k%3B%0A%09%09%09var%20line%2C%20cbit%3B%0A%09%09%09this.%20context.%20save%20%28%29%3B%0A%09%09%09for%20%28i%20%3D%200%3B%20i%20%3C%20chh%3B%20i++%29%0A%09%09%09%7B%0A%09%09%09%09this.%20context.%20save%20%28%29%3B%0A%09%09%09%09this.%20context.%20translate%20%28chw%2C%200%29%3B%0A%09%09%09%09line%20%3D%20chr%20%5Bi%20+%202%5D%3B%0A%09%09%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20chw%3B%20j++%29%0A%09%09%09%09%7B%0A%09%09%09%09%09this.%20context.%20translate%20%28-1%2C%200%29%3B%0A%09%09%09%09%09cbit%20%3D%20line%20%26%201%3B%0A%09%09%09%09%09line%20%3E%3E%3D%201%3B%0A%09%09%09%09%09if%20%28cbit%29%0A%09%09%09%09%09%09this.%20context.%20fillRect%20%280%2C%200%2C%201%2C%201%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09this.%20context.%20restore%20%28%29%3B%0A%09%09%09%09this.%20context.%20translate%20%280%2C%201%29%3B%0A%09%09%09%7D%0A%09%09%09this.%20context.%20restore%20%28%29%3B%0A%09%09%09this.%20context.%20translate%20%28chw%20+%201%2C%200%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09%0A%09print%3A%20function%20%28str%29%0A%09%7B%0A%09%09this.%20context.%20save%20%28%29%3B%0A%09%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%20str.%20length%3B%20i++%29%0A%09%09%09this.%20putch%20%28str.%20charAt%20%28i%29%29%3B%0A%09%09this.%20context.%20restore%20%28%29%3B%0A%09%7D%0A%7D%3B%0A%0Afunction%20DigitalClock%20%28canvas%2C%20showSeconds%29%0A%7B%0A%09this.%20showSeconds%20%3D%20showSeconds%3B%0A%09this.%20init%20%28canvas%29%3B%0A%7D%0ADigitalClock.%20prototype%20%3D%0A%7B%0A%09displayColor%3A%20%22black%22%2C%0A%09displayBackground%3A%20%22white%22%2C%0A%09canvasBackground%3A%20%22white%22%2C%0A%09displayBorderColor%3A%20%22black%22%2C%0A%09width%3A%2033%2C%0A%09height%3A%2016%2C%0A%09%0A%09_showSeconds%3A%20false%2C%0A%09set%20showSeconds%20%28val%29%0A%09%7B%0A%09%09this.%20_showSeconds%20%3D%20val%3B%0A%09%09if%20%28val%29%0A%09%09%09this.%20width%20%3D%2049%3B%0A%09%09else%0A%09%09%09this.%20widht%20%3D%2033%3B%0A%09%7D%2C%0A%09%0A%09get%20showSeconds%20%28%29%0A%09%7B%0A%09%09return%20this.%20_showSeconds%3B%0A%09%7D%2C%0A%09%0A%09font%3A%0A%09%7B%0A%09%09%220%22%3A%20%5B5%2C%208%2C%200x0E%2C%200x11%2C%200x11%2C%200x11%2C%200x11%2C%200x11%2C%200x11%2C%200x0E%5D%2C%0A%09%09%221%22%3A%20%5B5%2C%209%2C%200x02%2C%200x06%2C%200x0A%2C%200x12%2C%200x02%2C%200x02%2C%200x02%2C%200x02%5D%2C%0A%09%09%222%22%3A%20%5B5%2C%209%2C%200x0E%2C%200x11%2C%200x01%2C%200x02%2C%200x04%2C%200x08%2C%200x10%2C%200x1F%5D%2C%0A%09%09%223%22%3A%20%5B5%2C%209%2C%200x0E%2C%200x11%2C%200x01%2C%200x06%2C%200x01%2C%200x01%2C%200x11%2C%200x0E%5D%2C%0A%09%09%224%22%3A%20%5B5%2C%209%2C%200x02%2C%200x06%2C%200x0A%2C%200x12%2C%200x1F%2C%200x02%2C%200x02%2C%200x02%5D%2C%0A%09%09%225%22%3A%20%5B5%2C%209%2C%200x1F%2C%200x10%2C%200x10%2C%200x1E%2C%200x01%2C%200x01%2C%200x11%2C%200x0E%5D%2C%0A%09%09%226%22%3A%20%5B5%2C%209%2C%200x0E%2C%200x11%2C%200x10%2C%200x1E%2C%200x11%2C%200x11%2C%200x11%2C%200x0E%5D%2C%0A%09%09%227%22%3A%20%5B5%2C%209%2C%200x1F%2C%200x01%2C%200x01%2C%200x02%2C%200x04%2C%200x04%2C%200x04%2C%200x04%5D%2C%0A%09%09%228%22%3A%20%5B5%2C%209%2C%200x0E%2C%200x11%2C%200x11%2C%200x0E%2C%200x11%2C%200x11%2C%200x11%2C%200x0E%5D%2C%0A%09%09%229%22%3A%20%5B5%2C%209%2C%200x0E%2C%200x11%2C%200x11%2C%200x11%2C%200x0F%2C%200x01%2C%200x11%2C%200x0E%5D%2C%0A%09%09%22%3A%22%3A%20%5B3%2C%209%2C%200x00%2C%200x02%2C%200x02%2C%200x00%2C%200x00%2C%200x02%2C%200x02%2C%200x00%5D%0A%09%7D%2C%0A%09%0A%09init%3A%20function%20%28canvas%29%0A%09%7B%0A%09%09this.%20__super.%20prototype.%20init.%20apply%20%28this%2C%20%5Bcanvas%5D%29%3B%0A%09%09this.%20context.%20translate%20%2820%2C%2020%29%3B%0A%09%7D%2C%0A%09%0A%09fixmod%3A%20function%20%28str%2C%20len%29%0A%09%7B%0A%09%09while%20%28%28str.%20length%20%25%20len%29%20%21%3D%200%29%0A%09%09%09str%20%3D%20%220%22%20+%20str%3B%0A%09%09return%20str%3B%0A%09%7D%2C%0A%09%0A%09drawBorder%3A%20function%20%28%29%0A%09%7B%0A%09%09this.%20context.%20save%20%28%29%3B%0A%09%09this.%20context.%20fillStyle%20%3D%20this.%20displayBorderColor%3B%0A%09%09this.%20context.%20fillRect%20%280%2C%201%2C%201%2C%20this.%20height%20-%202%29%3B%0A%09%09this.%20context.%20fillRect%20%281%2C%200%2C%20this.%20width%20-%202%2C%201%29%3B%0A%09%09this.%20context.%20fillRect%20%28this.%20width%20-%201%2C%201%2C%201%2C%20this.%20height%20-%202%29%3B%0A%09%09this.%20context.%20fillRect%20%281%2C%20this.%20height%20-%201%2C%20this.%20width%20-%202%2C%201%29%3B%0A%09%09this.%20context.%20restore%20%28%29%3B%0A%09%7D%2C%0A%09%0A%09getTimeString%3A%20function%20%28%29%0A%09%7B%0A%09%09var%20date%20%3D%20new%20Date%20%28%29%3B%0A%09%09var%20h%20%3D%20this.%20fixmod%20%28date.%20getHours%20%28%29.%20toString%20%28%29%2C%202%29%3B%0A%09%09var%20m%20%3D%20this.%20fixmod%20%28date.%20getMinutes%20%28%29.%20toString%20%28%29%2C%202%29%3B%0A%09%09var%20res%20%3D%20h%20+%20%22%3A%22%20+%20m%3B%0A%09%09if%20%28this.%20showSeconds%29%0A%09%09%7B%0A%09%09%09var%20s%20%3D%20this.%20fixmod%20%28date.%20getSeconds%20%28%29.%20toString%20%28%29%2C%202%29%3B%0A%09%09%09res%20+%3D%20%22%3A%22%20+%20s%3B%0A%09%09%7D%0A%09%09return%20res%3B%0A%09%7D%2C%0A%09%0A%09tick%3A%20function%20%28%29%0A%09%7B%0A%09%09this.%20context.%20save%20%28%29%3B%0A%09%09this.%20context.%20scale%20%281%2C%201%29%3B%0A%09%09this.%20context.%20fillStyle%20%3D%20this.%20canvasBackground%3B%0A%09%09this.%20context.%20fillRect%20%280%2C%200%2C%20this.%20width%2C%20this.%20height%29%3B%0A%09%09this.%20context.%20fillStyle%20%3D%20this.%20displayBackground%3B%0A%09%09this.%20context.%20fillRect%20%281%2C%201%2C%20this.%20width%20-%202%2C%20this.%20height%20-%201%29%3B%0A%09%09this.%20drawBorder%20%28%29%3B%0A%09%09this.%20context.%20fillStyle%20%3D%20this.%20displayColor%3B%0A%09%09this.%20context.%20translate%20%283%2C%204%29%3B%0A%09%09var%20date%20%3D%20new%20Date%20%28%29%3B%0A%09%09var%20h%20%3D%20this.%20fixmod%20%28date.%20getHours%20%28%29.%20toString%20%28%29%2C%202%29%3B%0A%09%09var%20m%20%3D%20this.%20fixmod%20%28date.%20getMinutes%20%28%29.%20toString%20%28%29%2C%202%29%3B%0A%09%09var%20s%20%3D%20this.%20fixmod%20%28date.%20getSeconds%20%28%29.%20toString%20%28%29%2C%202%29%3B%0A%09%09this.%20print%20%28this.%20getTimeString%20%28%29%29%3B%0A%09%09this.%20context.%20restore%20%28%29%3B%0A%09%7D%2C%0A%09%0A%09QueryInterface%3A%20function%20%28iid%29%0A%09%7B%0A%09%09if%20%28iid.%20equals%20%28Components.%20interfaces.%20nsISupports%29%20%7C%7C%0A%09%09%09iid.%20equals%20%28Components.%20interfaces.%20nsITimerCallback%29%29%0A%09%09%09return%20this%3B%0A%09%09return%20Components.%20results.%20NS_ERROR_NO_INTERFACE%3B%0A%09%7D%2C%0A%09%0A%09notify%3A%20function%20%28oTimer%29%0A%09%7B%0A%09%09this.%20tick%20%28%29%3B%0A%09%7D%2C%0A%09%0A%09oTimer%3A%20null%2C%0A%09start%3A%20function%20%28%29%0A%09%7B%0A%09%09if%20%28this.%20oTimer%29%0A%09%09%09this.%20stopTimer%20%28%29%3B%0A%09%09this.%20oTimer%20%3D%20Components.%20classes%20%5B%22@mozilla.org/timer%3B1%22%5D.%0A%09%09%09%09%09%20%20%20createInstance%20%28Components.%20interfaces.%20nsITimer%29%3B%0A%09%09this.%20oTimer.%20initWithCallback%20%28this%2C%201000%2C%201%29%3B%09%09%09%0A%09%7D%0A%7D%3B%0ADigitalClock.%20prototype.%20__proto__%20%3D%20CanvasPixelPrinter.%20prototype%3B%0ADigitalClock.%20prototype.%20__super%20%3D%20CanvasPixelPrinter%3B%0Athis.%20htmlNS%20%3D%20%22http%3A//www.w3.org/1999/xhtml%22%3B%0Athis.%20xulNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0Avar%20canvas%20%3D%20this.%20getElementsByTagNameNS%20%28this.%20htmlNS%2C%20%22canvas%22%29%20%5B0%5D%3B%0Aif%20%28%21canvas%29%0A%7B%0A%09var%20canvas%20%3D%20document.%20createElementNS%20%28this.%20htmlNS%2C%20%22canvas%22%29%3B%0A%09this.%20clock%20%3D%20new%20DigitalClock%20%28canvas%2C%20false%29%3B%0A%09canvas.%20setAttribute%20%28%22width%22%2C%20this.%20clock.%20width%29%3B%0A%09canvas.%20setAttribute%20%28%22height%22%2C%20this.%20clock.%20height%29%3B%0A%09canvas.%20setAttribute%0A%09%28%0A%09%09%22style%22%2C%0A%09%09%22min-width%3A%22%20+%20this.%20clock.%20width%20+%0A%09%09%22px%3Bwidth%3A%22%20+%20this.%20clock.%20width%20+%0A%09%09%22px%3Bmax-width%3A%22%20+%20this.%20clock.%20width%20+%0A%09%09%22px%3Bmin-height%3A%22%20+%20this.%20clock.%20height%20+%0A%09%09%22px%3Bheight%3A%22%20+%20this.%20clock.%20height%20+%0A%09%09%22px%3Bmax-height%3A%22%20+%20this.%20clock.%20height%0A%09%29%3B%0A%09this.%20image%20%3D%20%22data%3A%22%3B%0A%09this.%20disabled%20%3D%20true%3B%0A%09this.%20setAttribute%20%28%22class%22%2C%20%22%22%29%3B%0A%09canvas%20%3D%20this.%20appendChild%20%28canvas%29%3B%0A%09var%20pn%20%3D%20this.%20parentNode%3B%0A%09var%20ns%20%3D%20this.%20nextSibling%3B%0A%09var%20button%20%3D%20pn.%20removeChild%20%28this%29%3B%0A%09if%20%28ns%29%0A%09%09pn.%20insertBefore%20%28button%2C%20ns%29%3B%0A%09else%0A%09%09pn.%20appendChild%20%28button%29%3B%0A%7D%0Athis.%20clock.%20start%20%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/***********************************%0A%20*%20Digital%20Clock%20custom%20button%20%20%20%20%20*%0A%20*%20on%20the%20canvas%20element%20base%20%20%20%20%20%20*%0A%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*%0A%20*%20Author%3A%20Anton%20Glazatov%20%28c%29%202008%20*%0A%20***********************************/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

[...] из-за этого опасения, что я что-то упустил, вплоть до "а не CB ли "ломает" orient ?".

Нет, Firefox 2.0 действительно перестал реагировать на orient="vertical" (это я еще давно заметил). Примером служит Launchy (content/main.xul):

Выделить код

Код:

<toolbarbutton id="launchy-toolbar-browser" type="menu" orient="vertical" class="launchy-toolbar toolbarbutton-1 chromeclass-toolbar-additional" label="&launchy.label;" tooltiptext="&launchy.label;">
    <menupopup onpopupshowing="launchyContext.doContext(this);">
    </menupopup>
</toolbarbutton>

(в fx 1.5 сейчас не проверить, но, насколько я помню, треугольничек менюшки был справа, а не снизу, как в 2.0.)

Найдёшь другую ошибку - пиши )

Обязательно! =)

Нашел довольно странную фичу.
Если в поле «Инициализация» написать что-нибудь вроде

Выделить код

Код:

this.image = this.parentNode.getAttribute("iconsize") == "large"
    ? "file:///J:/somePath/24.png"
    : "file:///J:/somePath/16.png";

, а поле «Картинка» оставить пустым, то при открытии редактора в этом поле появится текущая картинка.
Я так понимаю, что берется button.image – независимо от того, что было сделано в кнопке.
Т.е. если перед сохранением не очистить поле «Картинка», сохранится совершенно ненужная информация... :usch:

Демонстрация:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u0441%u0435%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bfile%3A///J%3A/Soft_distrib/Browsers/Firefox/FF_extensions/_ext_temp/Close_All_Tabs/close_all_tabs-1.1-fx/chrome/skin/closeall24.png%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.image%20%3D%20this.parentNode.getAttribute%28%22iconsize%22%29%20%3D%3D%20%22large%22%0A%09%3F%20%22file%3A///J%3A/Soft_distrib/Browsers/Firefox/FF_extensions/_ext_temp/Close_All_Tabs/close_all_tabs-1.1-fx/chrome/skin/closeall24.png%22%0A%09%3A%20%22file%3A///J%3A/Soft_distrib/Browsers/Firefox/FF_extensions/_ext_temp/Close_All_Tabs/close_all_tabs-1.1-fx/chrome/skin/closeall16.png%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20tabs%20%3D%20gBrowser.mTabContainer.childNodes%3B%0Afor%20%28var%20i%20%3D%20tabs.length%20-%201%3B%20i%20%3E%3D%200%3B%20i--%29%0A%09gBrowser.removeTab%28tabs%5Bi%5D%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

P.S. Самое простое, ИМХО, решение, при создании кнопки:

Выделить код

Код:

button.image = img;
button.setAttribute("cbb-image", img);

А при открытии редактора считывать button.getAttribute("cbb-image")
Впрочем, плодить лишних сущностей нехорошо...

Кнопка для закрытия вкладок:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFCSURBVHjarFE7TsNAEH27ygFwFAkJUcMBDKlD4c5pE8miIyegymGS1hJ1fIoEDkCPkFa2+PgCy8xmbCzvJgLBk55n/PZ5NH4LawFiRJzZCbUWsWiHGNtb55vJd9AAImKCSzxgj0QYyxmkxp0z4Mb5uY8UT8QJCaf0ekY8l8rv97ii55MbsMYjPqkzxFfii9RnzDVUu0EIw171QQtoWMyPDHnrVR8f9H0b6gW1+2CXxEQCjjrBx6IvXbCT73DxH7fDwaJzA0NZ/f3IL3o+RbR9Fw1WSv1cH7Cy225b4Xo8BhurqvJWUGpkQ37NAjeN0DWEEPIPjDEoNhukJHCFMc5Q13VwSMivWUynU6xXK1eNDCnL0mMzpO9XfGssNLhbLFzaRVF4W6Rp6lIN+W1o7TzPPS3LsuAvKjJb/BEHN/kNvgQYAML08vlxNjfkAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.onclick%20%3D%20function%28e%29%20%7B%0A%09var%20br%20%3D%20getBrowser%28%29%3B%0A%09var%20cTab%20%3D%20br.mCurrentTab%3B%0A%09switch%28e.button%29%20%7B%0A%09%09case%200%3A%0A%09%09%09var%20tabs%20%3D%20br.mTabContainer.childNodes%3B%0A%09%09%09var%20left%20%3D%20false%3B%0A%09%09%09for%28var%20i%20%3D%20tabs.length%20-%201%3B%20i%20%3E%3D%200%3B%20--i%29%20%7B%0A%09%09%09%09if%28left%29%0A%09%09%09%09%09br.removeTab%28tabs%5Bi%5D%29%3B%0A%09%09%09%09if%28tabs%5Bi%5D%20%3D%3D%20cTab%29%0A%09%09%09%09%09left%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09break%3B%0A%09%09case%201%3A%0A%09%09%09br.removeAllTabsBut%28br.mCurrentTab%29%3B%0A%09%09break%3B%0A%09%09case%202%3A%0A%09%09%09if%28e.shiftKey%20%7C%7C%20e.ctrlKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%29%0A%09%09%09%09break%3B%0A%09%09%09e.preventDefault%28%29%3B%0A%09%09%09var%20tabs%20%3D%20br.mTabContainer.childNodes%3B%0A%09%09%09for%28var%20i%20%3D%20tabs.length%20-%201%3B%20i%20%3E%3D%200%3B%20--i%29%20%7B%0A%09%09%09%09if%28tabs%5Bi%5D%20%3D%3D%20cTab%29%0A%09%09%09%09%09break%3B%0A%09%09%09%09br.removeTab%28tabs%5Bi%5D%29%3B%0A%09%09%09%7D%0A%09%7D%0A%7D%0A//%20Hide%20context%20menu%20in%20Linux%3A%0Athis.onmousedown%20%3D%20function%28e%29%20%7B%0A%09if%28e.button%20%3D%3D%202%20%26%26%20%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%29%20%7B%0A%09%09var%20cm%20%3D%20document.getElementById%28this.getAttribute%28%22context%22%29%29%3B%0A%09%09cm.collapsed%20%3D%20true%3B%0A%09%09var%20func%20%3D%20function%28%29%20%7B%0A%09%09%09cm.removeEventListener%28%22popupshowing%22%2C%20func%2C%20false%29%3B%0A%09%09%09setTimeout%28function%28%29%20%7B%20cm.hidePopup%28%29%3B%20cm.collapsed%20%3D%20false%3B%20%7D%2C%200%29%3B%0A%09%09%7D%3B%0A%09%09cm.addEventListener%28%22popupshowing%22%2C%20func%2C%20false%29%3B%0A%09%7D%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

ЛКМ: закрыть все вкладки слева от текущей
СКМ: закрыть другие вкладки
ПКМ: закрыть все вкладки справа от текущей

Контекстное меню доступно по (Ctrl, Shift, Alt или Meta)+ПКМ.


Танцы с бубном вокруг this.onmousedown – заради Linux'а, показывающего контекстное меню сразу после нажатия правой кнопки мыши (по идее, должно работать :D).

Заодно вопрос: нельзя ли не показывать контекстное меню с помощью менее извращенных методов?

[upd]
Забыл сконвертировать картинку в base64... – исправил.
В Linux'е работает :)

Нашел довольно странную фичу.

Что касается label, то изменения уже давно в cvs, а насчёт image не знаю, подумаю.

Заодно вопрос: нельзя ли не показывать контекстное меню с помощью менее извращенных методов?

Обычно очищается атрибут context, а обработчик onclick показывает контекстное меню, когда надо.

Пример:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EScroll%20page%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAIEAAKPdO4i/JsH5XAAAACH5BAEAAAMALAAAAAAQABAAAQItnD8RyBgAVnNAiDjNsxa3zXXSV13jBHpZepJippUqKrcHGM53+a41HNOtbIMCADs%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bfunction%20Scroller%20%28oDocument%29%0A%7B%0A%09this.%20oDocument%20%3D%20oDocument%3B%0A%09this.%20oDocument.%20defaultView.%20addEventListener%20%28%22keydown%22%2C%20this%2C%20false%29%3B%0A%7D%0AScroller.%20prototype%20%3D%0A%7B%0A%09oDocument%3A%20null%2C%0A%09oTimer%3A%20null%2C%0A%09%0A%09_nSpeed%3A%201%2C%0A%09_nDelay%3A%20150%2C%0A%09%0A%09get%20_window%20%28%29%0A%09%7B%0A%09%09return%20this.%20oDocument.%20defaultView%3B%0A%09%7D%2C%0A%09%0A%09revertScroll%3A%20function%20%28%29%0A%09%7B%0A%09%09if%20%28this.%20_nSpeed%20%3E%200%29%0A%09%09%09this.%20_nSpeed%20%3D%20-this.%20_nSpeed%3B%0A%09%7D%2C%0A%09%0A%09setSpeed%3A%20function%20%28nSpeed%29%0A%09%7B%0A%09%09this.%20_nSpeed%20%3D%20nSpeed%3B%0A%09%7D%2C%0A%09%0A%09setDelay%3A%20function%20%28nDelay%29%0A%09%7B%0A%09%09this.%20stopScroll%20%28%29%3B%0A%09%09this.%20_nDelay%20%3D%20nDelay%3B%0A%09%7D%2C%0A%09%0A%09scroll%3A%20function%20%28%29%0A%09%7B%0A%09%09var%20win%20%3D%20this.%20_window%3B%0A%09%09if%20%28%28%28this.%20_nSpeed%20%3C%200%29%20%26%26%20%28win.%20pageYOffset%20%3E%200%29%29%20%7C%7C%0A%09%09%09%28%28this.%20_nSpeed%20%3E%200%29%20%26%26%20%28win.%20pageYOffset%20%3C%20%28this.%20oDocument.%20height%20-%20win.%20innerHeight%29%29%29%29%0A%09%09%09this.%20_window.%20scrollBy%20%280%2C%20this.%20_nSpeed%29%3B%0A%09%09else%0A%09%09%09this.%20stopScroll%20%28%29%3B%0A%09%7D%2C%0A%09%0A%09stopScroll%3A%20function%20%28%29%0A%09%7B%0A%09%09if%20%28this.%20oTimer%29%0A%09%09%7B%0A%09%09%09this.%20oTimer.%20cancel%20%28%29%3B%0A%09%09%09this.%20oTimer%20%3D%20null%3B%0A%09%09%7D%0A%09%7D%2C%0A%09%0A%09startScroll%3A%20function%20%28%29%0A%09%7B%0A%09%09if%20%28this.%20oTimer%29%0A%09%09%09this.%20stopTimer%20%28%29%3B%0A%09%09this.%20oTimer%20%3D%20Components.%20classes%20%5B%22@mozilla.org/timer%3B1%22%5D.%0A%09%09%09%09%09%20%20%20createInstance%20%28Components.%20interfaces.%20nsITimer%29%3B%0A%09%09this.%20oTimer.%20initWithCallback%20%28this%2C%20this.%20_nDelay%2C%201%29%3B%09%09%09%0A%09%7D%2C%0A%09%0A%09QueryInterface%3A%20function%20%28iid%29%0A%09%7B%0A%09%09if%20%28iid.%20equals%20%28Components.%20interfaces.%20nsISupports%29%20%7C%7C%0A%09%09%09iid.%20equals%20%28Components.%20interfaces.%20nsITimerCallback%29%29%0A%09%09%09return%20this%3B%0A%09%09return%20Components.%20results.%20NS_ERROR_NO_INTERFACE%3B%0A%09%7D%2C%0A%09%0A%09notify%3A%20function%20%28oTimer%29%0A%09%7B%0A%09%09this.%20scroll%20%28%29%3B%0A%09%7D%2C%0A%09%0A%09handleEvent%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20stopScroll%20%28%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20doScroll%20%3D%20function%20%28oEvent%29%0A%7B%0A%09var%20scroller%20%3D%20this.%20getScroller%20%28%29%3B%0A%09if%20%28oEvent.%20button%20%3D%3D%201%29%0A%09%7B%0A%09%09scroller.%20stopScroll%20%28%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28oEvent.%20button%20%3D%3D%202%29%0A%09%09scroller.%20revertScroll%20%28%29%3B%0A%09scroller.%20startScroll%20%28%29%3B%0A%7D%3B%0A%0Athis.%20scrollPage%20%3D%20function%20%28evt%29%0A%7B%0A%09var%20scroller%20%3D%20this.%20getScroller%20%28%29%3B%0A%09scroller.%20setSpeed%20%281%29%3B%0A%09scroller.%20setDelay%20%28150%29%3B%0A%09if%20%28evt.%20button%20%3D%3D%202%20%26%26%20evt.%20shiftKey%29%0A%09%09this.%20showPopup%20%28this%29%3B%0A%09else%0A%09%09this.%20doScroll%20%28evt%29%3B%0A%7D%3B%0Athis.%20scrollPageFast%20%3D%20function%20%28evt%29%0A%7B%0A%09var%20scroller%20%3D%20this.%20getScroller%20%28%29%3B%0A%09scroller.%20setSpeed%20%2810%29%3B%0A%09scroller.%20setDelay%20%2850%29%3B%0A%09this.%20doScroll%20%28evt%29%3B%0A%7D%3B%0Athis.%20getScroller%20%3D%20function%20%28%29%0A%7B%0A%09var%20ct%20%3D%20getBrowser%20%28%29.%20selectedTab%3B%0A%09if%20%28%21ct.%20cbScrollButton%29%0A%09%09ct.%20cbScrollButton%20%3D%20new%20Scroller%20%28getBrowser%20%28%29.%20contentDocument%29%3B%0A%09return%20ct.%20cbScrollButton%3B%0A%7D%3B%0A%0Athis.%20showPopup%20%3D%20function%20%28node%29%0A%7B%0A%09var%20popup%20%3D%20document.%20getElementById%20%28%22custombuttons-contextpopup%22%29%3B%0A%09var%20x%20%3D%20node.%20boxObject.%20x%3B%0A%09var%20y%20%3D%20node.%20boxObject.%20y%20+%20node.%20boxObject.%20height%3B%0A%09document.%20popupNode%20%3D%20node%3B%0A%09popup.%20showPopup%20%28node%2C%20x%2C%20y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%0A%7D%0Athis.%20setAttribute%20%28%22onclick%22%2C%20%22this.scrollPage%28event%29%3B%22%29%3B%0Athis.%20setAttribute%20%28%22ondblclick%22%2C%22this.scrollPageFast%28event%29%22%29%3B%0Athis.%20setAttribute%20%28%22context%22%2C%20%22%22%29%3B%0Athis.%20tooltipText%20%3D%20%27Down/Menu/Up%20%7E%20Fast%20Down//Fast%20Up%27%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/**%0A%20*%20@author%20Anton%20Glazatov%20%28c%29%2003.2008%0A%20*%20Scroll%20page%20button%20based%20on%20existing%20button%20idea%0A%20*%20new%20implementation%0A%20*%0A%20*%20Left%20click%20-%20scroll%20slow%20down%0A%20*%20Middle%20click%20-%20stop%20scroll%0A%20*%20Right%20click%20-%20scroll%20slow%20up%0A%20*%20Left%20double%20click%20-%20scroll%20fast%20down%0A%20*%20Right%20double%20click%20-%20scroll%20fast%20up%0A%20*%20Shift%20+%20Right%20click%20-%20Custom%20Buttons%20context%20menu%0A%20*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5BLeft%20click%20-%20scroll%20slow%20down%0A%0AMiddle%20click%20-%20stop%20scroll%0A%0ARight%20click%20-%20scroll%20slow%20up%0A%0ALeft%20double%20click%20-%20scroll%20fast%20down%0A%0ARight%20double%20click%20-%20scroll%20fast%20up%0A%0AShift%20+%20Right%20click%20-%20Custom%20Buttons%20context%20menu%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Забыл сконвертировать картинку в base64... – исправил.

Себе ?

Обычно очищается атрибут context, а обработчик onclick показывает контекстное меню, когда надо.

Ага, ясно. А варианты с сохранением способа показа контекстного меню есть? (Т.е. сразу по нажатию / после отпускания кнопки.)

Себе ?

Ммм? Не понял...

Закрытие вкладок №2:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0417%u0430%u043A%u0440%u044B%u0442%u044C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFCSURBVHjarFE7TsNAEH27ygFwFAkJUcMBDKlD4c5pE8miIyegymGS1hJ1fIoEDkCPkFa2+PgCy8xmbCzvJgLBk55n/PZ5NH4LawFiRJzZCbUWsWiHGNtb55vJd9AAImKCSzxgj0QYyxmkxp0z4Mb5uY8UT8QJCaf0ekY8l8rv97ii55MbsMYjPqkzxFfii9RnzDVUu0EIw171QQtoWMyPDHnrVR8f9H0b6gW1+2CXxEQCjjrBx6IvXbCT73DxH7fDwaJzA0NZ/f3IL3o+RbR9Fw1WSv1cH7Cy225b4Xo8BhurqvJWUGpkQ37NAjeN0DWEEPIPjDEoNhukJHCFMc5Q13VwSMivWUynU6xXK1eNDCnL0mMzpO9XfGssNLhbLFzaRVF4W6Rp6lIN+W1o7TzPPS3LsuAvKjJb/BEHN/kNvgQYAML08vlxNjfkAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.setAttribute%28%22context%22%2C%20%22%22%29%3B%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09var%20br%20%3D%20getBrowser%28%29%3B%0A%09var%20cTab%20%3D%20br.mCurrentTab%3B%0A%09switch%28e.button%29%20%7B%0A%09%09case%200%3A%0A%09%09%09var%20tabs%20%3D%20br.mTabContainer.childNodes%3B%0A%09%09%09var%20left%20%3D%20false%3B%0A%09%09%09for%28var%20i%20%3D%20tabs.length%20-%201%3B%20i%20%3E%3D%200%3B%20--i%29%20%7B%0A%09%09%09%09if%28left%29%0A%09%09%09%09%09br.removeTab%28tabs%5Bi%5D%29%3B%0A%09%09%09%09if%28tabs%5Bi%5D%20%3D%3D%20cTab%29%0A%09%09%09%09%09left%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09break%3B%0A%09%09case%201%3A%0A%09%09%09br.removeAllTabsBut%28br.mCurrentTab%29%3B%0A%09%09break%3B%0A%09%09case%202%3A%0A%09%09%09if%28e.shiftKey%20%7C%7C%20e.ctrlKey%20%7C%7C%20e.altKey%20%7C%7C%20e.metaKey%29%0A%09%09%09%09this.showPopup%28e%29%3B%0A%09%09%09var%20tabs%20%3D%20br.mTabContainer.childNodes%3B%0A%09%09%09for%28var%20i%20%3D%20tabs.length%20-%201%3B%20i%20%3E%3D%200%3B%20--i%29%20%7B%0A%09%09%09%09if%28tabs%5Bi%5D%20%3D%3D%20cTab%29%0A%09%09%09%09%09break%3B%0A%09%09%09%09br.removeTab%28tabs%5Bi%5D%29%3B%0A%09%09%09%7D%0A%09%7D%0A%7D%3B%0Athis.showPopup%20%3D%20function%28e%29%20%7B%0A%09var%20popup%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29%3B%0A%09var%20x%20%3D%20e.clientX%2C%20y%20%3D%20e.clientY%3B%0A%09var%20node%20%3D%20e.target%3B%0A%09document.popupNode%20%3D%20node%3B%0A%09popup.showPopup%28node%2C%20x%2C%20y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

(вроде, через event.clientX (Y) больше похоже на обычное поведение :))

А варианты с сохранением способа показа контекстного меню есть? (Т.е. сразу по нажатию / после отпускания кнопки.)

Я проблемой мануального отображения контекстного меню в практике конструирования кнопок не занимался никогда. this.showPopup - это из кнопок LouCypher'а. То есть, готового кода нет у меня и не попадалось.

Ммм? Не понял...

Ну, там было что-то вроде file:///D:/....

Anton пишет:

Ну, там было что-то вроде file:///D:/....

Было, но текст, который ты процитировал («Забыл сконвертировать картинку в base64... – исправил.»), я добавил вместе с исправлением кода кнопки. Это меня и смутило.

То есть, готового кода нет у меня и не попадалось.

Ясно.
Однако у меня есть подозрение, что способ показа контекстного меню сохраняется где-то в about:config (впрочем, может, расширение какое делает), потому как если мой основной профиль (под Windows) использовать в Linux, контекстное меню будет показываться по нажал-отпустил. Будет время – поковыряюсь... [позже: видимо, это делает Mouse Gestures в включенными жестами вида ПКМ-ЛКМ.]

Написал скрипт для вставки URL (а также времени сохранения) в сохраняемую страницу.
Если текущая страница – about:blank, то открывается диалог «Открыть файл». Во всех остальных случаях – диалог сохранения. Если установлено ILO, будет включена политика «загружать только из кэша».

Выделить код

Код:

if(getBrowser().currentURI.spec == "about:blank")
    BrowserOpenFileWindow();
else {
    try { ILO.indicatorClick(3); } catch(e) {}
    var doc = content.document;
    var html = doc.getElementsByTagName("html");
    if(html.length) {
        html = html[0];
        var loc = doc.location.href;
        var info = " Saved from (" + new Date().toLocaleString() + "): " + loc + " ";
        var comm = doc.createComment(info);
        var fch = html.firstChild;
        html.insertBefore(doc.createTextNode("\n"), fch);
        html.insertBefore(comm, fch);
        html.insertBefore(doc.createTextNode("\n"), fch);
    }
    saveDocument(doc);
}

P.S. Ох уж эта жуткая тавтология с «сохранить» :D

Кнопка для Thunderbird, показывающая меню, аналогичное Настройки – Формат. Как и оригинальное меню, доступно только из HTML-редактора. По клику средней кнопкой мыши переключает на простой текст.
Код: http://pastebin.mozilla-russia.org/91283
Инициализация: http://pastebin.mozilla-russia.org/91284

Единственная кнопка, которой я регулярно пользуюсь как обычный пользователь

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EsetBackgroundColor%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Btry%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09doc.%20body.%20style.%20backgroundColor%20%3D%20%22rgb%28236%2C233%2C216%29%22%3B%0A%09doc.%20body.%20style.%20lineHeight%20%3D%20%222%22%3B%0A%09doc.%20body.%20style.%20textIndent%20%3D%20%223em%22%3B%0A%09doc.%20body.%20style.%20textHeight%20%3D%20%223%25%22%3B%0A%09doc.%20body.%20style.%20textAlign%20%3D%20%22justify%22%3B%0A%7D%0Acatch%20%28e%29%20%7B%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

[ul][uli]Делает цвет фона страницы таким же, как у панелей инструментов[/uli][uli]Выравнивает текст по ширине[/uli][uli]Увеличивает отступы первой строки в абзацах[/uli][uli]Увеличивает междустрочный интервал[/uli][/ul]

UPD 26.05.08 - поправил код кнопки, так как первоначальный не выравнивал текст по ширине

Anton, а не проше ли делать так: http://pastebin.mozilla-russia.org/91285?
Кстати, на тему удобочитаемости: http://forum.mozilla-russia.org/viewtop … 42#p230242 :)
Это я к тому, что можно сделать аналогичную штуку только при помощи закладок, да еще и с выключением.

P.S. Спасибо за апдейт :beer:

Infocatcher пишет:

Anton, а не проше ли делать так: http://pastebin.mozilla-russia.org/91285?

В данном конкретном и простом случае - конечно проще. Но с некоторых пор я не сторонник использования with, да и не ставил себе целью "заточку" кода этой кнопки. В исходном варианте там была всего одна строка - на background.

Конструкцию with лучше совсем не использовать - поверь моему опыту как разработчика Pastebin Panel.

Кстати, на тему удобочитаемости: http://forum.mozilla-russia.org/viewtop … 42#p230242 :)
Это я к тому, что можно сделать аналогичную штуку только при помощи закладок, да еще и с выключением.

Я не привык к использованию закладурок. Не помню уже точно по какой причине - скорее всего сложность отладки.

Anton

Конструкцию with лучше совсем не использовать - поверь моему опыту как разработчика Pastebin Panel.

А можно поподробнее? А то у меня никаких идей, кроме создания «лишней» области видимости, нет...

Я не привык к использованию закладурок. Не помню уже точно по какой причине - скорее всего сложность отладки.

Ну, с этим все просто. Редактируется скрипт в нормальном виде, потом удаляются комментарии, пробелы, переводы строк и все это запускается черех адресную строку.
В моем конкретном случае это AkelPad + плагин Scripts + простенький скрипт

Добавлено Sun May 11 02:35:58 2008 :
P.S. Кстати, Pastebin что-то плохо переваривает регулярные выражения (в их подсветке пока что побеждает Notepad++)...

Вот для примера: http://pastebin.mozilla-russia.org/91287
Спустя год, мне уже неочевидно какие поля и методы содержит PastebinRDFService. (да даже и полгода спустя, прошлым летом, было неочевидно).
Надо сверяться с idl. Если сделаю опечатку в названии метода, мне никто не скажет, что у PastebinRDFService нет такого метода, и надо будет выяснять, почему registry_file не определена. Если выявится ошибка где-нибудь на rdfService, надо будет выяснять что это такое - переменная, или поле PastebinRDFService. Ещё при именовании временных переменных в пределах with блока надо помнить о возможности коллизий с дополнительной областью видимости.

Anton

Вот для примера

И в таких случаях лучше обозвать pastebinRDFService каким-нибудь prs (var prs = pastebinRDFService;) и так дальше и обращаться? И, кстати, как определить, что «попало в переменную» – ссылка на исходный объект или значение? Т.е. не вредно ли делать штуки вида var d = document; ?

И в таких случаях лучше обозвать pastebinRDFService каким-нибудь prs

Хотя бы так. Можно и в развёрнутом виде. В конкретном случае с pastebin panel - ещё и переработать интерфейсы компонентов - не очень удачные.

не вредно ли делать штуки вида var d = document; ?

Иногда просто необходимо.

Кнопка для Thunderbird, сохраняет выделенные сообщения в указанный каталог на диске

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EsaveSelected%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20Cc%20%3D%20Components.%20classes%3B%0Avar%20Ci%20%3D%20Components.%20interfaces%3B%0Afunction%20getDirectory%20%28%29%0A%7B%0A%09var%20fp%20%3D%20Cc%20%5B%22@mozilla.org/filepicker%3B1%22%5D.%0A%09%09%20createInstance%20%28Ci.%20nsIFilePicker%29%3B%0A%09fp.%20init%20%28window%2C%20%22%22%2C%20fp.%20modeGetFolder%29%3B%0A%09var%20res%20%3D%20fp.%20show%20%28%29%3B%0A%09return%20fp.%20file%3B%0A%7D%0Afunction%20saveAsFile%20%28uri%2C%20dir%29%0A%7B%0A%09var%20content%20%3D%20%22%22%3B%0A%09var%20subject%20%3D%20messenger.%20messageServiceFromURI%20%28uri%29.%0A%09%09%20%20%20%20%20%20messageURIToMsgHdr%20%28uri%29.%20mime2DecodedSubject%3B%0A%09filename%20%3D%20GenerateValidFilename%20%28subject%2C%20%22.eml%22%29%3B%0A%09var%20msgService%20%3D%20messenger.%20messageServiceFromURI%20%28uri%29%3B%0A%09var%20msgStream%20%3D%20%20Cc%20%5B%22@mozilla.org/network/sync-stream-listener%3B1%22%5D.%20createInstance%20%28%29%3B%0A%09var%20consumer%20%3D%20msgStream.%20QueryInterface%20%28Ci.%20nsIInputStream%29%3B%0A%09var%20scriptInput%20%3D%20Cc%20%5B%22@mozilla.org/scriptableinputstream%3B1%22%5D.%0A%09%09%09%20%20createInstance%20%28%29%3B%0A%09var%20scriptInputStream%20%3D%20scriptInput.%20QueryInterface%28Ci.%20nsIScriptableInputStream%29%3B%0A%09scriptInputStream.%20init%20%28consumer%29%3B%0A%09try%0A%09%7B%0A%09%09msgService.%20streamMessage%20%28uri%2C%20msgStream%2C%20msgWindow%2C%20null%2C%20false%2C%20null%29%3B%0A%09%7D%0A%09catch%20%28ex%29%0A%09%7B%0A%09%09alert%28%22error%3A%20%22+ex%29%0A%09%7D%0A%09scriptInputStream.%20available%20%28%29%3B%0A%09while%20%28scriptInputStream.%20available%20%28%29%29%0A%09%7B%0A%09%09content%20%3D%20content%20+%20scriptInputStream.%20read%20%28512%29%3B%0A%09%7D%0A%09var%20subject%20%3D%20msgService.%20messageURIToMsgHdr%20%28uri%29.%0A%09%09%20%20%20%20%20%20mime2DecodedSubject%3B%0A%09var%20fileName%20%3D%20GenerateValidFilename%20%28subject%2C%20%22.eml%22%29%3B%0A%09var%20file%20%3D%20dir.%20clone%20%28%29%3B%0A%09file.%20append%20%28fileName%29%3B%0A%09var%20foStream%20%3D%20Cc%20%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.%0A%09%09%20%20%20%20%20%20%20createInstance%20%28Ci.%20nsIFileOutputStream%29%3B%0A%09var%20flags%20%3D%200x02%20%7C%200x08%20%7C%200x20%3B%0A%09foStream.%20init%20%28file%2C%20flags%2C%200664%2C%200%29%3B%0A%09foStream.%20write%20%28content%2C%20content.%20length%29%3B%0A%09foStream.%20close%20%28%29%3B%0A%7D%0Avar%20dir%20%3D%20getDirectory%20%28%29%3B%0Aif%20%28%21dir%29%0A%09return%3B%0Avar%20messageArray%20%3D%20GetSelectedMessages%28%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20messageArray.%20length%3B%20i++%29%0A%09saveAsFile%20%28messageArray%20%5Bi%5D%2C%20dir%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Anton
Помнится, был способ с помощью кнопки, но держать лишний элемент интерфейса, по-моему, неудобно... В общем, как мне кажется, стоит добавить в Thunderbird пункт меню для добавления кнопки из кода вида custombutton://...

P.S. Ты в аське, указанной в профиле, бываешь?

Помнится, был способ с помощью кнопки,...

Чёрт его знает, за всеми кнопками не уследишь - мне не попадалась, это я точно знаю, иначе бы не стал писать, взял бы готовую.

P.S. Ты в аське, указанной в профиле, бываешь?

Я последние год-полтора im практически не пользуюсь. Если надо - давай договоримся о времени.

иначе бы не стал писать, взял бы готовую.

Я это к тому, что удобно было бы добавить функционал простого добавления кнопок в виде «URL'а» в расширение.

Если надо - давай договоримся о времени.

Ну вот, теперь мне мои вопросы кажутся не сильно важными. :D В ближайшие пару часов я в сети, хотя можно воспользоваться и иными средствами.

добавить функционал простого добавления кнопок в виде «URL'а» в расширение

Ага, понял. А "Клонировать" -> "Обновить" ? Для пункта меню надо будет делать дополнительный контроллер, проверяющий содержимое буфера обмена. Не то, чтобы лень - сомнения в целесообразности.

Друзья!Следующая ситуация.Есть кнопка из гугля,для перевода,на яве

Выделить код

Код:

javascript:var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/translate_t?text='+t+'&hl=ru&langpair=auto|en&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+escape(location.href)+'&hl=ru&langpair=auto|en&tbb=1&ie='+e;};

Но она скорее не кнопка,а ссылка.Сидит в закладках.Может кто сообразит,как из нее сделать нормальную кнопку,для панели инструментов.У меня мозгов не хватает.

Добавлено Tue May 20 16:52:56 2008 :

Выделить код

Код:

javascript:var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/translate_t?text='+t+'&hl=ru&langpair=auto|en&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+escape(location.href)+'&hl=ru&langpair=auto|en&tbb=1&ie='+e;};

Добавлено Tue May 20 16:53:37 2008 :
Блин смайлика тута нетю :cry: хад такой.

Проще всего записать

Выделить код

Код:

getBrowser (). contentDocument. location. href = "

потом текст закладурки и, наконец поставить закрывающую кавычку.

сделал так но не пашет.Что еще добавить треба?Или вообще не так сделал?

getBrowser (). contentDocument. location. href = "javascript:var t=((window.getSelection&&window.getSelection())||(document.getSelection&&document.getSelection())||(document.selection&&document.selection.createRange&&document.selection.createRange().text));var e=(document.charset||document.characterSet);if(t!=''){location.href='http://translate.google.com/translate_t?text='+t+'&hl=ru&langpair=auto|ru&tbb=1&ie='+e;}else{location.href='http://translate.google.com/translate?u='+escape(location.href)+'&hl=ru&langpair=auto|ru&tbb=1&ie='+e;};
Нет,не получаеться у меня,правильно показать вам

В конце должна быть кавычка. То есть, пишем текст

Выделить код

Код:

getBrowser (). contentDocument. location. href = ""

а между кавычками вставляем текст закладурки

Anton

:beer: Супер!Респектуха вам гуру.
Может еще подскажете,как делать в посте,окошко с кодами.Хочу поделиться кнопарями с народом.Зачем лишнии расширения ставить,когда можно кнопками поделиться и заюзать их.
А то мну не умеет :blush: Усе,не надо.Спасибки вам,за правку поста.Просмотрел и сам понял как.:rock::beer:

как делать в посте,окошко с кодами

[code]code[/code]

А чем кнопка лучше закладок ?

Anton

Ну мне так удобнее.Легче в профили переносить.Да  и люблю я,что бы у меня постоянно все было.Короче спасибо вам большое.Если что,надеюсь мона обратиться за помощью?:angel:

А чем кнопка лучше закладок ?

Тем, что можно сделать открытие в новой вкладке :)

Перевести через Google:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EGoogle%20Translate%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20t%20%3D%20content.getSelection%28%29.toString%28%29%3B%0Avar%20c%20%3D%20content.document.characterSet%3B%0Avar%20loc%20%3D%20content.location.href%3B%0AgetBrowser%28%29.loadOneTab%28%0A%09t%0A%09%09%3F%20%22http%3A//translate.google.com/translate_t%3Ftext%3D%22%20+%20t%20+%20%22%26hl%3Dru%26langpair%3Den%7Cru%26tbb%3D1%26ie%3D%22%20+%20c%0A%09%09%3A%20/%5Ehttps%3F%3A%5C/%5C//i.test%28loc%29%0A%09%09%09%3F%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%20escape%28loc%29%20+%20%22%26hl%3Dru%26langpair%3Den%7Cru%26tbb%3D1%26ie%3D%22%20+%20c%0A%09%09%09%3A%20%22http%3A//translate.google.com/translate_t%3Fhl%3Dru%22%2C%0A%09null%2C%20null%2C%20null%2C%20false%20/*%20load%20in%20background%20*/%2C%20false%0A%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

(http://pastebin.mozilla-russia.org/91351)

Infocatcher

К сожалению,ваша кнопка не работает.Сдесь я выложил рабочие
http://forum.mozilla-russia.org/viewtop … 49&p=7

Добавлено Wed May 21 10:20:38 2008 :

Anton

Уважаемый гуру.Так как,я не силен в кодах и сам могу,с бооооооольшим трудом,собрать ченить простое,нельзя ли сделать,своего рода,собрание разных,готовых кнопок?Типа текстового файлика.

Infocatcher

Тем, что можно сделать открытие в новой вкладк

Это понятно, что функционал может быть шире. Я закладурками не пользуюсь, но, их ведь легче сделать, если они уже есть готовые.

vv07

Если что,надеюсь мона обратиться за помощью?

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

К сожалению,ваша кнопка не работает.

Может быть, кнопка была установлена неправильно ? Код Infocatcher'а надо поместить в адресную строку браузера и нажать enter. Потом "вытащить" установленную кнопку из диалога настройки панелей инструментов.
Или, скопировав код в буфер обмена, клонировать и обновить уже существующую кнопку (в контекстном меню кнопок есть соответствующие пункты).

Уважаемый гуру.

Мне это не нравится. Так что будьте любезны, без лишних церемоний.

...нельзя ли сделать,своего рода,собрание разных,готовых кнопок?Типа текстового файлика.

Не понял, о чём речь. Если нужны готовые кнопки, то можно найти в этой теме, на офф. сайте расширения - http://xsms.nm.ru/custombuttons, у Dark-Demon'а на сайте - http://dark-demon.nm.ru, на сайте поддержки (адрес - у меня в профиле), на старом форуме расширения - http://custombuttons.phpbbnow.com, на форуме расширения custombuttons2 - http://custombuttons2.com. Кое-какие кнопки с последних двух сайтов могут не работать.

Anton

надо поместить в адресную строку браузера и нажать enter

Кстати, нашел багу. При таком добавлении кнопки теряются переводы строк в коде. Наблюдаю на fx 2.0.0.14 + cb 0.0.3 при добавлении моей кнопки для перевода через Гугл.

При таком добавлении кнопки теряются переводы строк в коде.

И не только при таком. Давно видел. На основном профиле. В соседнем - не теряются.
В чём дело, однако - не знаю. Так что пока wontfix.

p.s.
Infocatcher
NoScript ? noscript.fixURI <- false (не выяснил ещё, какой настройке в диалоге NoScript это соответствует)

Anton

NoScript ? noscript.fixURI <- false (не выяснил ещё, какой настройке в диалоге NoScript это соответствует)

Да, он самый.
Интересно, почему он еще не удален с тестового профиля? :-/

(не выяснил ещё, какой настройке в диалоге NoScript это соответствует)

И соответствует ли вообще...

Либо noscript.fixURI.exclude <- ^custombutton://[\s\S]*$

И соответствует ли вообще...

Похоже на то.

Попробую отписать разработчику NoScript.

Попробую отписать разработчику NoScript.

=)
А зачем
[\s\S]*$
?
Это же «любые символы в конце строки»...

^custombutton://\S+$ (там действительно не бывает пробелов?)
или
^custombutton://

А зачем
[\s\S]*$
?

Привычка.

Привычка.

Поподробнее бы... Меня несколько иного рода причины интересуют.
И почему тогда не
.*$
?

Чтобы не думать что из себя представляет строка поиска.

Anton

Уважаемый Антон.Я думаю вы знаете о таком расширении,как Fast Dial.
Так вот,у него есть возможность добавления ссылок, из контекстного меню.Это не совсем удобно.Нельзя ли кнопочку придумать?:angel:

Уважаемый Антон.

Короче, без эпитетов.

По теме:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EAddToFastDial%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bdocument.%20getElementById%20%28%22fastdial-add-menu%22%29.%20doCommand%20%28%29%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Думаю, спросить у самого разработчика Fast Dial было бы короче, да и код он бы дал более корректный.

Короче, без эпитетов.

Блин,да не умею обращаться к незнакомым людям просто.
Мне 45 лет и воспитание малость другое.Терпите уж.Спасибо за кнопку:beer:.К автору как то недобняк было, с этим.Мы и так достали его уже.

vv07

Блин,да не умею обращаться к незнакомым людям просто.

Ничего страшного. Я не требую и мне так комфортней. Да и 45 мне ещё не скоро, так что, если ситуация верна, то мне даже и не положено.

За ум положено:cool: Чего мне не хватает:tongue2:

Infocatcher пишет:

...
или
^custombutton://

Оказывается, это список протоколов, разделённый чем угодно, кроме латинских букв, цифр и знака подчёркивания. Так что можно просто custombutton.

Anton

Есть замечательное расширение profileswitcher,позволяющее работать с профилями.Переключение через контекстное меню.Вопрос,можно ли создать кнопку с выпадающим меню выбора профилей?А еще более сложное дело,создание кнопки позволяющей запускать разные профили без перезагрузки лисы:angel:
Второй вопрос архиважный,по крайней мере для меня.Есть кнопка для скрытия статусной строки,но она работает только до перезагрузки лисы.Есть ли возможность,сварганить кнопарь,который бы скрывал строку до ручного включения,независимо от того,перегрузилась лиса или нет.Автохайды не интересуют,так как не очень хорошо работают.Буду признателен.:dumb:

vv07

можно ли создать кнопку с выпадающим меню выбора профилей?

Примерно так: http://pastebin.mozilla-russia.org/91358 (код добавлять в секцию «инициализация»).

var _href = null; – открывать текущую ссылку
var _href = "about:blank"; – открывать указанную ссылку
var _paths = ["путь_к_exe-файлу-0", "путь_к_exe-файлу-1"]; – пути к файлам
var _args = [["arg-0-0", "arg-0-1", "arg-0-2"], ["arg-1-0", "arg-1-1", "arg-1-2"]]; – аргументы

Если аргументы не нужны, надо указать «[]»:

Выделить код

Код:

var _href = null;
var _paths = ["c:\\Program Files\\Opera\\Opera.exe", "c:\\Program Files\\Opera 9.5 beta\\opera.exe"];
var _args = [[], []];
var _labels = ["Opera", "Opera 9.50 b2"];

["-no-remote", "-p", "MyProfile"] запустит штуку вида
путь_к_exe -no-remote -p MyProfile
-no-remote – для запуска нескольких профилей одновременно.
-p – запуск менеджера профилей
-p "ИмяПрофиля" – запуск конкретного профиля

var _labels = ["2.0 MyProfile", "3.0 RC 1 fx3"]; – названия пунктов меню

Только ссылки с кириллицей заглючат...

Infocatcher

Так откуда мне код взять?По ссылке или сдесь.Не совсем понятно.Однако спасибо за оперативность.

Так откуда мне код взять?По ссылке или сдесь.

Код брать по ссылке. А «здесь» – пояснения по его использованию.

Добавлено Fri May 23 07:58:48 2008 :
P.S. Забыл уточнить, что код по ссылке надо добавлять в секцию «инициализация» – предыдущее сообщение подкорректировал.

Кнопка заработала,но как то не так.В выпадающем показывает My profile и не существущую тройку.При клике на My profile,открываеться менеджер профилей.Не совсем то,что я имел в виду,но тоже пойдет :beer: Я то имел в виду,что бы в выпадающем отображались существующие,мои профили.Default и  Default User centurion.

Вопрос,можно ли создать кнопку с выпадающим меню выбора профилей?

Можно. Вот, для работы в паре с profileswitcher:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EprofilesMenu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20_this%20%3D%20this%3B%0Athis.%20cbInit%20%3D%20function%20%28%29%0A%7B%0A%09var%20profileLauncherPrefs%20%3D%20Components.%20classes%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%0A%09%09%09%09%09%09%09%20%20%20getService%20%28Components.%20interfaces.%20nsIPrefBranch%29%3B%0A%09var%20popup%20%3D%20document.%20createElement%20%28%22menupopup%22%29%3B%0A%09if%20%28profileLauncherPrefs.%20getPrefType%20%28%22profiles.list%22%29%20%21%3D%200%29%0A%09%7B%0A%09%09var%20profilesListPref%20%3D%20profileLauncherPrefs.%0A%09%09%09%09%09%09%09%20%20%20getComplexValue%20%28%22profiles.list%22%2C%20Components.%20interfaces.%20nsISupportsString%29.%0A%09%09%09%09%09%09%09%20%20%20data%3B%0A%09%09var%20profilesList%20%3D%20profilesListPref.%20split%20%28%22%2C%2C%2C%22%29%3B%0A%09%09for%20%28i%20%3D%200%3B%20i%20%3C%20profilesList.%20length%3B%20i++%29%0A%09%09%7B%0A%09%09%09var%20item%20%3D%20document.%20createElement%20%28%22menuitem%22%29%3B%0A%09%09%09item.%20setAttribute%20%28%22label%22%2C%20profilesList%20%5Bi%5D%29%3B%0A%09%09%09item.%20setAttribute%20%28%22oncommand%22%2C%20%22profileLauncher.runScript%28this%29%22%29%3B%0A%09%09%09popup.%20appendChild%28item%29%3B%0A%09%09%7D%0A%09%7D%0A%09_this.%20appendChild%20%28popup%29%3B%0A%09_this.%20type%20%3D%20%22menu%22%3B%0A%09_this.%20orient%20%3D%20%22horizontal%22%3B%0A%7D%3B%0AsetTimeout%20%28this.%20cbInit%2C%202000%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

создание кнопки позволяющей запускать разные профили без перезагрузки лисы

Это мне не по силам.

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

Так:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Estatusbar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20sb%20%3D%20document.%20getElementById%20%28%22status-bar%22%29%3B%0Asb.%20hidden%20%3D%20true%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20sb%20%3D%20document.%20getElementById%20%28%22status-bar%22%29%3B%0Asb.%20hidden%20%3D%20%21sb.%20hidden%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

?

Ух ти,круть.:rock:

vv07

Я то имел в виду,что бы в выпадающем отображались существующие,мои профили.Default и  Default User centurion.

Угу. Так оно, конечно, удобнее, но поиск и парсинг profiles.ini несколько труднее, чем запуск предопределенных пользователем приложений.
Так что в моем скрипте надо самостоятельно прописать пути к исполняемым файлам и параметры, с которыми их надо запускать.
Т.е. начало (от «var _href =» до «var _labels = ... ;») надо настраивать самостоятельно. Должно получиться нечто подобное:

Выделить код

Код:

var _href = null; // URL or null for use current page
var _paths = ["c:\\Program Files\\Mozilla Firefox\\firefox.exe", "c:\\Program Files\\Mozilla Firefox\\firefox.exe"];
var _args = [["-no-remote", "-p", "Default"], ["-no-remote", "-p", "Default User centurion"]];
var _labels = ["Default", "Default User centurion"];

Добавлено Fri May 23 20:21:04 2008 :
P.S. Антон, а для чего

Выделить код

Код:

setTimeout (this. cbInit, 2000);

?
(Разве не достаточно нулевого таймаута или вообще какого-нибудь load-обработчика?)

Разве не достаточно нулевого таймаута или вообще какого-нибудь load-обработчика?

Я попробовал без тайм-аута - не работает, пока не будет открыто меню profileswitcher, ну и поставил с запасом - а вдруг с нулевым тайм-аутом не сработает - чтобы не проверять лишний раз. load-обработчик снимать надо, и вообще нетривиально.

Infocatcher

Вы сделали даже больше чем я ожидал.Ваша кнопка переключает профили,без перезагрузки и практически незаметно:rock:

Добавлено Sat May 24 02:03:30 2008 :
Блин мужики,я незнаю что и как,не разбираюсь в этом,но вы на верном пути :D
Вот такой вариант я собрал по вашим кодам

Выделить код

Код:

var _href = null; // URL or null for use current page
var _paths = ["c:\\Program Files\\Mozilla Firefox\\firefox.exe", "c:\\Program Files\\Mozilla Firefox\\firefox.exe"];
var _args = [["-no-remote", "-p", "Default"], ["-no-remote", "-p", "Default User centurion"]];
var _labels = ["Default", "Default User centurion"];

this.runProcess = function(path, args) {
    args.push(_href ? _href : content.location.href);
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(path);
    if(!file.exists() || !file.isExecutable() || /\.lnk$/i.test(path)) {
        alert("Invalid path!\n" + path);
        return;
    }
    var process = Components.classes["@mozilla.org/process/util;1"]
        .getService(Components.interfaces.nsIProcess);
    process.init(file);
    process.run(false, args, args.length);
};
var mp = document.createElement("menupopup");
var template = document.createElement("menuitem");
template.className = "menuitem-iconic";
template.setAttribute("oncommand", "_this.runProcess(this.path, this.args);");
var mi;
for(var i = 0, len = _paths.length; i < len; i++) {
    mi = template.cloneNode(true);
    mi.path = _paths[i];
    mi.args = _args[i];
    mi.label = _labels[i];
    mi.tooltipText = _paths[i] + " " + _args[i].join(" ");
    mi.setAttribute("image", "moz-icon:file://" + _paths[i]);
    mi._this = this;
    mp.appendChild(mi);
}
this.appendChild(mp);
this.type = "menu";
this.orient = "horizontal";

Два моих профиля.Так вот,при переключении запускаеться профиль,но и второй остаеться в работе :lol::lol::lol: То есть оба профиля одновременно.Давайте парни,кумекайте,возможно это рабочий вариант.
Правда иногда появляеться нюанс"FF уже запущен,закройте сперва окно"но при этом все таки запускаеться.:dumb::beer:
Пардон,забыл уточнить.При этом папка второго профиля находиться,на другом диске,воть.Уф як тяжело енто все для мну.

То есть оба профиля одновременно.

Это эффект от запуска firefox.exe с аргументом -no-remote.
Но при этом открытие локальных html'ек происходит в профиле, запущенном без -no-remote. Если такого в данный момент нет, он будет запущен.

создание кнопки позволяющей запускать разные профили без перезагрузки лисы

Я так понимаю, что profileswitcher (это только предположение – код расширения не смотрел) таким образом обходит описанную выше трудность с -no-remote.

Друзья!Есть кнопка для скрытия панели закладок,но она работает только до перезапуска лисы.Не могли бы вы поправить код,как сделали мне для статусстроки.Что бы она отключала панель закладок,до ручного включения,по аналогу статус.
Вот код

Выделить код

Код:

var mb = document.getElementById("PersonalToolbar"); mb.collapsed = !mb.collapsed;

Надоел уже наверное со своими просьбами:angel:

vv07

Что бы она отключала панель закладок,до ручного включения,по аналогу статус.

Хотел объяснить как внести соответствующие исправления в кнопку для скрытия строки состояния, но обнаружил в ней экспериментальные ляпы. Так что код для той кнопки я исправил (см. выше).

Для скрытия панели закладок:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Epersonalbar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20cbInit%20%3D%20function%20%28%29%0A%7B%0A%09var%20mb%20%3D%20document.%20getElementById%20%28%22PersonalToolbar%22%29%3B%0A%09mb.%20collapsed%20%3D%20true%3B%0A%7D%3B%0AsetTimeout%20%28this.%20cbInit%2C%201000%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20mb%20%3D%20document.%20getElementById%20%28%22PersonalToolbar%22%29%3B%0Amb.%20collapsed%20%3D%20%21mb.%20collapsed%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Хотел объяснить как внести соответствующие исправления в кнопку для скрытия строки состояния, но обнаружил в ней экспериментальные ляпы. Так что код для той кнопки я исправил (см. выше).

Да незнаю.Она у меня прекрасно работает

а в чем ошибка?

Лишний код.

Еще один вопрос.Я создал новую панель.Обозвал ее work.Возможно ли создание кнопки,для скрытия таких панелей.Второе,надыбал интересный стиль,который автоскрывает панель навигации.По аналогу возможно ли создание кнопки,при запуске которой,автоскрывались все панели или хотя бы на каждую панель,отдельный кнопарь.

Для work:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EhideWork%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20tb%20%3D%20document.%20getElementById%20%28%22__customToolbar_work%22%29%3B%0Atb.%20collapsed%20%3D%20%21tb.%20collapsed%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

создание кнопки,при запуске которой,автоскрывались все панели

F11 ?
Для всех панелей (по умолчанию назначена клавиша F12)

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EhideToolbars%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bif%20%28typeof%20%28this.%20cbCollapse%29%20%3D%3D%20%22undefined%22%29%0A%09this.%20cbCollapse%20%3D%20true%3B%0Aelse%0A%09this.%20cbCollapse%20%3D%20%21this.%20cbCollapse%3B%0Avar%20tbs%20%3D%20document.%20getElementsByTagName%20%28%22toolbar%22%29%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20tbs.%20length%3B%20i++%29%0A%7B%0A%09if%20%28%21this.%20cbCollapse%29%0A%09%7B%0A%09%09tbs%20%5Bi%5D.%20collapsed%20%3D%20tbs%20%5Bi%5D.%20cbHideToolbars%3B%0A%09%7D%0A%09else%0A%09%7B%0A%09%09tbs%20%5Bi%5D.%20cbHideToolbars%20%3D%20tbs%20%5Bi%5D.%20collapsed%3B%0A%09%09tbs%20%5Bi%5D.%20collapsed%20%3D%20true%3B%0A%09%7D%0A%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5BF12%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Нет Антон.F11 полноэкранный режим,не то.Мне нужно скрытие панелей,но при этом сама лиса оставалась в режиме обычного окна.

Добавлено Mon May 26 10:07:00 2008 :

Для всех панелей (по умолчанию назначена клавиша F12)

По идее то что и нужно.Только вот F12 зря назначена.При ее нажатиивозникают следующие проблемы.Не могу писать в форуме,не работает копирование,остальное пока незнаю.Надо придумать другой вариант.

Только вот F12 зря назначена.

Так можно назначить любую другую. "Редактировать" -> "Настройки кнопки"

.Не могу писать в форуме,не работает копирование

Ну вот, я себе эту кнопку поставил, нажал F12, залогинился, пишу ответ, всё в порядке, копирование работает.

Спасибо

спасибо за програмульку.
Нашел баг в Вашей кнопке.

кнопка:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EsetBackgroundColor%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Btry%20%7B%20%20var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%20%20doc.%20body.%20style.%20backgroundColor%20%3D%20%22rgb%28236%2C233%2C216%29%22%3B%20%20doc.%20body.%20style.%20lineHeight%20%3D%20%222%22%3B%20%20doc.%20body.%20style.%20textIndent%20%3D%20%223em%22%3B%20%20doc.%20body.%20style.%20textHeight%20%3D%20%223%25%22%3B%20%7D%20catch%20%28e%29%20%7B%7D%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

попробуйте здесь нажать её
http://forum.mozilla-russia.org/viewtopic.php?id=9591&p=22
и посмотрите, что будет ссылками на следующие страницы. Она их обрежет. Т.е. были доступны 23, 24, и тд.. После нажатия, исчезнут. Лишь 22(та, на которой кнопку нажали) будет доступна.


мои данные:
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9) Gecko/2008051206 Firefox/3.0 ID:2008051206

Adblock Plus 0.7.5.4
AI Roboform Toolbar for Firefox 6.9.89
Auto Copy 0.6.4
BBCode 0.5.2.2
BlockSite 0.7
Custom Buttons 0.0.3
Fast Dial 1.89
Greasemonkey 0.7.20080121.0
ImgLikeOpera 0.6.15
Nightly Tester Tools 2.0.2
NoScript 1.6.5
Tab Mix Plus 0.3.6.1.080416
User Agent Switcher 0.6.11

Нашел баг в Вашей кнопке.

Если это вообще можно назвать багом, то это баг форума, а не кнопки. )

Если это вообще можно назвать багом, то это баг форума, а не кнопки. )

Я просто не силен в программировании. Поэтому написал, что в кнопке. Так как после её нажатия такое происходит. Потом если нажать "Обновить(F5)", то всё на свои места становится =).

Так как после её нажатия такое происходит.

Это происходит ещё до её нажатия.

Впрочем, неважно. Всё равно, кнопка не предназначена для использования на всех подряд сайтах и работает как заявлено не везде.

И, кстати, раз уж выдался случай, тот код я дополнил, так как исходный не выравнивал текст по ширине, хотя в сопутствующем списке это задекларировано.

Пытаюсь клонировать вкладку в Firefox 3.0 RC1:
http://pastebin.mozilla-russia.org/91378

В 2.0 все просто:

Выделить код

Код:

setTimeout(
    function() {
        br.selectedTab = tab;
        win.scrollTo(cx, cy);
    },
    0
);

– без setInterval
А в 3.0 – ни в какую...
Я ничего не упускаю? А то уж больно код какой-то некультурный :D

P.S. Как клонировать историю вкладки?

Добавлено Tue May 27 01:50:56 2008 :
P.P.S. Увидел себя в contributor'ах. Был приятно удивлен =)

Я ничего не упускаю?

Не знаю, идея только одна - ставить onload и мотать когда он случится, если вкладка открывается не в фоне, если в фоне - ждать пока пользователь переключится в эту вкладку, потом перематывать.

Как клонировать историю вкладки?

Примерно так: http://pastebin.mozilla-russia.org/91380

Не знаю, идея только одна - ставить onload и мотать когда он случится, если вкладка открывается не в фоне, если в фоне - ждать пока пользователь переключится в эту вкладку, потом перематывать.

Гм, странно... не получается. На что load-обработчик вешать-то?

Придумал еще один способ:

Выделить код

Код:

var int = setInterval(
    function() {
        if(win.scrollMaxY >= cy) { // cx и cy – положение прокрутки исходной вкладки
            win.scrollTo(cx, cy);
            clearInterval(int);
        }
    },
    20
);

Но на ссылках вида http://example.com/page.html#someanchor получаем фокусировку на someanchor.
Впрочем, это все равно бесполезно при наличии на странице крупноразмерных картинок.

Расковырял FireGestures.
Клонирование вкладки для fx >= 3.0:

Выделить код

Код:

var orgTab = gBrowser.mCurrentTab;
var newTab = gBrowser.duplicateTab(orgTab);
gBrowser.moveTabTo(newTab, ++orgTab._tPos);
gBrowser.selectedTab = newTab; // переключаемся на вкладку (в оригинале не было)

Сам метод: http://pastebin.mozilla-russia.org/91384
Увы, в fx 2.0 мы вываливаемся в catch.

P.S. А что делает QueryInterface?

P.P.S. Правда, еще можно расковырять Tab Mix Plus или Tab Clicking Options и посмотреть, как сделано там (первое не смотрел, а в последнем много кода, ссылающегося на другие функции расширения, – решил, что проще и интереснее поиграться самому :D).

На что load-обработчик вешать-то?

На browser. По идее, нужны три обработчика. Первый ждёт окончания загрузки документа, и если по загрузке вкладка активная, делает перемотку, а если она в фоне, ставит второй обработчик, который делает перемотку при переключении на вкладку. Третий обработчик снимает все обработчики при закрытии вкладки.

А что делает QueryInterface?

Открывает интерфейс, если объект его реализует.

раз уж выдался случай, тот код я дополнил,

а киньте ссылку на него(на кнопку)

MILLennium
http://forum.mozilla-russia.org/viewtop … 28#p233728

Можно код от кнопки Downloads ?

macuache
А что это за кнопка ?

Это кнопка, которая открывает окно текущих закачек.

Она есть в стандартном наборе. но из-за того, что Firefox может показывать только или крупные, или маленькие значки, то мне нужна отдельно данная кнопка, чтобы я мог вынести ее на отдельную панель.

macuache

Она есть в стандартном наборе.

В стандартном наборе чего?

в стандартном наборе иконок Fierfox.

Точно есть! В тройке посмотрел. А в двойке она у меня на боковой панели стоит — подумал что нету.

macuache

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EDownloads%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH2AUeCw4tnZYFJAAAAAlwSFlzAAALEgAACxIB0t1+/AAAAd5JREFUeNpj3LZlx38GMoGntzsjC4jh4eX27f9/4s358+cvw97d+7hAbLABIM07t+/mItYAdw8XOJsFWcLMWe/btbfnGLSEjRiQaVtpb7ia7Vt3oliEYsCNd+cZbr67xMDEyIhCIxuADlAM+HSemUuawYjh0yMGBmR6+6OdBAz4/5/LztHuGycHO16///37lwEa2FyoBgABMxMT2CCPBenfcBmwK3kOmP4HNAhuwM7z94GhysDAxsoCNnXv09MMkyPaGQTZ2Bne//rKwMHMynDm3V2GmdtnA6PvD1gTKGxA+jy9oS4ILe5A2CrEwPAdCP/8+MHw/e9Phhuf3jIcfnMZLBVe0glT9U1WRBhsISMQWyA7k6lRb+/U0BYGZlZmhhUP9jNcfn+LgfHvf4Y3tx4y/Ku/5IysFhgeJ1hABEyAsUH3a1NgOQMfOxfDtc8PGZ5+vMFgzsXDIMz8k8HERYIh9///vf/rL3GjWIgSSj95p/Wsms1w/+tLhnOvzzDocnAymPL+YDDh+8pQv/U9A8MPnmnoAcuIngcYE/SyGH587M5OiwYG5C0Gvt9vGcpmvwaGMlPp/wWXCBsAFqy06mZ+/CULHv+yPNP+tx8rxRa1jLhyISMjIzxwkcMJHQAA3rPFyJ2JzWoAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20setAttribute%20%28%22ondragdrop%22%2C%20%22nsDragAndDrop.drop%28event%2C%20DownloadsButtonDNDObserver%29%3B%20event.stopPropagation%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22ondragover%22%2C%20%22nsDragAndDrop.dragOver%28event%2C%20DownloadsButtonDNDObserver%29%3B%20event.stopPropagation%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22ondragenter%22%2C%20%22nsDragAndDrop.dragEnter%28event%2C%20DownloadsButtonDNDObserver%29%3B%20event.stopPropagation%28%29%22%29%3B%0Athis.%20setAttribute%20%28%22ondragexit%22%2C%20%22nsDragAndDrop.dragExit%28event%2C%20DownloadsButtonDNDObserver%29%3B%20event.stopPropagation%28%29%22%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BtoOpenWindowByType%28%27Download%3AManager%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27chrome%3A//mozapps/content/downloads/downloads.xul%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27chrome%2Cdialog%3Dno%2Cresizable%27%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

она ?

Да. это она. Спасибо. Один только момент. У меня стоит расширение Download Manager Tweak, которое позволяет открывать во вкладке окно загрузок.
https://addons.mozilla.org/en-US/firefox/addon/256

Сейчас, когда я жду на эту кнопку, у меня открывается отдельное окно. Что нужно добавить, чтобы окно это открывалось во вкладке при нажатии на эту кнопку ?

Надо заменить код в разделе "Код" следующей строкой:

Выделить код

Код:

toggleDownloadMgr(true,true);

Отлично. Спасибо!

Anton
ты уже помогал мне с кнопкой fav apps в которой реализовано всплывающее меню с различными командами explorera, а возможно ли сделать тоже самое только не с внешними командами, а с кнопками уже от самого фаерфокса? так сказать all in 1 =)

возможно ли сделать тоже самое только не с внешними командами, а с кнопками уже от самого фаерфокса?

Идея не очень понятна. Наверное возможно, другой вопрос, сколько усилий потребуется на реализацию той или команды. Вот за bookmarks я точно браться не буду, может, ещё за что-то "в лоб" не решаемое. Спрашивай, помогу чем смогу.

Добавлено Sun Jun  1 17:49:37 2008 :
p.s. Вот тут: http://custombuttons2.com/forum/viewtopic.php?f=35&t=889
http://custombuttons2.com/forum/viewtopic.php?f=35&t=786
http://custombuttons2.com/forum/viewtopic.php?f=35&t=784
кнопки, которые прячут все или отдельные пункты меню в кнопки. Скорее всего, не то, что надо, но на всякий случай.

ну там не то. там просто кнопка с кодом "Tools", причем когда ее ставишь tools на menubare изчезает. меня интересует возможно ли вообще создание: код кнопки в коде кнопки. очень удобно было бы если все созданые кнопки хранились в одной единственной кнопке-popupe.

ну например

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname/%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADL0lEQVR42l2SW2gTWRjH/2eSySSTTpMmvdq4vaSW9UbByFKWFfsourKLFlnqpV5a6CJeH9wHxUof1IcFK7ugVATBuw8uFpbdJdBFRbu7UtSSWopKm2raJG0SJpk26Uxmzp6pXch24Dtwvvn+v/PdCJZ/u0I17DzHrIVZ7ZJ3AobxCHruMn75YpzFtDNfLx6sKyXLxO2eYmvv11vL3b5aBzgLB5vNgpySx+hIGo+fJpCU1Zuind87rxpgAA8pEDd5JMurjkM+xNMq0lkCjufB23jY7TxWeDmUFxn4tT+KQMCFC70TJqCyEPDn/raqlhU+AYm4Ckni4SkVkMsTpBgsqxFIIsHqSoAQis6jowWApdcb/E78M5SioLoZNSg6hC+/anZjc4sHhtWK6QyFwAMNpRwOnywEtA6fA8d1F/Fz0wvpVEybS17GQFs/1h9zYdWe8zWflXx3+oc6TMzqyBkUjWVWdB0vBOx8fbtIVP1OGg7GYkYIwV0PmVfHjqEmWIWB1m1l7sYGEayni8Yx1dkfwwWALf0r/VXRknhUJxmFTOJpV2ops2/ZeYKVZAEo97+JUUPGw437yZsGMWVzlbmXr4OWzUCVkz1NEVxkV2eHBG9tsddTIgiiIzPFHZzBMPPnybtADa070gcsLLCk84DDAeVFEOFgX6gvrnzzs4wYC1SDVdhHi1dWVmSjnTC0v5s+Yp9Z5idAG3skGgFrP0hdPVIDdxB5/cfzREa5y9bld0KwW+CwVXK6V7nKqks+jI+c2jSFKwwwvwiob7sAzMZBs/Og1AD1epFXFWTePENuNgxDV2GTKiD5A4j99QD3x8MbTyfBxoDsIsB/+KrZFND370DlBKtEg87uuiCAOp0MoIOzi1DfD+Ht45vXmiM4w8Rmo7VFQHlzK2Ze9KN6y/ewiW7o05PQ0jLyDJRnC8RXVYMmI5h8cmvk0ofZHdcziDKxwswgo2s8VNPU0JisdDe6ino8NevXSvUBOHyfm9sINR6GPDaIxMTLwUtTyoEbCuJLYs2cFhn2ofdKGj8xM1NS71Vgg8+C7XaCdWz4xXMUg7KB0LYofmP/F8zGmXH/jftfxs1e2EaqEmMAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20confirmRestart%20%3D%20window.confirm%28%27Are%20you%20sure%20you%20want%20to%20restart%20firefox%3F%27%29%3B%0Aif%28%21confirmRestart%29%20return%3B%0A%20%20%20%20%0Avar%20appStartup%20%3D%20Components.interfaces.nsIAppStartup%3B%0A//%20if%20%28canQuitApplication%28%29%29%20//%20uncomment%20if%20using%20zeniko%27s%20Session%20Manager%0AComponents.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A.getService%28appStartup%29.quit%28appStartup.eRestart%20%7C%20appStartup.eAttemptQuit%29%3B%20%20%20%20%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E
Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EEnlarge%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGJ0lEQVR4nJWUa2xcVxHH/3Pu7t2H17tre9f2xqnjZ2IntosdGhQ7tDQ4pVWVJm0jRCG8lKaAEBKVqGoJFYRUQVOUfkC1VBEitVERFVLVVEBKK0igkUzqYkqwrTiJH+vHrl/78j68u3fvneFDneCStmr/X2Y0Gs1P/3POHBIRbNajL+/2a6RWLWHb5rpGyrSEg785OpLCp5Dt/wsEOt7XelAd7HgMRAQAEBGcvTyohqbeOA7gl58GQJsdHDuzW9k0W/7J+36tR7JX8M/Ji/z6n5ppIeonv1dD0VhHqeSMgyCmKVUifL7vM02Hzwzsz34iBxZbd7fU3K45bS4kcgsYDy9i366v0tMn+2Dy+z0CVIEAOwFPnf7HF6PJQjuAdz+Rg0df3DP29d4f7bLpGt6bv4gLb/Vj4Ju9ePd6HNm8CZAFZgXTFOi64r72anXyt5cgStle+9l91ocB1I3k6Kmu2xTZ2n2OasSLYbw1FOXOliBKliCRKYIFEAHEAlgEiXQJBYPR1VKF189P9H+Ug5sAsBrorr+TlvLTWM5EsLqwVx34bCMm5tPMAHRdw+x8ErPRGBy6HQBjbC6Fu7ob0L296rmPBXx5sN1hsvmd2oqtFC/OIpmNI+RpRKCyDAuxjGIBfC47/jUexr+vzMLjtoNF0exyjiu8ZWisKd/5sQC2+OEt/noUKY11SWFkpAmP3NuJifk1FEzAoWnIF0yU+VNw+1IwDAN2jWCYlro8k8SD/Z0ou+fkTz4SQKSeD1XXaUlrEQUrh+mrVfhcRx3G51IQEfg8DkyGF7GtYwwNHWOYml2Bz+MkQGE0nERHczUaqn3f/VDAoZPNnSSa1+FVyFtr+Mv5Re7Z0YR4uohYqgiNFNy6hutzKygaw9bW5ghm5pZR5tSgiDi+ZvBifB17O+v9tYee/8KtDkQ9W1tXrRWRRiqbQHS2hb6yvwsXx1dFKYLXbZd0OofoSuLtdGoNRjEPwzaJbHodHpddaUqpv4/F5P7eZleFx378FgCL1TN5fQYX/noJw0Mz8NCOuNfjxvRKBkQEn8dJ4cgKvB73oAhO/Gd4Gso+hOjSKio9TjAEc6t5OJ0OBLyO7vZHTgU+APjDE9M15wZm6NzADM1NPP69e/f2VE5E02CTYNcUu2yCmUgs4/J4R/74xPSPzw3MEIrHW+aXVjMuO8GmaczMGJ3L4q7djTsMwZFbLvmG/GXavtatATW9lAOLiL/MoUyjgKnIygt/fuaBqRt9b554YGo6mnhBuABfmV2xkEwv51FXW6WC5dq+zTNv/kV3PPbSnu0h/35DNCSzJRYI+b26XJ2cofBcrLfr6OBgIm3YBCB/uV6KLCdun51fRkVNncytrNNazuBcQVehgHf/rm+c3jN+5tjwBwDF7FpPV2traHnNRL4kyqkpvrsjqFqCmnQ11fQpTfqEBUKAEoIlglDQB7/XQ6PhNc4XWEWSjO31VaHJcLQHwP8Ad37/ZZ/P43iossKPcMoAW4yCEM4OLaDEIprNTsyAiAgzSARgEb6ymlXMGRimBRYgli2iscIDt9PxUPexF3/33ulvrdkAYGkx3vD53fUHoOlIZjIsADLrJg1PppiZiYWYBbAsIQHYEgFbTAxiWICmgex2xalMCUaFR9XXVhwYvbbUAOCyDQAIxsGGuiBiORN5w1KmJTi8J8Ck7IqZxBJWLAIRiGmJYmEwk4iwYovAbPDv30koG4BYuoRgsBK4Nn//TUDA736qOhjE2EIepiXY4ndiNhpXZ157G3aHTkIEYgB0MwGJEAMoGQYO9/eqrX4HIskiVtMl7AxVobxc/ymAn6u2I8+2NW4L6iZsSGVLMEqC5lo3/vbO9Rh0b3dXW4Pa1bDFtaOp1tVSX+lq3BJ0NdQGXNvqql0jL/2ASHfdcWl0MtkUcoNFkCtYMERDKFiptx850UZ7v/2r7C8e/1pZIp2DCKA0hctXF3HqlVefi7z5zJMAajf2ZfPOEAALgABYvu3AwImHHzz4w9b6GpRMC8ICl9OF06+czVDLoaeFLYlZIorePwVWuiOQHHsjkLh2wQHAvfHaNAD2jWgCKG3E9cqd/cXKti+tWKVCnCCEjTmaosB/AY6S/w6waB16AAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BZoomManager.prototype.getInstance%28%29.enlarge%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E
Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EReduce%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAGD0lEQVR4nJWVW2xcVxWG/7XPnDNzZsYz4/FMYsexY8eX2KnjxClNRZwWcBNSVNK0aURVEYVL6wJCSOWpCKkg1Io2RY0QwihSsSBVUSMQIvBAaFUoSVFKQtMS2VbTxHfHt7l77j5zzlo82A2xIISul7W1tPV/+pf2r00igo9TT7x6Z0gjFXeEXTfPNVK2Ixz9+ZFLmZvnLnzMIlB/b9sBdaDrSRARAEBEcPrygDo/dqYfwI/W3P9fDr507C/+v703fpqUus/logQEpOvlGtPtRzpbQX1dRg4+MCY7Nt2t3BTGyXeetWzHNgePXuL/y4Huoq2P7e+877mv9sJmRABAVmxAJ+CZwXdoZOJtaaydR8TwIuiJarHc9T4Ab94W8Oizb+i2ZV342sHt+NmZa8iXbIAcMCvYtsAwCPf3tuOlXz2hJjf/HhIFGiKtWjy78GMAXR/pqFsBfvPGcN+21igqjiCVWwYLIAKIA7AIUtkKyhaju7UGb11M8pK9CI9Ph+PYnUde7m64LWDHlsjxfZ9oxpWZLDMAw9AwNZPG1FwSbkMHwBiezuBTPU1IzexRqWIMRUmgOlxNLPzd2wKaooGtkbAP1xN5YiEOmjreG5nCPz+Ygt+rg0VhajGP6oAPGwJNyBYyKHMRwRqTHJv7vzDQ6b4lIPDZ49977P5tuDKzhFJFxK0pVSrbCIeXEaguwLIs6JqCZTMuT6Tx8N5tKEwcRckpQBkCj2mAHX7kloCGqP/rd3fVY2R6JTNBvxujk/No755CR/cExqZiCPo9ABSGJtPoalmHs+/GAHIAAOH1AQ1EP/2vgIZDA5++Z2dzKJldRiJjsUaKvIaGa9MxbGyZxlLpz87E9CJ8Hg2KgOTSMuaTRexoacY/zgkDQFXIBxEJHHypZdt/AHweV/+jfZ3m2yNxUQoq4NUomy3Adk0gW0wglU5iLp45l88W4TcNaErD2eGEfH53B+IzW6hcsqAIiNSGNAFeXAPYfvQXkdqQ2RPwezEey4GIEPSbmJyNQfRzePfCCITl+aDPHJhbiCPs94AhmI6X4PG44UF78v3zC7h49gpmxmNglp1rglYR5/Dn9nRuuTKXBdsE3aPYdImamE3kFPf3/PEHD44BwP6n/9AysxDPtbdsqnJpGpeWLRqazuPeHV3h19586htjp/pPfKS5xkHIp+1p2xhR4wsFsIiEfG5lW2WMzcZO/OmFFXEAeP3Yg2Pjc6kTwmUEfbpiIRlfLKG+tkZFq7Q9N2vecHDXkyd3tdeF+izRkM5XWCAUChjy4egETU4ndncfGRhIZS2XABSqMiqzi6ntUzOLqF5fL9OxIi0VLC6UDVUXCfTdcXRw18grj19cA1jOL+3sbmurW1yyUaqI8miKP9MVVa1RTbo3r+9VmvQKC4QAJQRHBHXRIEIBPw1NLnGpzGo2zWhvrKkbnZzbCeDfgHu/+Wow6HcfCleHMJmxwA6jLITT56+jwiKaSydmQESEGSQCsAh/EM8r5hws2wELkMgvo7naD6/Hfajn8V++9v7gl5dcALAwn2y6587GfdAMpHM5FgC5ok0XRzPMzMRCzAI4jpAA7IiAHSYGMRxA00C6rjiTq8Cq9qvG2up9Q1cXmgBcdgEAwTrQVB9FomCjZDnKdgQP7YowKV0xkzjCikUgArEdUSwMZhIRVuwQmC3+9YWUcgFIZCuIRsPA1ZkHbgAiIe8z66JRDF8vwXYEG0IeTM0l1Su/OwfdbZAQgRgA3TiARIgBVCwLD+3drTaG3JhNLyOerWBrXQ2qqozvA/ih6jj8Ykfzpqhhw4VMvgKrImip9eKvF64lYAR6ujua1B1NG8wtm2vN1saw2bwhajbVRsxN9evMSye/RWSYd/19aDS9uc4LFkGh7MASDXXRsNF5+FgHffIrP8k//+0v+lLZAkQApSlc/nAeL5/67fHZ1194GkDtal5uzgwBcLDygy427PvOsUcePvBUW+N6VGwHwgLTY2Lw1OkctR58TtiRhCOiaGULrAx3JD18JpK6+pYbgHf1tWkA9NVuA6is9mJ4697lcMf+mFMpJwlCWNXRFEX+BSKX6svvCNyqAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BZoomManager.prototype.getInstance%28%29.reduce%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

возможно ли это забить в попап?

pshenk

очень удобно было бы если все созданые кнопки хранились в одной единственной кнопке-popupe.

Я несколько сомневаюсь в юзабельности такого решения, но, может быть ошибаюсь. "Забить" несколько кнопок в одну конечно можно, думаю только могут возникнуть сложности с "забиванием" некоторых из кнопок.

Для приведённых выше кнопок:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3Emultibutton%20sample%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%20%20%20%20%0Aoncommand%3D%22this.parentNode.cbButtonDoMenuCommand%28event%29%22%3E%0A%09%3Cmenuitem%20value%3D%22Restart%22%20label%3D%22Restart%22/%3E%0A%09%3Cmenuitem%20value%3D%22Enlarge%22%20label%3D%22Enlarge%22/%3E%0A%09%3Cmenuitem%20value%3D%22Reduce%22%20label%3D%22Reduce%22/%3E%0A%3C/menupopup%3E%3B%0Amenu%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28menu.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Amenu.%20setAttribute%20%28%22id%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20cbButtonDoMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%09var%20itemNum%20%3D%20event.%20target.%20getAttribute%20%28%22value%22%29%3B%0A%09switch%20%28itemNum%29%0A%09%7B%0A%09%09case%20%22Restart%22%3A%0A%09%09%09this.%20cbFunctionRestart%20%28%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22Enlarge%22%3A%0A%09%09%09ZoomManager.prototype.getInstance%28%29.enlarge%28%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22Reduce%22%3A%0A%09%09%09ZoomManager.prototype.getInstance%28%29.reduce%28%29%3B%0A%09%7D%0A%7D%3B%0A//%20commands%0Athis.%20cbFunctionRestart%20%3D%20function%20%28%29%0A%7B%0A%09var%20confirmRestart%20%3D%20window.confirm%28%27Are%20you%20sure%20you%20want%20to%20restart%20firefox%3F%27%29%3B%0A%09if%28%21confirmRestart%29%20return%3B%0A%09%20%20%20%20%0A%09var%20appStartup%20%3D%20Components.interfaces.nsIAppStartup%3B%0A%09//%20if%20%28canQuitApplication%28%29%29%20//%20uncomment%20if%20using%20zeniko%27s%20Session%20Manager%0A%09Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A%09.getService%28appStartup%29.quit%28appStartup.eRestart%20%7C%20appStartup.eAttemptQuit%29%3B%20%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

А какой язык нужен? Хочу сделать кнопку для закрытия всех вкладок с предупреждением о закрытии. Как этого добиться?

PulSar.CE3194694

А какой язык нужен?

Кнопки пишутся на ecmascript.

Хочу сделать кнопку для закрытия всех вкладок с предупреждением о закрытии. Как этого добиться?

Посмотреть, как это делает tabbrowser. В данном случае код будет такой:

Выделить код

Код:

var tbr = getBrowser ();
if (tbr. warnAboutClosingTabs (true))
{
    var childNodes = tbr. mTabContainer. childNodes;
    for (var i = childNodes. length - 1; i >= 0; --i)
    {
        tbr. removeTab (childNodes [i]);
    }
}

Из отзыва на AMO:

...I would love to be able to store my toolbars and right-click menu remotely as an OPML or RSS feed. Needs help dialogs for easy stuff like links and available XUL menus.

Кто-нибудь может растолковать, о чём речь ? За панели инструментов и контекстные меню CB не отвечает, но оверлей с кнопками из сети загрузить сможет - если это подразумевается в цитате.

..I would love to be able to store my toolbars and right-click menu remotely as an OPML or RSS feed.

Было бы неплохо сохранять линки,на панели инструментов,правым кликом на OPML и RSS (дословно с сайтов или удаленный источник)Вторая часть немного непонятна из за XUL.Я не знаю что это такое.А так-Нужно разьяснение,как легче ввести(засунуть :D ) одиноковые линки в имеющееся ................Пардон

Anton

Кто-нибудь может растолковать, о чём речь ?

Рискну предположить, что нужен некий способ копирования кода кнопки. :/
Возможно – бэкапа.
http://ru.wikipedia.org/wiki/OPML

Добавлено Wed Jun 11 16:44:21 2008 :
Впрочем, лучше уточнить у самого вопрошающего...

Anton пишет:

Из отзыва на AMO:

...I would love to be able to store my toolbars and right-click menu remotely as an OPML or RSS feed. Needs help dialogs for easy stuff like links and available XUL menus.

Мне бы хотелось иметь возможность сохранять мои тулбары и меню ПКМ дистанционно, как OPML или в RSS. Кстати нужно бы сделать "хэлп" для таких простых вещей, как ссылки и доступные XUL менюшки.

По-моему он ввиду то, что я сейчас написал, но не понятно только как можно сохранять right-click menu. Я с этим разрешением не знаком вообще (просто решил помочь с переводом), может так и можно.

Anton

...I would love to be able to store my toolbars and right-click menu remotely as an OPML or RSS feed.

Я так понимаю, он хочет хранить свои панели инструментов и контекстное меню на удалённом сервере в виде OPML или RSS и подгружать их с этого сервера.

vv07
Infocatcher
amzoom
Unghost
Спасибо за помощь. У меня были сомнения в отношении терминов 'toolbars' и 'right-click menu' - т. е., может быть, подразумевались панели, составленные из самодельных кнопок и меню этих кнопок. Дискуссию на AMO затевать не хотелось - там сообщения очень долго модерируются, да и сам ресурс на моём соединении очень неудобен. Буду считать, что к CB это не относится - "чистые" панели инструментов и контекстные меню.

Если актуально, можно сделать загрузку оверлея с кнопками из сети, не в виде OPML/RSS, а в виде XUL. Тогда необходимо описание, как это должно выглядеть с точки зрения пользователя. Если действительно актуально.

Anton

Позвольте позаимствовать,вашу подпись?:blush:
Я ярый фанат лисы и ваша подпись,круть полная.

vv07
Флаг в руки, как говорится.

Anton

Пасябки :rock:

а как создать эффект при наведении мышки на кнопку и нажатии ? Я просто использую не стандартную тему для лисы, поэтому у меня все custom buttons не реагирует визуально.

macuache
Думаю, общего подхода в разрешении конфликта с темами со стороны расширения не существует в принципе и идей по этому поводу нет никаких, может быть пока нет.
Боюсь, только вручную, кодом в секцию "Инициализация" с подбором нужных значений для setProperty:

Выделить код

Код:

this. cbSetDefaultStyle = function (event)
{
    this. style. setProperty ("padding", "3px", "");
    this. style. setProperty ("border", "1px solid transparent", "");
    this. style. setProperty ("background-color", "transparent", "");
    this. style. setProperty ("outline", "", "");
    this. style. setProperty ("-moz-outline-offset", "", "");
}
this. onmousedown = function (event)
{
    this. style. setProperty ("border-color", "ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow", "");
    this. style. setProperty ("padding-top", "4px", "");
    this. style. setProperty ("padding-bottom", "2px", "");
    this. style. setProperty ("-moz-padding-start", "4px", "");
    this. style. setProperty ("-moz-padding-end", "2px", "");
}
this. onmouseover = function (event)
{
    //this. style. setProperty ("background-color", "-moz-buttonhoverface", "");
    this. style. setProperty ("background-color", "ThreeDFace", "");
    this. style. setProperty ("border-color", "ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight", "");
    this. style. setProperty ("outline", "1px -moz-DialogText", "");
    this. style. setProperty ("-moz-outline-offset", "-2px", "");
}
this. onmouseup = this. cbSetDefaultStyle;
this. onmouseout = this. cbSetDefaultStyle;

Infocatcher
пост 567

Тем, что можно сделать открытие в новой вкладке smile

Перевести через Google:
Код:

Этот код действительно не работает. Сообщение браузера: "Кнопка не может быть создана, потому что содержит ошибки!"
Просмотрел дальше эту тему, но исправлений не нашел. Сам исправит не могу - не понимаю, как это сделать.
Меня интересует:
1. перевод в новой вкладке
2. перевод выделенного текста во всплывающем окошке
В Opera у меня кнопка с этими функциями работает прекрасно, а в Firefox не могу найти такую кнопку.
Или кнопку с выпадающим меню, где можно прописать эти две строчки. Именно перевод Google, другие переводчики мне не нравятся.
Кнопка, как предлагает vv07 (№568), у меня есть, но она переводит в том же окне.
И еще вопрос.
Страницы https не переводятся. Это Google не может взять страницу или что-то настроить надо в браузере?
Пожалуйста, помогите, не проходите мимо :whiteflag:

Vvld

пост 567...
...Этот код действительно не работает. Сообщение браузера: "Кнопка не может быть создана, потому что содержит ошибки!"...

Какая версия расширения ?
Для версии 0.0.3.2 кнопка из сообщения 567 устанавливается нормально. Надо выделить весь текст custombutton://.... (с прокруткой), скопировать, вставить в строку адреса, нажать Enter.

Anton пишет:

Vvld

пост 567...
...Этот код действительно не работает. Сообщение браузера: "Кнопка не может быть создана, потому что содержит ошибки!"...

Какая версия расширения ?
Для версии 0.0.3.2 кнопка из сообщения 567 устанавливается нормально. Надо выделить весь текст custombutton://.... (с прокруткой), скопировать, вставить в строку адреса, нажать Enter.

Я извиняюсь, но какое расширение должно стоять (имя)? Браузер обновлен до версии 2.0.0.15. Кнопка перевода (работающая) создана расширением Custom Buttons 0.0.1.2 (сегодня автообновилось до версии 0.0.1.3). Хотелось бы иметь перевод с функциями, описанными мною выше. Ищу, пробую. Если надо, установлю еще расширение, но подскажите какое? Надо будет, Custom Buttons отключу, другое расширение поставлю, но какое? Хотя, на мой взгляд, Google и переводит лучше, чем другие переводчики, но все равно надо сравнивать текст перевода с оригиналом и перевод лучше иметь в другом окне.
А кнопку из сообщения Infocatcher я пытался поставить так, как Вы описываете, но увы...

Кнопка перевода (работающая) создана расширением Custom Buttons 0.0.1.2 (сегодня автообновилось до версии 0.0.1.3).

А кнопку из сообщения Infocatcher я пытался поставить так, как Вы описываете, но увы...

Кнопка из сообщения Infocatcher'а создана более свежей версией расширения (рискну предположить, это было Custom Buttons 0.0.2.9). Сейчас доступна 0.0.3.2.

Что касается

2. перевод выделенного текста во всплывающем окошке

то, думаю, такой кнопки не существует. Может быть, есть на custombuttons2.com

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

Anton

Кнопка из сообщения Infocatcher'а создана более свежей версией расширения (рискну предположить, это было Custom Buttons 0.0.2.9). Сейчас доступна 0.0.3.2.

Увы. Этот Custom Buttons я не знаю. Сайт Custom Buttons 0.0.1.3 - http://xsms.nm.ru/custombuttons/, Custom Buttons 2.0.7.6 я брал и пробовал на страничке https://addons.mozilla.org/ru/firefox/addon/5066, а это расширение с версией 0.0.2.9 или 0.0.3.2 я не знаю. Подскажите, пожалуйста, я и его попробую. Кстати, после установки Custom Buttons 2.0.7.6 с браузером что-то непонятное случилось и я его сразу удалил.

Что касается

    2. перевод выделенного текста во всплывающем окошке

то, думаю, такой кнопки не существует. Может быть, есть на custombuttons2.com

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

Вы правы, такую функцию кнопки в Firefox я ищу давно и пока не нашел. Но это очень удобно. И когда я листаю страницы иностранных сайтов, то перехожу на браузер Opera.
К сожалению, рассказать Вам как работает ява-скрипт в Opera я не смогу, мои изыскания в программировании закончились в 1994 году и вряд ли я смогу сейчас догнать ваши молодые умы, так что приходится собирать по крохам: кода получится, когда нет - это уже мои проблемы. Просто я взял готовый скрипт google-translate.js на сайте http://lexi.ucoz.ru/index/0-5. Естественно, перед этим перебрал много других.
Ну а перевод Google мне нравится тем, что переводит не только чисто один язык на страничке, но (не всегда, как повезет) и смесь языков, в том числе и с японо-китайским. Ну а если полностью страничку не перевело, то очень удобно применить перевод остатка текста в окошке. Мое мнение, что Google с функцией автоопределения языка при переводе - лидер среди других переводчиков online.
Если Вы сможете сделать такое в Firefox, то Вам будут благодарны очень многие обладатели браузера.
Страничка кнопок автоперевода Google - http://translate.google.com/translate_buttons?hl=ru

Забыл добавить:
- переводв окошке предварительно выделенного текста;
- для перевода Google на русский с любого языка достаточно взять ссылку "русский" - это в Opera

Сайт Custom Buttons 0.0.1.3 - http://xsms.nm.ru/custombuttons/

Сейчас все новые версии размещаются здесь: https://addons.mozilla.org/ru/firefox/addon/2707 и здесь: http://custombuttons.mozdev.org/installation.html

Anton

Сейчас все новые версии размещаются здесь: https://addons.mozilla.org/ru/firefox/addon/2707 и здесь: http://custombuttons.mozdev.org/installation.html

Спасибо за новую версию, а я ориентировался на домашнюю страницу.
Кнопка переводит с переходом на другую страницу ;)
Перевод выделенного текста также идет на другой странице, а хотелось бы во всплывающем окошке. Можно поправить код этой кнопки?

а хотелось бы во всплывающем окошке

Мне бы его вообразить как-нибудь. Не представляю как оно должно выглядеть.

Я попробую что-нибудь сделать, правда, заранее результат обещать не могу.

Anton пишет:

а хотелось бы во всплывающем окошке

Я попробую что-нибудь сделать, правда, заранее результат обещать не могу.

А вдруг получится? Буду надеяться и ждать.

Добавлено Fri Jul  4 17:12:01 2008 :
Anton
А как с переводом страниц https через Google? Они не переводятся. Это Google не может захватить адрес страницы? Или что-то другое мешает?
Правда в Opera они тоже не переводятся и на форумах Opera я задавал этот вопрос, но нормальных ответов я не получил.

Vvld

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09window.%20cbTranslateButtonX%20%3D%20event.%20screenX%3B%0A%09%09%09window.%20cbTranslateButtonY%20%3D%20event.%20screenY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3Evar%20text%20%3D%20getBrowser%20%28%29.%20contentDocument.%20defaultView.%20getSelection%20%28%29%3B%0Aif%20%28text%20%3D%3D%20%22%22%29%0A%7B%0A%09var%20lng%20%3D%20%28getBrowser%20%28%29.%20contentDocument.%20defaultView.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%0A%09%09%09%20%20escape%20%28getBrowser%20%28%29.%20contentDocument.%20location.%20href%29%20+%0A%09%09%09%20%20%22%26amp%3Bhl%3D%22%20+%0A%09%09%09%20%20lng%20+%0A%09%09%09%20%20%22%26amp%3Blangpair%3Dauto%7Cru%26amp%3Btbb%3D1%22%20+%0A%09%09%09%20%20%28getBrowser%20%28%29.%20contentDocument.%20charset%3F%0A%09%09%09%20%20%09%22%26amp%3Bie%3D%22%20+%20getBrowser%20%28%29.%20contentDocument.%20charset%3A%0A%09%09%09%09%20%20%22%22%29%3B%0A%09%09%20%20getBrowser%20%28%29.%20addTab%20%28url%2C%20null%2C%20null%29%3B%0A%09return%3B%0A%7D%0Avar%20x%20%3D%20window.%20cbTranslateButtonX%3B%0Avar%20y%20%3D%20window.%20cbTranslateButtonY%3B%0Aif%20%28%21x%20%7C%7C%20%21y%29%0A%09x%20%3D%20y%20%3D%200%3B%0AXML.%20ignoreProcessingInstructions%20%3D%20false%3B%0Avar%20dialog%20%3D%20%26lt%3B%26gt%3B%0A%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0A%26lt%3Bwindow%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%09xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%0A%09%09id%3D%22dlg01%22%0A%09%09width%3D%22300%22%20height%3D%2250%22%0A%09%09screenX%3D%7Bx%7D%20screenY%3D%7By%7D%0A%09%09title%3D%22Google%20Translate%22%0A%09%09onload%3D%22f%28%29%22%0A%09%09onunload%3D%22f2%28%29%22%26gt%3B%0A%09%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%0A%09%09%26lt%3B%21%5BCDATA%5B%0A%09%09%09function%20f%20%28%29%0A%09%09%09%7B%0A%09%09%09%09var%20text%20%3D%20document.%20getElementById%20%28%22lbl01%22%29.%20getAttribute%20%28%22value%22%29%3B%0A%09%09%09%09window.%20addEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%09var%20src%3D%22http%3A//translate.google.com/translate_t%3Ftext%3D%22%20+%0A%09%09%09%09%09%09text%20+%20%22%26amp%3Bamp%3Bhl%3Dru%26amp%3Bamp%3Blangpair%3Dauto%7Cauto%26amp%3Bamp%3Btbb%3D1%26amp%3Bamp%3Bujs%3Dgtt%22%3B%0A%09%09%09%09document.%20getElementById%20%28%22ifr01%22%29.%20setAttribute%20%28%22src%22%2C%20src%29%3B%0A%09%09%09%09window.%20sizeToContent%20%28%29%3B%0A%09%09%09%7D%0A%09%09%09function%20f2%20%28%29%0A%09%09%09%7B%0A%09%09%09%09window.%20removeEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%7D%0A%09%09%09function%20f3%20%28%29%0A%09%09%09%7B%0A%09%09%09%09var%20doc%20%3D%20window.%20frames%20%5B0%5D.%20document%3B%0A%09%09%09%09var%20body%20%3D%20doc.%20body%3B%0A%09%09%09%09var%20t%20%3D%20%28body%20%26amp%3B%26amp%3B%20%21/%23808080/.%20test%20%28body.%20innerHTML%29%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20title%20+%3D%20%22%20-%20%22%20+%20t%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20doc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20getElementById%20%28%22desc01%22%29.%20textContent%20%3D%20r%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20sizeToContent%20%28%29%3B%0A%09%09%09%7D%0A%09%09%5D%5D%26gt%3B%0A%09%26lt%3B/script%26gt%3B%0A%09%26lt%3Bdescription%20id%3D%22desc01%22%26gt%3B%u041F%u0435%u0440%u0435%u0432%u043E%u0434%u0438%u043C...%26lt%3B/description%26gt%3B%0A%09%26lt%3Blabel%20id%3D%22lbl01%22%20style%3D%22visibility%3Ahidden%3B%22%20value%3D%7Btext%7D/%26gt%3B%0A%09%26lt%3Bhtml%3Aiframe%20id%3D%22ifr01%22%20style%3D%22width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3B%22/%26gt%3B%0A%26lt%3B/window%26gt%3B%26lt%3B/%26gt%3B%3B%0Awindow.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog.%20toXMLString%20%28%29%2C%20btoa%20%28escape%20%28text%29%29%2C%20%22chrome%2Cdependent%2Cminimizable%2Cdialog%3Dno%22%29%3B%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Хотя, работает не абсолютно точно как оперный скрипт.

А как с переводом страниц https через Google?

Похоже, это особенность переводчика.

Anton пишет:

Vvld

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09window.%20cbTranslateButtonX%20%3D%20event.%20screenX%3B%0A%09%09%09window.%20cbTranslateButtonY%20%3D%20event.%20screenY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3Evar%20text%20%3D%20getBrowser%20%28%29.%20contentDocument.%20defaultView.%20getSelection%20%28%29%3B%0Aif%20%28text%20%3D%3D%20%22%22%29%0A%7B%0A%09var%20lng%20%3D%20%28getBrowser%20%28%29.%20contentDocument.%20defaultView.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%0A%09%09%09%20%20escape%20%28getBrowser%20%28%29.%20contentDocument.%20location.%20href%29%20+%0A%09%09%09%20%20%22%26amp%3Bhl%3D%22%20+%0A%09%09%09%20%20lng%20+%0A%09%09%09%20%20%22%26amp%3Blangpair%3Dauto%7Cru%26amp%3Btbb%3D1%22%20+%0A%09%09%09%20%20%28getBrowser%20%28%29.%20contentDocument.%20charset%3F%0A%09%09%09%20%20%09%22%26amp%3Bie%3D%22%20+%20getBrowser%20%28%29.%20contentDocument.%20charset%3A%0A%09%09%09%09%20%20%22%22%29%3B%0A%09%09%20%20getBrowser%20%28%29.%20addTab%20%28url%2C%20null%2C%20null%29%3B%0A%09return%3B%0A%7D%0Avar%20x%20%3D%20window.%20cbTranslateButtonX%3B%0Avar%20y%20%3D%20window.%20cbTranslateButtonY%3B%0Aif%20%28%21x%20%7C%7C%20%21y%29%0A%09x%20%3D%20y%20%3D%200%3B%0AXML.%20ignoreProcessingInstructions%20%3D%20false%3B%0Avar%20dialog%20%3D%20%26lt%3B%26gt%3B%0A%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0A%26lt%3Bwindow%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%09xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%0A%09%09id%3D%22dlg01%22%0A%09%09width%3D%22300%22%20height%3D%2250%22%0A%09%09screenX%3D%7Bx%7D%20screenY%3D%7By%7D%0A%09%09title%3D%22Google%20Translate%22%0A%09%09onload%3D%22f%28%29%22%0A%09%09onunload%3D%22f2%28%29%22%26gt%3B%0A%09%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%0A%09%09%26lt%3B%21%5BCDATA%5B%0A%09%09%09function%20f%20%28%29%0A%09%09%09%7B%0A%09%09%09%09var%20text%20%3D%20document.%20getElementById%20%28%22lbl01%22%29.%20getAttribute%20%28%22value%22%29%3B%0A%09%09%09%09window.%20addEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%09var%20src%3D%22http%3A//translate.google.com/translate_t%3Ftext%3D%22%20+%0A%09%09%09%09%09%09text%20+%20%22%26amp%3Bamp%3Bhl%3Dru%26amp%3Bamp%3Blangpair%3Dauto%7Cauto%26amp%3Bamp%3Btbb%3D1%26amp%3Bamp%3Bujs%3Dgtt%22%3B%0A%09%09%09%09document.%20getElementById%20%28%22ifr01%22%29.%20setAttribute%20%28%22src%22%2C%20src%29%3B%0A%09%09%09%09window.%20sizeToContent%20%28%29%3B%0A%09%09%09%7D%0A%09%09%09function%20f2%20%28%29%0A%09%09%09%7B%0A%09%09%09%09window.%20removeEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%7D%0A%09%09%09function%20f3%20%28%29%0A%09%09%09%7B%0A%09%09%09%09var%20doc%20%3D%20window.%20frames%20%5B0%5D.%20document%3B%0A%09%09%09%09var%20body%20%3D%20doc.%20body%3B%0A%09%09%09%09var%20t%20%3D%20%28body%20%26amp%3B%26amp%3B%20%21/%23808080/.%20test%20%28body.%20innerHTML%29%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20title%20+%3D%20%22%20-%20%22%20+%20t%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20doc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20getElementById%20%28%22desc01%22%29.%20textContent%20%3D%20r%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20sizeToContent%20%28%29%3B%0A%09%09%09%7D%0A%09%09%5D%5D%26gt%3B%0A%09%26lt%3B/script%26gt%3B%0A%09%26lt%3Bdescription%20id%3D%22desc01%22%26gt%3B%u041F%u0435%u0440%u0435%u0432%u043E%u0434%u0438%u043C...%26lt%3B/description%26gt%3B%0A%09%26lt%3Blabel%20id%3D%22lbl01%22%20style%3D%22visibility%3Ahidden%3B%22%20value%3D%7Btext%7D/%26gt%3B%0A%09%26lt%3Bhtml%3Aiframe%20id%3D%22ifr01%22%20style%3D%22width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3B%22/%26gt%3B%0A%26lt%3B/window%26gt%3B%26lt%3B/%26gt%3B%3B%0Awindow.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog.%20toXMLString%20%28%29%2C%20btoa%20%28escape%20%28text%29%29%2C%20%22chrome%2Cdependent%2Cminimizable%2Cdialog%3Dno%22%29%3B%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Хотя, работает не абсолютно точно как оперный скрипт.

А как с переводом страниц https через Google?

Похоже, это особенность переводчика.

КЛАСС!!! ;) Основное у Вас получилось!
Есть несколько просьб:
1. чем больше символов в выделенном тексте, тем шире всплывающее окошко и при количестве символов больше, чем помещается на странице, окошко становится шире границ основного окна. И это все при практически неизменной высоте всплывающего окошка.
Можно зафиксировать ширину всплывающего окошка, а по высоте, при достижении определенной высоты, чтобы появилась прокрутка текста?
2. во всплывающем окошке не сохраняется форматирование выделенного текста, и весь текст идет в одну трудночитаемую строчку со всеми символами. Это не относится к переводу страницы полностью - там форматирование полностью сохраняется.
Поправить можно?
3. было бы неплохо, чтобы текст во всплывающем окошке можно было бы выделить и скопировать.
Это возможно?

Ну а https прийдется как и раньше либо копировать в блокнот и переводить, либо (при не сложных текстах) с помощью словаря. Хотя, если текст не сложный, то я его понимаю и без словаря (конечно только английский, но никак не китайский.

Добавлено Sun Jul  6 16:43:44 2008 :
Anton
Где - то на форуме (я не запомнил эту страницу и сейчас не могу найти) обсуждалась кнопка с меню. Может быть легче сделать, чтобы в меню кнопки перевода было несколько строк (?):
страница
выделенный текст
............... (для нуждающихся в каких-либо дополнительных функциях перевода)

Vvld
Я попробую исправить кнопку с учётом сделанных замечаний.

На следующей неделе намечаются разъезды, так что, скорее всего я не смогу этим заняться раньше выходных.

Anton пишет:

Vvld
Я попробую исправить кнопку с учётом сделанных замечаний.

На следующей неделе намечаются разъезды, так что, скорее всего я не смогу этим заняться раньше выходных.

Конечно.
Я и так уже блаженствую. Иметь под рукой такую кнопочку...;)

Anton
Хотелось бы то же обратиться к Вам с несколькими вопросами:
Если брать именно оригинальный Гугловский скрипт, можно ли сделать что бы он запускался в новой вкладке, а не как через getBrowser (). contentDocument. location. href = "", в текущей?
Можно попросить кнопку, для Get File Size, что то не соображу какие аргументы прописать, хотелось бы брать текстовые ссылки и если возможно урлы из выделенных.
Сделал кнопку для Promt-X из Promt 7, через goDoCommand ("cmd_copy");, но подозреваю что много лишнего, как приблизительно должен выглядеть код? (Promt-X, сам берёт из буфера выделенное, при запуске).
И последний вопрос - возможно ли сделать проверку орфографии с помощью MS Office, через известный скрипт Spell.vbs.

Deim0s

...оригинальный Гугловский скрипт...

Если для Google Translate, то пост 651 (еще не полностью сделана) или пост 567 - работает

Vvld
Под оригинальным, я имею ввиду тот который отдаёт сам Google, меня он вполне устраивает, хотелось только что бы срабатывал в новой вкладке. В посте № 567 перевод только с английского на руский, надо править en|ru, на auto|ru. К тому же,  при изменении Googl'ом скрипта, случись такое, оба придётся править, в оригинальном варианте - только заменить сам скрипт в " ".

Deim0s
Кнопка поста 567 переводит на другой странице. Исправить en|ru на auto|ru большой проблемы нет.
От изменения скрипта Google никто не застрахован и кнопка перестанет работать.
Мысль

только заменить сам скрипт в " "

- это был бы хороший вариант. Но как это программно сделать - надо с Антоном обсуждать. Дождемся его...
Мне кажется, что такой вариант может получиться в кнопке с выпадающим меню, когда основная часть (перевод) один - первое нажатие кнопки, а где сделать этот перевод - нажатие пункта выпадающего меню. Но это, наверное, сложно.

Vvld

Но как это программно сделать - надо с Антоном обсуждать.

Я к нему с просьбой и обратился. Т.к. скрипт Googl'а сам прекрасно "различает" перевод текста, от перевода страницы, зачем меню? Кому хочется на текущей вкладке и так с оригиналом работает. ИМХО смысл кнопки в удобстве перевода одним нажатием, а если через меню, так это и через закладку можно переводить.

Deim0s

ИМХО смысл кнопки в удобстве перевода одним нажатием, а если через меню, так это и через закладку можно переводить.

Да я не спорю, но мысль и для себя работает - помимо перевода на другой странице (это то работает) я просил Антона сделать перевод выделенного текста во всплывающем окошке и он это уже сделал, только надо чуть-чуть поправить. Но в простой кнопке вставить в " " скрипт Google, при его изменении, не получится и прийдется всю кнопку переделывать.

Vvld

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09window.%20cbTranslateButtonX%20%3D%20event.%20screenX%3B%0A%09%09%09window.%20cbTranslateButtonY%20%3D%20event.%20screenY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3Evar%20text%20%3D%20getBrowser%20%28%29.%20contentDocument.%20defaultView.%20getSelection%20%28%29%3B%0Aif%20%28text%20%3D%3D%20%22%22%29%0A%7B%0A%09var%20lng%20%3D%20%28getBrowser%20%28%29.%20contentDocument.%20defaultView.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%0A%09%09%09%20%20escape%20%28getBrowser%20%28%29.%20contentDocument.%20location.%20href%29%20+%0A%09%09%09%20%20%22%26amp%3Bhl%3D%22%20+%0A%09%09%09%20%20lng%20+%0A%09%09%09%20%20%22%26amp%3Blangpair%3Dauto%7Cru%26amp%3Btbb%3D1%22%20+%0A%09%09%09%20%20%28getBrowser%20%28%29.%20contentDocument.%20charset%3F%0A%09%09%09%20%20%09%22%26amp%3Bie%3D%22%20+%20getBrowser%20%28%29.%20contentDocument.%20charset%3A%0A%09%09%09%09%20%20%22%22%29%3B%0A%09%09%20%20getBrowser%20%28%29.%20addTab%20%28url%2C%20null%2C%20null%29%3B%0A%09return%3B%0A%7D%0Avar%20x%20%3D%20window.%20cbTranslateButtonX%3B%0Avar%20y%20%3D%20window.%20cbTranslateButtonY%3B%0Aif%20%28%21x%20%7C%7C%20%21y%29%0A%09x%20%3D%20y%20%3D%200%3B%0AXML.%20ignoreProcessingInstructions%20%3D%20false%3B%0Avar%20dialog%20%3D%20%26lt%3B%26gt%3B%0A%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0A%26lt%3B%3Fxml-stylesheet%20href%3D%22resource%3A//gre/res/html.css%22%3F%26gt%3B%0A%26lt%3Bwindow%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%09xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%0A%09%09id%3D%22dlg01%22%0A%09%09screenX%3D%7Bx%7D%20screenY%3D%7By%7D%0A%09%09title%3D%22Google%20Translate%22%0A%09%09onload%3D%22f%28%29%22%0A%09%09onunload%3D%22f2%28%29%22%26gt%3B%0A%09%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%0A%09%09%26lt%3B%21%5BCDATA%5B%0A%09%09%09function%20f%20%28%29%0A%09%09%09%7B%0A%09%09%09%09var%20text%20%3D%20document.%20getElementById%20%28%22lbl01%22%29.%20getAttribute%20%28%22value%22%29%3B%0A%09%09%09%09window.%20addEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%09var%20src%3D%22http%3A//translate.google.com/translate_t%3Ftext%3D%22%20+%0A%09%09%09%09%09%09text%20+%20%22%26amp%3Bamp%3Bhl%3Dru%26amp%3Bamp%3Blangpair%3Dauto%7Cauto%26amp%3Bamp%3Btbb%3D1%26amp%3Bamp%3Bujs%3Dgtt%22%3B%0A%09%09%09%09document.%20getElementById%20%28%22ifr01%22%29.%20setAttribute%20%28%22src%22%2C%20src%29%3B%0A%09%09%09%09window.%20sizeToContent%20%28%29%3B%0A%09%09%09%7D%0A%09%09%09function%20f2%20%28%29%0A%09%09%09%7B%0A%09%09%09%09window.%20removeEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%7D%0A%09%09%09function%20f3%20%28%29%0A%09%09%09%7B%0A%09%09%09%09var%20doc%20%3D%20window.%20frames%20%5B0%5D.%20document%3B%0A%09%09%09%09var%20body%20%3D%20doc.%20body%3B%0A%09%09%09%09var%20t%20%3D%20%28body%20%26amp%3B%26amp%3B%20%21/%23808080/.%20test%20%28body.%20innerHTML%29%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20title%20+%3D%20%22%20-%20%22%20+%20t%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20doc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20getElementById%20%28%22desc01%22%29.%20innerHTML%20%3D%20r%3B%0A%09%09var%20ifr%20%3D%20document.%20getElementById%20%28%22ifr01%22%29%3B%0A%09%09ifr.%20parentNode.%20removeChild%20%28ifr%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20sizeToContent%20%28%29%3B%0A%09%09%09%7D%0A%09%09%5D%5D%26gt%3B%0A%09%26lt%3B/script%26gt%3B%0A%09%26lt%3Bbox%20width%3D%22350%22%26gt%3B%0A%09%09%26lt%3Blabel%20id%3D%22lbl01%22%20hidden%3D%22true%22%20value%3D%7Btext%7D/%26gt%3B%0A%09%09%26lt%3Bhtml%3Ahtml%20flex%3D%221%22%26gt%3B%0A%09%09%09%26lt%3Bhtml%3Ahead%26gt%3B%0A%09%09%09%09%26lt%3Bhtml%3Astyle%20type%3D%22text/css%22%26gt%3B%0A%09%09%09%09%09%26lt%3B%21%5BCDATA%5B%0A%09%09%09%09%09%09iframe%0A%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09visibility%3A%20hidden%3B%0A%09%09%09%09%09%09%09width%3A%200px%3B%0A%09%09%09%09%09%09%09height%3A%200px%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%0A%09%09%09%09%09%09%23div1%0A%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09left%3A%200%3B%0A%09%09%09%09%09%09%09top%3A%200%3B%0A%09%09%09%09%09%09%09font%3A%2016px%20Times%20New%20Roman%3B%0A%09%09%09%09%09%09%09border%3A%201px%20solid%20gray%3B%0A%09%09%09%09%09%09%09padding%3A%203px%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%0A%09%09%09%09%09%09%23desc01%0A%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09border%3A%201px%20solid%20%23aaaaaa%3B%0A%09%09%09%09%09%09%09margin%3A%202px%200%200%200%3B%0A%09%09%09%09%09%09%09padding%3A%204px%3B%0A%09%09%09%09%09%09%09background-color%3A%20%23fafcfe%3B%0A%09%09%09%09%09%09%09font%3A%2014px%20Times%20New%20Roman%3B%0A%09%09%09%09%09%09%09-moz-user-select%3A%20text%3B%0A%09%09%09%09%09%09%7D%0A%09%09%09%09%09%5D%5D%26gt%3B%0A%09%09%09%09%26lt%3B/html%3Astyle%26gt%3B%0A%09%09%09%26lt%3B/html%3Ahead%26gt%3B%0A%09%09%09%26lt%3Bhtml%3Abody%26gt%3B%0A%09%09%09%09%26lt%3Bhtml%3Adiv%20id%3D%22div1%22%26gt%3B%0A%09%09%09%09%09%26lt%3Bhtml%3Adiv%20id%3D%22desc01%22%26gt%3B%u041F%u0435%u0440%u0435%u0432%u043E%u0434%u0438%u043C...%26lt%3B/html%3Adiv%26gt%3B%0A%09%09%09%09%26lt%3B/html%3Adiv%26gt%3B%0A%09%09%09%09%26lt%3Bhtml%3Aiframe%20id%3D%22ifr01%22/%26gt%3B%0A%09%09%09%26lt%3B/html%3Abody%26gt%3B%0A%09%09%26lt%3B/html%3Ahtml%26gt%3B%0A%09%26lt%3B/box%26gt%3B%0A%26lt%3B/window%26gt%3B%26lt%3B/%26gt%3B%3B%0Awindow.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog.%20toXMLString%20%28%29%2C%20btoa%20%28escape%20%28text%29%29%2C%20%22chrome%2Cdependent%2Cminimizable%2Cdialog%3Dno%22%29%3B%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

с меню:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3Eif%20%28%21window.%20cbTranslateButton%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09window.%20cbTranslateButtonX%20%3D%20event.%20screenX%3B%0A%09%09%09window.%20cbTranslateButtonY%20%3D%20event.%20screenY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%0A%7D%0A%0Avar%20menu%20%3D%20%26lt%3Bmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%20%20%20%20%0Aoncommand%3D%22this.parentNode.cbButtonDoMenuCommand%28event%29%22%26gt%3B%0A%09%26lt%3Bmenuitem%20value%3D%22Selection%22%20label%3D%22%u0412%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%22/%26gt%3B%0A%09%26lt%3Bmenuitem%20value%3D%22Page%22%20label%3D%22%u0421%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22/%26gt%3B%0A%26lt%3B/menupopup%26gt%3B%3B%0Amenu%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28menu.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Amenu.%20setAttribute%20%28%22id%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20cbButtonDoMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%09var%20itemNum%20%3D%20event.%20target.%20getAttribute%20%28%22value%22%29%3B%0A%09switch%20%28itemNum%29%0A%09%7B%0A%09%09case%20%22Selection%22%3A%0A%09%09%09this.%20cbTranslateSelection%20%28%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22Page%22%3A%0A%09%09%09this.%20cbTranslatePage%20%28%29%3B%0A%09%09%09break%3B%0A%09%7D%0A%7D%3B%0Athis.%20cbTranslateSelection%20%3D%20function%20%28%29%0A%7B%0A%09var%20text%20%3D%20getBrowser%20%28%29.%20contentDocument.%20defaultView.%20getSelection%20%28%29%3B%0A%09var%20x%20%3D%20window.%20cbTranslateButtonX%3B%0A%09var%20y%20%3D%20window.%20cbTranslateButtonY%3B%0A%09if%20%28%21x%20%7C%7C%20%21y%29%0A%09%09x%20%3D%20y%20%3D%200%3B%0A%09XML.%20ignoreProcessingInstructions%20%3D%20false%3B%0A%09var%20dialog%20%3D%20%26lt%3B%26gt%3B%0A%09%26lt%3B%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%3F%26gt%3B%0A%09%26lt%3B%3Fxml-stylesheet%20href%3D%22resource%3A//gre/res/html.css%22%3F%26gt%3B%0A%09%26lt%3Bwindow%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%09%09xmlns%3Ahtml%3D%22http%3A//www.w3.org/1999/xhtml%22%0A%09%09%09id%3D%22dlg01%22%0A%09%09%09screenX%3D%7Bx%7D%20screenY%3D%7By%7D%0A%09%09%09title%3D%22Google%20Translate%22%0A%09%09%09onload%3D%22f%28%29%22%0A%09%09%09onunload%3D%22f2%28%29%22%26gt%3B%0A%09%09%26lt%3Bscript%20type%3D%22application/x-javascript%22%26gt%3B%0A%09%09%09%26lt%3B%21%5BCDATA%5B%0A%09%09%09%09function%20f%20%28%29%0A%09%09%09%09%7B%0A%09%09%09%09%09var%20text%20%3D%20document.%20getElementById%20%28%22lbl01%22%29.%20getAttribute%20%28%22value%22%29%3B%0A%09%09%09%09%09window.%20addEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%09%09var%20src%3D%22http%3A//translate.google.com/translate_t%3Ftext%3D%22%20+%0A%09%09%09%09%09%09%09text%20+%20%22%26amp%3Bamp%3Bhl%3Dru%26amp%3Bamp%3Blangpair%3Dauto%7Cauto%26amp%3Bamp%3Btbb%3D1%26amp%3Bamp%3Bujs%3Dgtt%22%3B%0A%09%09%09%09%09document.%20getElementById%20%28%22ifr01%22%29.%20setAttribute%20%28%22src%22%2C%20src%29%3B%0A%09%09%09%09%09window.%20sizeToContent%20%28%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09function%20f2%20%28%29%0A%09%09%09%09%7B%0A%09%09%09%09%09window.%20removeEventListener%20%28%22DOMContentLoaded%22%2C%20f3%2C%20true%29%3B%0A%09%09%09%09%7D%0A%09%09%09%09function%20f3%20%28%29%0A%09%09%09%09%7B%0A%09%09%09%09%09var%20doc%20%3D%20window.%20frames%20%5B0%5D.%20document%3B%0A%09%09%09%09%09var%20body%20%3D%20doc.%20body%3B%0A%09%09%09%09%09var%20t%20%3D%20%28body%20%26amp%3B%26amp%3B%20%21/%23808080/.%20test%20%28body.%20innerHTML%29%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20body.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20title%20+%3D%20%22%20-%20%22%20+%20t%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20doc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.%20getElementById%20%28%22desc01%22%29.%20innerHTML%20%3D%20r%3B%0A%09%09%09var%20ifr%20%3D%20document.%20getElementById%20%28%22ifr01%22%29%3B%0A%09%09%09ifr.%20parentNode.%20removeChild%20%28ifr%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.%20sizeToContent%20%28%29%3B%0A%09%09%09%09%7D%0A%09%09%09%5D%5D%26gt%3B%0A%09%09%26lt%3B/script%26gt%3B%0A%09%09%26lt%3Bbox%20width%3D%22350%22%26gt%3B%0A%09%09%09%26lt%3Blabel%20id%3D%22lbl01%22%20hidden%3D%22true%22%20value%3D%7Btext%7D/%26gt%3B%0A%09%09%09%26lt%3Bhtml%3Ahtml%20flex%3D%221%22%26gt%3B%0A%09%09%09%09%26lt%3Bhtml%3Ahead%26gt%3B%0A%09%09%09%09%09%26lt%3Bhtml%3Astyle%20type%3D%22text/css%22%26gt%3B%0A%09%09%09%09%09%09%26lt%3B%21%5BCDATA%5B%0A%09%09%09%09%09%09%09iframe%0A%09%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09%09visibility%3A%20hidden%3B%0A%09%09%09%09%09%09%09%09width%3A%200px%3B%0A%09%09%09%09%09%09%09%09height%3A%200px%3B%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%0A%09%09%09%09%09%09%09%23div1%0A%09%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09%09left%3A%200%3B%0A%09%09%09%09%09%09%09%09top%3A%200%3B%0A%09%09%09%09%09%09%09%09font%3A%2016px%20Times%20New%20Roman%3B%0A%09%09%09%09%09%09%09%09border%3A%201px%20solid%20gray%3B%0A%09%09%09%09%09%09%09%09padding%3A%203px%3B%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%09%0A%09%09%09%09%09%09%09%23desc01%0A%09%09%09%09%09%09%09%7B%0A%09%09%09%09%09%09%09%09border%3A%201px%20solid%20%23aaaaaa%3B%0A%09%09%09%09%09%09%09%09margin%3A%202px%200%200%200%3B%0A%09%09%09%09%09%09%09%09padding%3A%204px%3B%0A%09%09%09%09%09%09%09%09background-color%3A%20%23fafcfe%3B%0A%09%09%09%09%09%09%09%09font%3A%2014px%20Times%20New%20Roman%3B%0A%09%09%09%09%09%09%09%09-moz-user-select%3A%20text%3B%0A%09%09%09%09%09%09%09%7D%0A%09%09%09%09%09%09%5D%5D%26gt%3B%0A%09%09%09%09%09%26lt%3B/html%3Astyle%26gt%3B%0A%09%09%09%09%26lt%3B/html%3Ahead%26gt%3B%0A%09%09%09%09%26lt%3Bhtml%3Abody%26gt%3B%0A%09%09%09%09%09%26lt%3Bhtml%3Adiv%20id%3D%22div1%22%26gt%3B%0A%09%09%09%09%09%09%26lt%3Bhtml%3Adiv%20id%3D%22desc01%22%26gt%3B%u041F%u0435%u0440%u0435%u0432%u043E%u0434%u0438%u043C...%26lt%3B/html%3Adiv%26gt%3B%0A%09%09%09%09%09%26lt%3B/html%3Adiv%26gt%3B%0A%09%09%09%09%09%26lt%3Bhtml%3Aiframe%20id%3D%22ifr01%22/%26gt%3B%0A%09%09%09%09%26lt%3B/html%3Abody%26gt%3B%0A%09%09%09%26lt%3B/html%3Ahtml%26gt%3B%0A%09%09%26lt%3B/box%26gt%3B%0A%09%26lt%3B/window%26gt%3B%26lt%3B/%26gt%3B%3B%0A%09window.%20openDialog%20%28%22data%3Aapplication/vnd.mozilla.xul+xml%2C%22%20+%20dialog.%20toXMLString%20%28%29%2C%20btoa%20%28escape%20%28text%29%29%2C%20%22chrome%2Cdependent%2Cminimizable%2Cdialog%3Dno%22%29%3B%0A%7D%3B%0Athis.%20cbTranslatePage%20%3D%20function%20%28%29%0A%7B%0A%09var%20lng%20%3D%20%28getBrowser%20%28%29.%20contentDocument.%20defaultView.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22%20+%0A%09%09%09%20%20escape%20%28getBrowser%20%28%29.%20contentDocument.%20location.%20href%29%20+%0A%09%09%09%20%20%22%26amp%3Bhl%3D%22%20+%0A%09%09%09%20%20lng%20+%0A%09%09%09%20%20%22%26amp%3Blangpair%3Dauto%7Cru%26amp%3Btbb%3D1%22%20+%0A%09%09%09%20%20%28getBrowser%20%28%29.%20contentDocument.%20charset%3F%0A%09%09%09%20%20%09%22%26amp%3Bie%3D%22%20+%20getBrowser%20%28%29.%20contentDocument.%20charset%3A%0A%09%09%09%09%20%20%22%22%29%3B%0A%09%09%20%20getBrowser%20%28%29.%20addTab%20%28url%2C%20null%2C%20null%29%3B%0A%09return%3B%0A%7D%3B%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Deim0s

Если брать именно оригинальный Гугловский скрипт, можно ли сделать что бы он запускался в новой вкладке, а не как через getBrowser (). contentDocument. location. href = "", в текущей?

У меня на этот счёт пока что нет никаких обещающих идей, к сожалению.

Можно попросить кнопку, для Get File Size, что то не соображу какие аргументы прописать, хотелось бы брать текстовые ссылки и если возможно урлы из выделенных.

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

Сделал кнопку для Promt-X из Promt 7, через goDoCommand ("cmd_copy");, но подозреваю что много лишнего, как приблизительно должен выглядеть код? (Promt-X, сам берёт из буфера выделенное, при запуске).

Сложно сказать, не видя кода.

И последний вопрос - возможно ли сделать проверку орфографии с помощью MS Office, через известный скрипт Spell.vbs.

Я нашёл в google код для запуска spell.vbs:

Выделить код

Код:

Item, "проверка орфографии" = Select all & Copy & Execute Program, "Spell.vbs","%c"

по аналогии, должно быть что-то вроде

Выделить код

Код:

goDoCommand ("cmd_selectAll");
goDoCommand ("cmd_copy");
function startProcess (path, arg1, arg2)
{
    var file = Components. classes["@mozilla.org/file/local;1"].
           createInstance (Components.interfaces.nsILocalFile);
    var process = Components. classes ["@mozilla.org/process/util;1"].
              getService (Components. interfaces. nsIProcess);
    file. initWithPath (path);
    process. init (file);
    process. run (false, [arg1, arg2], 2); 
}
startProcess ("c:\\winxp\\system32\\wscript.exe", "c:\\path\\to\\vbsspell\\spell.vbs", "\"" + getBrowser (). contentDocument. defaultView. getSelection () + "\"");

Но проверить не могу, MSO у меня сейчас нет (как и Promt'а)

Anton
По скрипту для spell.vbs:
Спасибо большое, работает отлично, я правда (и в опере то же) убрал "selectAll", что бы проверять только выделенный текст, в том скрипте, что Вы написали, все функции работают как надо - проверяет любой выделенный текст (если убрать "cmd_selectAll"), предлагает замену ошибочных слов, в форме ответа автоматически заменяет выбранное, ещё раз спасибо, неплохое дополнение к стандартной проверке FF.
По Promt-X из Promt 7:
Запускаю скриптом, который нашёл в начале топика, у меня выглядит так:

Выделить код

Код:

goDoCommand ("cmd_copy");
var path='D:\\Soft\\PRMT6\\PRMTX\\prmtx.exe';  var arguments=['']; var file = Components.classes['@mozilla.org/file/local;1']     .createInstance(Components.interfaces.nsILocalFile); var process = Components.classes['@mozilla.org/process/util;1']     .getService(Components.interfaces.nsIProcess);  file.initWithPath(path);   process.init(file);  process.run(false,arguments,arguments.length);

всё работает, но хотел спросить, может лишнее что то?
По Get File Size:
Есть такая не плохая утилита Get-File-Size, у меня стоит расширение Extended Link Properties, с аналогичными функциями, но он не берёт текстовые ссылки вида _http://www.ru/программа.exe, хотелось бы кнопку для Get-File-Size. Для оперы выглядит так:

Выделить код

Код:

Execute Program,"C:\Program Files\UnH Solutions\Get File Size\GetFileSize.exe","/url:%t"

.

всё работает, но хотел спросить, может лишнее что то?

По-моему, ничего лишнего. Разве что, наверное можно через file. launch (), раз без аргументов, но это, не особенно важно, я думаю.

Для Get-File-Size, кажется, так:

Выделить код

Код:

function startProcess (path, arg1)
{
    var file = Components. classes["@mozilla.org/file/local;1"].
           createInstance (Components.interfaces.nsILocalFile);
    var process = Components. classes ["@mozilla.org/process/util;1"].
              getService (Components. interfaces. nsIProcess);
    file. initWithPath (path);
    process. init (file);
    process. run (false, [arg1], 1); 
}
startProcess ("c:\\program files\\UnH Solutions\\Get File Size\\GetFileSize.exe", "/url:" + getBrowser (). contentDocument. defaultView. getSelection ());

Deim0s не проще ли поставить Get File Size ;)

Anton

Для Get-File-Size, кажется, так:

Не много не получается, если взять любую текстовую ссылку, к примеру ту же: _http://www.ru/программа.exe, выделить всё после _, то в опере получается нормально:
http://i016.radikal.ru/0807/3a/2fe395f81d7b.png
В FF, через код который Вы написали, получается так:
http://i082.radikal.ru/0807/79/984b2f150621.png
и почему то не берёт ссылки из полей ввода.
Z&N
Спасибо, но я расширениями не увлекаюсь, стоят несколько штук, только самые необходимые, без которых ни как, всё остальное стараюсь делать через: userChrome.css и userContent.css, ещё и познавательно к тому же :). Да и Get-File-Size всё равно установлен, почему б не попользоваться.

Deim0s
Тогда так:

Выделить код

Код:

function startProcess (path, arg1)
{
    var file = Components. classes["@mozilla.org/file/local;1"].
           createInstance (Components.interfaces.nsILocalFile);
    var process = Components. classes ["@mozilla.org/process/util;1"].
              getService (Components. interfaces. nsIProcess);
    file. initWithPath (path);
    process. init (file);
    process. run (false, [arg1], 1); 
}
var sel = document. commandDispatcher. focusedWindow. getSelection (). toString () ||
      document. commandDispatcher. focusedElement. value;
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "windows-1251";
sel = suc. ConvertFromUnicode (sel);
startProcess ("c:\\program files\\UnH Solutions\\Get File Size\\GetFileSize.exe", "/url:" + sel);

Anton
Спасибо, так работает как надо, осталось маленькое но (если я Вам не надоел ещё, с этим GetFileSize'oм :)), в поле ответа копирует не только выделенное, а всё. Выглядит так, если к примеру в поле ответа ссылка вида: Скачать_http://www.ru/программа.exe
и я выделяю всё что после "Скачать_", то получается так:
http://i012.radikal.ru/0807/22/1c3fc906b5f7.png
И отсюда ещё вопрос: вот Вы написали скрипт для GetFileSize, он берёт выделенное ото всюду и из полей ввода в том числе, а вот скрипт Google-translate, не может брать не из полей ввода, не из полей ответа, можно это исправить? (для скрипта из поста № 567, к примеру, он попроще вроде).

Anton
СПАСИБО!!!
Релиз кнопок состоялся. Замечательные кнопочки получились!!!

Погонял кнопочки по сайтам и обнаружились некоторые неудобства касательно всплывающего окошка:
1. Переведенный текст теряет исходный формат. Трудно читать и сравнивать с оригиналом.
2. Выделить мышкой текст во всплывающем окошке можно, а скопировать через контекстое меню в буфер обмена не получается - само меню не появляется. А хотелось бы.
3. Размер всплывающего окошка.
Ширина хорошая, больше не надо.
В зависимости от знаков в тексте окошко меняет свою высоту.
Для эксперимента (хотя это скорее всего не понадобится) попробовал перевод большого текста. Получилась большая высота окошка и стало неудобно сравнивать перевод с оригиналом.
Оптимально - соотношение ширины и высоты - 1 : 1,0...1,1 с прокруткой текста.
Можно поправить?

Deim0s
Надо заменить

Выделить код

Код:

var sel = document. commandDispatcher. focusedWindow. getSelection (). toString () ||
      document. commandDispatcher. focusedElement. value;

на

Выделить код

Код:

var sel = document. commandDispatcher. focusedWindow. getSelection (). toString ();
if (!sel)
{
    var el = document. commandDispatcher. focusedElement;
    sel = el. value. substring (el. selectionStart, el. selectionEnd);
}

То же самое и для google-трансляторов

Vvld

1. Переведенный текст теряет исходный формат. Трудно читать и сравнивать с оригиналом.

Поскольку мне неочевидно, как это сделать в реализации с всплывающим окошком, пришлось сделать реализацию, копирующую поведение (и код) скрипта для Opera более точно. После чего все последующие замечания отпадают.
кнопка без меню:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton2%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09window.%20cbTranslateButton2X%20%3D%20event.%20clientX%3B%0A%09%09%09window.%20cbTranslateButton2Y%20%3D%20event.%20clientY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%3B%0A%09window.%20cbTranslateButton2%20%3D%20true%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%09original%20script%20is%20operajs%20Google-Translate%20v%201.6.12%0A%09opera%20ujs%20is%20http%3A//lexi.ucoz.ru/google-translate.js%0A%09original%20author%3A%20Lex1%0A%09modified%20by%20Anton%0A*/%0A%0Aconst%20UJS_TOOLBAR_ID%20%3D%20%22ujs_toolbar%22%3B%0Aconst%20UJS_GOOGLE_TRANSLATE_FRAME_ID%20%3D%20%22ujs_googletranslateframe%22%3B%0A%0Afunction%20ujs_createWindow%20%28txt%29%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20win%20%3D%20doc.%20defaultView%3B%0A%09var%20h%2C%20w%3B%0A%20%20%20%20var%20txtLen%20%3D%20txt.%20length%3B%0A%20%20%20%20var%20tbId%20%3D%20UJS_TOOLBAR_ID%3B%0A%20%20%20%20if%20%28arguments.%20length%20%3E%202%29%0A%20%20%20%20%20%20%20%20tbId%20+%3D%20arguments%20%5B2%5D%3B%0A%09var%20toolbar%20%3D%20doc.%20getElementById%20%28tbId%29%3B%0A%20%20%20%20if%20%28toolbar%29%0A%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%3B%0A%20%20%20%20toolbar%20%3D%20doc.%20createElement%20%28%27div%27%29%3B%0A%20%20%20%20toolbar.%20id%20%3D%20tbId%3B%0A%09if%20%28arguments.%20length%20%3D%3D%205%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20w%20%3D%20arguments%20%5B3%5D%3B%0A%20%20%20%20%20%20%20%20h%20%3D%20arguments%20%5B4%5D%0A%20%20%20%20%7D%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20h%20%3D%2015%3B%0A%20%20%20%20%20%20%20%20w%20%3D%2020%3B%0A%20%20%20%20%20%20%20%20if%20%28txtLen%20%3E%202000%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2050%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2066%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%20if%20%28txtLen%20%3E%20250%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2025%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2033%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20h%20%3D%20parseInt%20%28h%20*%20win.%20innerHeight%20/%20100%29%3B%0A%20%20%20%20%20%20%20%20w%20%3D%20parseInt%20%28w%20*%20win.%20innerWidth%20/%20100%29%0A%20%20%20%20%7D%3B%0A%09var%20title%20%3D%20%28arguments.%20length%20%3E%201%29%20%3Farguments%20%5B1%5D%3A%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%3B%0A%09toolbar.%20innerHTML%20%3D%20%27%3Cimg%20src%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIyt5EXfQAAAStJREFUOE+1k9tqhDAQhtOHqO37P4E3IlQFQQSvBBVEl1TBVVi1B+1C8XAx3QmNqIVqhBV+DEPmy8z8ycPX9Ruq6kLqqiRHvkfpiUjSMyGUJtB1HfR9D8MwCAlz6voNkEGCIGDJeZ5DURTCatoWNE0D4nk+jOMoDMBD8fDPpoGXu4OyLAPUutV1/N+KcPPNPaY4jidYktwG+hunlLL4ZmsI4EloxhxiGAY4jgNpmm6D8DQEcBj/I8SyrKnSzYr4bDzPm2CKoiwgu1rDTfN2eEWu6y4M2KxoPRNVVRcz4xXvdm0+k/nMwjDc5xraa9v2n5kgwDRNMdfQXtT6Us7jy9Z8n738Iw82O5/hUpag6zqQ0+kVmqZld0NUURSxl48M8v5xZQtZlg8Jc5HxA5fIE73hTda3AAAAAElFTkSuQmCC%22%20title%3D%22Close%22%20width%3D%2218%22%20height%3D%2218%22%3E%26nbsp%3B%27%20+%20title%20+%20%27%3Cdiv%3E%3C/div%3E%27%3B%0A%09toolbar.%20setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bbackground%3Awhite%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bheight%3Aauto%3Bwidth%3A%27%20+%20w%20+%20%27px%3Bfont%3A16px%20Times%20New%20Roman%3Bborder%3A1px%20solid%20gray%3Bpadding%3A3px%3Bz-index%3A9997%3Boverflow%3Avisible%3Bcursor%3Amove%3B%27%29%3B%0A%09toolbar.%20addEventListener%0A%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%27mousedown%27%2C%0A%20%20%20%20%20%20%20%20function%20%28e%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.%20target%20%3D%3D%20toolbar%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.%20style.%20zIndex%20%3D%209998%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20grabX%20%3D%20e.%20clientX%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20grabY%20%3D%20e.%20clientY%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20origX%20%3D%20parseInt%20%28toolbar.%20style.%20left%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20origY%20%3D%20parseInt%20%28toolbar.%20style.%20top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20dnd%20%3D%20function%20%28e%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%09%09%09%20%20%20%20toolbar.%20style.%20left%20%3D%20origX%20+%20e.%20clientX%20-%20grabX%20+%20%27px%27%3B%0A%09%09%09%09%20%20%20%20toolbar.%20style.%20top%20%3D%20origY%20+%20e.%20clientY%20-%20grabY%20+%20%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20addEventListener%20%28%27mousemove%27%2C%20dnd%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20addEventListener%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27mouseup%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20%28e%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20removeEventListener%20%28%27mousemove%27%2C%20dnd%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.%20style.%20zIndex%20%3D%209997%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20false%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20false%0A%20%20%20%20%29%3B%0A%09var%20clse%20%3D%20toolbar.%20firstChild%3B%0A%20%20%20%20clse.%20setAttribute%20%28%27style%27%2C%20%27float%3Aright%3Bbackground%3Awhite%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3B%27%29%3B%0A%09clse.%20addEventListener%0A%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%27click%27%2C%20function%20%28%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20false%0A%20%20%20%20%29%3B%0A%09var%20textbar%20%3D%20toolbar.%20lastChild%3B%0A%20%20%20%20textbar.%20innerHTML%20%3D%20txt%3B%0A%09textbar.%20setAttribute%20%28%27style%27%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaaaaa%3Bmargin%3A2px%200%200%200%3Bpadding%3A4px%3Bbackground-color%3A%23fafcfe%3Bfont%3A14px%20Times%20New%20Roman%3Bheight%3A%27%20+%20h%20+%20%27px%3Bwidth%3Aauto%3Boverflow%3Aauto%3Bcursor%3Atext%3B%27%29%3B%0A%09doc.%20documentElement.%20appendChild%20%28toolbar%29%3B%0A%09var%20halfWidth%20%3D%20parseInt%20%28toolbar.%20offsetWidth%20/%202%29%3B%0A%09var%20strict%20%3D%20doc.%20compatMode%20%3D%3D%20%27CSS1Compat%27%3B%0A%09var%20mX%20%3D%20%28strict%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientWidth%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientWidth%29%20-%20toolbar.%20offsetWidth%3B%0A%09var%20mY%20%3D%20%28strict%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientHeight%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientHeight%29%20-%20toolbar.%20offsetHeight%3B%0A%20%20%20%20var%20lastClickX%20%3D%20window.%20cbTranslateButton2X%3B%0A%20%20%20%20var%20lastClickY%20%3D%20window.%20cbTranslateButton2Y%3B%0A%09toolbar.%20style.%20left%20%3D%20%28%28lastClickX%20%3C%20mX%20+%20halfWidth%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20%3E%20halfWidth%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20-%20halfWidth%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mX%29%20+%20%22px%22%3B%0A%09toolbar.%20style.%20top%20%3D%20%28%28lastClickY%20%3C%20mY%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastClickY%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mY%29%20+%20%22px%22%3B%0A%09toolbar.%20style.%20visibility%20%3D%20%27visible%27%3B%0A%20%20%20%20return%20textbar%3B%0A%7D%0A%0Afunction%20frameOnLoad%20%28event%29%0A%7B%0A%09var%20fr%20%3D%20event.%20currentTarget%3B%0A%09var%20tbId%20%3D%20fr.%20id.%20substring%20%28UJS_GOOGLE_TRANSLATE_FRAME_ID.%20length%29%3B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20toolbar%20%3D%20doc.%20getElementById%20%28UJS_TOOLBAR_ID%20+%20tbId%29%3B%0A%09var%20frdoc%20%3D%20fr.%20contentDocument%3B%0A%09var%20a%20%3D%20frdoc.%20getElementById%20%28%27autotrans%27%29%3B%0A%09var%20title%20%3D%20%28a%20%26%26%20%21/%23808080/.%20test%20%28a.%20innerHTML%29%29%3F%0A%09%09%09%09%09%27%26nbsp%3B-%26nbsp%3B%27%20+%20a.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%09%09%09%09%09%27%27%3B%0A%09var%20result%20%3D%20frdoc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%09var%20ancor%20%3D%20toolbar.%20getElementsByTagName%20%28%22a%22%29%20%5B0%5D%3B%0A%09ancor.%20innerHTML%20+%3D%20title%3B%0A%09ancor.%20nextSibling.%20innerHTML%20%3D%20result%3B%0A%09setTimeout%0A%09%28%0A%09%09function%20%28%29%0A%09%09%7B%0A%09%09%09fr.%20parentNode.%20removeChild%20%28fr%29%3B%0A%09%09%7D%2C%0A%09%090%0A%09%29%3B%0A%7D%0A%0Afunction%20google_translate%20%28language%29%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20win%20%3D%20doc.%20defaultView%3B%0A%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%20%20%20%20if%20%28t%20%26%26%20location.%20hostname%20%21%3D%20%27translate.google.com%27%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20ujs_createWindow%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%28lng%20%3D%3D%20%27ru%27%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27Translating%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu2026%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20btoa%20%28escape%20%28t%29%29%0A%20%20%20%20%20%20%20%20%29%3B%0A%09%09var%20gtfId%20%3D%20UJS_GOOGLE_TRANSLATE_FRAME_ID%3B%0A%09%09var%20fr%20%3D%20doc.%20getElementById%20%28gtfId%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21fr%29%0A%20%20%20%20%20%20%20%20%20%20%20%20fr%20%3D%20doc.%20createElement%20%28%27iframe%27%29%3B%0A%09%09fr.%20setAttribute%20%28%27id%27%2C%20gtfId%20+%20btoa%20%28escape%20%28t%29%29%29%3B%0A%20%20%20%20%20%20%20%20fr.%20setAttribute%20%28%27frameborder%27%2C%20%270%27%29%3B%0A%09%09fr.%20setAttribute%20%28%27style%27%2C%20%27width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3Bposition%3Aabsolute%3Bleft%3A-999em%3B%27%29%3B%0A%09%09fr.%20setAttribute%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%27src%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate_t%3Ftext%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20encodeURIComponent%20%28t%29%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%26ujs%3Dgtt%27%0A%20%20%20%20%20%20%20%20%29%3B%0A%09%09fr.%20addEventListener%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%27load%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20frameOnLoad%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20false%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20doc.%20documentElement.%20appendChild%20%28fr%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%09getBrowser%20%28%29.%20addTab%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate%3Fu%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20escape%20%28doc.%20location.%20href%29%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%28doc.%20charset%3F%20%27%26ie%3D%27%20+%20doc.%20charset%3A%20%27%27%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20null%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%29%3B%0A%09%7D%0A%7D%0A%0Agoogle_translate%20%28%22auto%7Cru%22%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

кнопка с меню:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton2%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09window.%20cbTranslateButton2X%20%3D%20event.%20clientX%3B%0A%09%09%09window.%20cbTranslateButton2Y%20%3D%20event.%20clientY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%3B%0A%09window.%20cbTranslateButton2%20%3D%20true%3B%0A%7D%0Avar%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%20%20%20%20%0Aoncommand%3D%22this.parentNode.cbButtonDoMenuCommand%28event%29%22%3E%0A%09%3Cmenuitem%20value%3D%22Selection%22%20label%3D%22%u0412%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%22/%3E%0A%09%3Cmenuitem%20value%3D%22Page%22%20label%3D%22%u0421%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22/%3E%0A%3C/menupopup%3E%3B%0Amenu%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28menu.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Amenu.%20setAttribute%20%28%22id%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20cbButtonDoMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%09var%20itemNum%20%3D%20event.%20target.%20getAttribute%20%28%22value%22%29%3B%0A%09switch%20%28itemNum%29%0A%09%7B%0A%09%09case%20%22Selection%22%3A%0A%09%09%09google_translate%20%28%22auto%7Cru%22%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22Page%22%3A%0A%09%09%09this.%20cbTranslatePage%20%28%22auto%7Cru%22%29%3B%0A%09%09%09break%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20cbTranslatePage%20%3D%20function%20%28language%29%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20win%20%3D%20doc.%20defaultView%3B%0A%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09getBrowser%20%28%29.%20addTab%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate%3Fu%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20escape%20%28doc.%20location.%20href%29%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%28doc.%20charset%3F%20%27%26ie%3D%27%20+%20doc.%20charset%3A%20%27%27%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20null%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20null%0A%20%20%20%20%20%20%20%20%29%3B%0A%7D%3B%0A%0Aconst%20UJS_TOOLBAR_ID%20%3D%20%22ujs_toolbar%22%3B%0Aconst%20UJS_GOOGLE_TRANSLATE_FRAME_ID%20%3D%20%22ujs_googletranslateframe%22%3B%0A%0Afunction%20ujs_createWindow%20%28txt%29%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20win%20%3D%20doc.%20defaultView%3B%0A%09var%20h%2C%20w%3B%0A%20%20%20%20var%20txtLen%20%3D%20txt.%20length%3B%0A%20%20%20%20var%20tbId%20%3D%20UJS_TOOLBAR_ID%3B%0A%20%20%20%20if%20%28arguments.%20length%20%3E%202%29%0A%20%20%20%20%20%20%20%20tbId%20+%3D%20arguments%20%5B2%5D%3B%0A%09var%20toolbar%20%3D%20doc.%20getElementById%20%28tbId%29%3B%0A%20%20%20%20if%20%28toolbar%29%0A%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%3B%0A%20%20%20%20toolbar%20%3D%20doc.%20createElement%20%28%27div%27%29%3B%0A%20%20%20%20toolbar.%20id%20%3D%20tbId%3B%0A%09if%20%28arguments.%20length%20%3D%3D%205%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20w%20%3D%20arguments%20%5B3%5D%3B%0A%20%20%20%20%20%20%20%20h%20%3D%20arguments%20%5B4%5D%0A%20%20%20%20%7D%0A%20%20%20%20else%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20h%20%3D%2015%3B%0A%20%20%20%20%20%20%20%20w%20%3D%2020%3B%0A%20%20%20%20%20%20%20%20if%20%28txtLen%20%3E%202000%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2050%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2066%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%20if%20%28txtLen%20%3E%20250%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2025%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2033%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20h%20%3D%20parseInt%20%28h%20*%20win.%20innerHeight%20/%20100%29%3B%0A%20%20%20%20%20%20%20%20w%20%3D%20parseInt%20%28w%20*%20win.%20innerWidth%20/%20100%29%0A%20%20%20%20%7D%3B%0A%09var%20title%20%3D%20%28arguments.%20length%20%3E%201%29%20%3Farguments%20%5B1%5D%3A%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%3B%0A%09toolbar.%20innerHTML%20%3D%20%27%3Cimg%20src%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIyt5EXfQAAAStJREFUOE+1k9tqhDAQhtOHqO37P4E3IlQFQQSvBBVEl1TBVVi1B+1C8XAx3QmNqIVqhBV+DEPmy8z8ycPX9Ruq6kLqqiRHvkfpiUjSMyGUJtB1HfR9D8MwCAlz6voNkEGCIGDJeZ5DURTCatoWNE0D4nk+jOMoDMBD8fDPpoGXu4OyLAPUutV1/N+KcPPNPaY4jidYktwG+hunlLL4ZmsI4EloxhxiGAY4jgNpmm6D8DQEcBj/I8SyrKnSzYr4bDzPm2CKoiwgu1rDTfN2eEWu6y4M2KxoPRNVVRcz4xXvdm0+k/nMwjDc5xraa9v2n5kgwDRNMdfQXtT6Us7jy9Z8n738Iw82O5/hUpag6zqQ0+kVmqZld0NUURSxl48M8v5xZQtZlg8Jc5HxA5fIE73hTda3AAAAAElFTkSuQmCC%22%20title%3D%22Close%22%20width%3D%2218%22%20height%3D%2218%22%3E%26nbsp%3B%27%20+%20title%20+%20%27%3Cdiv%3E%3C/div%3E%27%3B%0A%09toolbar.%20setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bbackground%3Awhite%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bheight%3Aauto%3Bwidth%3A%27%20+%20w%20+%20%27px%3Bfont%3A16px%20Times%20New%20Roman%3Bborder%3A1px%20solid%20gray%3Bpadding%3A3px%3Bz-index%3A9997%3Boverflow%3Avisible%3Bcursor%3Amove%3B%27%29%3B%0A%09toolbar.%20addEventListener%0A%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%27mousedown%27%2C%0A%20%20%20%20%20%20%20%20function%20%28e%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e.%20target%20%3D%3D%20toolbar%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.%20style.%20zIndex%20%3D%209998%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20grabX%20%3D%20e.%20clientX%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20grabY%20%3D%20e.%20clientY%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20origX%20%3D%20parseInt%20%28toolbar.%20style.%20left%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20origY%20%3D%20parseInt%20%28toolbar.%20style.%20top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20dnd%20%3D%20function%20%28e%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%09%09%09%20%20%20%20toolbar.%20style.%20left%20%3D%20origX%20+%20e.%20clientX%20-%20grabX%20+%20%27px%27%3B%0A%09%09%09%09%20%20%20%20toolbar.%20style.%20top%20%3D%20origY%20+%20e.%20clientY%20-%20grabY%20+%20%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20addEventListener%20%28%27mousemove%27%2C%20dnd%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20addEventListener%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27mouseup%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20%28e%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20removeEventListener%20%28%27mousemove%27%2C%20dnd%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toolbar.%20style.%20zIndex%20%3D%209997%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20false%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20false%0A%20%20%20%20%29%3B%0A%09var%20clse%20%3D%20toolbar.%20firstChild%3B%0A%20%20%20%20clse.%20setAttribute%20%28%27style%27%2C%20%27float%3Aright%3Bbackground%3Awhite%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3B%27%29%3B%0A%09clse.%20addEventListener%0A%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%27click%27%2C%20function%20%28%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20false%0A%20%20%20%20%29%3B%0A%09var%20textbar%20%3D%20toolbar.%20lastChild%3B%0A%20%20%20%20textbar.%20innerHTML%20%3D%20txt%3B%0A%09textbar.%20setAttribute%20%28%27style%27%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaaaaa%3Bmargin%3A2px%200%200%200%3Bpadding%3A4px%3Bbackground-color%3A%23fafcfe%3Bfont%3A14px%20Times%20New%20Roman%3Bheight%3A%27%20+%20h%20+%20%27px%3Bwidth%3Aauto%3Boverflow%3Aauto%3Bcursor%3Atext%3B%27%29%3B%0A%09doc.%20documentElement.%20appendChild%20%28toolbar%29%3B%0A%09var%20halfWidth%20%3D%20parseInt%20%28toolbar.%20offsetWidth%20/%202%29%3B%0A%09var%20strict%20%3D%20doc.%20compatMode%20%3D%3D%20%27CSS1Compat%27%3B%0A%09var%20mX%20%3D%20%28strict%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientWidth%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientWidth%29%20-%20toolbar.%20offsetWidth%3B%0A%09var%20mY%20%3D%20%28strict%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientHeight%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientHeight%29%20-%20toolbar.%20offsetHeight%3B%0A%20%20%20%20var%20lastClickX%20%3D%20window.%20cbTranslateButton2X%3B%0A%20%20%20%20var%20lastClickY%20%3D%20window.%20cbTranslateButton2Y%3B%0A%09toolbar.%20style.%20left%20%3D%20%28%28lastClickX%20%3C%20mX%20+%20halfWidth%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20%3E%20halfWidth%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20-%20halfWidth%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mX%29%20+%20%22px%22%3B%0A%09toolbar.%20style.%20top%20%3D%20%28%28lastClickY%20%3C%20mY%29%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastClickY%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mY%29%20+%20%22px%22%3B%0A%09toolbar.%20style.%20visibility%20%3D%20%27visible%27%3B%0A%20%20%20%20return%20textbar%3B%0A%7D%0A%0Afunction%20frameOnLoad%20%28event%29%0A%7B%0A%09var%20fr%20%3D%20event.%20currentTarget%3B%0A%09var%20tbId%20%3D%20fr.%20id.%20substring%20%28UJS_GOOGLE_TRANSLATE_FRAME_ID.%20length%29%3B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20toolbar%20%3D%20doc.%20getElementById%20%28UJS_TOOLBAR_ID%20+%20tbId%29%3B%0A%09var%20frdoc%20%3D%20fr.%20contentDocument%3B%0A%09var%20a%20%3D%20frdoc.%20getElementById%20%28%27autotrans%27%29%3B%0A%09var%20title%20%3D%20%28a%20%26%26%20%21/%23808080/.%20test%20%28a.%20innerHTML%29%29%3F%0A%09%09%09%09%09%27%26nbsp%3B-%26nbsp%3B%27%20+%20a.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%09%09%09%09%09%27%27%3B%0A%09var%20result%20%3D%20frdoc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%09var%20ancor%20%3D%20toolbar.%20getElementsByTagName%20%28%22a%22%29%20%5B0%5D%3B%0A%09ancor.%20innerHTML%20+%3D%20title%3B%0A%09ancor.%20nextSibling.%20innerHTML%20%3D%20result%3B%0A%09setTimeout%0A%09%28%0A%09%09function%20%28%29%0A%09%09%7B%0A%09%09%09fr.%20parentNode.%20removeChild%20%28fr%29%3B%0A%09%09%7D%2C%0A%09%090%0A%09%29%3B%0A%7D%0A%0Afunction%20google_translate%20%28language%29%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20win%20%3D%20doc.%20defaultView%3B%0A%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%20%20%20%20if%20%28t%20%26%26%20location.%20hostname%20%21%3D%20%27translate.google.com%27%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20ujs_createWindow%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%28lng%20%3D%3D%20%27ru%27%3F%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27Translating%27%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu2026%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20btoa%20%28escape%20%28t%29%29%0A%20%20%20%20%20%20%20%20%29%3B%0A%09%09var%20gtfId%20%3D%20UJS_GOOGLE_TRANSLATE_FRAME_ID%3B%0A%09%09var%20fr%20%3D%20doc.%20getElementById%20%28gtfId%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21fr%29%0A%20%20%20%20%20%20%20%20%20%20%20%20fr%20%3D%20doc.%20createElement%20%28%27iframe%27%29%3B%0A%09%09fr.%20setAttribute%20%28%27id%27%2C%20gtfId%20+%20btoa%20%28escape%20%28t%29%29%29%3B%0A%20%20%20%20%20%20%20%20fr.%20setAttribute%20%28%27frameborder%27%2C%20%270%27%29%3B%0A%09%09fr.%20setAttribute%20%28%27style%27%2C%20%27width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3Bposition%3Aabsolute%3Bleft%3A-999em%3B%27%29%3B%0A%09%09fr.%20setAttribute%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%27src%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate_t%3Ftext%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20encodeURIComponent%20%28t%29%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%26ujs%3Dgtt%27%0A%20%20%20%20%20%20%20%20%29%3B%0A%09%09fr.%20addEventListener%0A%20%20%20%20%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%27load%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20frameOnLoad%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20false%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20doc.%20documentElement.%20appendChild%20%28fr%29%3B%0A%20%20%20%20%7D%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%09original%20script%20is%20operajs%20Google-Translate%20v%201.6.12%0A%09opera%20ujs%20is%20http%3A//lexi.ucoz.ru/google-translate.js%0A%09original%20author%3A%20Lex1%0A%09modified%20by%20Anton%0A*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Anton

Надо заменить... на...

Спасибо, для GetFileSize, всё работает отлично, берёт текстовые ссылки от куда угодно и правильно.

То же самое и для google-трансляторов

Покрутил я извилинами, но безрезультатно, помогите если не трудно, пользую такой скрипт (как из поста № 567):

Выделить код

Код:

var t = content.getSelection().toString();
var c = content.document.characterSet;
var loc = content.location.href;
getBrowser().loadOneTab(
    t
        ? "http://translate.google.ru/translate_t?text=" + t + "&hl=ru&langpair=auto|ru&tbb=1&ie=" + c
        : /^https?:\/\//i.test(loc)
            ? "http://translate.google.ru/translate?u=" + escape(loc) + "&hl=ru&langpair=auto|ru&tbb=1&ie=" + c
            : "http://translate.google.ru/translate_t?hl=ru",
    null, null, null, false /* load in background */, false
);

Ещё к Вам, как к разработчику, такой вопрос: если в сторонних установленных расширениях не указан собственный адрес "Страницы поддержки", они все берут его от Custom Buttons, примеры:
http://i005.radikal.ru/0807/6e/f6e9b1bcb0d7.png
http://i069.radikal.ru/0807/e7/af57dcddc968.png
абсолютно ни чему не мешает, просто любопытство.

Покрутил я извилинами, но безрезультатно, помогите если не трудно, пользую такой скрипт (как из поста № 567):

Выделить код

Код:

var t = document. commandDispatcher. focusedWindow. getSelection (). toString ();
if (!t)
{
    var el = document. commandDispatcher. focusedElement;
    t = el. value. substring (el. selectionStart, el. selectionEnd);
}

Далее без изменений:

Выделить код

Код:

var c = content.document.characterSet;
var loc = content.location.href;
getBrowser().loadOneTab(
    t
        ? "http://translate.google.ru/translate_t?text=" + t + "&hl=ru&langpair=auto|ru&tbb=1&ie=" + c
        : /^https?:\/\//i.test(loc)
            ? "http://translate.google.ru/translate?u=" + escape(loc) + "&hl=ru&langpair=auto|ru&tbb=1&ie=" + c
            : "http://translate.google.ru/translate_t?hl=ru",
    null, null, null, false /* load in background */, false
);

если в сторонних установленных расширениях не указан собственный адрес "Страницы поддержки", они все берут его от Custom Buttons, примеры:

Это нехорошо, будет исправлено. Спасибо за информацию об ошибке.

Anton
Всё, что Вы написали - отлично работает, спасибо большое!
P.S. Чуть поторопился. В таком варианте, выделенный текст берёт отовсюду и переводит, а страницу перестал переводить. В Консоли ошибок, ссылается на эту строку:

Выделить код

Код:

t = el. value. substring (el. selectionStart, el. selectionEnd);

Исправил ошибку для предыдущего варианта кнопок перевода, связанную с переключением вкладок в момент перевода:
без меню:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton2%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09getBrowser%20%28%29.%20contentDocument.%20defaultView.%20cbTranslateButton2X%20%3D%20event.%20clientX%3B%0A%09%09%09getBrowser%20%28%29.%20contentDocument.%20defaultView.%20cbTranslateButton2Y%20%3D%20event.%20clientY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%3B%0A%09window.%20cbTranslateButton2%20%3D%20true%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%09original%20script%20is%20operajs%20Google-Translate%20v%201.6.12%0A%09opera%20ujs%20is%20http%3A//lexi.ucoz.ru/google-translate.js%0A%09original%20author%3A%20Lex1%0A%09modified%20by%20Anton%0A*/%0A%0Aconst%20UJS_TOOLBAR_ID%20%3D%20%22ujs_toolbar%22%3B%0Aconst%20UJS_GOOGLE_TRANSLATE_FRAME_ID%20%3D%20%22ujs_googletranslateframe%22%3B%0A%0Afunction%20cbTranslatorButton%20%28browser%29%0A%7B%0A%09this.%20doc%20%3D%20browser.%20contentDocument%3B%0A%09this.%20win%20%3D%20browser.%20contentDocument.%20defaultView%3B%0A%7D%0AcbTranslatorButton.%20prototype%20%3D%0A%7B%0A%09doc%3A%20null%2C%0A%09win%3A%20null%2C%0A%09toolbar%3A%20null%2C%0A%09clse%3A%20null%2C%0A%09frame%3A%20null%2C%0A%09%0A%09grabX%3A%200%2C%0A%09origX%3A%200%2C%0A%09grabY%3A%200%2C%0A%09origY%3A%200%2C%0A%09%0A%09handleEvent%3A%20function%20%28event%29%0A%09%7B%0A%09%09switch%20%28event.%20type%29%0A%09%09%7B%0A%09%09%09case%20%22mousedown%22%3A%0A%09%09%09%09this.%20tbOnMouseDown%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22mousemove%22%3A%0A%09%09%09%09this.%20tbOnMouseMove%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22mouseup%22%3A%0A%09%09%09%09this.%20tbOnMouseUp%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22click%22%3A%0A%09%09%09%09this.%20clseOnClick%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22load%22%3A%0A%09%09%09%09this.%20frameOnLoad%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09default%3A%3B%0A%09%09%7D%0A%09%7D%2C%0A%09%0A%09tbOnMouseMove%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20toolbar.%20style.%20left%20%3D%20this.%20origX%20+%20event.%20clientX%20-%20this.%20grabX%20+%20%27px%27%3B%0A%09%09this.%20toolbar.%20style.%20top%20%3D%20this.%20origY%20+%20event.%20clientY%20-%20this.%20grabY%20+%20%27px%27%3B%0A%09%7D%2C%0A%09%0A%09tbOnMouseUp%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20doc.%20removeEventListener%20%28%27mousemove%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.%20toolbar.%20style.%20zIndex%20%3D%209997%3B%0A%09%7D%2C%0A%09%0A%09tbOnMouseDown%3A%20function%20%28event%29%0A%09%7B%0A%09%09if%20%28event.%20target%20%3D%3D%20this.%20toolbar%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20toolbar.%20style.%20zIndex%20%3D%209998%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20grabX%20%3D%20event.%20clientX%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20grabY%20%3D%20event.%20clientY%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20origX%20%3D%20parseInt%20%28this.%20toolbar.%20style.%20left%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20origY%20%3D%20parseInt%20%28this.%20toolbar.%20style.%20top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20doc.%20addEventListener%20%28%27mousemove%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20doc.%20addEventListener%20%28%27mouseup%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%09%7D%2C%0A%09%0A%09removeEventListener%3A%20function%20%28element%2C%20eventType%2C%20captureFlag%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09element.%20removeEventListener%20%28eventType%2C%20this%2C%20captureFlag%29%3B%0A%09%09%7D%0A%09%09catch%20%28err%29%20%7B%7D%0A%09%7D%2C%0A%09%0A%09removeElement%3A%20function%20%28element%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09element.%20parentNode.%20removeChild%20%28element%29%3B%0A%09%09%7D%0A%09%09catch%20%28err%29%20%7B%7D%0A%09%7D%2C%0A%09%0A%09clseOnClick%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20clse.%20removeEventListener%20%28%27click%27%2C%20this%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20toolbar%2C%20%27mousedown%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20doc%2C%20%27mousemove%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20doc%2C%20%27mouseup%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20frame%2C%20%27load%27%2C%20false%29%3B%0A%09%09this.%20removeElement%20%28this.%20toolbar%29%3B%0A%09%09this.%20removeElement%20%28this.%20frame%29%3B%0A%09%09this.%20frame%20%3D%20null%3B%0A%09%09this.%20clse%20%3D%20null%3B%0A%09%09this.%20toolbar%20%3D%20null%3B%0A%09%09this.%20win%20%3D%20null%3B%0A%09%09this.%20doc%20%3D%20null%3B%0A%09%7D%2C%0A%09%0A%09ujs_createWindow%3A%20function%20%28txt%29%0A%09%7B%0A%09%09var%20doc%20%3D%20this.%20doc%3B%0A%09%09var%20win%20%3D%20this.%20win%3B%0A%09%09var%20h%2C%20w%3B%0A%09%20%20%20%20var%20txtLen%20%3D%20txt.%20length%3B%0A%09%20%20%20%20var%20tbId%20%3D%20UJS_TOOLBAR_ID%3B%0A%09%20%20%20%20if%20%28arguments.%20length%20%3E%202%29%0A%09%20%20%20%20%20%20%20%20tbId%20+%3D%20arguments%20%5B2%5D%3B%0A%09%09var%20toolbar%20%3D%20doc.%20getElementById%20%28tbId%29%3B%0A%09%20%20%20%20if%20%28toolbar%29%0A%09%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%3B%0A%09%20%20%20%20toolbar%20%3D%20doc.%20createElement%20%28%27div%27%29%3B%0A%09%20%20%20%20this.%20toolbar%20%3D%20toolbar%3B%0A%09%20%20%20%20toolbar.%20id%20%3D%20tbId%3B%0A%09%09if%20%28arguments.%20length%20%3D%3D%205%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20arguments%20%5B3%5D%3B%0A%09%20%20%20%20%20%20%20%20h%20%3D%20arguments%20%5B4%5D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20h%20%3D%2015%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%2020%3B%0A%09%20%20%20%20%20%20%20%20if%20%28txtLen%20%3E%202000%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2050%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2066%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28txtLen%20%3E%20250%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2025%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2033%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20h%20%3D%20parseInt%20%28h%20*%20win.%20innerHeight%20/%20100%29%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20parseInt%20%28w%20*%20win.%20innerWidth%20/%20100%29%0A%09%20%20%20%20%7D%3B%0A%09%09var%20title%20%3D%20%28arguments.%20length%20%3E%201%29%20%3Farguments%20%5B1%5D%3A%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%3B%0A%09%09toolbar.%20innerHTML%20%3D%20%27%3Cimg%20src%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIyt5EXfQAAAStJREFUOE+1k9tqhDAQhtOHqO37P4E3IlQFQQSvBBVEl1TBVVi1B+1C8XAx3QmNqIVqhBV+DEPmy8z8ycPX9Ruq6kLqqiRHvkfpiUjSMyGUJtB1HfR9D8MwCAlz6voNkEGCIGDJeZ5DURTCatoWNE0D4nk+jOMoDMBD8fDPpoGXu4OyLAPUutV1/N+KcPPNPaY4jidYktwG+hunlLL4ZmsI4EloxhxiGAY4jgNpmm6D8DQEcBj/I8SyrKnSzYr4bDzPm2CKoiwgu1rDTfN2eEWu6y4M2KxoPRNVVRcz4xXvdm0+k/nMwjDc5xraa9v2n5kgwDRNMdfQXtT6Us7jy9Z8n738Iw82O5/hUpag6zqQ0+kVmqZld0NUURSxl48M8v5xZQtZlg8Jc5HxA5fIE73hTda3AAAAAElFTkSuQmCC%22%20title%3D%22Close%22%20width%3D%2218%22%20height%3D%2218%22%3E%26nbsp%3B%27%20+%20title%20+%20%27%3Cdiv%3E%3C/div%3E%27%3B%0A%09%09toolbar.%20setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bbackground%3Awhite%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bheight%3Aauto%3Bwidth%3A%27%20+%20w%20+%20%27px%3Bfont%3A16px%20Times%20New%20Roman%3Bborder%3A1px%20solid%20gray%3Bpadding%3A3px%3Bz-index%3A9997%3Boverflow%3Avisible%3Bcursor%3Amove%3B%27%29%3B%0A%09%09toolbar.%20addEventListener%20%28%27mousedown%27%2C%20this%2C%20false%29%3B%0A%09%09var%20clse%20%3D%20toolbar.%20firstChild%3B%0A%09%09this.%20clse%20%3D%20clse%3B%0A%09%20%20%20%20clse.%20setAttribute%20%28%27style%27%2C%20%27float%3Aright%3Bbackground%3Awhite%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3B%27%29%3B%0A%09%09clse.%20addEventListener%20%28%27click%27%2C%20this%2C%20false%29%3B%0A%09%09var%20textbar%20%3D%20toolbar.%20lastChild%3B%0A%09%20%20%20%20textbar.%20innerHTML%20%3D%20txt%3B%0A%09%09textbar.%20setAttribute%20%28%27style%27%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaaaaa%3Bmargin%3A2px%200%200%200%3Bpadding%3A4px%3Bbackground-color%3A%23fafcfe%3Bfont%3A14px%20Times%20New%20Roman%3Bheight%3A%27%20+%20h%20+%20%27px%3Bwidth%3Aauto%3Boverflow%3Aauto%3Bcursor%3Atext%3B%27%29%3B%0A%09%09doc.%20documentElement.%20appendChild%20%28toolbar%29%3B%0A%09%09var%20halfWidth%20%3D%20parseInt%20%28toolbar.%20offsetWidth%20/%202%29%3B%0A%09%09var%20strict%20%3D%20doc.%20compatMode%20%3D%3D%20%27CSS1Compat%27%3B%0A%09%09var%20mX%20%3D%20%28strict%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientWidth%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientWidth%29%20-%20toolbar.%20offsetWidth%3B%0A%09%09var%20mY%20%3D%20%28strict%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientHeight%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientHeight%29%20-%20toolbar.%20offsetHeight%3B%0A%09%20%20%20%20var%20lastClickX%20%3D%20win.%20cbTranslateButton2X%3B%0A%09%20%20%20%20var%20lastClickY%20%3D%20win.%20cbTranslateButton2Y%3B%0A%09%09toolbar.%20style.%20left%20%3D%20%28%28lastClickX%20%3C%20mX%20+%20halfWidth%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20%3E%20halfWidth%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20-%20halfWidth%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mX%29%20+%20%22px%22%3B%0A%09%09toolbar.%20style.%20top%20%3D%20%28%28lastClickY%20%3C%20mY%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastClickY%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mY%29%20+%20%22px%22%3B%0A%09%09toolbar.%20style.%20visibility%20%3D%20%27visible%27%3B%0A%09%20%20%20%20return%20textbar%3B%0A%09%7D%2C%0A%09%0A%09frameOnLoad%3A%20function%20%28event%29%0A%09%7B%0A%09%09var%20fr%20%3D%20event.%20currentTarget%3B%0A%09%09fr.%20removeEventListener%20%28%27load%27%2C%20this%2C%20false%29%3B%0A%09%09var%20tbId%20%3D%20fr.%20id.%20substring%20%28UJS_GOOGLE_TRANSLATE_FRAME_ID.%20length%29%3B%0A%09%09var%20toolbar%20%3D%20this.%20doc.%20getElementById%20%28UJS_TOOLBAR_ID%20+%20tbId%29%3B%0A%09%09var%20frdoc%20%3D%20fr.%20contentDocument%3B%0A%09%09var%20a%20%3D%20frdoc.%20getElementById%20%28%27autotrans%27%29%3B%0A%09%09var%20title%20%3D%20%28a%20%26%26%20%21/%23808080/.%20test%20%28a.%20innerHTML%29%29%3F%0A%09%09%09%09%09%09%27%26nbsp%3B-%26nbsp%3B%27%20+%20a.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%09%09%09%09%09%09%27%27%3B%0A%09%09var%20result%20%3D%20frdoc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%09%09var%20ancor%20%3D%20toolbar.%20getElementsByTagName%20%28%22a%22%29%20%5B0%5D%3B%0A%09%09ancor.%20innerHTML%20+%3D%20title%3B%0A%09%09ancor.%20nextSibling.%20innerHTML%20%3D%20result%3B%0A%09%09setTimeout%0A%09%09%28%0A%09%09%09function%20%28%29%0A%09%09%09%7B%0A%09%09%09%09fr.%20parentNode.%20removeChild%20%28fr%29%3B%0A%09%09%09%7D%2C%0A%09%09%090%0A%09%09%29%3B%0A%09%7D%2C%0A%09%0A%09google_translate%3A%20function%20%28language%29%0A%09%7B%0A%09%09var%20doc%20%3D%20this.%20doc%3B%0A%09%09var%20win%20%3D%20this.%20win%3B%0A%09%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09%20%20%20%20if%20%28t%20%26%26%20location.%20hostname%20%21%3D%20%27translate.google.com%27%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20this.%20ujs_createWindow%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28lng%20%3D%3D%20%27ru%27%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27Translating%27%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu2026%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20btoa%20%28escape%20%28t%29%29%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%09var%20gtfId%20%3D%20UJS_GOOGLE_TRANSLATE_FRAME_ID%3B%0A%09%09%09var%20fr%20%3D%20doc.%20getElementById%20%28gtfId%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21fr%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20fr%20%3D%20doc.%20createElement%20%28%27iframe%27%29%3B%0A%09%20%20%20%20%20%20%20%20this.%20frame%20%3D%20fr%3B%0A%09%09%09fr.%20setAttribute%20%28%27id%27%2C%20gtfId%20+%20btoa%20%28escape%20%28t%29%29%29%3B%0A%09%20%20%20%20%20%20%20%20fr.%20setAttribute%20%28%27frameborder%27%2C%20%270%27%29%3B%0A%09%09%09fr.%20setAttribute%20%28%27style%27%2C%20%27width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3Bposition%3Aabsolute%3Bleft%3A-999em%3B%27%29%3B%0A%09%09%09fr.%20setAttribute%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27src%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate_t%3Ftext%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20encodeURIComponent%20%28t%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%26ujs%3Dgtt%27%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%09fr.%20addEventListener%20%28%27load%27%2C%20this%2C%20false%29%3B%0A%09%20%20%20%20%20%20%20%20doc.%20documentElement.%20appendChild%20%28fr%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%09getBrowser%20%28%29.%20addTab%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate%3Fu%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20escape%20%28doc.%20location.%20href%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28doc.%20charset%3F%20%27%26ie%3D%27%20+%20doc.%20charset%3A%20%27%27%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20null%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20null%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%3B%0A%0Avar%20ct%20%3D%20getBrowser%20%28%29.%20selectedTab%3B%0Aif%20%28%21ct.%20cbTranslateButton5%29%0A%09ct.%20cbTranslateButton5%20%3D%20%5B%5D%3B%0Avar%20translator%20%3D%20new%20cbTranslatorButton%20%28getBrowser%20%28%29%29%3B%0Act.%20cbTranslateButton5.%20push%20%28translator%29%3B%0Atranslator.%20google_translate%20%28%22auto%7Cru%22%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

с меню:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ETranslateButton%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%21window.%20cbTranslateButton2%29%0A%7B%0A%09getBrowser%20%28%29.%20addEventListener%0A%09%28%0A%09%09%22mouseup%22%2C%0A%09%09function%20%28event%29%0A%09%09%7B%0A%09%09%09if%20%28event.%20button%20%21%3D%200%29%0A%09%09%09%09return%3B%0A%09%09%09getBrowser%20%28%29.%20contentDocument.%20defaultView.%20cbTranslateButton2X%20%3D%20event.%20clientX%3B%0A%09%09%09getBrowser%20%28%29.%20contentDocument.%20defaultView.%20cbTranslateButton2Y%20%3D%20event.%20clientY%3B%0A%09%09%7D%2C%0A%09%09false%0A%09%29%3B%0A%09window.%20cbTranslateButton2%20%3D%20true%3B%0A%7D%0Avar%20menu%20%3D%20%3Cmenupopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%20%20%20%20%0Aoncommand%3D%22this.parentNode.cbButtonDoMenuCommand%28event%29%22%3E%0A%09%3Cmenuitem%20value%3D%22Selection%22%20label%3D%22%u0412%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%22/%3E%0A%09%3Cmenuitem%20value%3D%22Page%22%20label%3D%22%u0421%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22/%3E%0A%3C/menupopup%3E%3B%0Amenu%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28menu.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Amenu.%20setAttribute%20%28%22id%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20setAttribute%20%28%22popup%22%2C%20this.%20id%20+%20%22-menu%22%29%3B%0Athis.%20cbButtonDoMenuCommand%20%3D%20function%20%28event%29%0A%7B%0A%09var%20itemNum%20%3D%20event.%20target.%20getAttribute%20%28%22value%22%29%3B%0A%09switch%20%28itemNum%29%0A%09%7B%0A%09%09case%20%22Selection%22%3A%0A%09%09%09var%20ct%20%3D%20getBrowser%20%28%29.%20selectedTab%3B%0A%09%09%09if%20%28%21ct.%20cbTranslateButton5%29%0A%09%09%09%09ct.%20cbTranslateButton5%20%3D%20%5B%5D%3B%0A%09%09%09var%20translator%20%3D%20new%20cbTranslatorButton%20%28getBrowser%20%28%29%29%3B%0A%09%09%09ct.%20cbTranslateButton5.%20push%20%28translator%29%3B%0A%09%09%09translator.%20google_translate%20%28%22auto%7Cru%22%29%3B%0A%09%09%09break%3B%0A%09%09case%20%22Page%22%3A%0A%09%09%09this.%20cbTranslatePage%20%28%22auto%7Cru%22%29%3B%0A%09%09%09break%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20cbTranslatePage%20%3D%20function%20%28language%29%0A%7B%0A%09var%20doc%20%3D%20getBrowser%20%28%29.%20contentDocument%3B%0A%09var%20win%20%3D%20doc.%20defaultView%3B%0A%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09getBrowser%20%28%29.%20addTab%0A%20%20%20%20%28%0A%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate%3Fu%3D%27%20+%0A%20%20%20%20%20%20%20%20escape%20%28doc.%20location.%20href%29%20+%0A%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%20%20%20%20%20%20%20%20lng%20+%0A%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%20%20%20%20%20%20%20%20language%20+%0A%20%20%20%20%20%20%20%20%27%26tbb%3D1%27%20+%0A%20%20%20%20%20%20%20%20%28doc.%20charset%3F%20%27%26ie%3D%27%20+%20doc.%20charset%3A%20%27%27%29%2C%0A%20%20%20%20%20%20%20%20null%2C%0A%20%20%20%20%20%20%20%20null%0A%20%20%20%20%29%3B%0A%7D%3B%0A%0Aconst%20UJS_TOOLBAR_ID%20%3D%20%22ujs_toolbar%22%3B%0Aconst%20UJS_GOOGLE_TRANSLATE_FRAME_ID%20%3D%20%22ujs_googletranslateframe%22%3B%0A%0Afunction%20cbTranslatorButton%20%28browser%29%0A%7B%0A%09this.%20doc%20%3D%20browser.%20contentDocument%3B%0A%09this.%20win%20%3D%20browser.%20contentDocument.%20defaultView%3B%0A%7D%0AcbTranslatorButton.%20prototype%20%3D%0A%7B%0A%09doc%3A%20null%2C%0A%09win%3A%20null%2C%0A%09toolbar%3A%20null%2C%0A%09clse%3A%20null%2C%0A%09frame%3A%20null%2C%0A%09%0A%09grabX%3A%200%2C%0A%09origX%3A%200%2C%0A%09grabY%3A%200%2C%0A%09origY%3A%200%2C%0A%09%0A%09handleEvent%3A%20function%20%28event%29%0A%09%7B%0A%09%09switch%20%28event.%20type%29%0A%09%09%7B%0A%09%09%09case%20%22mousedown%22%3A%0A%09%09%09%09this.%20tbOnMouseDown%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22mousemove%22%3A%0A%09%09%09%09this.%20tbOnMouseMove%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22mouseup%22%3A%0A%09%09%09%09this.%20tbOnMouseUp%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22click%22%3A%0A%09%09%09%09this.%20clseOnClick%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09case%20%22load%22%3A%0A%09%09%09%09this.%20frameOnLoad%20%28event%29%3B%0A%09%09%09%09break%3B%0A%09%09%09default%3A%3B%0A%09%09%7D%0A%09%7D%2C%0A%09%0A%09tbOnMouseMove%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20toolbar.%20style.%20left%20%3D%20this.%20origX%20+%20event.%20clientX%20-%20this.%20grabX%20+%20%27px%27%3B%0A%09%09this.%20toolbar.%20style.%20top%20%3D%20this.%20origY%20+%20event.%20clientY%20-%20this.%20grabY%20+%20%27px%27%3B%0A%09%7D%2C%0A%09%0A%09tbOnMouseUp%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20doc.%20removeEventListener%20%28%27mousemove%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.%20toolbar.%20style.%20zIndex%20%3D%209997%3B%0A%09%7D%2C%0A%09%0A%09tbOnMouseDown%3A%20function%20%28event%29%0A%09%7B%0A%09%09if%20%28event.%20target%20%3D%3D%20this.%20toolbar%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20toolbar.%20style.%20zIndex%20%3D%209998%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20grabX%20%3D%20event.%20clientX%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20grabY%20%3D%20event.%20clientY%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20origX%20%3D%20parseInt%20%28this.%20toolbar.%20style.%20left%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20origY%20%3D%20parseInt%20%28this.%20toolbar.%20style.%20top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20doc.%20addEventListener%20%28%27mousemove%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.%20doc.%20addEventListener%20%28%27mouseup%27%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%09%7D%2C%0A%09%0A%09removeEventListener%3A%20function%20%28element%2C%20eventType%2C%20captureFlag%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09element.%20removeEventListener%20%28eventType%2C%20this%2C%20captureFlag%29%3B%0A%09%09%7D%0A%09%09catch%20%28err%29%20%7B%7D%0A%09%7D%2C%0A%09%0A%09removeElement%3A%20function%20%28element%29%0A%09%7B%0A%09%09try%0A%09%09%7B%0A%09%09%09element.%20parentNode.%20removeChild%20%28element%29%3B%0A%09%09%7D%0A%09%09catch%20%28err%29%20%7B%7D%0A%09%7D%2C%0A%09%0A%09clseOnClick%3A%20function%20%28event%29%0A%09%7B%0A%09%09this.%20clse.%20removeEventListener%20%28%27click%27%2C%20this%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20toolbar%2C%20%27mousedown%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20doc%2C%20%27mousemove%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20doc%2C%20%27mouseup%27%2C%20false%29%3B%0A%09%09this.%20removeEventListener%20%28this.%20frame%2C%20%27load%27%2C%20false%29%3B%0A%09%09this.%20removeElement%20%28this.%20toolbar%29%3B%0A%09%09this.%20removeElement%20%28this.%20frame%29%3B%0A%09%09this.%20frame%20%3D%20null%3B%0A%09%09this.%20clse%20%3D%20null%3B%0A%09%09this.%20toolbar%20%3D%20null%3B%0A%09%09this.%20win%20%3D%20null%3B%0A%09%09this.%20doc%20%3D%20null%3B%0A%09%7D%2C%0A%09%0A%09ujs_createWindow%3A%20function%20%28txt%29%0A%09%7B%0A%09%09var%20doc%20%3D%20this.%20doc%3B%0A%09%09var%20win%20%3D%20this.%20win%3B%0A%09%09var%20h%2C%20w%3B%0A%09%20%20%20%20var%20txtLen%20%3D%20txt.%20length%3B%0A%09%20%20%20%20var%20tbId%20%3D%20UJS_TOOLBAR_ID%3B%0A%09%20%20%20%20if%20%28arguments.%20length%20%3E%202%29%0A%09%20%20%20%20%20%20%20%20tbId%20+%3D%20arguments%20%5B2%5D%3B%0A%09%09var%20toolbar%20%3D%20doc.%20getElementById%20%28tbId%29%3B%0A%09%20%20%20%20if%20%28toolbar%29%0A%09%20%20%20%20%20%20%20%20toolbar.%20parentNode.%20removeChild%20%28toolbar%29%3B%0A%09%20%20%20%20toolbar%20%3D%20doc.%20createElement%20%28%27div%27%29%3B%0A%09%20%20%20%20this.%20toolbar%20%3D%20toolbar%3B%0A%09%20%20%20%20toolbar.%20id%20%3D%20tbId%3B%0A%09%09if%20%28arguments.%20length%20%3D%3D%205%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20arguments%20%5B3%5D%3B%0A%09%20%20%20%20%20%20%20%20h%20%3D%20arguments%20%5B4%5D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20h%20%3D%2015%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%2020%3B%0A%09%20%20%20%20%20%20%20%20if%20%28txtLen%20%3E%202000%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2050%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2066%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28txtLen%20%3E%20250%29%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20h%20%3D%2025%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20w%20%3D%2033%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20h%20%3D%20parseInt%20%28h%20*%20win.%20innerHeight%20/%20100%29%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20parseInt%20%28w%20*%20win.%20innerWidth%20/%20100%29%0A%09%20%20%20%20%7D%3B%0A%09%09var%20title%20%3D%20%28arguments.%20length%20%3E%201%29%20%3Farguments%20%5B1%5D%3A%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%3B%0A%09%09toolbar.%20innerHTML%20%3D%20%27%3Cimg%20src%3D%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjIyt5EXfQAAAStJREFUOE+1k9tqhDAQhtOHqO37P4E3IlQFQQSvBBVEl1TBVVi1B+1C8XAx3QmNqIVqhBV+DEPmy8z8ycPX9Ruq6kLqqiRHvkfpiUjSMyGUJtB1HfR9D8MwCAlz6voNkEGCIGDJeZ5DURTCatoWNE0D4nk+jOMoDMBD8fDPpoGXu4OyLAPUutV1/N+KcPPNPaY4jidYktwG+hunlLL4ZmsI4EloxhxiGAY4jgNpmm6D8DQEcBj/I8SyrKnSzYr4bDzPm2CKoiwgu1rDTfN2eEWu6y4M2KxoPRNVVRcz4xXvdm0+k/nMwjDc5xraa9v2n5kgwDRNMdfQXtT6Us7jy9Z8n738Iw82O5/hUpag6zqQ0+kVmqZld0NUURSxl48M8v5xZQtZlg8Jc5HxA5fIE73hTda3AAAAAElFTkSuQmCC%22%20title%3D%22Close%22%20width%3D%2218%22%20height%3D%2218%22%3E%26nbsp%3B%27%20+%20title%20+%20%27%3Cdiv%3E%3C/div%3E%27%3B%0A%09%09toolbar.%20setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bbackground%3Awhite%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bheight%3Aauto%3Bwidth%3A%27%20+%20w%20+%20%27px%3Bfont%3A16px%20Times%20New%20Roman%3Bborder%3A1px%20solid%20gray%3Bpadding%3A3px%3Bz-index%3A9997%3Boverflow%3Avisible%3Bcursor%3Amove%3B%27%29%3B%0A%09%09toolbar.%20addEventListener%20%28%27mousedown%27%2C%20this%2C%20false%29%3B%0A%09%09var%20clse%20%3D%20toolbar.%20firstChild%3B%0A%09%09this.%20clse%20%3D%20clse%3B%0A%09%20%20%20%20clse.%20setAttribute%20%28%27style%27%2C%20%27float%3Aright%3Bbackground%3Awhite%3Bpadding%3A0%3Bmargin%3A0%3Bborder%3Anone%3Bcursor%3Apointer%3B%27%29%3B%0A%09%09clse.%20addEventListener%20%28%27click%27%2C%20this%2C%20false%29%3B%0A%09%09var%20textbar%20%3D%20toolbar.%20lastChild%3B%0A%09%20%20%20%20textbar.%20innerHTML%20%3D%20txt%3B%0A%09%09textbar.%20setAttribute%20%28%27style%27%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaaaaa%3Bmargin%3A2px%200%200%200%3Bpadding%3A4px%3Bbackground-color%3A%23fafcfe%3Bfont%3A14px%20Times%20New%20Roman%3Bheight%3A%27%20+%20h%20+%20%27px%3Bwidth%3Aauto%3Boverflow%3Aauto%3Bcursor%3Atext%3B%27%29%3B%0A%09%09doc.%20documentElement.%20appendChild%20%28toolbar%29%3B%0A%09%09var%20halfWidth%20%3D%20parseInt%20%28toolbar.%20offsetWidth%20/%202%29%3B%0A%09%09var%20strict%20%3D%20doc.%20compatMode%20%3D%3D%20%27CSS1Compat%27%3B%0A%09%09var%20mX%20%3D%20%28strict%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientWidth%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientWidth%29%20-%20toolbar.%20offsetWidth%3B%0A%09%09var%20mY%20%3D%20%28strict%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20documentElement.%20clientHeight%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20doc.%20body.%20clientHeight%29%20-%20toolbar.%20offsetHeight%3B%0A%09%20%20%20%20var%20lastClickX%20%3D%20win.%20cbTranslateButton2X%3B%0A%09%20%20%20%20var%20lastClickY%20%3D%20win.%20cbTranslateButton2Y%3B%0A%09%09toolbar.%20style.%20left%20%3D%20%28%28lastClickX%20%3C%20mX%20+%20halfWidth%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20%3E%20halfWidth%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28lastClickX%20-%20halfWidth%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%200%29%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mX%29%20+%20%22px%22%3B%0A%09%09toolbar.%20style.%20top%20%3D%20%28%28lastClickY%20%3C%20mY%29%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastClickY%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mY%29%20+%20%22px%22%3B%0A%09%09toolbar.%20style.%20visibility%20%3D%20%27visible%27%3B%0A%09%20%20%20%20return%20textbar%3B%0A%09%7D%2C%0A%09%0A%09frameOnLoad%3A%20function%20%28event%29%0A%09%7B%0A%09%09var%20fr%20%3D%20event.%20currentTarget%3B%0A%09%09fr.%20removeEventListener%20%28%27load%27%2C%20this%2C%20false%29%3B%0A%09%09var%20tbId%20%3D%20fr.%20id.%20substring%20%28UJS_GOOGLE_TRANSLATE_FRAME_ID.%20length%29%3B%0A%09%09var%20toolbar%20%3D%20this.%20doc.%20getElementById%20%28UJS_TOOLBAR_ID%20+%20tbId%29%3B%0A%09%09var%20frdoc%20%3D%20fr.%20contentDocument%3B%0A%09%09var%20a%20%3D%20frdoc.%20getElementById%20%28%27autotrans%27%29%3B%0A%09%09var%20title%20%3D%20%28a%20%26%26%20%21/%23808080/.%20test%20%28a.%20innerHTML%29%29%3F%0A%09%09%09%09%09%09%27%26nbsp%3B-%26nbsp%3B%27%20+%20a.%20textContent.%20replace%20%28/%5E.+%3A%20%7C%20%5B%28%5CxBB%5D.+%24/g%2C%20%27%27%29%3A%0A%09%09%09%09%09%09%27%27%3B%0A%09%09var%20result%20%3D%20frdoc.%20getElementById%20%28%27result_box%27%29.%20innerHTML%3B%0A%09%09var%20ancor%20%3D%20toolbar.%20getElementsByTagName%20%28%22a%22%29%20%5B0%5D%3B%0A%09%09ancor.%20innerHTML%20+%3D%20title%3B%0A%09%09ancor.%20nextSibling.%20innerHTML%20%3D%20result%3B%0A%09%09setTimeout%0A%09%09%28%0A%09%09%09function%20%28%29%0A%09%09%09%7B%0A%09%09%09%09fr.%20parentNode.%20removeChild%20%28fr%29%3B%0A%09%09%09%7D%2C%0A%09%09%090%0A%09%09%29%3B%0A%09%7D%2C%0A%09%0A%09google_translate%3A%20function%20%28language%29%0A%09%7B%0A%09%09var%20doc%20%3D%20this.%20doc%3B%0A%09%09var%20win%20%3D%20this.%20win%3B%0A%09%09var%20t%20%3D%20document.%20commandDispatcher.%20focusedWindow.%20getSelection%20%28%29.%20toString%20%28%29%3B%0A%09%09var%20lng%20%3D%20%28win.%20navigator.%20language%20%3D%3D%20%27ru%27%29%3F%20%27ru%27%3A%20%27en%27%3B%0A%09%20%20%20%20if%20%28t%20%26%26%20location.%20hostname%20%21%3D%20%27translate.google.com%27%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20this.%20ujs_createWindow%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28lng%20%3D%3D%20%27ru%27%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27Translating%27%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%5Cu2026%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%3Ca%20href%3D%22http%3A//translate.google.com/%22%20target%3D%22_blank%22%20style%3D%22text-decoration%3Anone%3Bcolor%3A%23000099%3Bfont%3A16px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20btoa%20%28escape%20%28t%29%29%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%09var%20gtfId%20%3D%20UJS_GOOGLE_TRANSLATE_FRAME_ID%3B%0A%09%09%09var%20fr%20%3D%20doc.%20getElementById%20%28gtfId%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21fr%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20fr%20%3D%20doc.%20createElement%20%28%27iframe%27%29%3B%0A%09%20%20%20%20%20%20%20%20this.%20frame%20%3D%20fr%3B%0A%09%09%09fr.%20setAttribute%20%28%27id%27%2C%20gtfId%20+%20btoa%20%28escape%20%28t%29%29%29%3B%0A%09%20%20%20%20%20%20%20%20fr.%20setAttribute%20%28%27frameborder%27%2C%20%270%27%29%3B%0A%09%09%09fr.%20setAttribute%20%28%27style%27%2C%20%27width%3A0px%3Bheight%3A0px%3Bvisibility%3Ahidden%3Bposition%3Aabsolute%3Bleft%3A-999em%3B%27%29%3B%0A%09%09%09fr.%20setAttribute%0A%09%20%20%20%20%20%20%20%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27src%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27http%3A//translate.google.com/translate_t%3Ftext%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20encodeURIComponent%20%28t%29%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26hl%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lng%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26langpair%3D%27%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20language%20+%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%26tbb%3D1%26ujs%3Dgtt%27%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%09%09fr.%20addEventListener%20%28%27load%27%2C%20this%2C%20false%29%3B%0A%09%20%20%20%20%20%20%20%20doc.%20documentElement.%20appendChild%20%28fr%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%09original%20script%20is%20operajs%20Google-Translate%20v%201.6.12%0A%09opera%20ujs%20is%20http%3A//lexi.ucoz.ru/google-translate.js%0A%09original%20author%3A%20Lex1%0A%09modified%20by%20Anton%0A*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Deim0s

В таком варианте, выделенный текст берёт отовсюду и переводит, а страницу перестал переводить.

Ну тогда

Выделить код

Код:

    if (el)
        t = el. value. substring (el. selectionStart, el. selectionEnd);

или

Выделить код

Код:

t = el && el. value. substring (el. selectionStart, el. selectionEnd) || "";

вместо

Выделить код

Код:

t = el. value. substring (el. selectionStart, el. selectionEnd);

Anton
Да, в таком, общем, виде:

Выделить код

Код:

var t = document. commandDispatcher. focusedWindow. getSelection (). toString ();
if (!t)
{
    var el = document. commandDispatcher. focusedElement;
    t = el && el. value. substring (el. selectionStart, el. selectionEnd) || "";
}
var c = content.document.characterSet;
var loc = content.location.href;
getBrowser().loadOneTab(
    t
        ? "http://translate.google.ru/translate_t?text=" + t + "&hl=ru&langpair=auto|ru&tbb=1&ie=" + c
        : /^https?:\/\//i.test(loc)
            ? "http://translate.google.ru/translate?u=" + escape(loc) + "&hl=ru&langpair=auto|ru&tbb=1&ie=" + c
            : "http://translate.google.ru/translate_t?hl=ru",
    null, null, null, false /* load in background */, false
);

всё заработало, как хотелось. Проверил где только возможно - всё работает.
Остался один вопрос - сделал я простенькую кнопочку "Закрыть все вкладки, кроме активной", можно ли какой-нибудь хитростью (с помощью Custom Buttons и скриптов) перенести её в tabs-alltabs-box, заменив tabs-alltabs-button? Скрин как хотелось:
http://ipicture.ru/uploads/080714/gto00MZ2PR.png
Или только Overlay писать?

можно ли какой-нибудь хитростью (с помощью Custom Buttons и скриптов) перенести её в tabs-alltabs-box, заменив tabs-alltabs-button?

Вот код:

Выделить код

Код:

var tbr = document. getElementById ("content");
var tbx = document. getAnonymousNodes (tbr). item (1);
var an = tbx. firstChild. nextSibling. firstChild. nextSibling. nextSibling;
var atb = document. getAnonymousElementByAttribute (an, "anonid", "alltabs-button");
atb. parentNode. insertBefore (this, atb);
atb. setAttribute ("hidden", "true");

Но поддерживать я его не буду. Хотите - пользуйтесь, если что-нибудь не устроит - просьба не беспокоить.

Anton
Deim0s
Vvld
Приветствую, Уважаемые!
Не будете ль Вы столь любезны научить неуча этим пользоваться:
- как правильно копировать и сохранять скрипты со страницы,
- какое расширение присваивать скриптам
- как и в каком виде вставлять в Custom Buttons
- что не следует делать.
Имею ввиду скрипты этой темы, в частности, кнопки перевода из Google.
Буду рад оказаной помощи.
Спасибо!

camo
Ответы на большинство поставленных вопросов - в первом сообщении этой темы.

Anton
Thanks!
Понемногу разбираюсь.

Добавление кнопок "Сохранить страницу" и "Сохранить ссылку" на панель закладок с помощью расширения Custom Buttons.

картинка: chrome://scrapbook/skin/capture_entire.png
код: sbBrowserOverlay.execCapture(2, false, false, event.originalTarget.id);

картинка: chrome://scrapbook/skin/capture_target.png
код: sbBrowserOverlay.execBookmark(event.originalTarget.id);

В расширении toolbar buttons была кнопка которая включала и выключала загрузку картинок. Я его нашел и распотрошил но столкнулся с тем что у него в реализации используются два режима отображения кнопки ВКЛЮЧЕНО и ВЫКЛЮЧЕНО (т.е. 2 пиктограммы) можно ли это сделать в Custom Buttons и как.

AndreyPA

Если я правильно понял, то

Выделить код

Код:

if (state == 0)
    this. image = "file:///c:/greenicon.png";
else
    this. image = "file:///c:/redicon.png";

---

Кстати, просьба к пользователям с linux: помогите с разработкой кода для запуска shell-скриптов.

Ребята, те кто постоянно в этой ветке варятся, соберите, пожалуйста, то что наработано в один пост. Я имею в виду то, что пишется в поле код. Как выжимку. Буду очень признателен, как пользователь, который редко сюда заходит. Ведь реально много сделано. У вас где-то есть исправления где-то вы друг друга с полуслова поняли. Расширение прекрасное, а так таким чайникам как я будет легче.

Вижу странную работу кода вида
new DOMParser().parseFromString( ... )

Правда, Custom Buttons тут ни при чем – ошибку я словил при разработке расширения. Но раз уж за основу был взят код отсюда, не будем плодить лишних сущностей топиков.

Выдернул проблемный код (будем надеяться, ссылок на то, чего уже нет, не осталось) и сделал кнопку для демонстрации (дабы легче тестировать =)):

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%7EDOMParser%20test%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20obj%20%3D%20%7B%0A%09_test%3A%20function%28e%29%20%7B%0A%09%09this.origItem%20%3D%20e.originalTarget%3B%0A%09%09this.copyOfEvent%20%3D%20e%3B%0A%09%09this.cMenu%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29%3B%0A%0A%09%09var%20xml%20%3D%20%3Cpopup%20xmlns%3D%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%0A%09%09%09oncommand%3D%22alert%28event.target.label%29%22%3E%0A%09%09%09%09%3Cmenuitem%20label%3D%22Item%20-%200%22%20/%3E%0A%09%09%09%09%3Cmenuitem%20label%3D%22Item%20-%201%22%20/%3E%0A%09%09%09%09%3Cmenuitem%20label%3D%22Item%20-%202%22%20/%3E%0A%09%09%09%09%3Cmenuseparator%20/%3E%0A%09%09%09%09%3Cmenu%20label%3D%22Menu%22%3E%0A%09%09%09%09%09%3Cmenupopup%3E%0A%09%09%09%09%09%09%3Cmenuitem%20label%3D%22Subitem%20-%200%22%20/%3E%0A%09%09%09%09%09%09%3Cmenuitem%20label%3D%22Subitem%20-%201%22%20/%3E%0A%09%09%09%09%09%3C/menupopup%3E%0A%09%09%09%09%3C/menu%3E%0A%09%09%09%3C/popup%3E%3B%0A%09%09this.showGeneratedFromXMLPopup%28xml%29%3B%0A%09%7D%2C%0A%09showGeneratedFromXMLPopup%3A%20function%28xml%29%20%7B%0A%09%09var%20popup%20%3D%20this.getPopup%28xml%29%3B%0A%09%09this.showPopupOnCurrentItem%28popup%29%3B%0A%09%09return%20popup%3B%0A%09%7D%2C%0A%09getPopup%3A%20function%28xml%29%20%7B%0A%09%09var%20pSet%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0A%09%09var%20id%20%3D%20%22handyClicks-generatedPopup%22%3B%0A%09%09var%20popup%20%3D%20document.getElementById%28id%29%3B%0A%09%09if%28popup%29%0A%09%09%09pSet.removeChild%28popup%29%3B%0A%09%09popup%20%3D%20xml%0A%09%09%09%3F%20new%20DOMParser%28%29.parseFromString%28xml.toXMLString%28%29%2C%20%22application/xml%22%29.documentElement%0A%09%09%09%3A%20document.createElement%28%22popup%22%29%3B%0A%09%09if%28xml%29%20%7B%0A%09%09%09//%20Bug%3A%20labels%20of%20%3Cmenu%3E%20does%20not%20shown.%0A%09%09%7D%0A%09%09popup.id%20%3D%20id%3B%0A%09%09popup.tooltip%20%3D%20%22handyClicks-tooltip%22%3B%0A%09%09pSet.appendChild%28popup%29%3B%0A%09%09return%20popup%3B%0A%09%7D%2C%0A%09showPopupOnCurrentItem%3A%20function%28popup%29%20%7B%0A%09%09var%20node%20%3D%20this.origItem%3B%0A%09%09var%20e%20%3D%20this.copyOfEvent%3B%0A%0A%09%09if%28this.isFx%282%29%20%26%26%20this.cMenu.id%20%3D%3D%20%22contentAreaContextMenu%22%29%20%7B%20//%20workaround%20for%20spellchecker%20bug%0A%09%09%09//%20if%28this.getPref%28%22forceHideContextMenu%22%29%29%0A%09%09%09//%09window.removeEventListener%28%22contextmenu%22%2C%20this%2C%20true%29%3B%0A%0A%09%09%09var%20evt%20%3D%20document.createEvent%28%22MouseEvents%22%29%3B%20//%20thanks%20to%20Tab%20Scope%21%0A%09%09%09evt.initMouseEvent%28%0A%09%09%09%09%22click%22%2C%20true%2C%20false%2C%20node.ownerDocument.defaultView%2C%201%2C%0A%09%09%09%09e.screenX%2C%20e.screenY%2C%20e.clientX%2C%20e.clientY%2C%0A%09%09%09%09false%2C%20false%2C%20false%2C%20false%2C%0A%09%09%09%092%2C%20null%0A%09%09%09%29%3B%0A%09%09%09node.dispatchEvent%28evt%29%3B%0A%0A%09%09%09//%20this.disabledBy.cMenu%20%3D%20true%3B%0A%09%09%09//%20this.blinkNode%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09document.popupNode%20%3D%20node%3B%0A%09%09var%20xy%20%3D%20this.getXY%28e%29%3B%0A%09%09popup.showPopup%28this.isFx%283%29%20%3F%20node%20%3A%20e.target%2C%20xy.x%2C%20xy.y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%0A%09%7D%2C%0A%09getXY%3A%20function%28e%29%20%7B%0A%09%09var%20isFx3%20%3D%20this.isFx%283%29%3B%0A%09%09return%20%7B%0A%09%09%09x%3A%20isFx3%20%3F%20e.screenX%20%3A%20e.clientX%2C%0A%09%09%09y%3A%20isFx3%20%3F%20e.screenY%20%3A%20e.clientY%0A%09%09%7D%3B%0A%09%7D%2C%0A%09get%20fxVersion%28%29%20%7B%0A%09%09if%28typeof%20this._fxVersion%20%3D%3D%20%22undefined%22%29%0A%09%09%09this._fxVersion%20%3D%20Components.classes%5B%22@mozilla.org/xre/app-info%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIXULAppInfo%29%0A%09%09%09%09.version%3B%0A%09%09return%20this._fxVersion%3B%0A%09%7D%2C%0A%09isFx%3A%20function%28version%29%20%7B%0A%09%09return%20this.fxVersion.indexOf%28version%20+%20%22.%22%29%20%3D%3D%200%3B%0A%09%7D%0A%7D%3B%0Athis._obj%20%3D%20obj%3B%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09if%28e.button%20%21%3D%202%29%0A%09%09this._obj._test%28e%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Суть проблемы:
var xml = ... ; // задаем XML с вложенным меню
=>
var popup = this.getPopup(xml); // добавляем к mainPopupSet new DOMParser().parseFromString( ... ).documentElement
=>
popup.showPopup( ... ) // показываем pop-up

При этом не видно label у menu. И, если посмотреть в DOM Inspector'е, у menu нету «anonymous nodes» (которые показываются красным), задаваемых binding'ом.
Единственный способ показать label, который я нашел, – что-то вроде (увы, код я уже удалил, так что точно не помню, но все равно работал он весьма криво):

Выделить код

Код:

var _menu = document.createElement("menu");
_menu.setAttribute("label", menu.getAttribute("label")); // а если перенести все menu.childNodes, то работать уже не будет =/
menu.parentNode.replaceChild(_menu, menu);

Infocatcher
Кажется, такая же беда может случиться и при использовании шаблонов. Когда-то хотел сделать mrn с использованием шаблонов, но не справился с вложенными меню.

Я пас, в общем, кому-то даже жаловался уже, что за кнопку с вложенными меню на xml браться не буду.

Идей нет.

Anton

Идей нет.

Видимо, придется делать менее «прозрачные» способы задания меню. :/

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EPop-up%20menu%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20obj%20%3D%20%7B%0A%09_test%3A%20function%28e%29%20%7B%0A%09%09this.origItem%20%3D%20e.originalTarget%3B%0A%09%09this.copyOfEvent%20%3D%20e%3B%0A%09%09this.cMenu%20%3D%20document.getElementById%28%22custombuttons-contextpopup%22%29%3B%0A%0A%09%09var%20items%20%3D%20%5B%0A%09%09%09%7B%20label%3A%20%22Label%20-%200%22%20%7D%2C%0A%09%09%09%7B%7D%2C%0A%09%09%09%7B%20label%3A%20%22Label%20-%201%22%20%7D%2C%0A%09%09%09%7B%20label%3A%20%22Label%20-%202%22%20%7D%2C%0A%09%09%09%7B%20label%3A%20%22Label%20-%203%22%20%7D%2C%0A%09%09%09%5B%0A%09%09%09%09%7B%20label%3A%20%22Menu%20-%204%22%20%7D%2C%0A%09%09%09%09%5B%0A%09%09%09%09%09%7B%20label%3A%20%22Label%20-%204%20-%200%22%20%7D%2C%0A%09%09%09%09%09%5B%0A%09%09%09%09%09%09%7B%20label%3A%20%22Menu%20-%204%20-%201%22%20%7D%2C%0A%09%09%09%09%09%09%5B%0A%09%09%09%09%09%09%09%7B%20label%3A%20%22Label%20-%204%20-%201%20-%201%22%20%7D%0A%09%09%09%09%09%09%5D%0A%09%09%09%09%09%5D%2C%0A%09%09%09%09%09%7B%20label%3A%20%22Label%20-%204%20-%201%22%20%7D%2C%0A%09%09%09%09%09%7B%20label%3A%20%22Label%20-%204%20-%202%22%20%7D%0A%09%09%09%09%5D%0A%09%09%09%5D%0A%09%09%5D%3B%0A%09%09var%20popup%20%3D%20this.showGeneratedPopup%28items%29%3B%0A%09%09popup.setAttribute%28%22oncommand%22%2C%20%22alert%28event.target.label%29%3B%22%29%3B%0A%09%7D%2C%0A%09showGeneratedPopup%3A%20function%28items%29%20%7B%0A%09%09var%20popup%20%3D%20this.createPopup%28items%29%3B%0A%09%09this.showPopupOnCurrentItem%28popup%29%3B%0A%09%09return%20popup%3B%0A%09%7D%2C%0A%09createPopup%3A%20function%28items%29%20%7B%0A%09%09var%20popup%20%3D%20this.popup%3B%0A%09%09this.appendChilds%28popup%2C%20items%29%3B%0A%09%09return%20popup%3B%0A%09%7D%2C%0A%09get%20popup%28%29%20%7B%0A%09%09var%20pSet%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0A%09%09var%20id%20%3D%20%22handyClicks-generatedPopup%22%3B%0A%09%09var%20popup%20%3D%20document.getElementById%28id%29%3B%0A%09%09if%28popup%29%0A%09%09%09pSet.removeChild%28popup%29%3B%0A%09%09popup%20%3D%20document.createElement%28%22popup%22%29%3B%0A%09%09popup.id%20%3D%20id%3B%0A%09%09popup.tooltip%20%3D%20%22handyClicks-tooltip%22%3B%0A%09%09pSet.appendChild%28popup%29%3B%0A%09%09return%20popup%3B%0A%09%7D%2C%0A%09appendChilds%3A%20function%28parent%2C%20childs%29%20%7B%0A%09%09for%28var%20i%20%3D%200%3B%20i%20%3C%20childs.length%3B%20i++%29%0A%09%09%09this%5B%22appendMenu%22%20+%20%28childs%5Bi%5D%20instanceof%20Array%20%3F%20%22%22%20%3A%20%22item%22%29%5D%28parent%2C%20childs%5Bi%5D%29%3B%0A%09%7D%2C%0A%09appendMenu%3A%20function%28parent%2C%20itemsArr%29%20%7B%0A%09%09var%20menu%20%3D%20document.createElement%28%22menu%22%29%3B%0A%09%09this.setAttributes%28menu%2C%20itemsArr%5B0%5D%29%3B%0A%09%09var%20mPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A%09%09this.appendChilds%28mPopup%2C%20itemsArr%5B1%5D%29%3B%0A%09%09menu.appendChild%28mPopup%29%3B%0A%09%09parent.appendChild%28menu%29%3B%0A%09%7D%2C%0A%09appendMenuitem%3A%20function%28parent%2C%20attrs%29%20%7B%0A%09%09var%20mi%20%3D%20document.createElement%28attrs.label%20%3F%20%22menuitem%22%20%3A%20%22menuseparator%22%29%3B%0A%09%09this.setAttributes%28mi%2C%20attrs%29%3B%0A%09%09parent.appendChild%28mi%29%3B%0A%09%7D%2C%0A%09setAttributes%3A%20function%28item%2C%20attrs%29%20%7B%0A%09%09for%28var%20p%20in%20attrs%29%20%7B%0A%09%09%09if%28typeof%20attrs%5Bp%5D%20%21%3D%20%22string%22%20%7C%7C%20p.indexOf%28%22__%22%29%20%3D%3D%200%29%0A%09%09%09%09item%5Bp%5D%20%3D%20attrs%5Bp%5D%3B%20//%20not%20works%20for%20%22oncommand%22%0A%09%09%09else%0A%09%09%09%09item.setAttribute%28p%2C%20attrs%5Bp%5D%29%3B%0A%09%09%7D%0A%09%7D%2C%0A%09showPopupOnCurrentItem%3A%20function%28popup%29%20%7B%0A%09%09var%20node%20%3D%20this.origItem%3B%0A%09%09var%20e%20%3D%20this.copyOfEvent%3B%0A%0A%09%09if%28this.isFx%282%29%20%26%26%20this.cMenu.id%20%3D%3D%20%22contentAreaContextMenu%22%29%20%7B%20//%20workaround%20for%20spellchecker%20bug%0A%09%09%09//%20if%28this.getPref%28%22forceHideContextMenu%22%29%29%0A%09%09%09//%09window.removeEventListener%28%22contextmenu%22%2C%20this%2C%20true%29%3B%0A%0A%09%09%09var%20evt%20%3D%20document.createEvent%28%22MouseEvents%22%29%3B%20//%20thanks%20to%20Tab%20Scope%21%0A%09%09%09evt.initMouseEvent%28%0A%09%09%09%09%22click%22%2C%20true%2C%20false%2C%20node.ownerDocument.defaultView%2C%201%2C%0A%09%09%09%09e.screenX%2C%20e.screenY%2C%20e.clientX%2C%20e.clientY%2C%0A%09%09%09%09false%2C%20false%2C%20false%2C%20false%2C%0A%09%09%09%092%2C%20null%0A%09%09%09%29%3B%0A%09%09%09node.dispatchEvent%28evt%29%3B%0A%0A%09%09%09//%20this.disabledBy.cMenu%20%3D%20true%3B%0A%09%09%09//%20this.blinkNode%28%29%3B%0A%09%09%09return%3B%0A%09%09%7D%0A%09%09document.popupNode%20%3D%20node%3B%0A%09%09var%20xy%20%3D%20this.getXY%28e%29%3B%0A%09%09popup.showPopup%28this.isFx%283%29%20%3F%20node%20%3A%20e.target%2C%20xy.x%2C%20xy.y%2C%20%22popup%22%2C%20null%2C%20null%29%3B%0A%09%7D%2C%0A%09getXY%3A%20function%28e%29%20%7B%0A%09%09var%20isFx3%20%3D%20this.isFx%283%29%3B%0A%09%09return%20%7B%0A%09%09%09x%3A%20isFx3%20%3F%20e.screenX%20%3A%20e.clientX%2C%0A%09%09%09y%3A%20isFx3%20%3F%20e.screenY%20%3A%20e.clientY%0A%09%09%7D%3B%0A%09%7D%2C%0A%09get%20fxVersion%28%29%20%7B%0A%09%09if%28typeof%20this._fxVersion%20%3D%3D%20%22undefined%22%29%0A%09%09%09this._fxVersion%20%3D%20Components.classes%5B%22@mozilla.org/xre/app-info%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIXULAppInfo%29%0A%09%09%09%09.version%3B%0A%09%09return%20this._fxVersion%3B%0A%09%7D%2C%0A%09isFx%3A%20function%28version%29%20%7B%0A%09%09return%20this.fxVersion.indexOf%28version%20+%20%22.%22%29%20%3D%3D%200%3B%0A%09%7D%0A%7D%3B%0Athis._obj%20%3D%20obj%3B%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%09if%28e.button%20%21%3D%202%29%0A%09%09this._obj._test%28e%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Радует только, что добавлять к уже имевшемуся коду пришлось только поддержку вложенных меню (по сути было то же самое, но без .appendMenu( ... )).

P.S.

Когда-то хотел сделать mrn

Сделать menu? Или очепятка, или я чего-то не догоняю.

Сделать menu? Или очепятка, или я чего-то не догоняю.

mozilla-russia navigator

Черт,возникла неприятная ситуация.Обновился до версии 0,0,3,3.Половина кнопок слетела почему то.При этом не могу откатиться назад.Не сохранилась версия 0,0,3,2.Или подскажите,в чем проблема,или дайте ссылку,на 0,0,3,2.:whiteflag:

vv07

Половина кнопок слетела почему то.

Что значит "слетела" ?

дайте ссылку,на 0,0,3,2.

https://addons.mozilla.org/ru/firefox/addon/2707 - на странице есть ссылка "Отобразить все версии".
или (без автообновления) - http://custombuttons.mozdev.org/installation.html

Не думаю, что корень проблемы в расширении, но на всякий случай, если не трудно - отправьте до установки 0.0.3.2 файлы (buttonsoverlay.xul и buttonsoverlay.xul.bak) из подкаталога custombuttons профиля на адрес custombuttonsextension@gmail.com.

Anton

Извините меня пожалуйста за поспешность.Сильно расстроился блин.Разобрался в чем проблема.Дело в том,что папку с иконками для расширения,расположил в корневой папке.При установке обновления,папка полностью обновилась и иконки были утрачены.именно поэтому,кнопки перестали отображаться.Может стоит,как то исключить такую возможность,в последующем.Просто удобнее держать иконки,именно в директории расширения.

AndreyA пишет:

Добавление кнопок "Сохранить страницу" и "Сохранить ссылку" на панель закладок с помощью расширения Custom Buttons.

картинка: chrome://scrapbook/skin/capture_entire.png
код: sbBrowserOverlay.execCapture(2, false, false, event.originalTarget.id);

картинка: chrome://scrapbook/skin/capture_target.png
код: sbBrowserOverlay.execBookmark(event.originalTarget.id);

Вот эта штука сохраняет старницу далеко в "C:\Documents and Settings\Администратор\Application Data\Mozilla\Firefox\Profiles\ksc247o6.default\ScrapBook\data\20080912165717\"

Да и каждый раз в разную директорию...

А как сделать так что бы всегда в одну директорию? Да и которую я хочу явно задать... скажем в коде...

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

vv07 пишет:

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

Спасибо!
Нашел настройки. Почти все хорошо. Корневую папку указать можно. D:\TEMP\MyData\
Но при этом сохранение идет в дальше каждый раз в папку с другим именем типа data\20080913115945\
Это уже конечно решаемы вопрос.
Но идеально было бы что бы сохраняло всегда в одну папку.

vv07

папку с иконками для расширения,расположил в корневой папке

В корневой папке чего ? В каталог, где находится установленное расширение ?

Просто удобнее держать иконки,именно в директории расширения.

А в перекодированном в base64 виде или в подкаталоге custombuttons профиля не пойдёт ?

Mashinist
Если достаточно сохранения в каталог загрузок Firefox, можно воспользоваться кнопкой с таким кодом:

Выделить код

Код:

saveDocument (window. content. document, true);

Если недостаточно, можно попробовать такой код:

Выделить код

Код:

var saveDirectory = "c:\\savedhtml";
var doc = window. content. document;
var url = doc. location. href;
var charset = doc. characterSet;
var contentType = doc. contentType;
var fileInfo = new FileInfo ("");
initFileInfo (fileInfo, url, charset, doc, contentType, null);
var file = Components. classes ["@mozilla.org/file/local;1"]. createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (saveDirectory);
var dir = file. clone ();
dir. append (fileInfo. fileName);
file. append (fileInfo. fileName + "." + fileInfo. fileExt);
var fileURL = makeFileURI (file);
var persist = makeWebBrowserPersist ();
var persistArgs =
{
    source      : doc,
    contentType : contentType,
    target      : fileURL,
    postData    : getPostData (),
    bypassCache : false // aShouldBypassCache
};
var encodingFlags = Components. interfaces. nsIWebBrowserPersist. ENCODE_FLAGS_ENCODE_BASIC_ENTITIES;
var tr = Components. classes ["@mozilla.org/transfer;1"]. createInstance (Components. interfaces. nsITransfer);
tr.init (fileInfo. uri, persistArgs. target, "", null, null, null, persist);
//persist.persistFlags = Components. interfaces. nsIWebBrowserPersist. PERSIST_FLAGS_BYPASS_CACHE;
persist.persistFlags = Components. interfaces. nsIWebBrowserPersist. PERSIST_FLAGS_FROM_CACHE;
persist. progressListener = tr;
persist. saveDocument (persistArgs.source, persistArgs.target, dir, persistArgs.contentType, encodingFlags, 80);

в первой строке которого задаём нужный каталог.

Anton пишет:

Спасибо!
Второй вариант подошел.
Хотя в принципе подошело дополнение ScrepBook с одной командой на кнопке sbBrowserOverlay.execCapture(2, false, false, event.originalTarget.id);

Да речь,о корневой папке расширения custombuttons@xsms.org.Держу иконки там,в подпапке Icon.Насчет

А в перекодированном в base64 виде

незнаю,а вот

или в подкаталоге custombuttons профиля не пойдёт ?

думаю нормально.Главное,что бы,при обновлениях,директория,в которой будут находиться иконки,не изменялась.Пусть основной каталог меняеться,а подкаталог нет.Тогда при обновах,иконки будут сохраняться и не надо морочиться,держать их хрен знает где.Я пользуюсь еще и портаблелисом,переношу конфигу из системной.Не надо ничего менять.Пути все прописываються по умолчанию.Никаких проблем.Раньше держал иконки в отдельной папке,на другом диске.Приходилось,каждый раз,по новому кнопки править.Поэтому и прошу о правке.

vv07 пишет:

Да речь,о корневой папке расширения custombuttons@xsms.org.Держу иконки там,в подпапке Icon.Насчет

А в перекодированном в base64 виде

незнаю

В диалоговом окне редактирования кнопки есть кнопка "=> base64", которая преобразует файл изображения в строку символов, которая хранится вместе с кодом кнопки.

или в подкаталоге custombuttons профиля не пойдёт ?

думаю нормально.Главное,что бы,при обновлениях,директория,в которой будут находиться иконки,не изменялась.Пусть основной каталог меняеться,а подкаталог нет.Тогда при обновах,иконки будут сохраняться и не надо морочиться,держать их хрен знает где.Я пользуюсь еще и портаблелисом,переношу конфигу из системной.Не надо ничего менять.Пути все прописываються по умолчанию.Никаких проблем.Раньше держал иконки в отдельной папке,на другом диске.Приходилось,каждый раз,по новому кнопки править.Поэтому и прошу о правке.

В custombuttons уже есть один механизм, позволяющий исключить зависимость от места расположения изображений кнопок - это кодирование в base64. Стоит ли создавать второй ? Я подумаю, но ничего не обещаю.

Помогите если не сложно:
- реализовать с помощью кнопки: размещение курсора в адресной строке, по аналогу F6 (дело в том что F6 криво работает для меня, не всегда размещает курсор в строку при нажатии);
- загрузка соответствующих внешних приложений при старте Firefox  и так же их выгрузка при закрытии Firefox .

Вообще можна ли создать скрипт, который выполянется при закрытии Firefox если не с помощью кнопки , то может с помощью чего либо другого ?

vurdalak

Вообще можна ли создать скрипт, который выполянется при закрытии Firefox если не с помощью кнопки , то может с помощью чего либо другого ?

По-хорошему, вроде, надо делать расширение с XPCOM-компонентой...
Тем не менее, можно попробовать сделать вот так:

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EStartup%20/%20Shutdown%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bfunction%20getWindowsCount%28%29%20%7B%0A%09var%20wins%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%09%09.getService%28Components.interfaces.nsIWindowMediator%29%0A%09%09.getEnumerator%28%22navigator%3Abrowser%22%29%3B%0A%09var%20count%20%3D%200%3B%0A%09while%28wins.hasMoreElements%28%29%29%20%7B%0A%09%09wins.getNext%28%29%3B%0A%09%09count++%3B%0A%09%7D%0A%09return%20count%3B%0A%7D%0Afunction%20_log%28%29%20%7B%0A%09alert%28%22Startup%20/%20Shutdown%20button%20-%3E%20%22%20+%20arguments.callee.caller.name%29%3B%0A%7D%0Afunction%20startup%28%29%20%7B%0A%09_log%28%29%3B%0A%7D%0Afunction%20shutdown%28%29%20%7B%0A%09_log%28%29%3B%0A%7D%0Afunction%20eventHandler%28e%29%20%7B%0A%09window.removeEventListener%28e.type%2C%20arguments.callee%2C%20false%29%3B%0A%09if%28e.type%20%3D%3D%20%22load%22%20%26%26%20getWindowsCount%28%29%20%3D%3D%201%29%0A%09%09startup%28%29%3B%0A%09else%20if%28e.type%20%3D%3D%20%22unload%22%20%26%26%20getWindowsCount%28%29%20%3D%3D%200%29%0A%09%09shutdown%28%29%3B%0A%7D%0Aif%28%21window%5B%22__listeners__%22%20+%20this.id%5D%29%20%7B%0A%09window%5B%22__listeners__%22%20+%20this.id%5D%20%3D%20true%3B%0A%09window.addEventListener%28%22load%22%2C%20eventHandler%2C%20false%29%3B%0A%09window.addEventListener%28%22unload%22%2C%20eventHandler%2C%20false%29%3B%0A%7D%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

Внутри функций startup и shutdown

Выделить код

Код:

function startup() {
    _log();
}
function shutdown() {
    _log();
}

пишем то, что должно выполняться при запуске и закрытии соответственно. Учитывается только «главное» окно. Например, если оставить загрузки и закрыть все другие окна, скрипт решит, что произошел выход.


размещение курсора в адресной строке, по аналогу F6

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EFocus%20URL%20Bar%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20uBar%20%3D%20document.getElementById%28%22urlbar%22%29%3B%0AuBar.focus%28%29%3B%0AuBar.select%28%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%3C/custombutton%3E

16-09-2008 23:49:58


P.S. Идея. При добавлении кнопки через custombutton-протокол сделать возможность посмотреть код (по аналогии с Greasemonkey). Из тех же соображений безопасности (или есть способ добраться до кода кнопки без запуска инициализации?).

Спасибо за быстрый ответ.
Все вроде бы неплохо, в функции "startup" я прописал код запуска приложения, все нормально запускается, но выгружать приложения в функции shutdown я собираюсь через "taskkill.exe". И дело в том, что если такой код работает:

Выделить код

Код:

var file = Components. classes ["@mozilla.org/file/local;1"].
           createInstance (Components. interfaces. nsILocalFile);
var process = Components. classes ["@mozilla.org/process/util;1"].
    getService (Components. interfaces. nsIProcess);
file. initWithPath ("C:\\windows\\system32\\calc.exe"); 
process. init (file);
process. run (false,[''],1);

То уже:

Выделить код

Код:

file. initWithPath ("C:\\windows\\system32\\cmd.exe");

работать отказывается
Не знаю в чем может быть дело ?

P.S. Хм... Или может не через taskkill.exe можна ?

vurdalak

P.S. Хм... Или может не через taskkill.exe можна ?

Гм, у меня вот так заработало:

Выделить код

Код:

function startProcess(path, args) {
    args = args || [];
    var file = Components.classes["@mozilla.org/file/local;1"]
        .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(path);
    if(!file.exists()) {
        alert(path + "\nnot found!");
        return;
    }
    var process = Components.classes["@mozilla.org/process/util;1"]
        .getService(Components.interfaces.nsIProcess);
    process.init(file);
    process.run(false, args, args.length);
}
function killProcess(name) {
    startProcess("c:\\WINDOWS\\system32\\taskkill.exe", ["/F", "/IM" , name]);
}
killProcess("notepad.exe");
killProcess("Opera.exe");

17-09-2008 01:06:57
P.S. А cmd.exe в скрытом виде стартует...

P.P.S. Или функция startProcess +

Выделить код

Код:

function killProcesses() {
    var args = ["/F"];
    for(var i = 0; i < arguments.length; i++)
        args.push("/IM"), args.push(arguments[i]);
    startProcess("c:\\WINDOWS\\system32\\taskkill.exe", args);
}
killProcesses("notepad.exe", "Opera.exe");

17-09-2008 01:28:56
Добавил в кнопку «Startup / Shutdown» проверку наличия обработчиков (иначе каждый раз после редактирования кнопки вызывалась инициализация и плодила обработчики).
Код кнопки обновил.

Все работает на ура. Видимо я где-то допускал ошибку.
Спасибо, очень помог

Нужна кнопка Open notebook. Та, что в статус баре от приложения Google notebook. Мне не нравится статус бар. Я хотел бы иметь кнопку на тулбаре. Но код этой кнопки я не знаю.

Infocatcher

Идея. При добавлении кнопки через custombutton-протокол сделать возможность посмотреть ко

Как-нибудь сподоблюсь. В cb2 давно уже есть, но "утягивать" один-в-один мне не хочется.
И если есть идеи по организации пользовательского интерфейса для этой возможности, готов выслушать.

А cmd.exe в скрытом виде стартует...

Я уже говорил об этом, кажется. В тройке process.run запускает cmd.exe так, что окна не видно.
Только launch() на саму cmd.exe или пакетный файл способны показать окно консоли.

macuache

Нужна кнопка Open notebook.

Выделить код

Код:

document.getElementById("gnotes-statusbar").click()

вроде, работает.

Anton

И если есть идеи по организации пользовательского интерфейса для этой возможности, готов выслушать.

Примерно так:
0. Открываем custombutton-ссылку.
1. Выскакивает окошко:
Установить кнопку " ... "?
Установить | Посмотреть код кнопки | Отмена
2. По «Посмотреть код кнопки» открываем обычное окно редактирования, но в заголовке пишем что-то вроде «Предварительный просмотр кода кнопки», а из кнопок – только «Установить кнопку» и «Отмена». И надо запретить возможность менять текст (или внесенные изменения должны применяться).

P.S.

В cb2 давно уже есть, но "утягивать" один-в-один мне не хочется.

Гм, может, конечно, искал плохо, но не увидел.

Infocatcher

Установить | Посмотреть код кнопки | Отмена

Понятно. Прямо сейчас не могу, но сделаю, как появится свободное время.

Гм, может, конечно, искал плохо, но не увидел.

В контекстном меню custombutton:// ссылки есть пункт "View Custom Button Codes".

Anton

В контекстном меню custombutton:// ссылки есть пункт "View Custom Button Codes".

Ааа... А я в адресную строку код пихал. =)
Не очень-то удобно (пришлось писать букмарклет, чтобы сотворить ссылку :D).

Добрый день, а нет ли уже готовой кнопки для Thunderbird, которая по клику пересылала бы выбранные сообщения на заранее определенный адрес (нужно для обучения серверного байес фильтра)?
Встроенная функция MsgForwardAsAttachment и MsgForwardMessage к сожалению не позволяет задать адрес на который пересылать :angry:

Будьте добры. Нужна кнопка "Organize bookmarks"

macuache
Bookmark Manager?

macuache

Будьте добры. Нужна кнопка "Organize bookmarks"

DOM Inspector (для Firefox 2.0.0.x и ниже нужно при установке выбрать выборочную установку и поставить соответствующую галочку)

Теперь набор пояснительных скриншотов.

0. Запускаем DOM Inspector:
http://s47.radikal.ru/i115/0811/2a/7209c9c958e4t.jpg

1. Выбираем нужный документ для исследования:
http://i022.radikal.ru/0811/86/931ebcbd0515t.jpg

2. Выбираем поиск:
http://s42.radikal.ru/i095/0811/29/c75cd70cf5abt.jpg
Вместо поиска можно выбрать нужный элемент интерфейса кликом (см. кнопку слева от поиска).

3. Ищем по атрибуту.
Атрибут: label
Значение: название искомого пункта меню
(Если искать по всплывающей подсказке, то вместо «label» использовать «tooltiptext».)
http://s41.radikal.ru/i092/0811/01/314c492fd765t.jpg

4. (Справа нужно выбрать отображение «DOM Node».) Затем нужно найти атрибут oncommand, command или onclick и скопировать его значение, выбрав в контекстном меню редактирование:
http://i036.radikal.ru/0811/3a/ce62f0601fdft.jpg http://s57.radikal.ru/i158/0811/5d/6f27703f60eft.jpg

5. Для oncommand и onclick искомым кодом является скопированное ранее значение атрибута.
Для command нужно найти соответствующую команду.

5.1. Ищем по идентификатору, в качестве которого берем значение атрибута command:
http://s51.radikal.ru/i132/0811/63/4f89d5316deat.jpg

5.2. У найденного элемента ищем атрибут oncommand и копируем его (это и есть искомый код):
http://s60.radikal.ru/i170/0811/11/9f1c7bb6c38at.jpg


В итоге получаем:

Выделить код

Код:

PlacesCommandHook.showPlacesOrganizer('AllBookmarks');

спасибо

Дайте пожалуйста кнопку, при нажатии на которую открывается нужная папка закладок (в виде меню над этой кнопкой).

Infocatcher
Просьба к спецу.
1.Дано: новая панель инструментов, названная №1, в которую перенесены почти все кнопки с панели навигации + доп. кнопки.
2.Необходимо создать доп. кнопку, при клике по которой, новая панель будет открываться и закрываться. Аналог - кнопка, скрывающая панель закладок.
Буду очень благодарен.
З.Ы. Из готовых кнопок подходящей нет. Сделать свою - :dumb:

68agasfer пишет:

Необходимо создать доп. кнопку, при клике по которой, новая панель будет открываться и закрываться.

Секция «код»:

Выделить код

Код:

var tName = "toolbarName"; // Вместо toolbarName – название добавленной панели инструментов
var tBar = document.getElementById("__customToolbar_" + tName.replace(/\s/, "_"));
tBar.collapsed = !tBar.collapsed;

Почему-то добавленные панели инструментов свое состояние не запоминают (точнее, с почему понятно – специально атрибута нету, а вот зачем так сделано – совершенно неясно).
В общем, если нужно скрывать панель по умолчанию (во всех новых окнах), надо добавить в секцию «инициализация» следующее:

Выделить код

Код:

var tName = "toolbarName"; // Вместо toolbarName – название добавленной панели инструментов
document.getElementById("__customToolbar_" + tName.replace(/ /, "_")).collapsed = true;

Кстати, с заменой пробелов на подчеркивания тоже глюк какой-то – только первый заменяется. =/

СПС большое!:beer: Вечером попробую.

Заработала!!!:D:D:D :beer: :tongue2: :D
Класс!!!
[fx]+[tb]=THE BEST!

Infocatcher

Кстати, с заменой пробелов на подчеркивания тоже глюк какой-то – только первый заменяется.

Выделить код

Код:

...replace (/ /g, "_")...

?

saab пишет:

Добрый день, а нет ли уже готовой кнопки для Thunderbird, которая по клику пересылала бы выбранные сообщения на заранее определенный адрес (нужно для обучения серверного байес фильтра)?
Встроенная функция MsgForwardAsAttachment и MsgForwardMessage к сожалению не позволяет задать адрес на который пересылать :angry:

Сделал вот такую:

Выделить код

Код:

function forwardTo (uri, email)
{
    var gIOService = Components. classes ["@mozilla.org/network/io-service;1"]. getService (Components. interfaces. nsIIOService);
    var hdr = messenger. messageServiceFromURI (uri). messageURIToMsgHdr (uri);
    // полям hdr лучше ничего не присваивать - это отразится на исходном сообщении
    var sMsgComposeService = Components. classes ["@mozilla.org/messengercompose;1"]. getService (Components. interfaces. nsIMsgComposeService);
    var msgWindow = Components. classes ["@mozilla.org/messenger/msgwindow;1"]. createInstance();
    msgWindow = msgWindow. QueryInterface (Components. interfaces. nsIMsgWindow);
    msgWindow. SetDOMWindow (window);
    msgWindow. rootDocShell. allowAuth = true;
    var folder = hdr. folder;
    var smtpService = Components. classes ["@mozilla.org/messengercompose/smtp;1"]. getService (Components. interfaces. nsISmtpService);
    var accountManager = Components. classes ["@mozilla.org/messenger/account-manager;1"]. getService (Components. interfaces. nsIMsgAccountManager);
    var server = accountManager. defaultAccount. incomingServer;
    sMsgComposeService. forwardMessage (email, hdr, msgWindow, server);
}
var messageArray = GetSelectedMessages ();
for (var i = 0; i < messageArray. length; i++)
    forwardTo (messageArray [i], "box@mail.com");

Есть одна неприятность при использовании, у некоторых писем тема контейнера (но не исходного письма) выходит "кракозябрами". Приблизительно, это письма, тема которых с кириллицей в кодировке windows-1251 начинается латиницей.

Anton пишет:

Infocatcher

Кстати, с заменой пробелов на подчеркивания тоже глюк какой-то – только первый заменяется.

Выделить код

Код:

...replace (/ /g, "_")...

?

Про «g» я в курсе. =)
Сам Firefox при добавлении панели инструментов присваивает ей id. Так вот, при этом только самый первый пробел заменяется на «_» (а не все, что было бы логичнее).
Проверяется, например, добавлением панели с именем «0  1  2».

USER пишет:

Anton
Anton, спасибо только мы уже свою написали в виде xpi...

cHeRsAnYa пишет:

Дайте пожалуйста кнопку, при нажатии на которую открывается нужная папка закладок (в виде меню над этой кнопкой).

Видимо, это довольно-таки нетривиально, потому как просто показать уже имеющийся список закладок не получается.
Так что, скорее всего, нужно делать копию, а это чревато тем, что во избежание глюков придется чистить ее от оригинальных обработчиков кликов и ставить свои.
Посему, я пока подожду – может кто предложит что-нибудь дельное. :sick: