|
>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Обсуждение расширений и дополнений http://forum.mozilla-russia.org/viewforum.php?id=28 >Custom Buttons http://forum.mozilla-russia.org/viewtopic.php?id=9591 |
| Yan > 11-04-2006 16:47:23 | ||||||||
Custom Buttons | ||||||||
| Крыска > 11-04-2006 22:14:31 | ||||||||
Давно мечтал о ББ-тулбаре....
это как то жостко. | ||||||||
| Bananas > 12-04-2006 02:30:52 | ||||||||
буду внимательно следить за разработкой) | ||||||||
| Крыска > 15-04-2006 11:35:03 | ||||||||
Yan | ||||||||
| Merlyel > 15-04-2006 12:19:48 | ||||||||
Хм... а чем Customizable Toolbar Buttons не подходил? | ||||||||
| Крыска > 15-04-2006 14:54:28 | ||||||||
Lynxx | ||||||||
| Merlyel > 16-04-2006 02:24:47 | ||||||||
Крыска | ||||||||
| Крыска > 16-04-2006 11:11:52 | ||||||||
Lynxx | ||||||||
| hex > 16-04-2006 13:17:11 | ||||||||
Yan молодец! Поздравляю (я то наверное могу это сделать со знанием темы)! Очень классный код и перспективный! | ||||||||
| Крыска > 16-04-2006 16:13:15 | ||||||||
Yan | ||||||||
| Yan > 16-04-2006 20:49:37 | ||||||||
Крыска
Пока нет.. Не было меня в городе, ничего не делал. Расширение можно тестить - кнопки удаляются через about:config сбрасыванием параметра custombuttons.button*.
Тем, что все создаваемые кнопки находятся в одном месте - их не распихать по нужным углам. | ||||||||
| hex > 16-04-2006 21:35:54 | ||||||||
Понял! Спасибо за добрые слова и в мой адрес и в адрес моего расширения! Дальновидная политика, молодец! | ||||||||
| Yan > 16-04-2006 21:49:06 | ||||||||
hex | ||||||||
| Крыска > 16-04-2006 23:43:54 | ||||||||
| ||||||||
| Крыска > 19-04-2006 15:04:43 | ||||||||
| ||||||||
| Yan > 19-04-2006 22:09:39 | ||||||||
Крыска
Статусная строка по умолчанию не предназначена для кнопок, вот и слетают. | ||||||||
| Крыска > 19-04-2006 22:14:27 | ||||||||
Yan | ||||||||
| Yan > 19-04-2006 22:32:39 | ||||||||
А я подписи отключил.
У меня тоже. Поэтому редкие кнопки (bbcode, например) я вынес на панель закладок, которую открываю только по необходимости (тоже кнопкой). Собственно, для того и расширение написал. | ||||||||
| Крыска > 20-04-2006 00:27:13 | ||||||||
т.е. в панель АИОС? | ||||||||
| Yan > 20-04-2006 00:41:04 | ||||||||
Крыска
Нет, именно Панель закладок. | ||||||||
| Yan > 26-04-2006 16:40:23 | ||||||||
Сделал alpha2. | ||||||||
| BraVo123 > 26-04-2006 19:34:06 | ||||||||
А можно как нибудь по простому объяснить, что нужно вставлять в поле Code? Например если я хочу создать кнопку для вызова расширения FireFTP ... | ||||||||
| Philip > 26-04-2006 20:12:30 | ||||||||
Было бы ещё шоколадно сделать плавающую (float) панель для размещения на ней кнопок. | ||||||||
| Крыска > 26-04-2006 20:41:45 | ||||||||
Ура! ПОлная поддержка ББкод! Теперь я доволен | ||||||||
| Yan > 26-04-2006 20:54:32 | ||||||||
BraVo123
Код тот же, что и для настройки горячих клавиш в keyconfig.
Вместо MenuManipulator можно воспользоваться DOM Inspector. Правда, это порядком сложнее. | ||||||||
| BraVo123 > 27-04-2006 00:30:26 | ||||||||
Yan, спасибо за исчерпывающий ответ | ||||||||
| BraVo123 > 27-04-2006 01:41:01 | ||||||||
Yan , я конечно уже извращаюсь, но всётаки, картинка для кнопки, может быть только одна или можно несколько втавить (отжатая кнопк, нажатая кнопка, неактивная кнопка) | ||||||||
| Yan > 27-04-2006 02:03:57 | ||||||||
BraVo123 Код: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 в коде указывает на саму кнопку. | ||||||||
| Dark-Demon > 28-04-2006 10:43:33 | ||||||||
Yan, не стоит использовать абсолютных путей... | ||||||||
| Yan > 28-04-2006 12:57:20 | ||||||||
Dark-Demon
Где? В коде для смены картинки? Если да, то почему? | ||||||||
| BraVo123 > 28-04-2006 17:08:06 | ||||||||
Ну например, я использую PortableFireFox .... | ||||||||
| Yan > 28-04-2006 23:52:54 | ||||||||
BraVo123
Ну это уже от желания пользователя зависит.. Если надо - придется конвертить. | ||||||||
| INFOMAN > 29-04-2006 03:23:08 | ||||||||
Лучше в профиле создавать папку и кидать туда картинки. | ||||||||
| Yan > 29-04-2006 03:35:00 | ||||||||
Ну так для юникс-подобных систем свой путь и вводить. Типа file:///home/yan/...... | ||||||||
| Yan > 14-05-2006 00:08:55 | ||||||||
Anton прислал мне код для конвертации картинок в base64, так что проблемы с абсолютными путями отпадают. | ||||||||
| Крыска > 14-05-2006 01:03:57 | ||||||||
что-то с часами я не понял. они у меня звёздочкой отображаются. | ||||||||
| Yan > 14-05-2006 01:07:02 | ||||||||
Крыска | ||||||||
| INFOMAN > 14-05-2006 02:42:52 | ||||||||
Интересная иконка: | ||||||||
| Крыска > 14-05-2006 12:10:02 | ||||||||
раз 20 щёлкал. у меня не работает. | ||||||||
| Крыска > 14-05-2006 12:16:49 | ||||||||
А можно сделать кнопку scrapbook'a "захватить"? | ||||||||
| Крыска > 14-05-2006 12:19:31 | ||||||||
ага. так и работает | ||||||||
| Anton > 14-05-2006 13:09:04 | ||||||||
Устанавливаются почему-то только при отключенном JavaScript - мол, кнопка недоступна, установите необходимое расширение. Но работают без этого расширения. | ||||||||
| Yan > 14-05-2006 17:10:06 | ||||||||
INFOMAN
Не знал, какое время для примера взять.
Странно.
Да:
Anton
Это я перемудрил со скриптом. | ||||||||
| Крыска > 14-05-2006 17:33:48 | ||||||||
Yan | ||||||||
| Yan > 14-05-2006 18:03:37 | ||||||||
Крыска
В общем случае как и в keyconfig. Код:var ar=document.getElementsByAttribute('label','Захватить как...');
alert(ar[0].id);Ну и потом вписать этот ID в код:
| ||||||||
| Yan > 15-05-2006 01:45:54 | ||||||||
Сделал для себя кнопку Proxy On/Off, а заодно и Offline Button. Если кому понадобится - установка там же. | ||||||||
| Dimanish > 15-05-2006 12:06:57 | ||||||||
Yan | ||||||||
| Крыска > 15-05-2006 20:33:51 | ||||||||
прально... пора выходить на мировой уровень | ||||||||
| INFOMAN > 16-05-2006 01:54:03 | ||||||||
Предполагаю, что прямо в кнопку в виде data:image/png;base64..... | ||||||||
| Anton > 16-05-2006 13:07:22 | ||||||||
А чтобы "умельцам" было проще, пусть само расширение компонует ссылки для установки кнопок. | ||||||||
| Yan > 16-05-2006 13:34:57 | ||||||||
Dimanish
INFOMAN правильно сказал. Конвертация в base64 позволяет хранить картинку в самом коде кнопки.
Обязательно сделаю.
Никаких нововведений и не требуется. Всё это можно сделать и сейчас в коде инициализации.
А вот правую кнопку лучше не обрабатывать, а то тогда контекстное меню не отроешь, и кнопку отредактировать можно будет только через about:config.
Про рабочее состояние говорить рано. Например, вчера нашел баг, из-за которого кнопки могли пропадать, или наоборот, появляться лишние. | ||||||||
| Yan > 16-05-2006 17:58:39 | ||||||||
Anton
Так контекстное меню -> Copy URI копирует в буфер ссылку. | ||||||||
| Anton > 16-05-2006 18:21:28 | ||||||||
| ||||||||
| INFOMAN > 17-05-2006 10:51:43 | ||||||||
Бесплатных хостингов, на которых можно повесить страницу с кнопками, пока хватает. | ||||||||
| Anton > 17-05-2006 19:10:23 | ||||||||
Хотелось бы, чтобы диалог редактирования кнопки был немодальным - когда нужно копировать скрипты с разных веб страниц, приходится его постоянно закрывать и открывать. | ||||||||
| Yan > 17-05-2006 19:39:48 | ||||||||
Anton
Да, пожалуй так лучше будет. Сделаю. | ||||||||
| Крыска > 17-05-2006 20:23:59 | ||||||||
да. будет получше., а то у меня кнопка получилась гибридная | ||||||||
| Yan > 17-05-2006 22:00:47 | ||||||||
Я сделаю так, чтоб окно всё равно было поверх других, но при этом была возможность копировать текст со страниц, и вообще работать с браузером. (как в Adblock Plus 0.7 отсоединённая панель со списком элементов). Так удобно будет? | ||||||||
| Крыска > 17-05-2006 22:12:29 | ||||||||
Yan | ||||||||
| Anton > 18-05-2006 14:30:53 | ||||||||
Конечно, будет удобней, если окно будет всегда наверху. | ||||||||
| Yan > 20-05-2006 02:50:43 | ||||||||
custombuttons 0.0.1 beta | ||||||||
| Dark-Demon > 20-05-2006 03:12:01 | ||||||||
Сварганил парочку кнопок: Код: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, поправь переключалку прокси, а то у тебя там отладочный алярм по клику выскакивает | ||||||||
| Dark-Demon > 20-05-2006 03:23:03 | ||||||||
ссылка в последнем посте у тебя битая... | ||||||||
| Yan > 20-05-2006 04:35:42 | ||||||||
Dark-Demon
Ой. Какой кошмар!
Есть такое. Подправить скорее всего не удастся, это связано в реализацией этих панелей в AIOS.
А это вроде как раз тот баг, что я в бете исправил. Но возможно и нет, надо будет последить еще...
Я изначально думал так сделать, но потом отказался в пользу нынешнего решения по нескольким причинам:
А вот это считаю излишним. Всё-таки суть расширения не в наборе кнопок, а в возможности добавлять их самому. | ||||||||
| Yan > 20-05-2006 04:58:55 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 20-05-2006 05:12:31 | ||||||||
Как устанавливать приведенные мной кнопки: трижды щелкните по урлу (он должен весь выделиться), скопируйте его в строку адресса и нажмите "перейти". | ||||||||
| Yan > 20-05-2006 05:22:29 | ||||||||
Dark-Demon
Я поставлю галочку "Не показывать больше".
Разумно. Пожалуй, сделаю. | ||||||||
| Yan > 20-05-2006 05:31:58 | ||||||||
Пока вот что нашел: если после кнопок в статусбаре поставить разделитель (separator), то кнопки пропадать не будут... | ||||||||
| Dark-Demon > 20-05-2006 05:50:00 | ||||||||
>Да, и если в кнопке обе картинки задаются в коде, то заполнение Image получается излишним Код:content local local/ И теперь ее содержимое доступно по chrome://local/content/* | ||||||||
| Dark-Demon > 20-05-2006 05:51:43 | ||||||||
>если после кнопок в статусбаре поставить разделитель (separator), то кнопки пропадать не будут | ||||||||
| Крыска > 20-05-2006 10:16:27 | ||||||||
я страничку с кнопками сохранил в СкрапБуке. теперь при необходимости достать могу | ||||||||
| Yan > 20-05-2006 12:14:20 | ||||||||
Dark-Demon
Это уже как автор кнопки напишет - так и будет. Можно и так.
А формат тогда какой применять? rdf? Что-то я не вижу преимуществ. Кнопки-то не по шаблону создаются, а через DOM.
Эх.. Если бы всё так просто было... Там совсем другая система.
А по мне, так наоборот, контекстное меню - самый удобный способ управления кнопками. Кнопку можно отредактировать в пару кликов, и тут же проверить работоспособность.
Это да, для того я собственно, и расширение писал. Но реализовывать в расширении свой собственный механизм обновлений - это уж слишком будет, IMHO. | ||||||||
| Philip > 20-05-2006 15:25:54 | ||||||||
А если не секрет, чем преобразовывать ссылки custombuttons? | ||||||||
| Yan > 20-05-2006 16:27:49 | ||||||||
Philip | ||||||||
| Anton > 20-05-2006 16:50:38 | ||||||||
Окно - то, что надо. Даже свернуть/развернуть кнопочки появились (я хотел попросить, но забыл). | ||||||||
| Philip > 20-05-2006 16:57:26 | ||||||||
Yan, нет, я про то, что если я захочу сделать подобную ссылку, как можно конвертировать например кириллицу в ASCII символы. | ||||||||
| Yan > 20-05-2006 17:07:01 | ||||||||
Anton | ||||||||
| Philip > 20-05-2006 20:43:02 | ||||||||
Yan, точно! я как-то и не заметил. Извиняюсь. Очень удобно! | ||||||||
| Dark-Demon > 21-05-2006 00:39:55 | ||||||||
>Кнопки все хранятся в document.getElementById("navigator-toolbox").palette главного окна браузера.
проблема в том, что созданные тобой кнопки приходится добавлять на нее самостоятельно... | ||||||||
| Dark-Demon > 21-05-2006 01:49:07 | ||||||||
Кстати, иконки для кнопок я взял из QuickJava... | ||||||||
| Yan > 21-05-2006 02:14:35 | ||||||||
Dark-Demon | ||||||||
| Yan > 21-05-2006 02:24:19 | ||||||||
Новая версия:
Ага, даже в адресной строке. | ||||||||
| Крыска > 21-05-2006 11:52:26 | ||||||||
Yan | ||||||||
| Yan > 21-05-2006 14:19:06 | ||||||||
Опять новая версия:
Доделаю версию 0.0.1, и сделаю. А то мне пока тоже лень заморачиваться с новыми номерами для каждой версии и править update.rdf. | ||||||||
| Крыска > 21-05-2006 14:49:16 | ||||||||
Yan
ну это понятно, но с такимми частыми апдейтами - автоапдейт будет лучшим способом обновления. | ||||||||
| Yan > 21-05-2006 15:32:47 | ||||||||
Крыска | ||||||||
| Dimanish > 21-05-2006 15:37:28 | ||||||||
Yan | ||||||||
| Yan > 21-05-2006 15:46:04 | ||||||||
Dimanish Код:var focusedWindow = content;
var reference = focusedWindow.getSelection();
if (!reference.isCollapsed){
alert('выделения нет');
}else{
alert('выделение есть');
} | ||||||||
| Yan > 21-05-2006 16:08:51 | ||||||||
Dimanish
Brrrr... Тут была дикая опечатка. Исправил. Извиняюсь... | ||||||||
| Dark-Demon > 21-05-2006 16:26:29 | ||||||||
Dimanish, а что, дрегондроп не рулит? | ||||||||
| Yan > 21-05-2006 16:36:16 | ||||||||
Dimanish | ||||||||
| Dimanish > 21-05-2006 16:39:30 | ||||||||
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);
}}}Все работает. | ||||||||
| Крыска > 21-05-2006 16:42:25 | ||||||||
Dark-Demon | ||||||||
| Dimanish > 21-05-2006 16:45:54 | ||||||||
Dark-Demon | ||||||||
| Крыска > 21-05-2006 16:47:33 | ||||||||
Так. я что-то не доехал. Вроде же сделали, что б окно можно было свернуть при создании кнопки... а не пашет. | ||||||||
| Dimanish > 21-05-2006 16:55:02 | ||||||||
Крыска | ||||||||
| Yan > 21-05-2006 17:08:01 | ||||||||
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 > 21-05-2006 17:14:57 | ||||||||
| ||||||||
| Крыска > 21-05-2006 23:05:16 | ||||||||
Так. столько кнопок для скрапбук наворатили. Теперь объясните действие каждой, в чём отличия? | ||||||||
| Yan > 21-05-2006 23:26:03 | ||||||||
Крыска
А различия в реализации. | ||||||||
| Dimanish > 22-05-2006 10:53:33 | ||||||||
Хм, не уловил момент, но иногда кнопка Scrapbook (оба варианта) отказывается работать, лечится открытием окна редактирования с последующим нажатием "OK". | ||||||||
| Yan > 23-05-2006 02:00:15 | ||||||||
Dimanish | ||||||||
| Dimanish > 23-05-2006 12:30:36 | ||||||||
Yan | ||||||||
| Yan > 23-05-2006 21:21:45 | ||||||||
Dimanish
Вчера как раз сделал себе кнопку "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 (Для установки кнопки нужно выделить код и вставить его в адресную строку)
Вряд ли возможно что-то приемлемое. Кнопки на самом деле добавляются не в окно, а в "спец. хранилище", откуда окно их потом "подцепляет". Если писать своё окно с кнопками, то очень многие стандартные функции (типа drag'n'drop, сохранение положения на тулбарах) придется заново переписать. Лишний код, лишнее время, лишние баги.. К тому же совместимость с другими расширениями ухудшится (с тем же AIOS, например). | ||||||||
| Dimanish > 23-05-2006 22:40:53 | ||||||||
Yan | ||||||||
| Yan > 23-05-2006 23:09:41 | ||||||||
Dimanish
Код: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']); ...
Мда... Именно так. | ||||||||
| Lain_13 > 24-05-2006 14:26:26 | ||||||||
Хм... отличная идея с плагином для кнопок но есть парочка мелких замечаний и вопросов: | ||||||||
| Lain_13 > 24-05-2006 16:08:47 | ||||||||
Вообщем, плюнул и перевел сам Ж). Код: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 Код:<!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*/"> Вот так вот примерно Ж). Люблю я длинные посты. Если есть ашЫпки в переводе, то исправьте и отпишите. Код:InstallConfirm_en=ффф Do you wish to install "%s" button? Для чего это было??? Вообщем выкинул. | ||||||||
| Yan > 24-05-2006 17:18:29 | ||||||||
Lain_13
Так не успел еще. Beta всё-таки. Пока отлов багов считаю более важным.
Попробую.
Наверное, кнопка-то работает, но панель не сохраняет положение. Так? Чтобы сохранялось, надо посложнее код писать..
Окно - вряд ли. Сложно. А вот разные параметры можно в коде кнопки через JS задавать.
Вообще, можно всё. | ||||||||
| stoneflash > 24-05-2006 17:48:43 | ||||||||
Yan | ||||||||
| Yan > 24-05-2006 17:54:00 | ||||||||
stoneflash | ||||||||
| Lain_13 > 26-05-2006 12:48:33 | ||||||||
При запуске лолифокса (напомню, это бонэхо) в консоли джаваскрипта выдается: Код: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 не правил... значит ашипка где-то в ней... | ||||||||
| Lain_13 > 26-05-2006 13:10:07 | ||||||||
Ошибку локализовал и исправил, дело в том, что 1я строка была пустой, а это, видимо, недопустимо. Просто удаляем переход на новую строку в первой строке и все будет нормально работать. | ||||||||
| Крыска > 26-05-2006 19:37:17 | ||||||||
Yan | ||||||||
| Dark-Demon > 27-05-2006 13:37:33 | ||||||||
Крыска, а какие кнопочки интересуют? | ||||||||
| Крыска > 27-05-2006 15:23:40 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 28-05-2006 01:03:07 | ||||||||
переделанный 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 | ||||||||
| Dark-Demon > 28-05-2006 01:56:23 | ||||||||
Крыска, а нафига несколько альбомов? там же можно дерево папок соорудить... | ||||||||
| Крыска > 28-05-2006 12:04:43 | ||||||||
Dark-Demon
кхм... а тормоза не мешают? | ||||||||
| Dimanish > 28-05-2006 14:09:29 | ||||||||
Yan
Proxomitron ругается: | ||||||||
| petrovich > 28-05-2006 17:10:20 | ||||||||
Можно ещё добавить к сообщению кнопку "настроить сейчас", которая откроет окно с кнопками.
Имхо, скоро появятся странички с большим количеством кнопок, доступных для установки(эта например). И пользователю не придётся делать кнопки самому, только пользоватся ими. | ||||||||
| Cwer > 28-05-2006 23:15:27 | ||||||||
после того как настраиваю тулбар все меню остается серым (не активным) | ||||||||
| Dark-Demon > 29-05-2006 00:25:42 | ||||||||
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 Код еще довольно сырой, но в некоторых случаях помогает. В общем - тестируем и подкидываем идеи по улучшению | ||||||||
| Yan > 29-05-2006 00:40:49 | ||||||||
Lain_13
Гм. Может это, с самодеятельностью чуток поаккуратнее?
Мда, не знаю в чем дело. Другие программы нормально запускаются, а с проксомитроном у меня та же штука..
Да, я так и хотел сделать.
Идея-то хорошая. Но реализовывать относительно долго. Пока на это время тратить не буду, может в следующих версиях сделаю.
Спасибо, посмотрю, что они там поменяли..
Нет, должно быть всё нормально. | ||||||||
| Yan > 29-05-2006 00:53:12 | ||||||||
Dimanish
Как исправить баг не знаю, но можно задавать обработчик onclick не через свойство, а через атрибут. Т.е. вместо:
писать надо так:
Так обработка onclick пропадать не будет. | ||||||||
| petrovich > 29-05-2006 01:07:37 | ||||||||
Yan
Подтверждаю. | ||||||||
| Anton > 29-05-2006 02:39:39 | ||||||||
Надо указать путь к конфигурационному файлу, т. е., если он в каталоге proxomitron'а, то
| ||||||||
| WaRdeN69 > 29-05-2006 10:16:37 | ||||||||
А опишите собствено говоя для чего данное расширение | ||||||||
| Yan > 29-05-2006 10:25:47 | ||||||||
Anton
Точно, спасибо. Странно, что из командной строки без пути запускается, а из FF-нет.
Не подтверждаю. Скачал FF 2.0a3, создал новый профиль - всё успешно установилось. Другие расширения ставятся успешно?
Что-то не ясно? | ||||||||
| Anton > 29-05-2006 10:52:35 | ||||||||
У меня и из командной строки не запускается без указания пути. p.s. хочется шрифт вроде Courier и tab/shift-tab на отступы, а в userchrome лень не пускает... | ||||||||
| petrovich > 30-05-2006 01:42:50 | ||||||||
Это мой косяк. Раньше в Firefox расширения сортировались соответственно порядку установки(первым поставил - первым в списке), теперь по алфовиту. Вот не туда и посмотрел. Всё нормально, расширение в списке присутствует. | ||||||||
| Крыска > 01-06-2006 01:51:50 | ||||||||
так можно такое сотворить или нет? | ||||||||
| Lain_13 > 01-06-2006 10:52:29 | ||||||||
Ну вот! Меня разбанили. Сам виноват, много оффтопика... | ||||||||
| Dark-Demon > 01-06-2006 15:57:42 | ||||||||
хотелось бы, чтобы при нажатии на bb-кнопки средней кнопкой в поле вставлялся текст из буфера обрамленный тегами. так вот, как получить содержимое буфера обмена? | ||||||||
| Anton > 02-06-2006 12:37:16 | ||||||||
http://forum.mozilla.ru/viewtopic.php?pid=77068#p77068 | ||||||||
| Dark-Demon > 03-06-2006 12:11:26 | ||||||||
Спасибо, вот что получилось... Код: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 по поводу кнопки запуска внешний приложений - не мешало бы пути к ним брать из реестра... | ||||||||
| Anton > 03-06-2006 17:59:30 | ||||||||
Имхо, в расширении необходимо сделать 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://' в текстовых узлах и заменяет соответствующие текстовые узлы набором ссылок. | ||||||||
| Dimanish > 03-06-2006 21:27:19 | ||||||||
Неплохо бы прикрутить поддержку Thunderbird. | ||||||||
| Lain_13 > 05-06-2006 13:10:10 | ||||||||
Anton, за кнопки спасибо. Но есть бага. Твой же собственный пост они не обработали! (предидущий про ббкод отлично). В чем же фокус? | ||||||||
| Anton > 05-06-2006 13:54:12 | ||||||||
Хм. Не знаю. У меня всё работает, вот скрин: http://forum.mozilla.ru/uploaded/cbtext … ertor3.png. Подробней можно ? | ||||||||
| Dark-Demon > 05-06-2006 14:24:30 | ||||||||
Anton, прикольно | ||||||||
| stoneflash > 08-06-2006 08:38:15 | ||||||||
А нельзя ли как-нибудь сделать кнопочку для запуска jar-файла из chrome? | ||||||||
| Dark-Demon > 09-06-2006 01:17:13 | ||||||||
stoneflash, а закладки не годятся? | ||||||||
| Anton > 10-06-2006 04:03:50 | ||||||||
Простенький редактор кода для расширения: http://forum.mozilla.ru/uploaded/codeeditor.zip Код:textbox#code,textbox#initCode
{
-moz-binding: url("file://P:/xul/codeeditor.xml#code_editor_binding");
font-family: monospace !important;
}Клавиши:
Кстати, к вопросу
недавно обнаружил в 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 | ||||||||
| Lain_13 > 10-06-2006 22:46:31 | ||||||||
вот так вот у меня эта бага выглядит... | ||||||||
| Anton > 11-06-2006 10:27:47 | ||||||||
Поэкспериментировал с настройками браузера, ILO, форума - воспроизвести не удаётся. Так что никаких идей пока нет. | ||||||||
| Yan > 11-06-2006 23:06:06 | ||||||||
Anton
Класс. Очень удобно. Спасибо. Не против, что я включу твой код в расширение? | ||||||||
| Anton > 11-06-2006 23:27:24 | ||||||||
Конечно не против, забирай. | ||||||||
| Yan > 11-06-2006 23:56:41 | ||||||||
Anton | ||||||||
| Dark-Demon > 12-06-2006 00:19:10 | ||||||||
Рулёз, обновил (кода меньше=>должно быть ещё быстрее; вроде исправил глюк с "забыванием", когда кнопка переставала что-либо делать и требовала открытия редактора и последующего его закрытия кнопкой ОК): Код: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
дык автоматическое уже есть, но по озвученным тобой причинам его мало кто ставит, а вот специальная кнопочка для этого бы не помешала... только ссылки надо без реферера открывать (не зря же их ввиде текста сделали...) | ||||||||
| Dimanish > 12-06-2006 00:30:22 | ||||||||
Dark-Demon
Хм, ты про что?
Кто исправил, ты? | ||||||||
| Dimanish > 12-06-2006 01:23:03 | ||||||||
Самое интересное, что кнопка Online\Offline работает после открытия/закрытия панели инструментов. | ||||||||
| Yan > 12-06-2006 13:51:32 | ||||||||
Dimanish
У меня нормально работает, проверил.
Не, таким способом это не исправить.
- это про что? | ||||||||
| Dimanish > 12-06-2006 14:53:44 | ||||||||
Yan
Я и написал, что работает. | ||||||||
| Yan > 12-06-2006 15:06:22 | ||||||||
Dimanish | ||||||||
| Dark-Demon > 13-06-2006 14:03:33 | ||||||||
Yan, ну не знаю, после того, как я написал this.onclick(); в коде, кнопки склерозом страдать перестали... | ||||||||
| Yan > 13-06-2006 16:18:34 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 13-06-2006 17:01:03 | ||||||||
подтверждаю | ||||||||
| Yan > 13-06-2006 20:51:21 | ||||||||
Версия 0.0.1.1 | ||||||||
| Lain_13 > 14-06-2006 17:15:59 | ||||||||
Ян! Спасибо за новую версию, но вот, что я заметил. Полазил по разным расширениям и во всех обозначение русской локали идет как ru-RU. Именно такое обозначение я сделал в своей версии. Для Польской и английских окалей у тебя все прописано коррекно, но почему для русской прописано просто ru? И хоть расширение работает, но может лучше придерживаться какого-то стандартного обозначения? Просто мало ли каким боком это потом выйдет... | ||||||||
| Yan > 14-06-2006 19:20:06 | ||||||||
Lain_13 | ||||||||
| Lain_13 > 14-06-2006 19:51:15 | ||||||||
Извини, отстал от жизни. Ж) | ||||||||
| Unghost > 14-06-2006 21:18:43 | ||||||||
Lain_13 | ||||||||
| Yan > 15-06-2006 19:02:57 | ||||||||
Версия 0.0.1.2 | ||||||||
| Dark-Demon > 16-06-2006 15:01:05 | ||||||||
Та, я смотрю мой пост не прошёл... тогда реплей... Код: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" по дефолту скрыта? | ||||||||
| Anton > 18-06-2006 19:56:59 | ||||||||
Ещё одна кнопка, для преобразования простых ссылок '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 | ||||||||
| Infant > 18-06-2006 20:39:33 | ||||||||
Решил тоже попробовать это расширение и кнопки описанные здесь выше. Одно маленькое пожелание, надо что-то делать с пояснительным текстом к кнопкам. Эти опусы невозможно прочитать в окне Настройки панелей инструментов (если только не растянуть его на весь экран) из-за налезания текста друг на друга. Если вытащить кнопку на панель, то при включённом отображении "Значки и текст" кнопка занимает много места. | ||||||||
| Anton > 18-06-2006 21:05:36 | ||||||||
Infant | ||||||||
| Dark-Demon > 19-06-2006 14:25:32 | ||||||||
Вот, твою подправил: Код: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== А вот и кнопочка "найти ссылки":
кастомбутоны показывает как у тебя, плюс находит ссылки вида _http://mozilla.ru/ и тому подобные. | ||||||||
| Dark-Demon > 19-06-2006 21:09:04 | ||||||||
Кстати, что-то твоя новая кнопка не работает... | ||||||||
| Anton > 24-06-2006 19:21:32 | ||||||||
На основе примера из 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 | ||||||||
| Infant > 24-06-2006 19:31:32 | ||||||||
Anton | ||||||||
| Anton > 24-06-2006 19:34:27 | ||||||||
Infant | ||||||||
| Infant > 24-06-2006 20:23:52 | ||||||||
В последних кнопках в поле код я текста не вижу, но он выделяется. В остальных — вижу. Видимо что-то в коде кнопки так воспринимается. | ||||||||
| Anton > 24-06-2006 21:14:22 | ||||||||
Непонятно, что имеется в виду... Блоки "Код:" я оформлял как обычно, у меня отображаются нормально. Адресная строка ? Да, бывает, что в textbox'ах большой текст становится невидимым (впрочем, у меня код последних кнопок в адресной строке также виден). | ||||||||
| Infant > 24-06-2006 21:23:13 | ||||||||
| ||||||||
| Anton > 24-06-2006 22:03:40 | ||||||||
Infant
где ? В локальном html ? | ||||||||
| Infant > 24-06-2006 22:17:48 | ||||||||
Копирую в поле создания сообщения и тоже не вижу текст. Вставляю в редактор FAR'а — вижу. Самому стало интересно, начал Ctrl+Del удалять символы и ... бац появилось. | ||||||||
| Anton > 24-06-2006 22:51:53 | ||||||||
Бывает, про textbox'ы я уже говорил (у меня обсуждаемые коды видно и в полях создания сообщений : ) ). | ||||||||
| xXx > 25-06-2006 09:23:10 | ||||||||
скажите как сделать кнопку которая выводила бы смайл | ||||||||
| Anton > 25-06-2006 11:42:46 | ||||||||
Код: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 | ||||||||
| xXx > 25-06-2006 11:47:58 | ||||||||
Спасибо | ||||||||
| Anton > 25-06-2006 14:14:27 | ||||||||
Доработал часы. Теперь нормально "заводятся". Код: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 | ||||||||
| INFOMAN > 25-06-2006 23:27:14 | ||||||||
| ||||||||
| Dark-Demon > 04-07-2006 02:42:43 | ||||||||
пачка новых кнопок. суть в том, что левый клик открывает в сайдбаре, а средний - в табе, причем если в одном из табов это уже открыто, то сей таб становится активным. повторное нажатие закрывает соответственно сайдбар и таб. Код: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>весьма простенько, но с поставленной задачей справляется на ура. | ||||||||
| Lain_13 > 04-07-2006 11:13:32 | ||||||||
Не знаю почему, но и одна из этих кнопок у мну сайдбар открыть не ухитрилась... Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8.1a3) Gecko/20060619... Более того Bookmark и History у мну не открылись даже в обычной панели... Ж( | ||||||||
| Dark-Demon > 04-07-2006 23:49:02 | ||||||||
Оформил страничку со своими кнопочками: http://dark-demon.nm.ru/soft/custombuttons/ | ||||||||
| Dark-Demon > 04-07-2006 23:50:49 | ||||||||
Lain_13 какая у тебя версия FF? | ||||||||
| stoneflash > 04-07-2006 23:54:25 | ||||||||
Dark-Demon | ||||||||
| igorsub > 05-07-2006 01:09:11 | ||||||||
Запрашиваемая страница не найдена. | ||||||||
| Lain_13 > 05-07-2006 10:55:04 | ||||||||
см. мой пост внимательно. Ж) | ||||||||
| stoneflash > 05-07-2006 19:04:21 | ||||||||
Lain_13
Идея хорошая, но вшивать в расширение - это каждый раз обновлять само расширение. Сделать-то легко отдельное. | ||||||||
| Dark-Demon > 06-07-2006 01:14:54 | ||||||||
версия ядра мне ни о чём не говорит. а оффициальная альфа датируется 20060526, которая у меня и стоит. думаю, дело в твоей ночнушке...
Сори
Не привязаны. Окромя Stylish Button ес-сно.
нет, нужно просто создать сайт потипу http://userstyles.org/
под FF
не понял фразу :-\
как я уже сказал, создать сайт, а в расширении разместить ссылку на него.
а ты посмотри более древние странички | ||||||||
| Dark-Demon > 06-07-2006 01:17:17 | ||||||||
Ой, глянул своё творение, - действительно жуть. Я забыл закачать обновлённую таблицу стилей. Сейчас всё в порядке. | ||||||||
| Lain_13 > 06-07-2006 11:11:10 | ||||||||
1. реализация в видео отдельного плагина с обновлением открывающегося в сайдбаре не менее удобна в плане юзабилити. не надо на сайт заходить. смотреть что там поменялось... просто нажал найти обновления и если нету значит нету Ж(. А генерировать плагин можно со страничке на сайте. Никто ее не отменяет, идея хорошая. | ||||||||
| Dark-Demon > 06-07-2006 20:02:32 | ||||||||
Новая кнопочка. 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 | ||||||||
| Dimanish > 23-07-2006 13:46:59 | ||||||||
Ребят, а реально замутить кнопку для SessionSaver, т.е., чтобы по нажатию левой кнопки мыши на кнопке SessionSaver выдвигался бы список, аналогичный SessionSaver из пункта меню "Инструменты"? | ||||||||
| Dark-Demon > 03-08-2006 01:41:01 | ||||||||
Ян, Люцифер тут интересную фишку сварганил (http://forums.mozillazine.org/viewtopic.php?p=2402639) не хочешь к своему расширению подцепить? | ||||||||
| Dimanish > 03-08-2006 02:07:30 | ||||||||
Люди, состряпайте кнопку Online\Offline для Thunderbird, пожалуйста. | ||||||||
| kuroneko > 09-08-2006 20:11:19 | ||||||||
Пытаюсь сделать кнопку с выпадающим списком букмарков. Результат - видны только 3 предопределённых пункта. Посоветуйте, пожалуйста, как добавить недостающее ^_^ | ||||||||
| Dark-Demon > 10-08-2006 03:52:53 | ||||||||
kuroneko, там это меню специальным скриптом создаётся. смотри свойство onpopupshowing. | ||||||||
| kuroneko > 10-08-2006 11:07:32 | ||||||||
Угу. В том-то и дело, и вызов этого скрипта "в лоб" не срабатывает.
Читал я эту тему. Устанавливать дополнительное расширение ради одной кнопки не хочется, а посмотреть, как оно реализовано... я не слишком силён в XUL-программировании, и пока не совсем понимаю. | ||||||||
| Anton > 10-08-2006 13:55:26 | ||||||||
Я как то делал скрипт для keyconfig, вроде работало. | ||||||||
| kuroneko > 10-08-2006 14:14:18 | ||||||||
Угу. До чего-то похожего я уже дошёл. | ||||||||
| m435tr0d > 10-08-2006 21:43:50 | ||||||||
http://custombuttons2.com/forum/ | ||||||||
| Dark-Demon > 11-08-2006 00:30:47 | ||||||||
kuroneko, попробуй внаглую выдрать это меню и вставить в свою кнопку. | ||||||||
| kuroneko > 11-08-2006 03:47:55 | ||||||||
Вот, может кому пригодится. При первом нажатии меняет заголовок активного таба на (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*/ | ||||||||
| m435tr0d > 11-08-2006 15:47:50 | ||||||||
Код: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
| ||||||||
| kuroneko > 11-08-2006 17:09:29 | ||||||||
Не идеально. Если переключиться на другой таб, иконка кнопки не поменяется. | ||||||||
| m435tr0d > 11-08-2006 17:21:47 | ||||||||
я понимаю | ||||||||
| Dark-Demon > 18-08-2006 01:15:31 | ||||||||
что-то кнопочки в новых окнах не работают, только в первом... видимо не инициализируются. | ||||||||
| Dimanish > 18-08-2006 13:25:34 | ||||||||
Кнопка "Быстро процитировать": Код: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 Работает на форумах. | ||||||||
| petrovich > 26-08-2006 13:07:45 | ||||||||
Что случилось с Yan ом? Кто-нибудь знает? Его уже два месяца не видно. Может в армию забрали? | ||||||||
| Yan > 04-09-2006 19:26:15 | ||||||||
petrovich | ||||||||
| Dimanish > 07-09-2006 23:26:31 | ||||||||
Yan | ||||||||
| Yan > 09-09-2006 12:36:35 | ||||||||
Dimanish
( url ) Код: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'ы настройки прокси задаются вручную в коде инициализации. | ||||||||
| Dark-Demon > 12-09-2006 12:09:42 | ||||||||
Ян, не вижу смысла изобретать велосипед. http://www.xulplanet.com/references/elemref/ref_toolbarpalette.html | ||||||||
| Yan > 12-09-2006 13:11:15 | ||||||||
Dark-Demon Код:var element=document.getElementById('BrowserToolbarPalette');
alert(element);Получаем null. Это значит, что <toolbarpalette id="BrowserToolbarPalette"> удаляется из документа после создания панелей инструментов. Т.е. после загрузки браузера его уже никак не достать. | ||||||||
| Philip > 12-09-2006 13:35:55 | ||||||||
А поддержка второй версии браузера планируется? А то я давно уже сижу на ней и без CB уж очень не уютно. | ||||||||
| Пит Бэнкман > 14-09-2006 13:06:05 | ||||||||
Просьба о создании кнопки. | ||||||||
| Yan > 15-09-2006 21:35:18 | ||||||||
Philip Код: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 Так? | ||||||||
| Пит Бэнкман > 15-09-2006 22:57:54 | ||||||||
Yan Спасибо! Это то, что нужно! Давно хотел наличие этой фичи в ФФ. | ||||||||
| Philip > 16-09-2006 16:37:43 | ||||||||
Прошу прощения за назойливость, но когда? Хотя бы примерные сроки, уж очень мне этого расширения не хватает. | ||||||||
| Yan > 16-09-2006 16:56:47 | ||||||||
Philip | ||||||||
| Philip > 16-09-2006 19:18:11 | ||||||||
Скачал, попробовал, но... в общем после долгих опытов, выяснил:
Подсветил те расширения, присутствие которых "убивает" работоспособность Custom Buttons. | ||||||||
| Yan > 16-09-2006 19:30:01 | ||||||||
Philip | ||||||||
| Philip > 16-09-2006 19:33:18 | ||||||||
Yan | ||||||||
| GASon > 16-09-2006 23:09:02 | ||||||||
Установил сегодня это расширение и наслаждался его функционалом, а именно кнопками BBcode. Хотелось бы выразить огромный респект создателю! | ||||||||
| Yan > 16-09-2006 23:30:19 | ||||||||
GASon | ||||||||
| Dark-Demon > 17-09-2006 02:44:04 | ||||||||
а его и не надо после загрузки доставать. При редактировании кнопок просто правим оверлеящий файл, а чтобы изменения вступили без перезагрузки - руками добавляем кнопку, как ты это делаешь сейчас. только сейчас у тебя кнопки хранятся в мозильном реестре, что не есть гуд. а я предлагаю хранить их в соответствующем файле.
и таких проблем бы небыло.... а также кнопки бы появлялись сразу, и во всех окнах, а не только в первом. | ||||||||
| Anton > 17-09-2006 10:12:15 | ||||||||
Эх, если бы... Но не так просто на самом деле: | ||||||||
| GASon > 18-09-2006 09:13:16 | ||||||||
Расширение однозначно супер! У меня на работе юзеры FF уже заценили. | ||||||||
| Пит Бэнкман > 18-09-2006 10:59:22 | ||||||||
Возникла одна проблема: со всплывающими подсказками. Если вывести всплывающую подсказку для любой другой кнопки панели инструментов (к примеру, "Открывает новую вкладку"), а потом посмотреть ее для кнопки "Stop All Tabs", то она будет такой же (т.е. "Открывает новую вкладку"). И только после повторного обращения к кнопке "Stop All Tabs" ее всплывающая подсказка становится адекватной содержанию кнопки. | ||||||||
| Levabati > 18-09-2006 12:36:02 | ||||||||
Вопрос. | ||||||||
| petrovich > 18-09-2006 13:16:55 | ||||||||
| ||||||||
| GASon > 18-09-2006 13:31:28 | ||||||||
Отлично! Может тогда кто-нибудь кнопочки наваяет "получить всё" и "удалить всё помеченное как спам"? Заранее признателен. | ||||||||
| Dimanish > 18-09-2006 16:28:32 | ||||||||
GASon Код:goDoCommand('cmd_getNewMessages')2. "удалить всё помеченное как спам": Код:goDoCommand('cmd_deleteJunk'); | ||||||||
| Dark-Demon > 18-09-2006 19:33:15 | ||||||||
Anton, во первых, путь вегда можно определить: %путькпапке профиля%/extensions/custombuttons@xsms.org/что-тотам | ||||||||
| Yan > 18-09-2006 19:42:49 | ||||||||
Пит Бэнкман
Не знаю, воспроизвести не получается. Возможно, что-то с чем-то конфликтует..
Не очень понял, какой функционал нужен для кнопки? | ||||||||
| GASon > 18-09-2006 20:06:43 | ||||||||
Зачет! Большое человеческое спасибо! Всё работает. | ||||||||
| Yan > 18-09-2006 20:07:10 | ||||||||
Dark-Demon
Ага, свою справку могу тебе предъявить. | ||||||||
| Levabati > 18-09-2006 21:29:27 | ||||||||
Yan | ||||||||
| Yan > 18-09-2006 21:44:49 | ||||||||
Levabati Код: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 | ||||||||
| Levabati > 19-09-2006 01:18:45 | ||||||||
Yan | ||||||||
| Yan > 19-09-2006 01:45:36 | ||||||||
(Для установки кнопки нужно выделить код из пред. сообщения и вставить его в адресную строку) Код: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 может быть другой. | ||||||||
| petrovich > 19-09-2006 02:15:49 | ||||||||
Yan | ||||||||
| Dark-Demon > 19-09-2006 11:28:19 | ||||||||
нет | ||||||||
| Yan > 19-09-2006 13:23:06 | ||||||||
Dark-Demon
Недостаток номер 1: | ||||||||
| Anton > 19-09-2006 14:50:16 | ||||||||
Логично. Во время установки расширения права есть. Потом может не быть.
На этом форуме у меня нет раздвоения личности. idee fix по поводу статических оверлеев была, я даже бредил чего-то на xml Yan'у в PM. Но логика победила, и я поправился... В очередной раз : ) | ||||||||
| Levabati > 19-09-2006 16:52:15 | ||||||||
Yan!
ничего не выходит. | ||||||||
| Dark-Demon > 20-09-2006 12:07:20 | ||||||||
хранить копию в корне профиля. Код:content profile ../ overlay чттототам chrome://profile/content/custombutton.xul
думаю, стоит проверить... | ||||||||
| Yan > 20-09-2006 13:06:53 | ||||||||
Levabati
Контекстное меню на кнопке -> редактировать -> код инициализации
Ну да, но при переустановке расширения пользователь запустит Лису, а там нет ни одной кнопки! Копия из профиля сработает только при следующем запуске. Вот такие пироги.
На сколько я знаю, нет такой возможности.
Да не мучайся. | ||||||||
| Dark-Demon > 21-09-2006 11:27:15 | ||||||||
есть
одно другому не мешает... | ||||||||
| Anton > 21-09-2006 14:34:42 | ||||||||
Здорово : ) | ||||||||
| Yan > 21-09-2006 23:56:01 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 22-09-2006 12:18:42 | ||||||||
Yan, ну так что, берёшь на вооружение? | ||||||||
| Yan > 23-09-2006 16:45:05 | ||||||||
Dark-Demon | ||||||||
| Крыска > 24-09-2006 13:26:48 | ||||||||
не работают кнопки. в чем может быть проблема? | ||||||||
| Yan > 24-09-2006 17:28:29 | ||||||||
Крыска | ||||||||
| Dimanish > 24-09-2006 17:37:09 | ||||||||
Люди, напишите пожалуйста кнопку Multi-Scrapbook, аналогичную кнопке, входящей в Scrapbook. | ||||||||
| Yan > 24-09-2006 20:14:19 | ||||||||
Dimanish Код: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 | ||||||||
| Dimanish > 24-09-2006 22:11:47 | ||||||||
Yan | ||||||||
| Крыска > 24-09-2006 23:35:46 | ||||||||
Yan | ||||||||
| Dimanish > 24-09-2006 23:42:33 | ||||||||
Крыска | ||||||||
| Yan > 25-09-2006 02:06:17 | ||||||||
Dimanish
Ага, оказывается, у меня Scrapbook старой версии стоял, и имена функций не совпадали. | ||||||||
| Dark-Demon > 25-09-2006 11:17:21 | ||||||||
Yan, я тут продолжаю развивать мысль... Код:<implementation implements="nsIPrefBranch"> , то можно его добавить более эстетично | ||||||||
| Yan > 25-09-2006 12:46:57 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 25-09-2006 17:33:14 | ||||||||
Yan, xbl более удобен для писателей кнопок. С его помощью можно задавать конструктор и деструктор, хендлеры позволяют вешать обработчики событий без нагромождения яваскрипт условий, да и вообще, код получается красивым и понятным. | ||||||||
| Yan > 25-09-2006 19:05:00 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 25-09-2006 19:24:13 | ||||||||
Yan, достаточно снабдить хорошими примерами и любой интересующийся разберётся. я с xbl освоился разбирая нехитрый пример. | ||||||||
| Крыска > 26-09-2006 00:29:15 | ||||||||
не работает... отключение указанных расширений и установка 1,2 mod не помогла | ||||||||
| Dark-Demon > 26-09-2006 15:47:08 | ||||||||
Крыска, юзай мою модификацию | ||||||||
| Крыска > 27-09-2006 01:38:08 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 27-09-2006 11:32:52 | ||||||||
Крыска, в одном файле. custombuttons2.xbl | ||||||||
| pongo > 27-09-2006 17:08:04 | ||||||||
Можно ли создать кнопку, которая бы удаляла текущую страницу из закладок? | ||||||||
| Крыска > 27-09-2006 23:33:30 | ||||||||
Dark-Demon | ||||||||
| GASon > 28-09-2006 07:28:57 | ||||||||
Если всё таки можно, накропайте кнопочку для TB "Получить почту из всех ящиков". | ||||||||
| trolll > 28-09-2006 09:02:14 | ||||||||
GASon
А ведь же есть такая в mr.tech local install!!! | ||||||||
| Yan > 29-09-2006 00:44:03 | ||||||||
custombuttons 0.0.2 alpha | ||||||||
| Крыска > 29-09-2006 01:12:16 | ||||||||
Опаньки.... | ||||||||
| GASon > 29-09-2006 08:42:35 | ||||||||
Точно есть. | ||||||||
| Dark-Demon > 29-09-2006 11:37:44 | ||||||||
И ещё на один шажок ближе к идеалу: http://dark-demon.jino-net.ru/~files/cb2-tp3.rar | ||||||||
| Yan > 29-09-2006 14:20:48 | ||||||||
Крыска
Странно. У меня работает. Scrapbook 1.2.0.4, кнопка из 133681 (неизмененная, я её уже там отредактировал).
Одну явную ошибку я уже нашел - не определяется event в oncommand-коде. | ||||||||
| Dark-Demon > 29-09-2006 15:03:14 | ||||||||
Продолжу аггитировать за xul+css+xbl... | ||||||||
| Yan > 29-09-2006 15:53:53 | ||||||||
Dark-Demon
Это безусловный плюс. Правда, я не думаю, что xbl для большинства так уж и прозрачен. | ||||||||
| Dark-Demon > 29-09-2006 16:39:59 | ||||||||
думаю да, ведь в xul хранится только указание, что кнопка наличиствует, а xbl подключается через css. потом попробую сделать... | ||||||||
| Anton > 29-09-2006 20:33:05 | ||||||||
имхо, на каждую кнопку по xbl - слишком расточительно.
не уверен. можно попробовать соорудить какую-нибудь кнопку на xbl, чтобы посмотреть - будет ли это проще.
Можно. Код: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 не получилось отредактировать его из внешнего редактора. | ||||||||
| Крыска > 30-09-2006 00:16:57 | ||||||||
Yan | ||||||||
| Крыска > 30-09-2006 00:39:43 | ||||||||
Продолжаю радовать всех своими глюками... | ||||||||
| Yan > 30-09-2006 00:53:05 | ||||||||
Anton
Не очень понял. Т.е. привязать bind1, потом его изменить, и потом попробовать опять привязать?
Пожалуй, действительно стоит попробовать на чистом профиле.
Подтверждаю. | ||||||||
| Крыска > 30-09-2006 01:21:23 | ||||||||
Yan | ||||||||
| Yan > 30-09-2006 02:33:46 | ||||||||
Крыска | ||||||||
| Anton > 30-09-2006 10:26:22 | ||||||||
Да. | ||||||||
| Крыска > 30-09-2006 12:00:10 | ||||||||
Yan | ||||||||
| Yan > 02-10-2006 00:59:14 | ||||||||
Интересно, у кого-нибудь кроме меня эта последняя alpha работает? | ||||||||
| INFOMAN > 02-10-2006 01:57:15 | ||||||||
Yan, а ты не можешь в .htaccess прописать Код:AddType application/x-xpinstall .xpi ? | ||||||||
| Yan > 02-10-2006 02:00:35 | ||||||||
INFOMAN | ||||||||
| INFOMAN > 02-10-2006 02:17:57 | ||||||||
Сборку поставил, добавил кнопку, после перезапуска кнопка исчезла. | ||||||||
| Yan > 02-10-2006 02:31:58 | ||||||||
INFOMAN | ||||||||
| Dark-Demon > 02-10-2006 12:06:39 | ||||||||
сорри, забыл убрать extends для #allbuttons - теперь он совершенно не нужен
переезжай на jino-net.ru Код:<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'); "; | ||||||||
| INFOMAN > 02-10-2006 14:23:33 | ||||||||
Dark-Demon, на jino-net тоже AddType запрещён | ||||||||
| Dark-Demon > 02-10-2006 18:48:29 | ||||||||
по ходу дела xbl-ки надо править через вот эту функцию: | ||||||||
| Yan > 04-10-2006 21:45:46 | ||||||||
custombuttons 0.0.2 alpha | ||||||||
| Dimanish > 04-10-2006 22:07:15 | ||||||||
Yan | ||||||||
| Yan > 04-10-2006 22:18:10 | ||||||||
Dimanish | ||||||||
| Dark-Demon > 05-10-2006 12:00:24 | ||||||||
в общем через ту функцию сделать ничего не получится | ||||||||
| Anton > 05-10-2006 12:19:27 | ||||||||
Интересно, можно сделать ссылку на якорь (#) в data:// ? | ||||||||
| Dark-Demon > 05-10-2006 16:38:29 | ||||||||
Anton, что ты имеешь ввиду? | ||||||||
| Anton > 05-10-2006 18:45:12 | ||||||||
Если можно сделать ссылку на якорь, можно было бы "подшивать" образ *.xbl-файла по data:// протоколу. | ||||||||
| Dark-Demon > 05-10-2006 19:09:08 | ||||||||
ой какой изврат... зачем? | ||||||||
| Anton > 05-10-2006 20:33:44 | ||||||||
Ладно-ладно, не буду спорить. : ) Конечно, временные файлы гораздо естественней и, скорее всего, единственный приемлимый вариант. | ||||||||
| Dark-Demon > 06-10-2006 12:31:41 | ||||||||
Anton, в общем, как и обещал сделал кнопку к своему расширению реализующую выпадающее меню. Код:<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 > 06-10-2006 12:53:58 | ||||||||
К сожалению, в прошлый раз никто не ответил. Спрашиваю еще раз. | ||||||||
| Dark-Demon > 06-10-2006 14:55:30 | ||||||||
pongo, можно, разрешаю. | ||||||||
| pongo > 06-10-2006 15:03:49 | ||||||||
Dark-Demon, здорово! Но дело в том, что я не разбираюсь в программировании расширенией. Может быть, кто-нибудь напишет? | ||||||||
| Dimanish > 06-10-2006 16:01:03 | ||||||||
pongo | ||||||||
| Anton > 06-10-2006 19:56:40 | ||||||||
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 Удаляет все закладки на текущий адрес. Историю удалений не ведёт.
Ну, во-первых, если перечитаешь старые PM, то заметишь, что я говорил о контекстном меню. | ||||||||
| pongo > 06-10-2006 20:56:44 | ||||||||
Anton, спасибо, но мне кажется, что код слижком сложный. Есть же BookmarksCommand.deleteBookmark или http://home.netscape.com/NS-rdf#command?cmd=deletebookmark. Вот только я не знаю что с ними делать | ||||||||
| Anton > 07-10-2006 13:32:50 | ||||||||
Я начинал разработку кнопки с DoCommand, но не разобрался с аргументами cmd=deletebookmark, так что я тоже не знаю, что с ним делать. И BookmarksCommand/BookmarkRemoveTransaction тоже копал, но, имхо, с ними проще не будет, так как перед их вызовом надо формировать массив аргументов node/parentNode/nodeProperties - но, коль скоро они найдены, зачем их помещать их в массив и вызывать функцию ? Лишняя работа, проще сделать вызов Unassert. | ||||||||
| pongo > 07-10-2006 14:32:32 | ||||||||
Anton, понятно. Но можете написать код, который бы удалял только текущую страницу из закладок? | ||||||||
| Anton > 07-10-2006 14:38:43 | ||||||||
Вот именно это кнопка и делает. | ||||||||
| pongo > 07-10-2006 14:44:23 | ||||||||
Anton, ой. Извините. Я прочитал «адрес» как «сеанс». | ||||||||
| Dark-Demon > 08-10-2006 04:59:19 | ||||||||
новый билд: http://dark-demon.jino-net.ru/~files/cb2-tp4.rar | ||||||||
| Anton > 08-10-2006 11:04:12 | ||||||||
Опять эти <toolbaritem>... Чтобы нужная кнопка появилась в диалоге нужно вручную править xul и/или extens'ы в 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. | ||||||||
| Dark-Demon > 08-10-2006 18:25:54 | ||||||||
ничего подобного. xul генерится автоматом и пользователю его править не надо. только xbl.
в кокретном примере с контекстным меню преимуществ у xbl практически нет. однако в других случаях (bb-кнопки, например) xbl смотрится много более привлекательно, чем xul или dom.
ну давай меряться пиписьками... реализуй тогда cb2-imagesh на xul. | ||||||||
| Anton > 08-10-2006 22:19:06 | ||||||||
Может быть, но чтобы кнопка с контекстным меню появилась в моём диалоговом окне настройки панелей инструментов, мне пришлось этот самый xul править.
(кстати, и с выпадающим тоже). Вот как частный случай: а если пользователю не нужен тег [ code] из твоего расширения ? Вот либо придётся ставить ненужную кнопку, либо все преимущества насмарку. Это ведь смотря как организовать.
Ну давай. Вот твоя: Код:<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>ой... и правда короче : ) Зато выглядит аккуратнее и работает, в отличие от первой. | ||||||||
| Dark-Demon > 09-10-2006 12:19:00 | ||||||||
смешной ты человек
я не вижу тут ничего особо зазорного. впрочем, если очень хочется, то можно сделать эту кнопку невидимой, тобишь специальным флагом указывать - добавлять ли для неё запись в xul.
уже вижу, что она работает неправильно
кстати, это было бы весьма неплохо! но дорого... пока... | ||||||||
| Yan > 09-10-2006 17:50:33 | ||||||||
Я бы прежде всего предложил не превращать эту ветку в холивар "xbl vs xul", и перенести обсуждение в форум Разработка. Всё-таки здесь лучше обсуждать уже готовые релизы расширения, и кнопки к нему. Короче, создаю тему "Разработка Сustom Buttons", и предлагаю продолжить там. | ||||||||
| SAdmn > 05-11-2006 16:09:07 | ||||||||
И снова приходится редактировать - баг вернулся. | ||||||||
| stoneflash > 07-11-2006 13:56:33 | ||||||||
Я уже спрашивал здесь, спрошу теперь и в этой теме. | ||||||||
| Yan > 07-11-2006 15:36:39 | ||||||||
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%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 По умолчанию поиск регистрозависим. | ||||||||
| stoneflash > 07-11-2006 16:40:16 | ||||||||
Yan | ||||||||
| stoneflash > 07-11-2006 19:34:13 | ||||||||
Yan | ||||||||
| Yan > 07-11-2006 23:40:20 | ||||||||
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 | ||||||||
| stoneflash > 08-11-2006 20:18:18 | ||||||||
Yan | ||||||||
| Yan > 08-11-2006 20:41:04 | ||||||||
stoneflash | ||||||||
| stoneflash > 08-11-2006 20:46:23 | ||||||||
Yan | ||||||||
| SAdmn > 11-11-2006 12:21:51 | ||||||||
Можно попросить помощи в создании кнопки с ниспадающим списком фильтров URL corrector - чтоб можно было быстро отключить один из них. Сам, не зная основ создания расширений, уже вторую неделю пытаюсь, но ничего не выходит. | ||||||||
| AK-74 > 14-11-2006 20:09:24 | ||||||||
Пиплы, а как зафигачить кнопку на панельку, шоб страницу сразу в Scrapbook отправлять? В этой теме было что-то подобное, но там средняя кнопка учавствовала и у меня не перло. Так вот, хотца обычную без всяких средних кликов и др. наворотов... | ||||||||
| Yan > 14-11-2006 21:34:42 | ||||||||
AK-74 Код: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 | ||||||||
| stoneflash > 16-11-2006 20:35:46 | ||||||||
А можно сделать кнопочку, считающую, сколько раз на странице встречается та или иная фраза? | ||||||||
| AndreyD > 16-02-2007 23:52:05 | ||||||||
Yan
у меня не работает почему-то. | ||||||||
| Modex > 17-02-2007 00:34:45 | ||||||||
AndreyD | ||||||||
| AndreyD > 17-02-2007 01:00:50 | ||||||||
Modex Версия 1.2.0.6 | ||||||||
| MySh > 17-02-2007 20:40:30 | ||||||||
Scrapbook 1.2.0.8. — всё работает | ||||||||
| AndreyD > 17-02-2007 21:41:18 | ||||||||
Обновил до 1.2.0.8, все равно не работает, может я делаю что-то не так? | ||||||||
| AndreyD > 17-02-2007 22:18:21 | ||||||||
Как выглядит код при создании кнопки для вставки текста в позицию курсора в форме (для смайла например?) | ||||||||
| Yan > 17-02-2007 22:44:21 | ||||||||
Примерно так: Код: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; | ||||||||
| AndreyD > 18-02-2007 12:40:01 | ||||||||
Yan, я так понимаю, этот код вставляет b перед выделенным текстом и /b после него. А просто вставка тескста? Извините, но в программировании не силен. | ||||||||
| stoneflash > 18-02-2007 12:53:32 | ||||||||
AndreyD | ||||||||
| Yan > 18-02-2007 12:56:37 | ||||||||
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; | ||||||||
| AndreyD > 18-02-2007 13:17:51 | ||||||||
stoneflash | ||||||||
| AndreyD > 19-02-2007 11:20:03 | ||||||||
А можно сделать кнопку, которая прячет-показывает другие панели, как панель закладок? Если да, расскажите, как. | ||||||||
| Dark-Demon > 19-02-2007 12:58:16 | ||||||||
http://forum.mozilla-russia.org/viewtopic.php?pid=147506#p147506 | ||||||||
| AndreyD > 19-02-2007 17:12:17 | ||||||||
Dark-Demon, такая кнопка у меня есть. Что нужно поменять, чтобы пряталась другая панель? Я пробовал вместо "Personal toolbar" вставить имя настраиваемой панели со смайлами (smiles), но так не работает. | ||||||||
| Dark-Demon > 19-02-2007 18:13:02 | ||||||||
AndreyD, возьми dom inspector и посмотри какой идентификатор у этой панели. | ||||||||
| AndreyD > 19-02-2007 23:01:32 | ||||||||
Dark-Demon, вы меня пугаете! | ||||||||
| Dark-Demon > 20-02-2007 11:55:12 | ||||||||
Ну а как ты хотел? мне отсюда не видно что там у тебя за панелька... могу предложить поставить расширение Inspect Context, тогда на панельке можно щёлкнуть ПКМ, выбрать inspect, после чего откроется дом инспектор. потом нужно перейти вверх по дереву до элемента toolbar И посмотреть его id во 2 колонке. | ||||||||
| AndreyD > 20-02-2007 21:07:37 | ||||||||
Я разобрался с ID панелей с помощью поиска Total Comander в папке профиля по имени панели. Настриваемые панели имеют вид "__customToolbar_имя" | ||||||||
| AndreyD > 23-02-2007 22:47:13 | ||||||||
Афигенное расширение!!!! Все действия, которые часто приходится делать в браузере и раньше выполнялись набором кликов-нажатий, теперь выполняются единственным нажатием на нужную кнопку. Еще сделал панели для BB code и 3D смайлов, которые прячутся-вызываются кнопками на меню баре. | ||||||||
| Dark-Demon > 24-02-2007 20:08:46 | ||||||||
угу, а вот когда поставишь keyconfig - совсем о тулбарах и кнопочках забудешь | ||||||||
| itomonster > 27-02-2007 12:59:51 | ||||||||
ребята, никак не могу разобраться в этом коде, на котором нужно писать кнопки. | ||||||||
| Dimanish > 27-02-2007 14:39:15 | ||||||||
http://forum.mozilla-russia.org/viewtop … 68#p100868 | ||||||||
| itomonster > 27-02-2007 20:42:01 | ||||||||
прочитал и тему, и вики, но все равно у меня ничего не получается заставить работать. поэтому и прошу привести конретный пример, чтобы сравнить и понять, что у меня неправильно. | ||||||||
| Infant > 27-02-2007 20:52:49 | ||||||||
itomonster | ||||||||
| Anton > 27-02-2007 21:34:39 | ||||||||
в текущей вкладке Код:loadURI('http://ya.ru')в новой вкладке Код:getBrowser().addTab('http://ya.ru') | ||||||||
| itomonster > 27-02-2007 21:40:25 | ||||||||
Infant | ||||||||
| AndreyD > 27-02-2007 22:30:56 | ||||||||
itomonster
Извини, но стоит ли для этого делать кнопку. Не проще ли использовать закладки. | ||||||||
| itomonster > 27-02-2007 22:51:20 | ||||||||
AndreyD | ||||||||
| and23 > 28-02-2007 10:38:13 | ||||||||
Простите, если ужЕ обсуждалось: я не нашёл :-( | ||||||||
| Anton > 28-02-2007 14:15:58 | ||||||||
Вообще-то я custombuttons в Thunderbird не пользуюсь, возможно, изобретаю велосипед. Сделай новую кнопку с кодом Код:var bc = prompt ("код кнопки: ");
if (bc) custombuttons.installWebButton(bc);Потом с помощью этой кнопки инсталлируй готовые. | ||||||||
| and23 > 28-02-2007 15:01:31 | ||||||||
2Anton: Спасибо, работает! :-) (только я не кнопку добавил, а пункт меню). | ||||||||
| 369 > 28-02-2007 20:31:47 | ||||||||
Значится так. Долго не мог понять, почему custombuttons и кнопки BBcode с домашней страницы расширения у меня напрочь не работали. Причем совсем. | ||||||||
| Modex > 28-02-2007 20:36:58 | ||||||||
369 | ||||||||
| Yan > 28-02-2007 20:49:46 | ||||||||
369 | ||||||||
| Modex > 28-02-2007 21:15:44 | ||||||||
Yan | ||||||||
| 369 > 28-02-2007 21:20:46 | ||||||||
...ничего не понимаю... Снес NoScript в другой сборке - кнопки по прежнему не работают... | ||||||||
| Anton > 28-02-2007 22:04:28 | ||||||||
иногда происходит, не уловил только, какие действия приводят к их (временной) работе. кажется, проблема связана с Код:var theBox = document.commandDispatcher.focusedElement; Добавлено Срд 28 Фев 2007 22:30:12 : после перезапуска бб-коды "завелись". | ||||||||
| alexmac > 06-03-2007 13:01:28 | ||||||||
Возможно ли добавлять кнопки чтобы небыло поля с названием самой кнопки? Так как при добавлениии кнопки на панель навигациии или в панель меню сами панели становятся шире. Если да, то как? Если нет, то не планируется ли сделать такое? | ||||||||
| Anton > 06-03-2007 15:08:19 | ||||||||
1. Правой кнопкой по панели инструментов, "Настроить...", в списке "Показывать" выбрать "Только значки" | ||||||||
| alexmac > 06-03-2007 15:35:15 | ||||||||
Спасибо, но это не совсем то. Хотелось бы запихнуть кнопку на панель с главным меню. При этом чтобы панель главного меню не расширялась, а текст у кнопок с тулбара оставался виден. Если сделать так как ты предлагаешь: | ||||||||
| Anton > 06-03-2007 16:00:30 | ||||||||
можно прописать в секцию "Инициализация" одной из этих кнопок строку Код:this. parentNode. setAttribute ("mode", "icons"); | ||||||||
| Dark-Demon > 06-03-2007 17:14:26 | ||||||||
я так понимаю нужно всего-лишь поменять ориентацию охватывающего бокса - это можно сделать через userCrome.css | ||||||||
| alexmac > 06-03-2007 21:37:11 | ||||||||
To Anton: | ||||||||
| Dark-Demon > 07-03-2007 12:04:39 | ||||||||
не, мне лень ковыряться %-) | ||||||||
| alexmac > 07-03-2007 12:25:58 | ||||||||
to Dark-Demon: | ||||||||
| Anton > 08-03-2007 10:19:59 | ||||||||
где-то была в этой теме
и как оно там это в Maxthone'е реализовано ? | ||||||||
| alexmac > 08-03-2007 12:19:29 | ||||||||
К сожелению не знаю как выложить свой скриншот этой кнопки. Поэтому попытаюсь объяснить на словах: | ||||||||
| Anton > 08-03-2007 13:24:54 | ||||||||
Кнопка для выбора кодировки (выкладываю снова, т. к., в старой у меня почему-то перестали работать кириллические имена функций и переменных): Код: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, например. | ||||||||
| alexmac > 08-03-2007 13:51:53 | ||||||||
Спасибо за кнопку со сменой кодировки, в сообщениях выше я её так ине нашёл | ||||||||
| Лаэда > 08-03-2007 21:06:17 | ||||||||
Есть такое расширение ImageShack Toolbar. Код: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*/ | ||||||||
| alexmac > 12-03-2007 15:06:32 | ||||||||
Можно ли отменить действие прописанное в секции "CODE", при выполнении действия по нажатию на пункт в ниспадающем меню кнопки? | ||||||||
| Dark-Demon > 13-03-2007 12:20:52 | ||||||||
alexmac, опиши по шагам чего ты хочешь... | ||||||||
| alexmac > 13-03-2007 14:16:20 | ||||||||
У меня есть кнопка с ниспадающим меню, по нажатию на саму кнопку должно происходить 1-ое действие, при нажатии на 1-ый пункт в ниспад. меню 2-ое действие, при нажатии на 2-ой пункт в ниспад. меню 3-е действие и т.д. Но возникает проблемма: при нажатии на любой пункт в нисп. меню (1-ый или 2-ой) происходит нужное действие (2-ое или 3-е) + 1-ое. | ||||||||
| Dark-Demon > 13-03-2007 14:37:55 | ||||||||
а, понял, тебе нужно вставить event.stopPropagation(), чтобы событие не всплывало дальше. | ||||||||
| alexmac > 13-03-2007 14:58:21 | ||||||||
а куда именно? Код:/*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";Замечания по реализации приветствуются | ||||||||
| stoneflash > 13-03-2007 15:50:05 | ||||||||
Был бы очень благодарен,если бы кто-нибудь написал кнопочку для удаления с диска просматриваемой страницы по протоколу file://. Заранее спасибо. | ||||||||
| Anton > 13-03-2007 23:01:48 | ||||||||
у меня не выполняется первое действие при выполнении второго. я, правда, заменил MafGUI.xxx alert'ами, может, это особенность maf ? Код: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 | ||||||||
| alexmac > 13-03-2007 23:30:22 | ||||||||
может, это особенность maf? | ||||||||
| stoneflash > 14-03-2007 10:56:17 | ||||||||
Anton
Но файл удаляется. | ||||||||
| Dark-Demon > 14-03-2007 12:18:58 | ||||||||
alexmac, вроде должно работать так... Код:var mP=document.createElement('menupopup');
mP.onclick="event.stopPropagation()" | ||||||||
| alexmac > 14-03-2007 12:47:44 | ||||||||
Не помогло | ||||||||
| Dark-Demon > 14-03-2007 13:39:42 | ||||||||
а так? Код:mP.setAttribute('onclick',"event.stopPropagation()");также попробуй вместо onclick поставить oncommand | ||||||||
| alexmac > 14-03-2007 13:53:12 | ||||||||
Спасибо, Dark-Demon!!! Поставил в этот код oncommand и всё заработало | ||||||||
| Anton > 14-03-2007 15:50:38 | ||||||||
stoneflash
Вероятно, файл не имеет сопутствующей директории с картинками, css и т. п. Определённо, я забыл убрать отладочный alert из кода кнопки. Код:alert(e); | ||||||||
| alexmac > 29-03-2007 15:30:19 | ||||||||
Подскажите, пожалуйста, код кнопки, аналогичной кнопки "Перейти(перейти по введённому адресу)". Хочу "прикрутить" к ней ниспадающее меню, с дополнительными функциями. | ||||||||
| Dark-Demon > 29-03-2007 16:32:19 | ||||||||
а какие функции ты хочешь прикрутить? | ||||||||
| alexmac > 29-03-2007 19:43:53 | ||||||||
Хочется иметь такую же кнопку как в maxthone с функциями перевода на различные языки используя веб-сервисы типа промт и т.д. Ну и ещё чего-нибудь, про запас | ||||||||
| Dark-Demon > 30-03-2007 12:36:22 | ||||||||
alexmac, второе использует XBL и все его прелести (конструктор, деструктор, евенты, наследование итп), а первое - только яваскрипт: есть только конструктор и обработчик клика, который во многих случаях без надобности. часть кнопок custombuttons совместимо с customitems, но не все. если установлены оба расширения, то конфликтов быть не должно. | ||||||||
| alexmac > 30-03-2007 13:36:03 | ||||||||
Dark-Demon, спасибо за ответ. Может по поводу кнопки что-нибудь подскажите? | ||||||||
| Nem > 30-03-2007 13:41:01 | ||||||||
| alexmac > 30-03-2007 13:51:08 | ||||||||
To Nem | ||||||||
| Nem > 30-03-2007 14:06:09 | ||||||||
alexmac | ||||||||
| alexmac > 30-03-2007 14:29:52 | ||||||||
Спасибо за участие | ||||||||
| Nem > 30-03-2007 14:58:20 | ||||||||
alexmac | ||||||||
| alexmac > 30-03-2007 15:17:14 | ||||||||
Спасибо. | ||||||||
| Nem > 30-03-2007 15:44:48 | ||||||||
Вот с меню.
Не понял вопроса. А как работает функция "Перейти"? | ||||||||
| alexmac > 30-03-2007 15:52:50 | ||||||||
| ||||||||
| Nem > 30-03-2007 16:42:31 | ||||||||
alexmac Код:document.getElementById("urlbar").value | ||||||||
| alexmac > 31-03-2007 16:18:14 | ||||||||
To Nеm:Спасибо, помогло! А, вообще, это что за язык, javs script? | ||||||||
| Nem > 31-03-2007 22:17:04 | ||||||||
alexmac | ||||||||
| alexmac > 02-04-2007 16:16:23 | ||||||||
Кто-нибудь может подсказать, как при помощи Custom Buttons сделать так, что бы при наведении курсора мыши кнопка меняла свой цвет (менялась картинка)? | ||||||||
| Anton > 02-04-2007 21:26:09 | ||||||||
вот так: Код: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()");например, в разделе "Инициализация". | ||||||||
| Jarov > 11-04-2007 23:16:40 | ||||||||
Народ, подскажите, как функцию из TMP "Закрыть вкладки справа" реализовать в кнопку?? | ||||||||
| alexmac > 13-04-2007 11:42:52 | ||||||||
To Anton: Код: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 (может тебе пригодится) | ||||||||
| Лаэда > 28-04-2007 23:44:41 | ||||||||
А у когонить открывается сайт custombuttons.phpbbnow.com? Код: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 Одна проблема у меня при попытке вставить в код строчку: Код: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 и больше не работает. Код: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 | ||||||||
| Anton > 29-04-2007 17:39:51 | ||||||||
Может быть, нужно заэкранировать (\") кавычки ? | ||||||||
| vadi61 > 13-05-2007 20:05:14 | ||||||||
Подскажите, что я не так делаю. | ||||||||
| Anton > 14-05-2007 00:02:58 | ||||||||
коды в wiki не рассчитаны на copy-paste : ) Код:addBookmarkAs(document.getElementById(’content’), false);
^ ^символы символами одинарной (') или двойной (") кавычек. | ||||||||
| vadi61 > 14-05-2007 08:45:43 | ||||||||
Спасибо Anton. Сработало. | ||||||||
| Merlyel > 14-05-2007 09:48:56 | ||||||||
vadi61 | ||||||||
| Dimanish > 14-05-2007 10:33:24 | ||||||||
Dom Inspector, сырцы firefox, расширений | ||||||||
| Anton > 14-05-2007 14:41:18 | ||||||||
Кнопка выбора кодировок есть где-то в этой теме. | ||||||||
| vadi61 > 14-05-2007 19:27:15 | ||||||||
OK, поищем | ||||||||
| alexmac > 15-05-2007 10:34:27 | ||||||||
А кто-нибудь может создать несколько кнопок следующего характера (все действия выполняются применительно к текущей вкладке по нажатию на соответствующую кнопку): | ||||||||
| Mr. JeCk > 13-07-2007 02:47:52 | ||||||||
Не подскажите сайтики, где можно достать различные кнопки? (кроме официального сайта и сайта дарк-демона) | ||||||||
| Anton > 13-07-2007 10:27:50 | ||||||||
Mr. JeCk | ||||||||
| Dark-Demon > 13-07-2007 19:07:43 | ||||||||
хе-хе... набрёл сейчас на https://addons.mozilla.org/ru/firefox/addon/5066 которое ничем от custombuttons не отличается кроме нескольких незначительных настроек. Ян, естественно, в соавторах не указан... | ||||||||
| Anton > 13-07-2007 19:19:50 | ||||||||
На странице не указан, в install.rdf: Код:em:developer="Custom Buttons Forum Development Group members are:
Yan: Original Creator,
...
em:contributor="Dark-Demon, | ||||||||
| Dark-Demon > 13-07-2007 19:43:04 | ||||||||
гм... а мне за что такая честь? | ||||||||
| Anton > 13-07-2007 19:49:38 | ||||||||
не скромничай, решение с оверлеями ты нашёл | ||||||||
| Dark-Demon > 13-07-2007 19:55:40 | ||||||||
"идеи не подлежат потенции" | ||||||||
| Philip > 31-07-2007 13:11:19 | ||||||||
Очень нужна кнопочка для бекапа 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 но она коверкает кириллицу в названиях кнопок. | ||||||||
| Anton > 31-07-2007 17:05:46 | ||||||||
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 ? | ||||||||
| Philip > 31-07-2007 19:36:47 | ||||||||
Anton | ||||||||
| Yan > 10-08-2007 19:54:32 | ||||||||
Меня-то указали, а вот Anton'а по каким-то причинам убрали, хотя в install.rdf из версии, на которой они базировались, было: Код: <em:creator>Yan</em:creator>
<em:developer>Anton</em:developer>
<em:developer>Dark-Demon</em:developer>
... | ||||||||
| Xaber > 10-08-2007 22:28:55 | ||||||||
А можно сделать, что бы окно добавления закладки не появлялось, а она скажем автоматом добавлялась в "Unsorted"? | ||||||||
| Anton > 11-08-2007 15:03:51 | ||||||||
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 | ||||||||
| and23 > 13-08-2007 20:46:50 | ||||||||
Подскажите, пожалуйста, как задействовать сабж для тулбаров в окнах чтения, составления письма в Tb? | ||||||||
| Dmitriy777 > 14-08-2007 00:10:00 | ||||||||
А как создать новую тему? | ||||||||
| Xaber > 14-08-2007 05:34:19 | ||||||||
Делал копипастом, не пашет | ||||||||
| Anton > 14-08-2007 08:40:15 | ||||||||
Нет, не надо - у меня работает. Код:try{, а в конце последней - Код:}catch(e){alert(e);}- что там выдаст алерт ? | ||||||||
| Xaber > 16-08-2007 02:41:29 | ||||||||
Мб я вас не правильно понял? Код: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);}Алерта нету... | ||||||||
| Anton > 16-08-2007 08:40:04 | ||||||||
Да, похоже что неправильно.
Строки такого вида надо помещать не в секцию "Код" кнопок, а в адресную строку браузера. | ||||||||
| Xaber > 16-08-2007 09:44:16 | ||||||||
Спасибо, заработало, но: | ||||||||
| Anton > 16-08-2007 13:50:32 | ||||||||
А я так понял, что "Unsorted" и есть корень. Так что, не ко мне претензия.
Надо убрать код в секции "Инициализация". | ||||||||
| globik > 21-08-2007 23:29:19 | ||||||||
привет, может кто знает, почему этот код не робит: Код: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 он срабатывает | ||||||||
| Anton > 22-08-2007 14:02:16 | ||||||||
Переименование arguments в что-нибудь другое решит проблему. | ||||||||
| globik > 22-08-2007 17:20:19 | ||||||||
благодарю ) Код: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();
| ||||||||
| Al_H > 22-08-2007 18:33:49 | ||||||||
arguments - некорректно, потому что это зарезервированное слово. | ||||||||
| Killy > 04-09-2007 17:50:37 | ||||||||
Обновил код кнопки "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 Теперь она умеет включать-выключать режим... | ||||||||
| Killy > 04-09-2007 20:59:27 | ||||||||
Подправил код - теперь и правда ужимает страницу (забыл про <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 Одно плохо - пока не умеет сохранять настройки для каждой вкладки. | ||||||||
| obana-obana > 08-09-2007 16:52:49 | ||||||||
Два вопроса: | ||||||||
| Dark-Demon > 08-09-2007 17:27:02 | ||||||||
1. http://dark-demon.nm.ru/soft/custombuttons/ | ||||||||
| obana-obana > 08-09-2007 17:47:02 | ||||||||
Dark-Demon | ||||||||
| obana-obana > 08-09-2007 19:01:12 | ||||||||
Второй вопроc чacтично решен, оcтaлоcь узнaть кaк cделaть выпaдaющее меню у кнопки?? | ||||||||
| Anton > 05-01-2008 08:58:44 | ||||||||
custombuttons 0.0.2 beta | ||||||||
| obana-obana > 20-01-2008 19:35:44 | ||||||||
Может кто-ниудь написать кнопку что бы при нажатии на неё вставлялся следующий текст: | ||||||||
| Anton > 20-01-2008 22:02:11 | ||||||||
obana-obana | ||||||||
| obana-obana > 21-01-2008 00:01:12 | ||||||||
Anton | ||||||||
| Dark-Demon > 21-01-2008 00:24:48 | ||||||||
у меня емнип по мидлклику вставляет [ url ]текст из буфера обмена[ /url ] | ||||||||
| obana-obana > 21-01-2008 01:01:45 | ||||||||
Dark-Demon | ||||||||
| Dark-Demon > 21-01-2008 01:05:19 | ||||||||
зачем? | ||||||||
| obana-obana > 21-01-2008 01:19:18 | ||||||||
Dark-Demon | ||||||||
| musTANK > 28-01-2008 01:05:42 | ||||||||
Сори , помогите я так и непонял как сделать просто , чтоб по кнопке открывался адрес url из буфера обмена ? | ||||||||
| Al_H > 28-01-2008 02:07:04 | ||||||||
Paste and Go Button
ImagesLikeOpera | ||||||||
| Anton > 28-01-2008 14:25:58 | ||||||||
Код: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. | ||||||||
| musTANK > 02-02-2008 22:44:04 | ||||||||
спасибо Anton и Al_H . | ||||||||
| Sid > 02-02-2008 22:54:58 | ||||||||
musTANK | ||||||||
| musTANK > 12-02-2008 15:32:46 | ||||||||
Сэнкс за разьяснения . | ||||||||
| vurdalak > 13-02-2008 18:24:11 | ||||||||
Проблема с расширением. При изменении кода в кнопке не могу нажать OK (окно не закрывается), то есть ничего не могу изменить. Кто знает как бороться ? | ||||||||
| Anton > 13-02-2008 18:51:14 | ||||||||
| ||||||||
| musTANK > 15-02-2008 00:03:19 | ||||||||
Мне ктонибудь поможет ? | ||||||||
| Robert Ingil > 16-02-2008 15:22:16 | ||||||||
Доброго времени суток. Значит, обновил недавно (вчера что ли) до 0.0.2.5 и сегодня заметил глюк, точнее trueглюк[/b]. Вот именно так, как написано: вместо всех открывающих тегов пишется true. В свойства кнопок лазил, но там всё как положено: Код:var open="[b]"; var close="[/b]"; var theBox = Никто не сталкивался с такой проблемой? Как исправить можно? Я, конечно, ещё попробую downgrade версии... | ||||||||
| TLemur > 18-02-2008 14:01:05 | ||||||||
А чем CustomButtons 2 и 1 отличаются? | ||||||||
| Anton > 18-02-2008 15:18:31 | ||||||||
Robert Ingil
Подтверждаю, в 0.0.2.5 такая ошибка была. В 0.0.2.6 не наблюдаю. | ||||||||
| vurdalak > 20-02-2008 15:06:24 | ||||||||
Подскажите код запуска внешнего приложения , например открыть текущую страницу в IE ? | ||||||||
| ПысКо > 21-02-2008 17:37:18 | ||||||||
Мужики,а че надо писать в этой штуке,если я хочу вывести на панель кнопку из настроек "Автоматическая загрузка изображений"???я так то впринципе почитал,что вы тут пишите,но ровным счетом ничего не понял | ||||||||
| Anton > 21-02-2008 21:47:32 | ||||||||
vurdalak Код: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); | ||||||||
| Infocatcher > 22-02-2008 00:13:06 | ||||||||
Anton Код:alert(typeof nsPreferences); Так что надо Код:var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);и Код:prefs.getIntPref(name); prefs.setIntPref(name, value);
| ||||||||
| vurdalak > 26-02-2008 12:05:29 | ||||||||
Anton | ||||||||
| Anton > 26-02-2008 15:28:39 | ||||||||
Как-то так: Код: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", "");А смысл ? | ||||||||
| Bruce > 01-03-2008 05:15:10 | ||||||||
Подскажите код кнопки для того чтоб открыть ссылку http://mail.ru в боковой панеле (sidebar) | ||||||||
| Anton > 01-03-2008 06:02:28 | ||||||||
openWebPanel ("Заголовок", "Адрес") | ||||||||
| Bruce > 02-03-2008 16:55:13 | ||||||||
Еще вопрос .Как сделать кнопку чтоб при на ведении на нее она подсвечивалась и изменялась подсветка если клик зажать на ней .Пример кнопки из панели расширения FoxLingo. | ||||||||
| alabanco > 02-03-2008 17:16:54 | ||||||||
А кто знает код кнопки "домашняя страница" и когд "bookmarks manager" | ||||||||
| Dizeloid > 05-03-2008 14:23:37 | ||||||||
Попробовал смастерить свою кнопку для открывания УРЛ, вроде работает, но открывает страницу только в активной вкладке, подскажите что изменить в коде что бы открывалась страница в новой вкладке при нажатии на кнопку? Код:if (event.ctrlKey)
gBrowser.selectedTab = gBrowser.addTab('http://www.mail.ru/');
else
gBrowser.loadURI('http://www.mail.ru/'); | ||||||||
| Anton > 05-03-2008 18:57:28 | ||||||||
Bruce
в раздел "Инициализация": Код:this. onclick = function (event)
{
if (event. button != 2)
BrowserHomeClick(event);
}
в раздел "Код": Код:toggleSidebar('viewBookmarksSidebar');Dizeloid Код: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/');
} | ||||||||
| Bruce > 05-03-2008 19:53:55 | ||||||||
Anton | ||||||||
| Anton > 05-03-2008 20:19:38 | ||||||||
Так она и выделяется, как и все прочие кнопки. Если нужно что-то особенное, можно в раздел "Инициализация" добавить что-нибудь вроде Код:this. onmouseover = function (event)
{
this. style. setProperty ("opacity", "1", null);
}
this. onmouseout = function (event)
{
this. style. setProperty ("opacity", "0.5", null);
}
Аналогично, только в onmousedown, onmouseup. | ||||||||
| Dizeloid > 06-03-2008 15:17:28 | ||||||||
К сожалению ничего не изменилось. Сайт как открывался в активной вкладке так и продолжает это делать. А хочется что бы в новой. | ||||||||
| Anton > 06-03-2008 15:54:54 | ||||||||
Dizeloid | ||||||||
| Bruce > 07-03-2008 08:58:02 | ||||||||
Dizeloid Код:getBrowser().addTab('http://mail.ru') | ||||||||
| Dizeloid > 07-03-2008 11:32:55 | ||||||||
Bruce, спасибо большое! Всё работает | ||||||||
| Anton > 07-03-2008 13:08:56 | ||||||||
Вопрос к пользователям расширения. Какое поведение пользовательского интерфейса более предпочтительно при клонировании/добавлении/удалении custom-кнопок в одном из окон приложения: | ||||||||
| Dimanish > 07-03-2008 13:15:14 | ||||||||
Anton | ||||||||
| Robert Ingil > 10-03-2008 06:56:58 | ||||||||
Ну, не знаю. Я со своей стороны всё на «косячность» проверил... В итоге сделал downgrade до 0.0.1.3 — всё заработало. А недавно сделал обновление (хотя и боялся) до 0.0.2.6. Пару раз перезагрузил Firefox, кнопки удалил, а затем заново поставил, а то они в двух экземплярах у меня вылезли (по-умолчанию что ли теперь в составе есть). И теперь всё работает как часы. (Пробовал до этого манипуляции без downgrad'а — не помогало). | ||||||||
| pshenk > 17-03-2008 21:59:10 | ||||||||
проблема с кнопкой "External Applications" та что 2006 года, она у меня не работает, не выпадает дроп даун меню. Код: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);может у кого есть более новая версия? или кто знает как заставить работать ту что есть? | ||||||||
| Anton > 17-03-2008 22:25:32 | ||||||||
pshenk Код:this. type = "menu"; | ||||||||
| pshenk > 17-03-2008 23:33:06 | ||||||||
Anton | ||||||||
| Anton > 18-03-2008 16:16:47 | ||||||||
pshenk | ||||||||
| pshenk > 18-03-2008 19:14:08 | ||||||||
эх, тот вид кнопки который я хочу, реализован в расширении "SwitchProxy Tool" и замечательно выглядит на статусбаре, посему придется копать код в этом адоне. | ||||||||
| Anton > 22-03-2008 12:20:17 | ||||||||
Сообразил только сегодня. Надо убрать this.type=.... и установить атрибут popup Код:this.setAttribute("popup","mypopupid");Мне на AMO и mozdev три человека пожаловались, что у них на 0.0.2.7/0.0.2.8 "сломались" кнопки, которые сами строят своё контекстное меню. Мне такие не попадались, может кто-нибудь показать подобную ? | ||||||||
| AndreyD > 05-04-2008 22:32:12 | ||||||||
С домашней страницы расширения не добавляются кнопки для BBcode, хотя BBcode установлено. | ||||||||
| pshenk > 05-04-2008 22:52:58 | ||||||||
не работает. не появляется всплывающие меню. Код: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 попробуй сделать без черной стрелочки, а потом выложи сюда. | ||||||||
| Anton > 06-04-2008 01:43:04 | ||||||||
AndreyD
Установил с AMO BBCode 0.5.2.2, Custom Buttons 0.0.2.9 с mozdev. Кнопки устанавливаются.
Объясняю. Надо убрать строку this. type = ... - это уберёт стрелочку, и установить атрибут popup. То есть, оконцовка кода должна выглядеть примерно так: Код:this.appendChild(mP);
//this.type = "menu";
this. setAttribute ("popup", mP. id = "cbFavoriteApplications-" + this. id); | ||||||||
| pshenk > 06-04-2008 03:59:58 | ||||||||
спасибо, заработало | ||||||||
| Anton > 06-04-2008 11:15:36 | ||||||||
Можно без +this.id, это так, для пущего избежания коллизий с клонами этой же кнопки. | ||||||||
| AndreyD > 06-04-2008 19:28:07 | ||||||||
Не все кнопки доступны, в частности нет активно используемой кнопки "сделать из выбранного текста ссылку" | ||||||||
| AndreyD > 06-04-2008 20:00:59 | ||||||||
В общем я поковырялся немного следующим образом: Код: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 и кнопка обрела иконку. | ||||||||
| Anton > 06-04-2008 21:26:36 | ||||||||
AndreyD | ||||||||
| Infocatcher > 09-04-2008 19:58:19 | ||||||||
Дано: 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";Наблюдаю растягивание иконки в высоту. И все Код: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"] | ||||||||
| Anton > 09-04-2008 20:31:01 | ||||||||
Infocatcher
Есть такое дело.
Здесь вот не знаю - может тема или расширение какое-нибудь; у меня DOM Inspector xbl показывает. | ||||||||
| Infocatcher > 09-04-2008 21:10:02 | ||||||||
Anton
Эмм... Код:<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'е: атрибут type есть, CSS для toolbarbutton[type="menu-button"] есть. Эффекта нет. А вот на Computed Style глянуть забыл, а то понял бы, что Код:toolbarbutton[id^="custombuttons-button"] {
-moz-binding: url(chrome://custombuttons/content/toolbarbutton.xml#toolbarbutton)
} | ||||||||
| Anton > 09-04-2008 21:32:51 | ||||||||
Infocatcher
До исходников птицы далеко ) Я из DOM Inspectora смотрел - type="menu". Может и врёт, конечно.
http://pastebin.mozilla-russia.org/91122 | ||||||||
| Infocatcher > 09-04-2008 22:04:58 | ||||||||
Anton
Именно из него и смотрел...
Гм, хорошо, как создать «обычную» кнопку-меню? И на какой версии Thunderbird все это проверялось (есть у меня смутные подозрения...)? | ||||||||
| Anton > 09-04-2008 22:18:54 | ||||||||
Ну очевидно же - type="menu";
2.0.0.12, инспектор 1.8.1.2 Код:var bt = document. getElementById ("button-tag");
alert (bt. getAttribute ("type"));
alert (bt. type); | ||||||||
| Infocatcher > 10-04-2008 00:16:05 | ||||||||
Anton
Ну, type="menu" и type="menu-button" – разные вещи. Например, «Получить новые сообщения» – и кнопка, и список (что я и хотел получить).
В этом и дело. | ||||||||
| Anton > 10-04-2008 14:08:46 | ||||||||
Почему у меня работает ? | ||||||||
| Infocatcher > 10-04-2008 14:31:14 | ||||||||
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 После клика по кнопке: | ||||||||
| Anton > 10-04-2008 15:01:42 | ||||||||
может быть, это наоборот в 1.5 что-то не поддерживается, или просто разное поведение по умолчанию ? Код:this. type = "menu";
this. orient = "horizontal"; // this. setAttribute ("orient", "horizontal"); | ||||||||
| Anton > 10-04-2008 15:57:01 | ||||||||
Ошибка связана с отсутствием четырёх строчек в chrome.manifest. В 0.0.3 добавлю недостающие. Код: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");
} | ||||||||
| Infocatcher > 10-04-2008 23:25:49 | ||||||||
Это смотря как посмотреть... | ||||||||
| Anton > 11-04-2008 14:22:14 | ||||||||
Infocatcher
Заинтриговал ты меня этим orient'ом. Объясни на словах, пожалуйста, что значит, что этот атрибуте "не работает" ? | ||||||||
| Infocatcher > 11-04-2008 20:38:51 | ||||||||
(Ну вот, опять все дело в словах) Код:this.type = "menu"; this.orient = "vertical"; На что Firefox 1.5 выдает стрелочку справа, без «this.orient = "vertical";» – стрелочку снизу. Firefox 2.0 на «this.orient = "vertical";» не реагирует никак (стрелочка всегда снизу). | ||||||||
| Anton > 11-04-2008 21:00:33 | ||||||||
Очепятка ?
Реагирует же на orient="horizontal" ? | ||||||||
| Infocatcher > 11-04-2008 21:26:35 | ||||||||
Да. Исправил.
Реагирует. Это я уже понял, спасибо за помощь. | ||||||||
| Anton > 11-04-2008 23:10:47 | ||||||||
Ок. Просто, сейчас не в силах объять всё в комплексе, из-за этого опасения, что я что-то упустил, вплоть до "а не 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 | ||||||||
| Infocatcher > 11-04-2008 23:34:32 | ||||||||
Нет, 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.)
Обязательно! | ||||||||
| Infocatcher > 15-04-2008 00:51:13 | ||||||||
Нашел довольно странную фичу. Код:this.image = this.parentNode.getAttribute("iconsize") == "large"
? "file:///J:/somePath/24.png"
: "file:///J:/somePath/16.png";, а поле «Картинка» оставить пустым, то при открытии редактора в этом поле появится текущая картинка. Код: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") | ||||||||
| Infocatcher > 15-04-2008 01:57:53 | ||||||||
Кнопка для закрытия вкладок: Код: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 ЛКМ: закрыть все вкладки слева от текущей Танцы с бубном вокруг this.onmousedown – заради Linux'а, показывающего контекстное меню сразу после нажатия правой кнопки мыши (по идее, должно работать ).Заодно вопрос: нельзя ли не показывать контекстное меню с помощью менее извращенных методов? [upd] Забыл сконвертировать картинку в base64... – исправил. В Linux'е работает ![]() | ||||||||
| Anton > 15-04-2008 17:46:17 | ||||||||
Что касается 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
Себе ? | ||||||||
| Infocatcher > 15-04-2008 18:16:31 | ||||||||
Ага, ясно. А варианты с сохранением способа показа контекстного меню есть? (Т.е. сразу по нажатию / после отпускания кнопки.)
Ммм? Не понял... Код: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) больше похоже на обычное поведение | ||||||||
| Anton > 15-04-2008 18:30:58 | ||||||||
Я проблемой мануального отображения контекстного меню в практике конструирования кнопок не занимался никогда. this.showPopup - это из кнопок LouCypher'а. То есть, готового кода нет у меня и не попадалось.
Ну, там было что-то вроде file:///D | ||||||||
| Infocatcher > 15-04-2008 19:10:03 | ||||||||
Было, но текст, который ты процитировал («Забыл сконвертировать картинку в base64... – исправил.»), я добавил вместе с исправлением кода кнопки. Это меня и смутило.
Ясно. | ||||||||
| Infocatcher > 02-05-2008 00:44:03 | ||||||||
Написал скрипт для вставки URL (а также времени сохранения) в сохраняемую страницу. Код: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. Ох уж эта жуткая тавтология с «сохранить» | ||||||||
| Infocatcher > 10-05-2008 23:40:03 | ||||||||
Кнопка для Thunderbird, показывающая меню, аналогичное Настройки – Формат. Как и оригинальное меню, доступно только из HTML-редактора. По клику средней кнопкой мыши переключает на простой текст. | ||||||||
| Anton > 11-05-2008 01:26:39 | ||||||||
Единственная кнопка, которой я регулярно пользуюсь как обычный пользователь Код: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] | ||||||||
| Infocatcher > 11-05-2008 01:49:25 | ||||||||
Anton, а не проше ли делать так: http://pastebin.mozilla-russia.org/91285? | ||||||||
| Anton > 11-05-2008 02:17:21 | ||||||||
В данном конкретном и простом случае - конечно проще. Но с некоторых пор я не сторонник использования with, да и не ставил себе целью "заточку" кода этой кнопки. В исходном варианте там была всего одна строка - на background.
Я не привык к использованию закладурок. Не помню уже точно по какой причине - скорее всего сложность отладки. | ||||||||
| Infocatcher > 11-05-2008 02:33:27 | ||||||||
Anton
А можно поподробнее? А то у меня никаких идей, кроме создания «лишней» области видимости, нет...
Ну, с этим все просто. Редактируется скрипт в нормальном виде, потом удаляются комментарии, пробелы, переводы строк и все это запускается черех адресную строку. | ||||||||
| Anton > 11-05-2008 03:05:17 | ||||||||
Вот для примера: http://pastebin.mozilla-russia.org/91287 | ||||||||
| Infocatcher > 12-05-2008 07:48:02 | ||||||||
Anton
И в таких случаях лучше обозвать pastebinRDFService каким-нибудь prs (var prs = pastebinRDFService;) и так дальше и обращаться? И, кстати, как определить, что «попало в переменную» – ссылка на исходный объект или значение? Т.е. не вредно ли делать штуки вида var d = document; ? | ||||||||
| Anton > 12-05-2008 14:20:13 | ||||||||
Хотя бы так. Можно и в развёрнутом виде. В конкретном случае с pastebin panel - ещё и переработать интерфейсы компонентов - не очень удачные.
Иногда просто необходимо. | ||||||||
| Anton > 14-05-2008 21:46:01 | ||||||||
Кнопка для 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 | ||||||||
| Infocatcher > 14-05-2008 21:59:57 | ||||||||
Anton | ||||||||
| Anton > 14-05-2008 22:15:48 | ||||||||
Чёрт его знает, за всеми кнопками не уследишь - мне не попадалась, это я точно знаю, иначе бы не стал писать, взял бы готовую.
Я последние год-полтора im практически не пользуюсь. Если надо - давай договоримся о времени. | ||||||||
| Infocatcher > 14-05-2008 22:41:12 | ||||||||
Я это к тому, что удобно было бы добавить функционал простого добавления кнопок в виде «URL'а» в расширение.
Ну вот, теперь мне мои вопросы кажутся не сильно важными. | ||||||||
| Anton > 14-05-2008 23:01:10 | ||||||||
Ага, понял. А "Клонировать" -> "Обновить" ? Для пункта меню надо будет делать дополнительный контроллер, проверяющий содержимое буфера обмена. Не то, чтобы лень - сомнения в целесообразности. | ||||||||
| vv07 > 20-05-2008 16:51:59 | ||||||||
Друзья!Следующая ситуация.Есть кнопка из гугля,для перевода,на яве Код: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;};Но она скорее не кнопка,а ссылка.Сидит в закладках.Может кто сообразит,как из нее сделать нормальную кнопку,для панели инструментов.У меня мозгов не хватает. Код: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 : | ||||||||
| Anton > 20-05-2008 17:12:48 | ||||||||
Проще всего записать Код:getBrowser (). contentDocument. location. href = " потом текст закладурки и, наконец поставить закрывающую кавычку. | ||||||||
| vv07 > 20-05-2008 17:42:22 | ||||||||
сделал так но не пашет.Что еще добавить треба?Или вообще не так сделал? | ||||||||
| Anton > 20-05-2008 19:02:22 | ||||||||
В конце должна быть кавычка. То есть, пишем текст Код:getBrowser (). contentDocument. location. href = "" а между кавычками вставляем текст закладурки | ||||||||
| vv07 > 21-05-2008 01:08:09 | ||||||||
| ||||||||
| Anton > 21-05-2008 02:22:13 | ||||||||
[code]code[/code] | ||||||||
| vv07 > 21-05-2008 04:43:22 | ||||||||
Ну мне так удобнее.Легче в профили переносить.Да и люблю я,что бы у меня постоянно все было.Короче спасибо вам большое.Если что,надеюсь мона обратиться за помощью? | ||||||||
| Infocatcher > 21-05-2008 08:50:05 | ||||||||
Тем, что можно сделать открытие в новой вкладке Код: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 | ||||||||
| vv07 > 21-05-2008 10:18:09 | ||||||||
К сожалению,ваша кнопка не работает.Сдесь я выложил рабочие
Уважаемый гуру.Так как,я не силен в кодах и сам могу,с бооооооольшим трудом,собрать ченить простое,нельзя ли сделать,своего рода,собрание разных,готовых кнопок?Типа текстового файлика. | ||||||||
| Anton > 21-05-2008 12:40:55 | ||||||||
Infocatcher
Это понятно, что функционал может быть шире. Я закладурками не пользуюсь, но, их ведь легче сделать, если они уже есть готовые.
Можно, конечно. Если что, я сейчас разработчик этого расширения, так что деваться мне некуда. Правда, положительный результат заранее обещать не могу.
Может быть, кнопка была установлена неправильно ? Код Infocatcher'а надо поместить в адресную строку браузера и нажать enter. Потом "вытащить" установленную кнопку из диалога настройки панелей инструментов.
Мне это не нравится. Так что будьте любезны, без лишних церемоний.
Не понял, о чём речь. Если нужны готовые кнопки, то можно найти в этой теме, на офф. сайте расширения - http://xsms.nm.ru/custombuttons, у Dark-Demon'а на сайте - http://dark-demon.nm.ru, на сайте поддержки (адрес - у меня в профиле), на старом форуме расширения - http://custombuttons.phpbbnow.com, на форуме расширения custombuttons2 - http://custombuttons2.com. Кое-какие кнопки с последних двух сайтов могут не работать. | ||||||||
| Infocatcher > 21-05-2008 21:14:44 | ||||||||
Anton
Кстати, нашел багу. При таком добавлении кнопки теряются переводы строк в коде. Наблюдаю на fx 2.0.0.14 + cb 0.0.3 при добавлении моей кнопки для перевода через Гугл. | ||||||||
| Anton > 21-05-2008 21:33:35 | ||||||||
И не только при таком. Давно видел. На основном профиле. В соседнем - не теряются. | ||||||||
| Anton > 21-05-2008 22:16:26 | ||||||||
p.s. | ||||||||
| Infocatcher > 21-05-2008 23:29:23 | ||||||||
Anton
Да, он самый.
И соответствует ли вообще... | ||||||||
| Anton > 21-05-2008 23:39:42 | ||||||||
Либо noscript.fixURI.exclude <- ^custombutton://[\s\S]*$
Похоже на то. | ||||||||
| Infocatcher > 21-05-2008 23:50:58 | ||||||||
| ||||||||
| Anton > 21-05-2008 23:56:34 | ||||||||
Привычка. | ||||||||
| Infocatcher > 22-05-2008 00:00:52 | ||||||||
Поподробнее бы... Меня несколько иного рода причины интересуют. | ||||||||
| Anton > 22-05-2008 00:25:10 | ||||||||
Чтобы не думать что из себя представляет строка поиска. | ||||||||
| vv07 > 22-05-2008 03:27:07 | ||||||||
Уважаемый Антон.Я думаю вы знаете о таком расширении,как Fast Dial. | ||||||||
| Anton > 22-05-2008 11:23:12 | ||||||||
Короче, без эпитетов. Код: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 было бы короче, да и код он бы дал более корректный. | ||||||||
| vv07 > 22-05-2008 12:29:02 | ||||||||
Блин,да не умею обращаться к незнакомым людям просто. | ||||||||
| Anton > 22-05-2008 13:01:17 | ||||||||
vv07
Ничего страшного. Я не требую и мне так комфортней. Да и 45 мне ещё не скоро, так что, если ситуация верна, то мне даже и не положено. | ||||||||
| vv07 > 22-05-2008 13:17:05 | ||||||||
За ум положено | ||||||||
| Anton > 23-05-2008 00:06:43 | ||||||||
Оказывается, это список протоколов, разделённый чем угодно, кроме латинских букв, цифр и знака подчёркивания. Так что можно просто custombutton. | ||||||||
| vv07 > 23-05-2008 02:46:15 | ||||||||
Есть замечательное расширение profileswitcher,позволяющее работать с профилями.Переключение через контекстное меню.Вопрос,можно ли создать кнопку с выпадающим меню выбора профилей?А еще более сложное дело,создание кнопки позволяющей запускать разные профили без перезагрузки лисы | ||||||||
| Infocatcher > 23-05-2008 04:07:55 | ||||||||
vv07
Примерно так: http://pastebin.mozilla-russia.org/91358 (код добавлять в секцию «инициализация»). Код: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"] запустит штуку вида | ||||||||
| vv07 > 23-05-2008 05:02:37 | ||||||||
Так откуда мне код взять?По ссылке или сдесь.Не совсем понятно.Однако спасибо за оперативность. | ||||||||
| Infocatcher > 23-05-2008 07:52:40 | ||||||||
Код брать по ссылке. А «здесь» – пояснения по его использованию. | ||||||||
| vv07 > 23-05-2008 12:36:29 | ||||||||
Кнопка заработала,но как то не так.В выпадающем показывает My profile и не существущую тройку.При клике на My profile,открываеться менеджер профилей.Не совсем то,что я имел в виду,но тоже пойдет | ||||||||
| Anton > 23-05-2008 14:58:22 | ||||||||
Можно. Вот, для работы в паре с 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 ? | ||||||||
| vv07 > 23-05-2008 16:05:02 | ||||||||
Ух ти,круть. | ||||||||
| Infocatcher > 23-05-2008 20:16:53 | ||||||||
vv07
Угу. Так оно, конечно, удобнее, но поиск и парсинг profiles.ini несколько труднее, чем запуск предопределенных пользователем приложений. Код: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 : Код:setTimeout (this. cbInit, 2000); ? | ||||||||
| Anton > 23-05-2008 21:21:16 | ||||||||
Я попробовал без тайм-аута - не работает, пока не будет открыто меню profileswitcher, ну и поставил с запасом - а вдруг с нулевым тайм-аутом не сработает - чтобы не проверять лишний раз. load-обработчик снимать надо, и вообще нетривиально. | ||||||||
| vv07 > 24-05-2008 01:54:49 | ||||||||
Вы сделали даже больше чем я ожидал.Ваша кнопка переключает профили,без перезагрузки и практически незаметно Код: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";Два моих профиля.Так вот,при переключении запускаеться профиль,но и второй остаеться в работе | ||||||||
| Infocatcher > 24-05-2008 03:16:02 | ||||||||
Это эффект от запуска firefox.exe с аргументом -no-remote.
Я так понимаю, что profileswitcher (это только предположение – код расширения не смотрел) таким образом обходит описанную выше трудность с -no-remote. | ||||||||
| vv07 > 24-05-2008 15:05:14 | ||||||||
Друзья!Есть кнопка для скрытия панели закладок,но она работает только до перезапуска лисы.Не могли бы вы поправить код,как сделали мне для статусстроки.Что бы она отключала панель закладок,до ручного включения,по аналогу статус. Код:var mb = document.getElementById("PersonalToolbar"); mb.collapsed = !mb.collapsed;Надоел уже наверное со своими просьбами | ||||||||
| Anton > 24-05-2008 16:16:54 | ||||||||
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 | ||||||||
| vv07 > 24-05-2008 16:36:14 | ||||||||
Да незнаю.Она у меня прекрасно работает | ||||||||
| Anton > 24-05-2008 16:59:50 | ||||||||
Лишний код. | ||||||||
| vv07 > 26-05-2008 08:49:36 | ||||||||
Еще один вопрос.Я создал новую панель.Обозвал ее work.Возможно ли создание кнопки,для скрытия таких панелей.Второе,надыбал интересный стиль,который автоскрывает панель навигации.По аналогу возможно ли создание кнопки,при запуске которой,автоскрывались все панели или хотя бы на каждую панель,отдельный кнопарь. | ||||||||
| Anton > 26-05-2008 09:15:20 | ||||||||
Для 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 ? Код: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 | ||||||||
| vv07 > 26-05-2008 09:53:36 | ||||||||
Нет Антон.F11 полноэкранный режим,не то.Мне нужно скрытие панелей,но при этом сама лиса оставалась в режиме обычного окна.
По идее то что и нужно.Только вот F12 зря назначена.При ее нажатиивозникают следующие проблемы.Не могу писать в форуме,не работает копирование,остальное пока незнаю.Надо придумать другой вариант. | ||||||||
| Anton > 26-05-2008 10:20:33 | ||||||||
Так можно назначить любую другую. "Редактировать" -> "Настройки кнопки"
Ну вот, я себе эту кнопку поставил, нажал F12, залогинился, пишу ответ, всё в порядке, копирование работает. | ||||||||
| vv07 > 26-05-2008 11:00:19 | ||||||||
Спасибо | ||||||||
| MILLennium > 26-05-2008 12:37:05 | ||||||||
спасибо за програмульку. Код: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 попробуйте здесь нажать её | ||||||||
| Anton > 26-05-2008 13:15:29 | ||||||||
Если это вообще можно назвать багом, то это баг форума, а не кнопки. ) | ||||||||
| MILLennium > 26-05-2008 13:47:07 | ||||||||
Я просто не силен в программировании. Поэтому написал, что в кнопке. Так как после её нажатия такое происходит. Потом если нажать "Обновить(F5)", то всё на свои места становится | ||||||||
| Anton > 26-05-2008 14:00:51 | ||||||||
Это происходит ещё до её нажатия. | ||||||||
| Infocatcher > 27-05-2008 01:49:35 | ||||||||
Пытаюсь клонировать вкладку в Firefox 3.0 RC1: Код:setTimeout(
function() {
br.selectedTab = tab;
win.scrollTo(cx, cy);
},
0
);– без setInterval | ||||||||
| Anton > 27-05-2008 11:09:50 | ||||||||
Не знаю, идея только одна - ставить onload и мотать когда он случится, если вкладка открывается не в фоне, если в фоне - ждать пока пользователь переключится в эту вкладку, потом перематывать.
Примерно так: http://pastebin.mozilla-russia.org/91380 | ||||||||
| Infocatcher > 27-05-2008 23:59:37 | ||||||||
Гм, странно... не получается. На что 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. Код:var orgTab = gBrowser.mCurrentTab; var newTab = gBrowser.duplicateTab(orgTab); gBrowser.moveTabTo(newTab, ++orgTab._tPos); gBrowser.selectedTab = newTab; // переключаемся на вкладку (в оригинале не было) Сам метод: http://pastebin.mozilla-russia.org/91384 | ||||||||
| Anton > 28-05-2008 01:23:52 | ||||||||
На browser. По идее, нужны три обработчика. Первый ждёт окончания загрузки документа, и если по загрузке вкладка активная, делает перемотку, а если она в фоне, ставит второй обработчик, который делает перемотку при переключении на вкладку. Третий обработчик снимает все обработчики при закрытии вкладки.
Открывает интерфейс, если объект его реализует. | ||||||||
| MILLennium > 28-05-2008 13:28:40 | ||||||||
а киньте ссылку на него(на кнопку) | ||||||||
| Anton > 28-05-2008 13:50:44 | ||||||||
MILLennium | ||||||||
| macuache > 29-05-2008 19:55:23 | ||||||||
Можно код от кнопки Downloads ? | ||||||||
| Anton > 30-05-2008 03:57:18 | ||||||||
macuache | ||||||||
| macuache > 30-05-2008 13:42:55 | ||||||||
Это кнопка, которая открывает окно текущих закачек. | ||||||||
| Infant > 30-05-2008 14:50:50 | ||||||||
macuache
В стандартном наборе чего? | ||||||||
| macuache > 30-05-2008 15:05:49 | ||||||||
в стандартном наборе иконок Fierfox. | ||||||||
| Infant > 30-05-2008 15:07:31 | ||||||||
Точно есть! В тройке посмотрел. А в двойке она у меня на боковой панели стоит — подумал что нету. | ||||||||
| Anton > 30-05-2008 15:16:46 | ||||||||
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 она ? | ||||||||
| macuache > 30-05-2008 17:01:05 | ||||||||
Да. это она. Спасибо. Один только момент. У меня стоит расширение Download Manager Tweak, которое позволяет открывать во вкладке окно загрузок. | ||||||||
| Anton > 30-05-2008 17:17:51 | ||||||||
Надо заменить код в разделе "Код" следующей строкой: Код:toggleDownloadMgr(true,true); | ||||||||
| macuache > 30-05-2008 17:37:05 | ||||||||
Отлично. Спасибо! | ||||||||
| pshenk > 01-06-2008 16:11:57 | ||||||||
Anton | ||||||||
| Anton > 01-06-2008 17:45:14 | ||||||||
Идея не очень понятна. Наверное возможно, другой вопрос, сколько усилий потребуется на реализацию той или команды. Вот за bookmarks я точно браться не буду, может, ещё за что-то "в лоб" не решаемое. Спрашивай, помогу чем смогу. | ||||||||
| pshenk > 03-06-2008 01:44:27 | ||||||||
ну там не то. там просто кнопка с кодом "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%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%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%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%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 возможно ли это забить в попап? | ||||||||
| Anton > 04-06-2008 11:20:11 | ||||||||
pshenk
Я несколько сомневаюсь в юзабельности такого решения, но, может быть ошибаюсь. "Забить" несколько кнопок в одну конечно можно, думаю только могут возникнуть сложности с "забиванием" некоторых из кнопок. Код: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 > 06-06-2008 17:22:51 | ||||||||
А какой язык нужен? Хочу сделать кнопку для закрытия всех вкладок с предупреждением о закрытии. Как этого добиться? | ||||||||
| Anton > 07-06-2008 21:31:52 | ||||||||
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]);
}
} | ||||||||
| Anton > 11-06-2008 09:19:45 | ||||||||
Из отзыва на AMO:
Кто-нибудь может растолковать, о чём речь ? За панели инструментов и контекстные меню CB не отвечает, но оверлей с кнопками из сети загрузить сможет - если это подразумевается в цитате. | ||||||||
| vv07 > 11-06-2008 12:32:16 | ||||||||
Было бы неплохо сохранять линки,на панели инструментов,правым кликом на OPML и RSS (дословно с сайтов или удаленный источник)Вторая часть немного непонятна из за XUL.Я не знаю что это такое.А так-Нужно разьяснение,как легче ввести(засунуть | ||||||||
| Infocatcher > 11-06-2008 16:42:55 | ||||||||
Anton
Рискну предположить, что нужен некий способ копирования кода кнопки. | ||||||||
| amzoom > 11-06-2008 23:12:30 | ||||||||
Мне бы хотелось иметь возможность сохранять мои тулбары и меню ПКМ дистанционно, как OPML или в RSS. Кстати нужно бы сделать "хэлп" для таких простых вещей, как ссылки и доступные XUL менюшки. | ||||||||
| Unghost > 12-06-2008 20:09:56 | ||||||||
Anton
Я так понимаю, он хочет хранить свои панели инструментов и контекстное меню на удалённом сервере в виде OPML или RSS и подгружать их с этого сервера. | ||||||||
| Anton > 12-06-2008 21:29:29 | ||||||||
vv07 | ||||||||
| vv07 > 13-06-2008 15:11:19 | ||||||||
Позвольте позаимствовать,вашу подпись? | ||||||||
| Anton > 16-06-2008 14:03:55 | ||||||||
vv07 | ||||||||
| vv07 > 16-06-2008 14:36:39 | ||||||||
Пасябки | ||||||||
| macuache > 27-06-2008 16:38:24 | ||||||||
а как создать эффект при наведении мышки на кнопку и нажатии ? Я просто использую не стандартную тему для лисы, поэтому у меня все custom buttons не реагирует визуально. | ||||||||
| Anton > 28-06-2008 10:57:19 | ||||||||
macuache Код: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; | ||||||||
| Vvld > 04-07-2008 09:41:49 | ||||||||
Infocatcher
Этот код действительно не работает. Сообщение браузера: "Кнопка не может быть создана, потому что содержит ошибки!" | ||||||||
| Anton > 04-07-2008 13:53:02 | ||||||||
Vvld
Какая версия расширения ? | ||||||||
| Vvld > 04-07-2008 14:29:07 | ||||||||
Я извиняюсь, но какое расширение должно стоять (имя)? Браузер обновлен до версии 2.0.0.15. Кнопка перевода (работающая) создана расширением Custom Buttons 0.0.1.2 (сегодня автообновилось до версии 0.0.1.3). Хотелось бы иметь перевод с функциями, описанными мною выше. Ищу, пробую. Если надо, установлю еще расширение, но подскажите какое? Надо будет, Custom Buttons отключу, другое расширение поставлю, но какое? Хотя, на мой взгляд, Google и переводит лучше, чем другие переводчики, но все равно надо сравнивать текст перевода с оригиналом и перевод лучше иметь в другом окне. | ||||||||
| Anton > 04-07-2008 14:48:12 | ||||||||
Кнопка из сообщения Infocatcher'а создана более свежей версией расширения (рискну предположить, это было Custom Buttons 0.0.2.9). Сейчас доступна 0.0.3.2.
то, думаю, такой кнопки не существует. Может быть, есть на custombuttons2.com | ||||||||
| Vvld > 04-07-2008 15:44:16 | ||||||||
Anton
Увы. Этот 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 с браузером что-то непонятное случилось и я его сразу удалил.
Вы правы, такую функцию кнопки в Firefox я ищу давно и пока не нашел. Но это очень удобно. И когда я листаю страницы иностранных сайтов, то перехожу на браузер Opera. | ||||||||
| Anton > 04-07-2008 16:00:21 | ||||||||
Сейчас все новые версии размещаются здесь: https://addons.mozilla.org/ru/firefox/addon/2707 и здесь: http://custombuttons.mozdev.org/installation.html | ||||||||
| Vvld > 04-07-2008 16:45:49 | ||||||||
Anton
Спасибо за новую версию, а я ориентировался на домашнюю страницу. | ||||||||
| Anton > 04-07-2008 16:51:41 | ||||||||
Мне бы его вообразить как-нибудь. Не представляю как оно должно выглядеть. | ||||||||
| Vvld > 04-07-2008 17:02:43 | ||||||||
А вдруг получится? Буду надеяться и ждать. | ||||||||
| Anton > 06-07-2008 13:14:18 | ||||||||
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 Хотя, работает не абсолютно точно как оперный скрипт.
Похоже, это особенность переводчика. | ||||||||
| Vvld > 06-07-2008 16:28:06 | ||||||||
КЛАСС!!! | ||||||||
| Anton > 06-07-2008 18:00:39 | ||||||||
Vvld | ||||||||
| Vvld > 06-07-2008 18:08:12 | ||||||||
Конечно. | ||||||||
| Deim0s > 06-07-2008 18:25:32 | ||||||||
Anton | ||||||||
| Vvld > 07-07-2008 06:37:38 | ||||||||
Deim0s
Если для Google Translate, то пост 651 (еще не полностью сделана) или пост 567 - работает | ||||||||
| Deim0s > 07-07-2008 11:54:01 | ||||||||
Vvld | ||||||||
| Vvld > 08-07-2008 00:46:58 | ||||||||
Deim0s
- это был бы хороший вариант. Но как это программно сделать - надо с Антоном обсуждать. Дождемся его... | ||||||||
| Deim0s > 08-07-2008 02:00:18 | ||||||||
Vvld
Я к нему с просьбой и обратился. Т.к. скрипт Googl'а сам прекрасно "различает" перевод текста, от перевода страницы, зачем меню? Кому хочется на текущей вкладке и так с оригиналом работает. ИМХО смысл кнопки в удобстве перевода одним нажатием, а если через меню, так это и через закладку можно переводить. | ||||||||
| Vvld > 08-07-2008 09:17:52 | ||||||||
Deim0s
Да я не спорю, но мысль и для себя работает - помимо перевода на другой странице (это то работает) я просил Антона сделать перевод выделенного текста во всплывающем окошке и он это уже сделал, только надо чуть-чуть поправить. Но в простой кнопке вставить в " " скрипт Google, при его изменении, не получится и прийдется всю кнопку переделывать. | ||||||||
| Anton > 12-07-2008 18:14:48 | ||||||||
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
У меня на этот счёт пока что нет никаких обещающих идей, к сожалению.
Попросить, разумеется можно. В свою очередь, хотелось бы попросить излагать мысли более детально - я после нескольких прочтений всё ещё не могу понять о чём здесь идёт речь.
Сложно сказать, не видя кода.
Я нашёл в 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'а) | ||||||||
| Deim0s > 12-07-2008 19:26:15 | ||||||||
Anton Код: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);всё работает, но хотел спросить, может лишнее что то? Код:Execute Program,"C:\Program Files\UnH Solutions\Get File Size\GetFileSize.exe","/url:%t" . | ||||||||
| Anton > 12-07-2008 20:18:27 | ||||||||
По-моему, ничего лишнего. Разве что, наверное можно через file. launch (), раз без аргументов, но это, не особенно важно, я думаю. Код: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 ()); | ||||||||
| Z&N > 12-07-2008 20:24:49 | ||||||||
Deim0s не проще ли поставить Get File Size | ||||||||
| Deim0s > 12-07-2008 20:59:20 | ||||||||
Anton
Не много не получается, если взять любую текстовую ссылку, к примеру ту же: _http://www.ru/программа.exe, выделить всё после _, то в опере получается нормально: | ||||||||
| Anton > 12-07-2008 21:36:41 | ||||||||
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); | ||||||||
| Deim0s > 12-07-2008 22:34:02 | ||||||||
Anton | ||||||||
| Vvld > 13-07-2008 09:20:21 | ||||||||
Anton | ||||||||
| Anton > 13-07-2008 15:06:23 | ||||||||
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-трансляторов
Поскольку мне неочевидно, как это сделать в реализации с всплывающим окошком, пришлось сделать реализацию, копирующую поведение (и код) скрипта для 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 | ||||||||
| Deim0s > 13-07-2008 16:08:09 | ||||||||
Anton
Спасибо, для GetFileSize, всё работает отлично, берёт текстовые ссылки от куда угодно и правильно.
Покрутил я извилинами, но безрезультатно, помогите если не трудно, пользую такой скрипт (как из поста № 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, примеры: | ||||||||
| Anton > 13-07-2008 17:02:46 | ||||||||
Код: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
);
Это нехорошо, будет исправлено. Спасибо за информацию об ошибке. | ||||||||
| Deim0s > 13-07-2008 17:46:34 | ||||||||
Anton Код:t = el. value. substring (el. selectionStart, el. selectionEnd); | ||||||||
| Anton > 14-07-2008 20:23:00 | ||||||||
Исправил ошибку для предыдущего варианта кнопок перевода, связанную с переключением вкладок в момент перевода: Код: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); | ||||||||
| Deim0s > 14-07-2008 22:20:22 | ||||||||
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
);всё заработало, как хотелось. Проверил где только возможно - всё работает. | ||||||||
| Anton > 15-07-2008 14:37:59 | ||||||||
Вот код: Код: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");Но поддерживать я его не буду. Хотите - пользуйтесь, если что-нибудь не устроит - просьба не беспокоить. | ||||||||
| camo > 15-07-2008 16:37:40 | ||||||||
Anton | ||||||||
| Anton > 16-07-2008 13:55:36 | ||||||||
camo | ||||||||
| camo > 16-07-2008 17:44:17 | ||||||||
Anton | ||||||||
| AndreyA > 18-07-2008 17:55:15 | ||||||||
Добавление кнопок "Сохранить страницу" и "Сохранить ссылку" на панель закладок с помощью расширения Custom Buttons. | ||||||||
| AndreyPA > 26-07-2008 03:20:32 | ||||||||
В расширении toolbar buttons была кнопка которая включала и выключала загрузку картинок. Я его нашел и распотрошил но столкнулся с тем что у него в реализации используются два режима отображения кнопки ВКЛЮЧЕНО и ВЫКЛЮЧЕНО (т.е. 2 пиктограммы) можно ли это сделать в Custom Buttons и как. | ||||||||
| Anton > 26-07-2008 13:20:52 | ||||||||
AndreyPA Код:if (state == 0)
this. image = "file:///c:/greenicon.png";
else
this. image = "file:///c:/redicon.png";--- | ||||||||
| polk90 > 27-07-2008 17:48:48 | ||||||||
Ребята, те кто постоянно в этой ветке варятся, соберите, пожалуйста, то что наработано в один пост. Я имею в виду то, что пишется в поле код. Как выжимку. Буду очень признателен, как пользователь, который редко сюда заходит. Ведь реально много сделано. У вас где-то есть исправления где-то вы друг друга с полуслова поняли. Расширение прекрасное, а так таким чайникам как я будет легче. | ||||||||
| Infocatcher > 04-09-2008 17:09:40 | ||||||||
Вижу странную работу кода вида Код: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 _menu = document.createElement("menu");
_menu.setAttribute("label", menu.getAttribute("label")); // а если перенести все menu.childNodes, то работать уже не будет =/
menu.parentNode.replaceChild(_menu, menu); | ||||||||
| Anton > 04-09-2008 19:56:49 | ||||||||
Infocatcher | ||||||||
| Infocatcher > 04-09-2008 21:13:10 | ||||||||
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( ... )).
Сделать menu? Или очепятка, или я чего-то не догоняю. | ||||||||
| Anton > 04-09-2008 23:21:13 | ||||||||
mozilla-russia navigator | ||||||||
| vv07 > 12-09-2008 07:37:52 | ||||||||
Черт,возникла неприятная ситуация.Обновился до версии 0,0,3,3.Половина кнопок слетела почему то.При этом не могу откатиться назад.Не сохранилась версия 0,0,3,2.Или подскажите,в чем проблема,или дайте ссылку,на 0,0,3,2. | ||||||||
| Anton > 12-09-2008 14:29:54 | ||||||||
vv07
Что значит "слетела" ?
https://addons.mozilla.org/ru/firefox/addon/2707 - на странице есть ссылка "Отобразить все версии". | ||||||||
| vv07 > 12-09-2008 15:57:24 | ||||||||
Извините меня пожалуйста за поспешность.Сильно расстроился блин.Разобрался в чем проблема.Дело в том,что папку с иконками для расширения,расположил в корневой папке.При установке обновления,папка полностью обновилась и иконки были утрачены.именно поэтому,кнопки перестали отображаться.Может стоит,как то исключить такую возможность,в последующем.Просто удобнее держать иконки,именно в директории расширения. | ||||||||
| Mashinist > 12-09-2008 18:05:25 | ||||||||
Вот эта штука сохраняет старницу далеко в "C:\Documents and Settings\Администратор\Application Data\Mozilla\Firefox\Profiles\ksc247o6.default\ScrapBook\data\20080912165717\" | ||||||||
| vv07 > 12-09-2008 18:28:24 | ||||||||
Если я правильно понял,речь о расширении ScrapBook,так в нем можно задать директорию,в настройках.Скопируйте или перенесите папку ScrapBook,в любое удобное для вас место.В настройках укажите эту папку.Все,по умолчанию будет сохраняться туда. | ||||||||
| Mashinist > 13-09-2008 13:05:02 | ||||||||
Спасибо! | ||||||||
| Anton > 13-09-2008 21:35:36 | ||||||||
vv07
В корневой папке чего ? В каталог, где находится установленное расширение ?
А в перекодированном в base64 виде или в подкаталоге custombuttons профиля не пойдёт ? Код: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);в первой строке которого задаём нужный каталог. | ||||||||
| Mashinist > 14-09-2008 00:38:26 | ||||||||
Спасибо! | ||||||||
| vv07 > 14-09-2008 06:58:34 | ||||||||
Да речь,о корневой папке расширения custombuttons@xsms.org.Держу иконки там,в подпапке Icon.Насчет
незнаю,а вот
думаю нормально.Главное,что бы,при обновлениях,директория,в которой будут находиться иконки,не изменялась.Пусть основной каталог меняеться,а подкаталог нет.Тогда при обновах,иконки будут сохраняться и не надо морочиться,держать их хрен знает где.Я пользуюсь еще и портаблелисом,переношу конфигу из системной.Не надо ничего менять.Пути все прописываються по умолчанию.Никаких проблем.Раньше держал иконки в отдельной папке,на другом диске.Приходилось,каждый раз,по новому кнопки править.Поэтому и прошу о правке. | ||||||||
| Anton > 14-09-2008 19:40:24 | ||||||||
В диалоговом окне редактирования кнопки есть кнопка "=> base64", которая преобразует файл изображения в строку символов, которая хранится вместе с кодом кнопки.
В custombuttons уже есть один механизм, позволяющий исключить зависимость от места расположения изображений кнопок - это кодирование в base64. Стоит ли создавать второй ? Я подумаю, но ничего не обещаю. | ||||||||
| vurdalak > 16-09-2008 23:06:25 | ||||||||
Помогите если не сложно: | ||||||||
| Infocatcher > 16-09-2008 23:44:33 | ||||||||
vurdalak
По-хорошему, вроде, надо делать расширение с 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();
}пишем то, что должно выполняться при запуске и закрытии соответственно. Учитывается только «главное» окно. Например, если оставить загрузки и закрыть все другие окна, скрипт решит, что произошел выход.
Код: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). Из тех же соображений безопасности (или есть способ добраться до кода кнопки без запуска инициализации?). | ||||||||
| vurdalak > 17-09-2008 00:28:43 | ||||||||
Спасибо за быстрый ответ. Код: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");работать отказывается | ||||||||
| Infocatcher > 17-09-2008 01:05:01 | ||||||||
vurdalak
Гм, у меня вот так заработало: Код: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 Код: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 | ||||||||
| vurdalak > 17-09-2008 13:32:02 | ||||||||
Все работает на ура. Видимо я где-то допускал ошибку. | ||||||||
| macuache > 17-09-2008 23:50:13 | ||||||||
Нужна кнопка Open notebook. Та, что в статус баре от приложения Google notebook. Мне не нравится статус бар. Я хотел бы иметь кнопку на тулбаре. Но код этой кнопки я не знаю. | ||||||||
| Anton > 18-09-2008 18:09:58 | ||||||||
Infocatcher
Как-нибудь сподоблюсь. В cb2 давно уже есть, но "утягивать" один-в-один мне не хочется.
Я уже говорил об этом, кажется. В тройке process.run запускает cmd.exe так, что окна не видно.
Код:document.getElementById("gnotes-statusbar").click()вроде, работает. | ||||||||
| Infocatcher > 18-09-2008 21:31:01 | ||||||||
Anton
Примерно так:
Гм, может, конечно, искал плохо, но не увидел. | ||||||||
| Anton > 18-09-2008 22:01:26 | ||||||||
Infocatcher
Понятно. Прямо сейчас не могу, но сделаю, как появится свободное время.
В контекстном меню custombutton:// ссылки есть пункт "View Custom Button Codes". | ||||||||
| Infocatcher > 18-09-2008 22:30:55 | ||||||||
Anton
Ааа... А я в адресную строку код пихал. | ||||||||
| saab > 17-10-2008 12:45:54 | ||||||||
Добрый день, а нет ли уже готовой кнопки для Thunderbird, которая по клику пересылала бы выбранные сообщения на заранее определенный адрес (нужно для обучения серверного байес фильтра)? | ||||||||
| macuache > 01-11-2008 11:18:16 | ||||||||
Будьте добры. Нужна кнопка "Organize bookmarks" | ||||||||
| alla_ > 01-11-2008 13:38:41 | ||||||||
macuache | ||||||||
| Infocatcher > 01-11-2008 21:18:08 | ||||||||
macuache
DOM Inspector (для Firefox 2.0.0.x и ниже нужно при установке выбрать выборочную установку и поставить соответствующую галочку) В итоге получаем: Код:PlacesCommandHook.showPlacesOrganizer('AllBookmarks'); | ||||||||
| macuache > 01-11-2008 21:36:24 | ||||||||
спасибо | ||||||||
| cHeRsAnYa > 03-12-2008 00:03:29 | ||||||||
Дайте пожалуйста кнопку, при нажатии на которую открывается нужная папка закладок (в виде меню над этой кнопкой). | ||||||||
| =Agasfer= > 03-12-2008 00:47:00 | ||||||||
Infocatcher | ||||||||
| Infocatcher > 03-12-2008 04:06:50 | ||||||||
Секция «код»: Код: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;Кстати, с заменой пробелов на подчеркивания тоже глюк какой-то – только первый заменяется. | ||||||||
| =Agasfer= > 03-12-2008 10:25:23 | ||||||||
СПС большое! | ||||||||
| =Agasfer= > 03-12-2008 11:03:03 | ||||||||
Заработала!!! | ||||||||
| Anton > 03-12-2008 13:30:37 | ||||||||
Infocatcher
Код:...replace (/ /g, "_")... ? | ||||||||
| Anton > 03-12-2008 21:41:42 | ||||||||
Сделал вот такую: Код: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 начинается латиницей. | ||||||||
| Infocatcher > 03-12-2008 22:59:43 | ||||||||
Про «g» я в курсе. | ||||||||
| saab > 04-12-2008 09:13:03 | ||||||||
Anton | ||||||||
| Infocatcher > 04-12-2008 17:06:24 | ||||||||
Видимо, это довольно-таки нетривиально, потому как просто показать уже имеющийся список закладок не получается. | ||||||||
| Anton > 09-12-2008 19:25:08 | ||||||||
Хотелось бы узнать мнение пользователей по поводу организации интерфейса расширения в Thunderbird. | ||||||||
| vv07 > 20-12-2008 11:57:25 | ||||||||
AntonНа третьем финале тройки,расширение почему то не работает.Не могу добавить новую кнопку.Правда оговорюсь,речь о портабле,но наверное и на стационарке такая же петрушка будет. | ||||||||
| Anton > 20-12-2008 12:46:40 | ||||||||
vv07 | ||||||||
| vv07 > 20-12-2008 13:00:57 | ||||||||
AntonНет,3.0.5 | ||||||||
| Anton > 20-12-2008 13:05:36 | ||||||||
Тогда мне нужно более развёрнутое описание неполадки, чтобы я смог её воспроизвести и выяснить, что надо править. | ||||||||
| vv07 > 20-12-2008 13:28:46 | ||||||||
В общем ситуация следующая.Сейчас я установлю стационарку и после отпишусь. | ||||||||
| vv07 > 20-12-2008 14:55:15 | ||||||||
Да,видимо проблема была,именно в портабельной от App,что б им пусто было.На стационарке работает нормально. | ||||||||
| Anton > 20-12-2008 17:27:02 | ||||||||
vv07
Кстати, у меня валялась какой-то portable firefox версии 3.0.4, я его обновил автоапдейтом до 3.0.5 - проблем с расширением не обнаружил. Может, конечно, не в ту сторону копал, поскольку не имею инструкций по воспроизведению ошибки. | ||||||||
| vv07 > 20-12-2008 18:13:19 | ||||||||
Anton Это относиться,только к псевдопортабельным сборкам,сделанными аутолитом.Если портабелка нормальная,то проблем никаких не должно быть.А эти сборки,нарушают работу установленных стационарно и мешают друг другу.Видимо по этой причине и произошел сбой.Потому что у меня ко всему,еще и двойка слетела,потому что папки профиля смешались. | ||||||||
| vv07 > 06-01-2009 07:00:36 | ||||||||
AntonЕсть просьба Уважаемый!Тут возникла необходимость в использовании расширения Listat от http://www.liveinternet.ru/,но оно работает только через контекстное меню.Скажите,нельзя ли кнопочку сварганить? | ||||||||
| Anton > 06-01-2009 07:55:17 | ||||||||
vv07 Код:getBrowser().selectedTab = getBrowser().addTab('http://www.liveinternet.ru/stat/' + content.window.location.hostname + '/')в раздел "Код". | ||||||||
| vv07 > 06-01-2009 08:03:14 | ||||||||
Отлично работает.Спасибо.Блин,как же научиться самому стряпать кнопки | ||||||||
| four2four > 26-01-2009 13:19:27 | ||||||||
помогите пожалуйста, нужна такая кнопка: у меня установлено расширение personal menu, когда оно установлено если нажать правой кнопкой по панели инструментов то можно убрать галочку с "главное меню"(файл, вид, правка...) и оно исчезнет, так вот мне нужна кнопка которая бы убирала бы и показывала "главное меню". | ||||||||
| =Agasfer= > 26-01-2009 13:26:28 | ||||||||
four2four Есть расширение такое. Называется Hide MenuBar. Работает по нажатию Alt. | ||||||||
| Anton > 26-01-2009 15:12:13 | ||||||||
four2four Код:var tbmb = document. getElementById ("toolbar-menubar");
tbmb. _collapsed = !tbmb. _collapsed;
tbmb. collapsed = !tbmb. collapsed;
document. persist ("toolbar-menubar", "collapsed");код для кнопки. Должен работать независимо от того, установлено расширение personal menu или нет. | ||||||||
| four2four > 27-01-2009 08:41:39 | ||||||||
Anton Спасибо большое то что надо! | ||||||||
| gigagertz > 05-02-2009 19:50:22 | ||||||||
Друзья, помогите с кнопкой. Код ниже взят из начала темы по кнопке смены кодировки. Она отлично работает в браузере FF, но не работает в Thunderbird.Что нужно изменить в коде. что бы она реагировала на окно почтового клиента. Чувствую дело в этом куске oncommand="this.parentNode.changeEncoding(event)" Вот что надо вставить вместо parentNode Код: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 | ||||||||
| gigagertz > 06-02-2009 12:09:05 | ||||||||
Вот так выглядит сам код. Хотелось бы что бы он менял кодировку письма в Thunderbird Код:var menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
oncommand="this.parentNode.changeEncoding(event)">
<menuitem charset="KOI8-R" label="Кириллица (KOI8-R)"/>
<menuitem charset="IBM866" label="Кириллица/Россия (CP-866)"/>
<menuitem charset="windows-1251" label="Кириллица (Windows-1251)"/>
<menuitem charset="UTF-8" label="Unicode (UTF-8)"/>
</menupopup>;
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. orient = "horizontal";
this. type = "menu-button";
this. appendChild (menu);
this. changeEncoding = function (event)
{
var encoding = event. target. getAttribute ("charset");
SetForcedCharset (encoding);
SetDefaultCharacterSet (encoding);
} | ||||||||
| and23 > 06-02-2009 15:26:51 | ||||||||
2gigagertz: Я когда-то подолбался-подолбался с этим и плюнул: MenuManipulator'ом вытащил подменю "Кодировка" в строку основного меню. imho вполне удобно получилось. | ||||||||
| Anton > 06-02-2009 16:01:34 | ||||||||
gigagertz Код:var menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
oncommand="this.parentNode.changeEncoding(event)">
<menuitem charset="KOI8-R" label="Кириллица (KOI8-R)"/>
<menuitem charset="IBM866" label="Кириллица/Россия (CP-866)"/>
<menuitem charset="windows-1251" label="Кириллица (Windows-1251)"/>
<menuitem charset="UTF-8" label="Unicode (UTF-8)"/>
</menupopup>;
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. orient = "horizontal";
this. type = "menu-button";
this. appendChild (menu);
this. changeEncoding = function (event)
{
var encoding = event. target. getAttribute ("charset");
MessengerSetForcedCharacterSet (encoding);
//SetDefaultCharacterSet (encoding);
} | ||||||||
| gigagertz > 06-02-2009 17:31:10 | ||||||||
Спасибо, большое! | ||||||||
| Anton > 06-02-2009 19:16:13 | ||||||||
gigagertz
Из раздела "Инициализация" - убрать всё. Код:MessengerSetForcedCharacterSet ("KOI8-R");(для koi8-r) | ||||||||
| gigagertz > 06-02-2009 19:48:04 | ||||||||
Спасибо большое! все работает | ||||||||
| Anton > 06-02-2009 19:52:12 | ||||||||
Нет, хелпа нет.
Код из раздела "код" выполняется при нажатии на кнопку. | ||||||||
| Duble3 > 07-02-2009 18:24:15 | ||||||||
Нужна новая кнопка. | ||||||||
| Anton > 07-02-2009 20:00:33 | ||||||||
Duble3 Код:var backupdir = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
backupdir. QueryInterface (Components. interfaces. nsIFile);
backupdir. initWithPath ("L:\\PRIVAT\\BOOKMARKS");
var backup = backupdir. clone ();
backup. append ("bookmarks.html");
if (backup. exists())
backup. remove (false);
var exporter = Components. classes ["@mozilla.org/browser/places/import-export-service;1"].
getService (Components. interfaces. nsIPlacesImportExportService);
exporter. exportHTMLToFile (backup);создаёт в L:\PRIVAT\BOOKMARKS файл bookmarks.html | ||||||||
| Duble3 > 07-02-2009 20:05:01 | ||||||||
Anton | ||||||||
| Anton > 07-02-2009 20:07:26 | ||||||||
ничего | ||||||||
| Anton > 08-02-2009 20:09:00 | ||||||||
Duble3
Код:var backupdir = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
backupdir. QueryInterface (Components. interfaces. nsIFile);
backupdir. initWithPath ("L:\\PRIVAT\\BOOKMARKS");
var backup = backupdir. clone ();
var date = new Date ();
var month = date. getMonth () + 1;
if (month < 9)
month = "0" + month;
date = date. getDate () + "." + month + "." + date. getFullYear ();
alert (date);
backup. append ("bookmarks " + date + ".html");
if (backup. exists())
backup. remove (false);
var exporter = Components. classes ["@mozilla.org/browser/places/import-export-service;1"].
getService (Components. interfaces. nsIPlacesImportExportService);
exporter. exportHTMLToFile (backup);добавляет текущую дату к имени файла с закладками. | ||||||||
| Duble3 > 08-02-2009 20:12:53 | ||||||||
Anton | ||||||||
| Anton > 08-02-2009 20:26:31 | ||||||||
Duble3
Ваше сообщение пополнено спустя 10 минут после размещения моего. | ||||||||
| Duble3 > 08-02-2009 20:52:21 | ||||||||
Учту на будущее. | ||||||||
| alexmac > 09-02-2009 14:19:35 | ||||||||
Помогите разобраться со странным поведением панели меню при использовании данного расширения. | ||||||||
| Anton > 09-02-2009 15:49:10 | ||||||||
Duble3
Для этого надо переносить и адаптировать много кода из Sxipper'а. За это не возьмусь.
Мне удаётся это воспроизвести только в случае, когда в диалоге настройки панелей инструментов в поле "Показывать" установлено "Значки и текст". Но в этом случае, браузер и должен отображать и значки и названия кнопок. | ||||||||
| Duble3 > 09-02-2009 15:55:28 | ||||||||
Anton | ||||||||
| alexmac > 09-02-2009 16:13:40 | ||||||||
Anton
Ну ... у меня в настройуах - "Значки и текст". Просто подумал, что раз во 2-ой версии такого не было то и в Firefox Portable 3.0.5 не должно. | ||||||||
| Anton > 09-02-2009 16:34:00 | ||||||||
alexmac Код:document. getAnonymousElementByAttribute (this, "class", "toolbarbutton-text"). setAttribute ("hidden", "true"); | ||||||||
| alexmac > 09-02-2009 17:15:34 | ||||||||
to Anton: | ||||||||
| Anton > 09-02-2009 17:33:00 | ||||||||
alexmac
Вместо, или вместе, без разницы
У меня работает. Ctrl+D/Bookmark this page с такой строкой не "ломает" строку меню. | ||||||||
| alexmac > 10-02-2009 13:43:57 | ||||||||
to Anton:
| ||||||||
| vv07 > 16-02-2009 11:25:51 | ||||||||
Anton Требуеться помощь!Не знаю какое расширение стало причиной,но у меня из настроек панелей исчезла кнопка,закрыть окно.Очень удобно,когда открываються отдельные окна.Сейчас приходиться сворачивать и закрывать из трея.Как бы кнопочку сварганить? | ||||||||
| Anton > 16-02-2009 13:59:27 | ||||||||
vv07 Код:window. close () ? | ||||||||
| vv07 > 16-02-2009 15:04:16 | ||||||||
Anton | ||||||||
| Anton > 16-02-2009 15:21:45 | ||||||||
vv07 | ||||||||
| Duble3 > 16-02-2009 22:07:12 | ||||||||
Anton | ||||||||
| vv07 > 17-02-2009 14:34:01 | ||||||||
Anton | ||||||||
| Anton > 17-02-2009 15:00:48 | ||||||||
Duble3 Код:loadURI ("https://www.google.com/reader/next?go=nextauto&t=145931955611656916");По значкам - ничем не могу помочь.
Не видел никогда такой кнопки. Если эта кнопка делает то же, что и "Файл" -> "Закрыть вкладку", тогда Код:BrowserCloseTabOrWindow(); Если нет - ну, тогда не знаю. Вообще, ситуацию не могу представить, вроде бы, у всплывающих окон есть системные кнопки свернуть-развернуть-закрыть в заголовке. | ||||||||
| vv07 > 17-02-2009 15:30:50 | ||||||||
Anton | ||||||||
| Duble3 > 17-02-2009 16:03:12 | ||||||||
Anton | ||||||||
| Anton > 17-02-2009 16:46:29 | ||||||||
Duble3
Проверьте правильность ссылки в коде кнопки. Кажется, там не хватает одной цифры. | ||||||||
| Duble3 > 17-02-2009 16:54:37 | ||||||||
Anton | ||||||||
| Anton > 23-02-2009 20:53:10 | ||||||||
alexmac Код:this. setAttribute ("cb-style", "hidelabel"); | ||||||||
| alexmac > 03-03-2009 12:32:58 | ||||||||
to Anton Код:/*Initialization Code*/
if( getBoolPref('browser.offline') )
{
BrowserOffline.toggleOfflineStatus();
} | ||||||||
| Anton > 04-03-2009 15:51:34 | ||||||||
alexmac
Может быть, код в разделе "Инициализация", предшествующий коду "this.setAttribute..." содержит ошибку ? Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3Etest%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20setAttribute%20%28%22cb-style%22%2C%20%22hidelabel%22%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E для установки через адресную строку кнопки, которая не делает ничего, только скрывает своё название.
Я подозреваю, работать она перестала много раньше обновления до версии 0.0.3.9, поскольку не могу добиться её "работоспособности" ни с одной из версий, начиная с 0.0.3.6 на Firefox Portable версий 3.0.4 и 3.0.6. Код:var ios = Components. classes ["@mozilla.org/network/io-service;1"]. getService (Components. interfaces. nsIIOService); ios. offline = true; или, готовый код для установки через адресную строку: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EtoggleOffline%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20ios%20%3D%20Components.%20classes%20%5B%22@mozilla.org/network/io-service%3B1%22%5D.%20getService%20%28Components.%20interfaces.%20nsIIOService%29%3B%0Aios%20%3D%20true%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| alexmac > 05-03-2009 10:54:01 | ||||||||
to Anton | ||||||||
| Anton > 05-03-2009 17:59:20 | ||||||||
alexmac
Понятно. Буду придумывать что-нибудь более надёжное. Спасибо за информацию.
Попробуйте Код:var pref = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
var ios = Components. classes ["@mozilla.org/network/io-service;1"]. getService (Components. interfaces. nsIIOService);
if( pref.getBoolPref('browser.offline') )
{
ios. offline = !ios. offline;
} | ||||||||
| Najlus > 14-03-2009 18:15:39 | ||||||||
Плиз, объясните непутёвому на каком языке кнопки писать и есть ли какой справочник о том, как это делается в mozilla (ну названия компонентов браузера и пр. | ||||||||
| Anton > 15-03-2009 05:46:11 | ||||||||
Najlus | ||||||||
| 3Jlou > 16-03-2009 00:41:00 | ||||||||
Добрый вечер, хотелось бы встроить в боковую панель панели ресурсов и поиска, которыми пользовался ещё со времен MyIE. Смысл задачи - создание кнопки для запуска *.htm файла в боковой панели, причём путь к файлу должен быть "относительным", т.к. планируется использование с портабельной версией лисы. Возможно ли написать подобную кнопку? | ||||||||
| Infocatcher > 16-03-2009 02:04:36 | ||||||||
Код:openWebPanel(title, uri); *.htm конвертируете в base64 и используете результат в качестве uri. | ||||||||
| 3Jlou > 16-03-2009 09:38:34 | ||||||||
Infocatcher, прошу прощения за свою неграмотность, но можно ли расписать поподробней? | ||||||||
| wald > 16-03-2009 11:42:21 | ||||||||
Хоелось бы иметь аналог "Закладки Ru-Board 1.6beta2" из Maxthon. | ||||||||
| Infocatcher > 16-03-2009 18:40:34 | ||||||||
Вид – Добавить новую кнопку В поле «Картинка» вставляете полученную ранее ссылку и жмете на «=> base64». Копируете строку вида data:text/html;base64,<...>. Далее или делаете кнопку Код:openWebPanel("Заголовок панели", "data:text/html;base64,<и_еще_куча_символов>");, или закладку на base64-ссылку. | ||||||||
| BALANCE > 16-03-2009 22:34:07 | ||||||||
Подскажите пожалуйста.Как написать code для кнопки которая будет открывать окошко добовления ссылки в черный список в расширении blocksite | ||||||||
| Anton > 17-03-2009 16:50:38 | ||||||||
wald
Извините, не могу за это взяться. Я не пользователь ни ru-board, ни maxton. Может быть, сделаю позже, но обещать ничего не могу.
Несложно: Код:window.open('chrome://blocksite/content/BlockSiteSetWebsite.xul', '', 'chrome,centerscreen');только это окошко blocksite обречено работать только из окна настроек расширения. Код:var Cc = Components. classes;
var Ci = Components. interfaces;
var NSISSI = Ci. nsISupportsString;
var newLocation = prompt ("Add new location", getBrowser (). contentDocument. location. href);
var blockedWebsitesArray;
var BlockSitePrefBranch = Cc ["@mozilla.org/preferences-service;1"]. getService (Ci. nsIPrefService). getBranch("BlockSite.");
if (BlockSitePrefBranch. prefHasUserValue ("locations"))
{
blockedWebsitesString = BlockSitePrefBranch. getComplexValue ("locations", NSISSI). data;
blockedWebsitesArray = blockedWebsitesString. split ("|||");
}
else
{
blockedWebsitesArray = new Array();
}
blockedWebsitesArray. push (newLocation);
var locationNsIString = Cc ["@mozilla.org/supports-string;1"]. createInstance (NSISSI);
locationNsIString. data = blockedWebsitesArray. join ("|||");
BlockSitePrefBranch. setComplexValue ("locations", NSISSI, locationNsIString); | ||||||||
| BALANCE > 17-03-2009 20:39:26 | ||||||||
Anton, Спасибо тебе огромное!! Все супер работает!! Очень теперь удобно!) | ||||||||
| Anton > 17-03-2009 21:11:27 | ||||||||
BALANCE
Да, не подумал. Надо после строки Код:var newLocation = prompt ("Add new location", getBrowser (). contentDocument. location. href);добавить строку Код:if (!newLocation) return; | ||||||||
| BALANCE > 18-03-2009 00:01:28 | ||||||||
Anton Здорово спасибо! | ||||||||
| 3Jlou > 18-03-2009 13:07:59 | ||||||||
Infocatcher, большое спасибо, получилось. Код:this.url2xul= 'chrome://local/content/open_location.xul'; Из описания кнопки стало ясно что указанный путь ведет в папку ...\Firefox\chrome\local\, закинул туда html-файлы и вбил подправленный код в поле инициализации новой кнопки (остальные строки кода взял от кнопки Менеджер расширений от того же Dark-Demon'a), пример одной из кнопок - SuperUploader: сохраняем страницу в ...\Firefox\chrome\local\superuploader.htm, создаем кнопку: Код:data:image/gif;base64,R0lGODlhEAAQAJECAGqbzAAAZv///wAAACH5BAEAAAIALAAAAAAQABAAAAIkFI6Zpu0aXgtUIoot3m97Cx4REGXOWIqniq4kWbmp1oYSEwoFADs= Инициализация: Код:this.url2xul= 'chrome://local/content/superuploader.htm';
this.onClick= function(e)
{
switch (e.button)
{
case 0: if (document.getElementById('sidebar-box').getAttribute('sidebarcommand')) // close sidebar
toggleSidebar();
else // open in sidebar
openWebPanel(this.tooltipText, this.url2xul);
break;
case 1:
{
var t= gBrowser.mTabs;
var current= content.document.location.href;
var i= t.length;
if (current==this.url2xul) gBrowser.removeCurrentTab();
else while (true)
{
if (--i<0)
{
if (current=='about:blank') // replace blank tab
loadURI(this.url2xul);
else // add new tab
gBrowser.selectedTab= gBrowser.addTab(this.url2xul);
break;
};
if (t[i].linkedBrowser.currentURI.spec==this.url2xul) // popup loaded
{
gBrowser.selectedTab= gBrowser.tabContainer.childNodes[i];
break;
};
};
}; break;
};
};
this.setAttribute('onclick','this.onClick(event);');Есть несколько вопросов: Код:openWebPanel("Заголовок панели", "data:text/html;base64,PCFET0NUWVBFIEhUTUwgU1lTVEVNICJodHRwOi8vdGFnc291cC5jb20vZHRkLyI+CjxodG1sIGxhbmc9ImVuIj48aGVhZD4NCgoKCTx0aXRsZT5TdXBlciBVcGxvYWRlcjwvdGl0bGU+DQoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KCTxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSJTdXBlciBVcGxvYWRlciBpcyBhIHBhbmVsIHRvIHF1aWNrbHkgdXBsb2FkIGZpbGVzIHRvIGltYWdlc2hhc2sudXMsIHJhcGlkc2hhcmUuY29tIGFuZCBzb21lIG90aGVyIGZpbGUtc2hhcmluZyBzZXJ2aWNlcy4iPg0KCTxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iaHR0cDovL3VwbG9hZGVyLXBhbmVsLmNvbS9pL3VwMy5naWYiPg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJKiB7bWFyZ2luOjA7IHBhZGRpbmc6MH0NCglodG1sIHtiYWNrZ3JvdW5kOiNFQUVDRjE7IGNvbG9yOiMzMzM7fQ0KCWJvZHkge2ZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIC43NWVtLzEuOGVtIEFyaWFsLFRhaG9tYSxzYW5zLXNlcmlmO30NCglpbWcge2JvcmRlcjowfQ0KCXVsIHttYXJnaW4tbGVmdDo0cHg7fQ0KCWxpIHtsaXN0LXN0eWxlLXR5cGU6bm9uZX0NCgloMSB7Zm9udC1zaXplOjEuNWVtfQ0KCWEgc3BhbiB7ZGlzcGxheTpibG9jazsgd2lkdGg6MTUwcHg7IG1hcmdpbjowIGF1dG87IHBhZGRpbmc6LjRlbSAwIC40ZW0gNHB4OyBmb250LXdlaWdodDo1MDB9DQoJI3ZlcnNpb24gc3BhbiB7cGFkZGluZy1sZWZ0OjhweH0NCglkaXYge2Rpc3BsYXk6YmxvY2s7IHdpZHRoOjE2MnB4OyBtYXJnaW46MCBhdXRvfQ0KCS5uIHtkaXNwbGF5Om5vbmV9DQoJOnRhcmdldCB7YmFja2dyb3VuZDojOGJjYzZhO30NCglkaXYuZmlsZWlucHV0cyB7cG9zaXRpb246cmVsYXRpdmU7IHdpZHRoOiAxNDRweDsgaGVpZ2h0OiAyNHB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tbGVmdDowfQ0KCWRpdi5mYWtlZmlsZSB7cG9zaXRpb246YWJzb2x1dGU7IHRvcDowcHg7IGxlZnQ6MHB4OyB6LWluZGV4OjF9DQoJZGl2LmZha2VmaWxlIGEge3BhZGRpbmc6IDAgNHB4OyB9DQoJaW5wdXQuZmlsZSB7cG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0OjA7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjMwMHB4OyBmb250LXNpemU6M2VtICFpbXBvcnRhbnQ7IGhlaWdodDozMHB4OyB0ZXh0LWFsaWduOiByaWdodDsgb3BhY2l0eTogMDsgLW1vei1vcGFjaXR5OjA7IGZpbHRlcjphbHBoYShvcGFjaXR5OiAwKTsvKiovei1pbmRleDogMn0NCg0KCS5qcyAuc3VibWl0IHtkaXNwbGF5Om5vbmV9DQoNCgkvKiBMaW5rcyAqLwkNCglhIHtkaXNwbGF5OmJsb2NrOyBjb2xvcjojMDM2OyB0ZXh0LWRlY29yYXRpb246bm9uZTsgbWFyZ2luLXJpZ2h0OjFweH0NCgkuZmFrZWZpbGUgYSB7cGFkZGluZy1ib3R0b206LjFlbX0NCgkjdmVyc2lvbiBhIHtjb2xvcjojYTNiOGNjfQ0KCWE6aG92ZXIsIGgxOmhvdmVyIGEge2NvbG9yOiNmNGY1ZjggIWltcG9ydGFudH0NCglhOmhvdmVyLCBoMTpob3ZlciB7YmFja2dyb3VuZDojNmE5YmNjfQ0KCWEuYnRuLCBhLmJ0bnJlYWR5IHtmb250LXNpemU6IDlwdDsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDE0MHB4OyBoZWlnaHQ6IDI0cHg7IG1hcmdpbjogMnB4IDAgMCAycHh9ICANCglhLmJ0bnJlYWR5IHtjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogIzhiY2Q2YX0NCglhIGltZyB7ZmxvYXQ6bGVmdDsgcGFkZGluZzo0cHggMCAwOyAvKnBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0Oi0xOHB4OyBwYWRkaW5nOjAgNHB4IDAgMDsgbWFyZ2luLWJvdHRvbTotMjBweCovfQ0KDQoJLyogQ3Vyc29yICovDQoJYSwgYnV0dG9uLCBsYWJlbCwgaW5wdXQge2N1cnNvcjpwb2ludGVyICFpbXBvcnRhbnR9DQoJDQoJLyogSW50ZXJuZXQgRXhwbG9yZXIgKi8NCgkqIGh0bWwgaW1nIHtkaXNwbGF5Om5vbmV9DQoJKjpmaXJzdC1jaGlsZCtodG1sIGltZyB7ZGlzcGxheTpub25lO30NCgkNCglAbWVkaWEgYWxsIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsNCgkJaDEsIGEgey13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuNHMgZWFzZS1vdXR9DQoJfQ0KCTwvc3R5bGU+DQoJPGxpbmsgcmVsPSJhbHRlcm5hdGUgZmVlZCIgdHlwZT0iYXBwbGljYXRpb24vYXRvbSt4bWwiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vY2hhbmdlbG9nLnhtbCIgdGl0bGU9IlVwbG9hZGVyIHBhbmVsOiBjaGFuZ2Vsb2ciPg0KCTxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vIiB0aXRsZT0iVXBsb2FkZXIgcGFuZWwiPg0KCTxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vdXAuaHRtbCIgdGl0bGU9IlVwbG9hZGVyIj4NCgk8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vZmFxLyIgdGl0bGU9IkZBUSI+DQoJPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJNaWtpdmFuY2gsIHByb2ZpVCDQuCDRh9GD0YLRjC3Rh9GD0YLRjCDQndC40LrQuNGC0LAg0JLQsNGB0LjQu9GM0LXQsiI+DQoJPGxpbmsgcmVsPSJhdXRob3IiIGhyZWY9Imh0dHA6Ly9lbHYxcy5ydS8iIHRpdGxlPSLQndC40LrQuNGC0LAg0JLQsNGB0LjQu9GM0LXQsiI+CQ0KPC9oZWFkPjxib2R5IGxpbmtpZnltYXg9IjAiIGxpbmtpZnljdXJyZW50PSIwIiBsaW5raWZ5aW5nPSJ0cnVlIiBjbGFzcz0ianMiPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCWRvY3VtZW50LmJvZHkuY2xhc3NOYW1lKz0nIGpzJzsJDQo8L3NjcmlwdD4NCjxoMSBpZD0idG9wIj4NCgk8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj4NCgkJPHNwYW4+U3VwZXIgVXBsb2FkZXI8L3NwYW4+CQkNCgk8L2E+DQo8L2gxPg0KPHVsPg0KDQo8IS0tbGkgaWQ9ImZ1bmt5aW1nIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9mdW5reWltZy5jb20vIj48aW1nIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFMTUFBQUVCUk1mYjhJcVJud01uaGVQdDl5bGRyOHJOMVdweWd4WklvZUxrNnFxdnV1VG03SksyNE9yczhRQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBQVFBQkFBQUFRbXNNbEpxNzA0NjgyNy8walJBVVBBWkl0QU1vUjVKY0t4dHVkbHhLU2JHWW9RZnNDZ0pRSUFPdz09IiBhbHQ9IiI+PC9hPgo8Zm9ybSBhY3Rpb249Imh0dHA6Ly9mdW5reWltZy5jb20vdXAucGhwIiBuYW1lPSJ1cCIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiB0YXJnZXQ9Il9ibGFuayI+Cgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4KCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIgcmVxdWlyZWQgY2xhc3M9ImZpbGUiIHNpemU9IjEiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fZnVua3lpbWdfY29tJykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX2Z1bmt5aW1nX2NvbScpIiBvbmNoYW5nZT0ic2V0UmVhZHkyKCdidG5fZnVua3lpbWdfY29tJywgdGhpcykiPgoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9mdW5reWltZ19jb20iIGNsYXNzPSJidG4iPkZ1bmt5aW1nLmNvbTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkIiB2YWx1ZT0iVXBsb2FkIj4KCTxpbnB1dCBjbGFzcz0ibiIgdHlwZT0icmFkaW8iIG5hbWU9InVwdHlwZSIgdmFsdWU9ImZpbGUiIGNoZWNrZWQ+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJNQVhfRklMRV9TSVpFIiB2YWx1ZT0iMzE0NTcyOCI+Cgk8aW5wdXQgY2xhc3M9Im4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhZGRJbmZvIiBjaGVja2VkPgo8L2Zvcm0+CjwvZGl2PjwvbGktLT4NCg0KPGxpIGlkPSJiYXlpbWciPjxkaXY+PGEgaHJlZj0iaHR0cDovL2JheWltZy5jb20vIj48aW1nIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFOVS9BT2pzOWFxOTNmVHk3dGZtOUxURTI5dmo3clRINGRyYTJhUys0NXExM2JuUjdZcXAyV21MeWZMeThzVGI4NnpHNTM2ZDBuT1N5NFdqMUUxenZNdmg5dGJmN1ptdTFIK2F5K0hoNGNETjR1M3I2Y25iN3FmQjVlZm41dC9mMzU2NTRmRHU2Ky91N3M3aytNL2g4VGxpc3JmUDdOemY0OHZmOGNUWTdzclY1Ny9QNTQrczJZZWZ6V0dEd1c2T3lPam82TFBKNXMzVzZkYmQ1bnVYemNIWDhKYXgzYS9JNkorejA3L0szZUxxOHFuQTRwR3UyM21aME0vYzY3TEw2Ly8vL3lINUJBRUFBRDhBTEFBQUFBQVFBQkFBQUFhQ3dKOXdTQ3dhajBpaXdaQWM1bUFmU2FVNUtEMFNrRXR5UkNzaEZyeFpha29NblNnMDJ5ZWcydGdXQmFLbTRGRG9lZ09LN3dNSkZEc29QZ2taSWdvY0t4RVJSakljT3pjYkR6VVFEQk1aUlJvR0N4Y0VVUzRUSkJaR0poSXVCQXNNTFN3eFJ3STRCUTBXQVFBQ0FnZEhJQ0FlSVNFZEJ4Z05SdzBlSFJnSEwwMU5RUUE3IiBhbHQ9IiI+PC9hPgo8Zm9ybSBhY3Rpb249Imh0dHA6Ly9iYXlpbWcuY29tL3VwbG9hZCIgbmFtZT0idXBsb2FkIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPgoJCTxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9iYXlpbWdfY29tJykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX2JheWltZ19jb20nKSIgb25jaGFuZ2U9InNldFJlYWR5MignYnRuX2JheWltZ19jb20nLCB0aGlzKSI+CgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPgoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2JheWltZ19jb20iIGNsYXNzPSJidG4iPmJheWltZy5jb208L2E+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPgoJPGlucHV0IGNsYXNzPSJuIiB0eXBlPSJ0ZXh0IiBuYW1lPSJjb2RlIiB2YWx1ZT0idXBsb2FkZXIiPgoJPGlucHV0IGNsYXNzPSJuIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWdzIiB2YWx1ZT0idXBsb2FkZXIiPgkKCTxpbnB1dCBjbGFzcz0ibiIgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlc2l6ZSI+Cgk8aW5wdXQgY2xhc3M9Im4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvZmZlbnNpdmUiPgkKPC9mb3JtPgo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9ImltYWdlc2hhY2siPjxkaXY+PGEgaHJlZj0iaHR0cDovL3d3dy5pbWFnZXNoYWNrLnVzLyI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU1RZkFLczlGbWx0VEtpV0s0WjJIc3UzSFJVWUhYWitkajVIUHE2QkZjM015cVpQR1VaalRPWEJFK3JvS3EzYzdkNmJGREU0TmxwWlY4UmhFOXUySnRPSkV1cThIRU0zSnFTbWwvelVGWkU0SUlna0d1U3FGUFRIR1pRckZHTlBKT3JzOFNINUJBRUFBQjhBTEFBQUFBQVFBQkFBQUFXZzRDY21seEVFeGhWNG5wRjhGeHNNUk5NUWczQmRnbmNkRzg0RVF5UUtBZzZIeVJPaFBDaEJEb2NBT1VDdWhVRUVzZGxVT01TSnBVQ0daQTBlNkpmSThFQVdpNE5GOElFb0pHb09BK0d4K0JFVk1CWVpBSGhlRXdJREhseUJNQWNlaEhnVEV3UUVGUnNUSWlJUmtCMkZEeE5nUXBvZkNSQVpIYWwzRkY4Y3BJS29xWjZHcng4Umc2a2FxWVcxdHBBYXdNQUF2YllXd2JyRHhCRVJHYzEzSVFBNyI+PC9hPg0KPGZvcm0gYWN0aW9uPSJodHRwOi8vd3d3LmltYWdlc2hhY2sudXMvaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4NCgk8aW5wdXQgdmFsdWU9IjEwNDg1NzYiIG5hbWU9Ik1BWF9GSUxFX1NJWkUiIHR5cGU9ImhpZGRlbiI+DQoJPGlucHV0IHZhbHVlPSJibGFuayIgbmFtZT0idHlwZSIgdHlwZT0iaGlkZGVuIj4NCgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4NCgkJPGlucHV0IG5hbWU9ImZpbGV1cGxvYWQiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX2ltYWdlc2hhY2tfdXMnKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5faW1hZ2VzaGFja191cycpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9pbWFnZXNoYWNrX3VzJywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2ltYWdlc2hhY2tfdXMiIGNsYXNzPSJidG4iPkltYWdlc2hhY2sudXM8L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPGxpIGlkPSJpZm9sZGVyIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9lbHYxcy5pZm9sZGVyLnJ1LyI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQUxNQUFBRUJSTWZiOElxUm53TW5oZVB0OXlsZHI4ck4xV3B5Z3haSW9lTGs2cXF2dXVUbTdKSzI0T3JzOFFBQUFBQUFBQ0g1QkFBQUFBQUFMQUFBQUFBUUFCQUFBQVFtc01sSnE3MDQ2ODI3LzBqUkFVUEFaSXRBTW9SNUpjS3h0dWRseEtTYkdZb1Fmc0NnSlFJQU93PT0iPjwvYT4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL3VwbC5zdGcyMy5pZm9sZGVyLnJ1Lz9zZXJpYWw9ZjNkZjhjOTdjMmRkZmVkNjQ5YWYzNmIzYzFjNmNlNjMiIG5hbWU9InRoZXVwbG9hZGZvcm0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgdGFyZ2V0PSJfYmxhbmsiPg0KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPg0KCQk8aW5wdXQgbmFtZT0iZmlsZW5hbWUiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX2lmb2xkZXJfcnUnKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5faWZvbGRlcl9ydScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9pZm9sZGVyX3J1JywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2lmb2xkZXJfcnUiIGNsYXNzPSJidG4iPmlGb2xkZXIucnU8L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBuYW1lPSJ1cGxvYWRfcGFyYW1zIiB2YWx1ZT0iYmYwYWYzNTdmOWY0NzFkODYwNDZmMGQzMjQ2ZTg0ZGExOTVlNzMyYzZiNjRjNTRjZDkyODExYmZmYTcxYzExN2QzMjY0ZjQ4N2EwNjRhYTJmNzRiOTgxMGM4MGZlZDc5N2RhNTY2Y2Q2MTczNzNhNiIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0iY2xvbmUiIHZhbHVlPSJlbHYxcy5pZm9sZGVyLnJ1IiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJwcm9ncmVzc19iYXIiIHZhbHVlPSJmM2RmOGM5N2MyZGRmZWQ2NDlhZjM2YjNjMWM2Y2U2MyIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0idXBsb2FkX2hvc3QiIHZhbHVlPSJzdGcyMy5pZm9sZGVyLnJ1IiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJNQVhfRklMRV9TSVpFIiB2YWx1ZT0iMTA0ODU3NjAwIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0ic2hvd19wcm9ncmVzc19iYXIiIHZhbHVlPSIwIiB0eXBlPSJjaGVja2JveCI+DQoJPGlucHV0IGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9InNsaWwiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3NsaWwucnUvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFkQUJVVkZUUTBNek0wTkRRek5CVVdGWDkvZ0JVV0ZuK0FnSUNBZ0tlbnBzdkx6SCtBZjRDQWY4ekx5MzkvZnhZV0Zzdkx5eFVWRmxoWVdUUXpNNEIvZ0JZV0ZhZW1wNEIvZnhZVkZxZW5welEwTkZoWVdBQUFBUC8vL3dBQUFBQUFBQ0g1QkFFQUFCMEFMQUFBQUFBUUFCQUFBQVZoWUNlT1pHbWVwNktZRFZSbVNaYTk4MWpjMStHUXh6SnV3Q0R3dHhrTk5KM0FvS09aakRSSVVVUmtNSWdBSXdPMnhPR012SjJ1Q053QlBFWUVUS2VDSlJCR0FzRW9vS0VManRIT2tBaVVGRWNVUGlRSURBd0lKVEVtRmpVb2pZNG1JUUE3Ij48L2E+DQo8Zm9ybSBhY3Rpb249Imh0dHA6Ly96YWxpbC5ydS91cGxvYWQvIiBuYW1lPSJzZW5kZm9ybSIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQ9IiIgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9zbGlsX3J1JykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX3NsaWxfcnUnKSIgb25jaGFuZ2U9InNldFJlYWR5KCdidG5fc2xpbF9ydScsIHRoaXMpIiB0eXBlPSJmaWxlIj4NCgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9zbGlsX3J1IiBjbGFzcz0iYnRuIj5zbGlsLnJ1PC9hPg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0Ij4NCjwvZm9ybT4NCjwvZGl2PjwvbGk+DQoNCjxsaSBpZD0iZHVtcCI+PGRpdj48YSBocmVmPSJodHRwOi8vZHVtcC5ydS8iIHJlbD0ibm9mb2xsb3ciPjxpbWcgYWx0PSIiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFOVS9BSVBRNndHaDBsU3hBYlRkazFPd0FIek42bksrTFhYSzVnT2YwUnlwMmNYa3FVUzUzbWE3SEcyOUp3V2gxV0hFNUJTbTFxRFVjenExM1Z5MkRYckNPd1NnMDFHeUFRU2cwVGV5MjczaW5YUENNeWV2MlFXZjA5anR4SnJSYkhmTjVsS3dBZ0tnejZ6aDg4N291TG5pMnJIYmlUKzEyNmpaZnNMbHBjcmxycUxlNW4vUDZLcmY3OS94eTlYc3Zwdlk3Uyt5M0Zhd0FWT3lBS2ZjN2dTZjFWZTFDUU9lMW9USFJ0M3V5azY5NGIzbThyL2tvUWFpMDUzVmNtVzNGLy8vL3lINUJBRUFBRDhBTEFBQUFBQVFBQkFBQUFhTXdKOVFxQnNhajhQUERNbjhBUzZycHZDUXVBUWNJWXlxcERnbUtyUUtBc0dCUkEyZW9RUlJDVWtXbGR3UUo0Z0lMdzZiNkZlSUdtOENJejhWRnd0Q0xFZzdBZzAvTUFnUFVpNFdBaDB2RGlaSUtFSVpCQVFEUHdzOFJ5a0dQeTArQXA1Q0VKQkNKeUFNRkJZeEZqVkdHeUlEREFLcE1ha1RYVVlISkQwVEJBSXlCblpTUHcwYXpFY1VTRUVBT3c9PSI+PC9hPg0KPGZvcm0gYWN0aW9uPSJodHRwOi8vZHVtcC5ydTo4MDgwL2NnaS1iaW4vdXVfdXBsb2FkLnBsP3RtcF9zaWQ9YmUxOTMxMjQ4ZTg0NDg4OTU2MmRmZGFkZWI1OThlZDAmYW1wO2NvbmZpZ19maWxlPXV1X2RlZmF1bHRfY29uZmlnIiBuYW1lPSJmb3JtX3VwbG9hZCIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiB0YXJnZXQ9Il9ibGFuayI+DQoJPGlucHV0IG5hbWU9InVwbG9hZF9yYW5nZSIgdmFsdWU9IjEiIHR5cGU9ImhpZGRlbiI+DQoJPGlucHV0IG5hbWU9Im5vX3NjcmlwdCIgdmFsdWU9IjEiIHR5cGU9ImhpZGRlbiI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJ1cGZpbGVfMCIgY2xhc3M9ImZpbGUiIHNpemU9IjEiIHJlcXVpcmVkPSIiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fZHVtcF9ydScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9kdW1wX3J1JykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX2R1bXBfcnUnLCB0aGlzKSIgdHlwZT0iZmlsZSI+DQoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4NCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fZHVtcF9ydSIgY2xhc3M9ImJ0biI+ZHVtcC5ydTwvYT4NCgkJPC9kaXY+DQoJPC9kaXY+DQoJPGlucHV0IGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9InJhcGlkc2hhcmUtY29tIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9yYXBpZHNoYXJlLmNvbS8iIHJlbD0ibm9mb2xsb3ciPjxpbWcgYWx0PSIiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFMTUFBQUVCUk1mYjhJcVJud01uaGVQdDl5bGRyOHJOMVdweWd4WklvZUxrNnFxdnV1VG03SksyNE9yczhRQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBQVFBQkFBQUFRbXNNbEpxNzA0NjgyNy8walJBVVBBWkl0QU1vUjVKY0t4dHVkbHhLU2JHWW9RZnNDZ0pRSUFPdz09Ij48L2E+DQo8Zm9ybSBhY3Rpb249Imh0dHA6Ly9yczY1bDMucmFwaWRzaGFyZS5jb20vY2dpLWJpbi91cGxvYWQuY2dpP3JzdXBsb2FkaWQ9MTQxNTQ5MDU1NTYwMjk3NzA1IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJ1bCIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+DQoJPCEtLSA8aW5wdXQgbmFtZT0ibWlycm9yIiB0eXBlPSJyYWRpbyI+TGV2ZWwoMykgPGlucHV0IGNoZWNrZWQgbmFtZT0ibWlycm9yIiB0eXBlPSJyYWRpbyI+VGVsaWEgPGlucHV0IG5hbWU9Im1pcnJvciIgdHlwZT0icmFkaW8iPiAtLT4NCgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4NCgkJPGlucHV0IG5hbWU9ImZpbGVjb250ZW50IiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQ9IiIgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9yYXBpZHNoYXJlX2NvbScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9yYXBpZHNoYXJlX2NvbScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9yYXBpZHNoYXJlX2NvbScsIHRoaXMpIiB0eXBlPSJmaWxlIj4NCgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9yYXBpZHNoYXJlX2NvbSIgY2xhc3M9ImJ0biI+UmFwaWRzaGFyZS5jb208L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPCEtLWxpIGlkPSJ1cGxvYWQyIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly93d3cudXBsb2FkMi5uZXQvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1BQUFFQlJNZmI4SXFSbndNbmhlUHQ5eWxkcjhyTjFXcHlneFpJb2VMazZxcXZ1dVRtN0pLMjRPcnM4UUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBUW1zTWxKcTcwNDY4MjcvMGpSQVVQQVpJdEFNb1I1SmNLeHR1ZGx4S1NiR1lvUWZzQ2dKUUlBT3c9PSI+PC9hPgo8Zm9ybSBhY3Rpb249Imh0dHA6Ly93d3c1LnVwbG9hZDIubmV0L3VwbG9hZC5waHAiIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1BWF9GSUxFX1NJWkUiIHZhbHVlPSIyNzAwMDAwMCI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0idXBsb2FkIj4KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPgoJCTxpbnB1dCBuYW1lPSJmaWxlIiB0eXBlPSJmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl91cGxvYWQyX25ldCcpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl91cGxvYWQyX25ldCcpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl91cGxvYWQyX25ldCcsIHRoaXMpIj4KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fdXBsb2FkMl9uZXQiIGNsYXNzPSJidG4iPlVwbG9hZDIubmV0PC9hPgoJCTwvZGl2PgoJPC9kaXY+Cgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj4KPC9mb3JtPgo8L2Rpdj48L2xpLS0+DQoNCjwhLS1saSBpZD0iZWdvc2hhcmUiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3d3dy5lZ29zaGFyZS5jb20vIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1KQVA4QUFLcXFxb2lJaU4zZDNVUkVSSGQzZC8vLy81bVptUUFBQVAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFRQUJBQUFBUlhNTW1KQ3BvWVYzTE11Vm15ZGNOZ2VLQlljRVZibklCSFhFZnAzZ2ZSQ2dnU2xBTlhiamREZkh6QllVRlE1Q0Y3bkVPdXgrd2RmNzFzRmVIRUlxSlRidkU2eUZLYlBTKzRXUlE5emRzTVZCb09VY3oydkQwQ0FEcz0iPjwvYT4KPGZvcm0gYWN0aW9uPSJodHRwOi8vd3d3LmVnb3NoYXJlLmNvbS8iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgdGFyZ2V0PSJfYmxhbmsiPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9InRydWUiIG5hbWU9InVwbG9hZCI+Cgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4KCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9lZ29zaGFyZV9jb20nKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5fZWdvc2hhcmVfY29tJykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX2Vnb3NoYXJlX2NvbScsIHRoaXMpIj4KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fZWdvc2hhcmVfY29tIiBjbGFzcz0iYnRuIj5FZ29zaGFyZS5jb208L2E+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPgo8L2Zvcm0+CjwvZGl2PjwvbGktLT4NCg0KPGxpIGlkPSJzZW5kc3BhY2UiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3d3dy5zZW5kc3BhY2UuY29tLyIgcmVsPSJub2ZvbGxvdyI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQUxNQUFBRUJSTWZiOElxUm53TW5oZVB0OXlsZHI4ck4xV3B5Z3haSW9lTGs2cXF2dXVUbTdKSzI0T3JzOFFBQUFBQUFBQ0g1QkFBQUFBQUFMQUFBQUFBUUFCQUFBQVFtc01sSnE3MDQ2ODI3LzBqUkFVUEFaSXRBTW9SNUpjS3h0dWRseEtTYkdZb1Fmc0NnSlFJQU93PT0iPjwvYT4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL2ZzMDJ1LnNlbmRzcGFjZS5jb20vcHJvY2Vzc3VwbG9hZC5odG1sIiBuYW1lPSJ1cGxvYWQiIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgdGFyZ2V0PSJfYmxhbmsiPg0KCTxpbnB1dCBuYW1lPSJNQVhfRklMRV9TSVpFIiB2YWx1ZT0iMzE0NTcyODAwIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJVUExPQURfSURFTlRJRklFUiIgdmFsdWU9IjIwODI3NzkxOTUuMTE3NjI4OTIxMy41NDVFMDUzOC4xNS4wIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJERVNUSU5BVElPTl9ESVIiIHZhbHVlPSIxMCIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0ianNfZW5hYmxlZCIgdmFsdWU9IjAiIHR5cGU9ImhpZGRlbiI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJmaWxlXzAiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX3NlbmRzcGFjZV9jb20nKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5fc2VuZHNwYWNlX2NvbScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9zZW5kc3BhY2VfY29tJywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX3NlbmRzcGFjZV9jb20iIGNsYXNzPSJidG4iPnNlbmRzcGFjZS5jb208L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPGxpIGlkPSJyYWRpa2FsIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9mb3RvLnJhZGlrYWwucnUvIiByZWw9Im5vZm9sbG93IiBsYW5nPSJydSI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU1RZkFBNFVFemhtSUZsWldjckt5amMzTjB4cFBTb3FLam82T3FPam83Mit2a3hVU1Q0K1BnMDFTUmhnaFI5RldWZXdLSUNBZ0RsU1lOWFYxVWhNUlpXWWs0aUxqUnMxRFY1ZVhsR2pKbVZsWlJsa2kxcGFXMWl4S1JwbmpqTXpNLy8vL3lINUJBRUFBQjhBTEFBQUFBQVFBQkFBQUFWMjRDZCtWY1JjWXpvbVR0TnBLTEI0M21HSWJLZkRuNWRDbTQ5RHQ0c2RhSVFid0VYa0dTQUF3VUFFSUJaN0lnUkI4V0ZZWHlpSTZuUFltTS9qdEVyQmJrOCtnNk5nbE1Gdzd2Y0FHYUdxNCs4RlBUUWVCQXNmZm5nWUZEMThLWWdjRDRHTWZYYVFBUklpQjJOK0dBV1lhajBXQUFBcElRQTciPjwvYT4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL2ZvdG8ucmFkaWthbC5ydS9hY3Rpb24uYXNweCIgbmFtZT0idXBsb2FkIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4NCgk8aW5wdXQgbmFtZT0idXBsb2FkIiB2YWx1ZT0ieWVzIiB0eXBlPSJoaWRkZW4iPg0KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPg0KCQk8aW5wdXQgbmFtZT0iRiIgY2xhc3M9ImZpbGUiIHNpemU9IjEiIHJlcXVpcmVkPSIiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fcmFkaWthbF9ydScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9yYWRpa2FsX3J1JykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX3JhZGlrYWxfcnUnLCB0aGlzKSIgdHlwZT0iZmlsZSI+DQoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4NCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fcmFkaWthbF9ydSIgY2xhc3M9ImJ0biI+0KDQsNC00LjQutCw0Lst0KTQvtGC0L48L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KCTxpbnB1dCBuYW1lPSJDUCIgdmFsdWU9InllcyIgY2hlY2tlZD0iY2hlY2tlZCIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0iVk0iIHZhbHVlPSIyMDAiIHR5cGU9ImhpZGRlbiI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9ImxldGl0Yml0Ij48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9sZXRpdGJpdC5uZXQvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1BQUFFQlJNZmI4SXFSbndNbmhlUHQ5eWxkcjhyTjFXcHlneFpJb2VMazZxcXZ1dVRtN0pLMjRPcnM4UUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBUW1zTWxKcTcwNDY4MjcvMGpSQVVQQVpJdEFNb1I1SmNLeHR1ZGx4S1NiR1lvUWZzQ2dKUUlBT3c9PSI+PC9hPg0KPGZvcm0gbmFtZT0iRjEiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaHR0cDovL3IyLmxldGl0Yml0Lm5ldC9jZ2ktYmluL2hvbWVyL3VwbG9hZC5jZ2k/dXBsb2FkX2lkPSIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJjaGVja2JveCIgdmFsdWU9ImNoZWNrYm94IiB0eXBlPSJjaGVja2JveCI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJhY2NlcHQiIHZhbHVlPSIwIiBjaGVja2VkPSJjaGVja2VkIiB0eXBlPSJjaGVja2JveCI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJteWZpbGUiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX2xldGl0Yml0X25ldCcpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9sZXRpdGJpdF9uZXQnKSIgb25jaGFuZ2U9InNldFJlYWR5KCdidG5fbGV0aXRiaXRfbmV0JywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2xldGl0Yml0X25ldCIgY2xhc3M9ImJ0biI+bGV0aXRiaXQubmV0PC9hPg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0Ij4NCgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InNlbGZfZGVzYyIgdmFsdWU9InVwbG9hZGVyLXBhbmVsLmNvbSIgdHlwZT0idGV4dCI+DQoJPGlucHV0IG5hbWU9Ik1BWF9GSUxFX1NJWkUiIHZhbHVlPSIxMjAwMDAwMDAwIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJ1aWQiIHZhbHVlPSIxMjMiIHR5cGU9ImhpZGRlbiI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9ImlwaWN0dXJlIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9pcGljdHVyZS5ydS8iIHJlbD0ibm9mb2xsb3ciPjxpbWcgYWx0PSIiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFNUUFBUC8vLzRDQWdNM055elF5THhVU0Roc1lGS1drbzVtWWwzVnpjYkt4c0JrV0VrQkFRQ0lmRy96TzN1NFdZZ0FBQUx5OHVzVER3cXFwcUxHd3NPYm01bmw0ZHZWNnBiQ3ZyWStPakhOeGIycG9abHBYVk1uSng5emMzQjRiRjM1OGVpSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBVjQ0QktNWkZtS0FOQllEY0FaaHNTbHdKaGFqZ1ZrWHFFb21wUk54UUlnQ2hmQlJoR3BCV2cwaEVJQWlCQU96aFJra0RCT1hRUk1GcEFnR0x6VU1uWllQaU04aU0rQTBSbTNqWXo4WUNKOGtzMUdCUkFVVUd5QVVsU0ZmaE9IWHc4MGhtNEZpWkIrQ1FWbkZSNVVqNDlEVUtDUUlpYWtJd3NoQURzPSI+PC9hPg0KPGZvcm0gYWN0aW9uPSJodHRwOi8vaXBpY3R1cmUucnUvVXBsb2FkLyIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJ1cGxvYWQiIHRhcmdldD0iX2JsYW5rIj4NCgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9Im9wdGltaXplIiB0eXBlPSJjaGVja2JveCI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJ0aHVtYl9yZXNpemVfb24iIGNoZWNrZWQ9ImNoZWNrZWQiIHR5cGU9ImNoZWNrYm94Ij4NCgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InRodW1iX3Jlc2l6ZSIgc2l6ZT0iOCIgdmFsdWU9IjIwMCIgdHlwZT0idGV4dCI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJzdHJpbmdfc21hbGxfb24iIHR5cGU9ImNoZWNrYm94Ij4JDQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJtZXRob2QiIHZhbHVlPSJmaWxlIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0idXBsb2FkdHlwZSIgdmFsdWU9IjEiIHR5cGU9InJhZGlvIj4NCgk8bGFiZWwgY2xhc3M9Im4iPtCd0LDQtNC/0LjRgdGMINC90LAg0L/RgNC10LLRjNGOIDxpbnB1dCBjbGFzcz0ibiIgc2l6ZT0iMTMiIG5hbWU9InN0cmluZ19zbWFsbCIgdmFsdWU9IiIgdHlwZT0idGV4dCI+PC9sYWJlbD4NCgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4NCgkJPGlucHV0IG5hbWU9InVzZXJmaWxlIiBzaXplPSIxIiBjbGFzcz0iZmlsZSIgcmVxdWlyZWQ9IiIgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9pcGljdHVyZV9ydScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9pcGljdHVyZV9ydScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9pcGljdHVyZV9ydScsIHRoaXMpIiB0eXBlPSJmaWxlIj4NCgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9pcGljdHVyZV9ydSIgY2xhc3M9ImJ0biI+aVBpY3R1cmUucnU8L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPGxpIGlkPSJ6c2hhcmUiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3pzaGFyZS5uZXQvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1BQUFFQlJNZmI4SXFSbndNbmhlUHQ5eWxkcjhyTjFXcHlneFpJb2VMazZxcXZ1dVRtN0pLMjRPcnM4UUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBUW1zTWxKcTcwNDY4MjcvMGpSQVVQQVpJdEFNb1I1SmNLeHR1ZGx4S1NiR1lvUWZzQ2dKUUlBT3c9PSI+PC9hPg0KPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSJodHRwOi8vNjkuODAuMjU1LjEzMC91cGxvYWQucGhwIiBtZXRob2Q9InBvc3QiIG5hbWU9InVwbG9hZCIgdGFyZ2V0PSJfYmxhbmsiPg0KCTxpbnB1dCB2YWx1ZT0iMSIgbmFtZT0iVE9TIiBjaGVja2VkPSJjaGVja2VkIiBjbGFzcz0ibiIgdHlwZT0iY2hlY2tib3giPg0KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPg0KCQk8aW5wdXQgbmFtZT0iZmlsZSIgc2l6ZT0iMSIgY2xhc3M9ImZpbGUiIHJlcXVpcmVkPSIiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fenNoYXJlJykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX3pzaGFyZScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl96c2hhcmUnLCB0aGlzKSIgdHlwZT0iZmlsZSI+DQoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4NCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fenNoYXJlIiBjbGFzcz0iYnRuIj56c2hhcmUubmV0PC9hPg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0Ij4NCjwvZm9ybT4NCg0KPCEtLTxsaSBpZD0iZnJlZXNoYXJlIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9mcmVlc2hhcmUudXMvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyI+ZnJlZXNoYXJlLnVzPC9hPgo8Zm9ybSBuYW1lPSJ1cGxvYWQiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaHR0cDovL2ZyZWVzaGFyZS51cy91cGxvYWQxLnBocCIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+Cgk8aW5wdXQgY2xhc3M9Im4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9InVwbG9hZCIgbmFtZT0iYWN0aW9uIj4KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0idXBsb2FkIiB0eXBlPSJyYWRpbyIgdmFsdWU9ImZpbGUiIGNoZWNrZWQ+Cgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InVwbG9hZCIgdHlwZT0icmFkaW8iIHZhbHVlPSJ1cmwiPgoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+CgkJPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGVuYW1lIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9mcmVlc2hhcmVfdXMnKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5fZnJlZXNoYXJlX3VzJykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX2ZyZWVzaGFyZV91cycsIHRoaXMpIj4KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fZnJlZXNoYXJlX3VzIiBjbGFzcz0iYnRuIj5mcmVlc2hhcmUudXM8L2E+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0icHVibGljIiB0eXBlPSJyYWRpbyIgdmFsdWU9IjEiIGNoZWNrZWQ+Cgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InB1YmxpYyIgdHlwZT0icmFkaW8iIHZhbHVlPSIwIj4KCQo8L2Zvcm0+CjwvZGl2PjwvbGk+LS0+DQoNCjwvZGl2PjwvbGk+PC91bD4NCg0KPHAgaWQ9InZlcnNpb24iPg0KCTxhIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vIj4NCgkJPHNwYW4+U3VwZXIgVXBsb2FkZXIgMC4yNiAoMTIuMDYuMjAwOCk8L3NwYW4+DQoJPC9hPg0KPC9wPg0KDQo8ZGl2IGNsYXNzPSJyb2JvdHMtbm9jb250ZW50Ij4NCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJZnVuY3Rpb24gc2hvd0Zvcm0ob2JqKSB7DQoJCWlmKCFvYmopIHJldHVybjsNCgkJb2JqLmNsYXNzTmFtZT0ndmlzaWJsZSc7DQoJCWlmKCFvYmouZm9ybSkgcmV0dXJuOw0KCQlvYmouZm9ybS5jbGFzc05hbWU9J3Zpc2libGUnfQ0KIA0KICBmdW5jdGlvbiBvbk92ZXJCdG4oYnRuKQ0KICB7DQogICAgaWYoYnRuKSANCiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2NvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kLWNvbG9yOiAjNmE5YmNkOycsIGZhbHNlKQ0KICAgICAgfQ0KICANCiAgZnVuY3Rpb24gb25PdXRCdG4oYnRuKQ0KICB7DQogICAgaWYoYnRuKQ0KICAgICAgYnRuLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnLCBmYWxzZSl9DQogIA0KICBmdW5jdGlvbiBvbk92ZXJGaWxlKGlkKQ0KICB7DQogICAgdmFyIGJ0biA9IGdldEJ0bihpZCk7DQogICAgb25PdmVyQnRuKGJ0bil9DQogIA0KICBmdW5jdGlvbiBvbk91dEZpbGUoaWQpDQogIHsNCg0KICAgIHZhciBidG4gPSBnZXRCdG4oaWQpOw0KICAgIG9uT3V0QnRuKGJ0bil9DQogIA0KICBmdW5jdGlvbiBzZXRSZWFkeShpZCwgZmlsZU9iaikNCiAgew0KICAgIHZhciBidG4gPSBnZXRCdG4oaWQpOw0KICAgIGlmKGJ0bikNCiAgICAgIGJ0bi5jbGFzc05hbWUgPSAnYnRucmVhZHknOw0KICAgICAgDQogICAgaWYoZmlsZU9iaikNCiAgICAgIGZpbGVPYmouZm9ybS5zdWJtaXQoKX0NCiAgDQogIGZ1bmN0aW9uIHNldFJlYWR5MihpZCwgZmlsZU9iaikNCiAgew0KICAgIHZhciBidG4gPSBnZXRCdG4oaWQpOw0KICAgIGlmKGJ0bikNCiAgICAgIGJ0bi5jbGFzc05hbWUgPSAnYnRucmVhZHknOw0KICAgICAgDQogICAgdmFyIGZvcm0gPSBmaWxlT2JqLmZvcm07DQogICAgaWYoZm9ybSkgIA0KICAgIHsNCiAgICAgIGZvcih2YXIgaSA9IGZvcm0uZWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pDQogICAgICB7DQogICAgICAgIGlmKGZvcm0uZWxlbWVudHNbaV0udGFnTmFtZSA9PSAnSU5QVVQnICYmIGZvcm0uZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0JykNCiAgICAgICAgew0KICAgICAgICAgIGZvcm0uZWxlbWVudHNbaV0uY2xpY2soKTsNCiAgICAgICAgICBicmVha30NCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBnZXRCdG4oaWQpDQogIHsNCiAgICBpZighaWQpDQogICAgICByZXR1cm47DQogICAgICANCiAgICB2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOw0KICAgIGlmKG9iaiAmJiBvYmoudGFnTmFtZSA9PSAnQScpDQogICAgew0KICAgICAgcmV0dXJuIG9ian0NCiAgICANCiAgICByZXR1cm4gbnVsbH0JDQoJPC9zY3JpcHQ+DQoNCjwvZGl2Pg0KPC9ib2R5PjwvaHRtbD4=");2) GISMETEO.RU: Погода Код:openWebPanel("Заголовок панели", "data:text/html;base64,PGh0bWw+PGhlYWQ+DQoNCjx0aXRsZT5HSVNNRVRFTy5SVTogz+7j7uTgPC90aXRsZT4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MSI+DQo8c3R5bGU+DQpib2R5LHRhYmxlLHRke2ZvbnQtZmFtaWx5OkFyaWFsLFNhbnMtc2VyaWY7IGZvbnQtc2l6ZToxM3B4O30NCi5iaWd7Zm9udC1mYW1pbHk6IEFyaWFsLFNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTdweDsgZm9udC13ZWlnaHQ6IGJvbGQ7fQ0KPC9zdHlsZT4NCjwvaGVhZD48Ym9keSBsaW5raWZ5dGltZT0iMTUiIGxpbmtpZmllZD0iMCIgbGlua2lmeWluZz0iZmFsc2UiIHRvcG1hcmdpbj0iMCIgbGVmdG1hcmdpbj0iMCIgdGV4dD0iIzAwMDAwMCIgdmxpbms9IiMwMDAwODAiIGFsaW5rPSIjZmYwMDAwIiBiZ2NvbG9yPSIjZmZmZmZmIiBsaW5rPSIjMDAwMDgwIiBtYXJnaW5oZWlnaHQ9IjAiIG1hcmdpbndpZHRoPSIwIj4NCg0KPHRhYmxlIHdpZHRoPSIyMjUiIGJvcmRlcj0iMCI+DQogIDx0Ym9keT48dHI+DQogICAgPHRkIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjMzM5OWZmIj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgIDx0Ym9keT48dHI+DQogICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYWxpZ249ImNlbnRlciIgYmdjb2xvcj0iI2ZmZmZmZiI+DQo8YSBocmVmPSJodHRwOi8vd3d3Lmdpc21ldGVvLnJ1Ij48Yj53d3cuZ2lzbWV0ZW8ucnU8L2I+PC9hPiAgICAgICAgDQogICAgICA8L3RyPg0KICAgIDwvdGJvZHk+PC90YWJsZT4NCiAgICA8L3RkPg0KICA8L3RyPg0KICAgICAgICA8L3Rib2R5PjwvdGFibGU+DQogICAgICAgIDwvdGQ+DQogICAgICA8L3RyPg0KICAgIDwvdGJvZHk+PC90YWJsZT4NCiAgICA8L3RkPg0KICA8L3RyPg0KICA8dHI+DQogICAgPHRkIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjMzM5OWZmIj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4NCiAgICAgIDx0Ym9keT48dHI+DQogICAgICAgIDx0ZCB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI2ZmZmZmZiI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMSI+DQogICAgICAgICAgPHRib2R5Pjx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iYmlnIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI2JiZTBmZiI+PGNlbnRlcj7P7uPu5OAg7+4g4+7w7uTg7DwvY2VudGVyPjwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNlMGUwZTAiPjxiPtDu8fHo/zwvYj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj4NCiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjQiPg0KICAgICAgICAgICAgIDx0Ym9keT48dHI+DQogICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjEwMCIgbm93cmFwPSJub3dyYXAiPiANCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI3NjEyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+PGI+zO7x6uLgPC9iPjwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNjA2My5odG0iIHRhcmdldD0iX3NlbGYiPjxiPtEuLc/l8uXw4fPw4zwvYj48L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjk4NjUuaHRtIiB0YXJnZXQ9Il9zZWxmIj7A4eDq4O08L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjI1NTAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7A8PXg7ePl6/zx6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNDg4MC5odG0iIHRhcmdldD0iX3NlbGYiPsDx8vDg9eDt/DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yOTgzOC5odG0iIHRhcmdldD0iX3NlbGYiPsHg8O3g8+s8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzQyMTQuaHRtIiB0YXJnZXQ9Il9zZWxmIj7B5evj7vDu5DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zMTUxMC5odG0iIHRhcmdldD0iX3NlbGYiPsHr4OPu4uX55e3x6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNjg5OC5odG0iIHRhcmdldD0iX3NlbGYiPsHw/+3x6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zMTk2MC5odG0iIHRhcmdldD0iX3NlbGYiPsLr4OTo4u7x8u7qPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM3MjI4Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+wuvg5Ojq4OLq4Oc8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc1MzIuaHRtIiB0YXJnZXQ9Il9zZWxmIj7C6+Dk6Ozo8DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNDU2MC5odG0iIHRhcmdldD0iX3NlbGYiPsLu6+Pu4/Dg5DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzAzNy5odG0iIHRhcmdldD0iX3NlbGYiPsLu6+7j5OA8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzQxMjIuaHRtIiB0YXJnZXQ9Il9zZWxmIj7C7vDu7eXmPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM2MDUyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+w+7w7e4twOvy4Onx6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNzIzNS5odG0iIHRhcmdldD0iX3NlbGYiPsPw7uft++k8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzc0NzAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7E5fDh5e3yPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI4NDQwLmh0bSIgdGFyZ2V0PSJfc2VsZiI+xerg8uXw6O3h8/DjPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI3MzQ3Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+yOLg7e7i7jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yODQxMS5odG0iIHRhcmdldD0iX3NlbGYiPsjm5eLx6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS85OTk5MC5odG0iIHRhcmdldD0iX3NlbGYiPsnu+Org8C3O6+A8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzA3MTAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7I8Orz8vHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI3NTk1Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+yuDn4O38PC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI2NzAyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+yuDr6O3o7ePw4OQ8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc3MDMuaHRtIiB0YXJnZXQ9Il9zZWxmIj7K4Ovz4+A8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzcxMTYuaHRtIiB0YXJnZXQ9Il9zZWxmIj7K4PDg9+Dl4vHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI5NjQyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+yuXs5fDu4u48L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjcxOTYuaHRtIiB0YXJnZXQ9Il9zZWxmIj7K6PDu4jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzMzMy5odG0iIHRhcmdldD0iX3NlbGYiPsru8fLw7uzgPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM0OTI5Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+yvDg8e3u5ODwPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI5NTc0Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+yvDg8e3u//Dx6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yODExNi5odG0iIHRhcmdldD0iX3NlbGYiPsrz5Pvs6uDwPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI4NjYxLmh0bSIgdGFyZ2V0PSJfc2VsZiI+yvPw4+DtPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM0MDA5Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+yvPw8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzYwOTYuaHRtIiB0YXJnZXQ9Il9zZWxmIj7K++f76zwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzkzMC5odG0iIHRhcmdldD0iX3NlbGYiPsvo7+X26jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNTkxMy5odG0iIHRhcmdldD0iX3NlbGYiPszg4+Dk4O08L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzcwMjEuaHRtIiB0YXJnZXQ9Il9zZWxmIj7M4Onq7u88L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzc0NzIuaHRtIiB0YXJnZXQ9Il9zZWxmIj7M4PXg9+rg6+A8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzcwNTQuaHRtIiB0YXJnZXQ9Il9zZWxmIj7M6O0uwu7k+zwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yMjExMy5odG0iIHRhcmdldD0iX3NlbGYiPszz8Ozg7fHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM3MjEyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+zeDr/Pfo6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yODUwNi5odG0iIHRhcmdldD0iX3NlbGYiPs3g4eXwLtfl6+37PC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1Lzk5OTQ2Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+zeDn8ODt/DwvYT4NCiAgICAgICAgICAgICAgPC90ZD48dGQgd2lkdGg9IjMiPiZuYnNwOw0KICAgICAgICAgICAgICA8L3RkPjx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjEwMCIgbm93cmFwPSJub3dyYXAiPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjM4NDguaHRtIiB0YXJnZXQ9Il9zZWxmIj7N5fTy5f7j4O3x6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yMzQ3MS5odG0iIHRhcmdldD0iX3NlbGYiPs3o5u3l4uDw8u7i8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc1NTMuaHRtIiB0YXJnZXQ9Il9zZWxmIj7NLs3u4uPu8O7kPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI2MTc5Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+ze7i4+7w7uQ8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzcwMDYuaHRtIiB0YXJnZXQ9Il9zZWxmIj7N7uLu8O7x8ejp8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjk2MzQuaHRtIiB0YXJnZXQ9Il9zZWxmIj7N7uLu8ejh6PDx6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yMzA3OC5odG0iIHRhcmdldD0iX3NlbGYiPs3u8Ojr/PHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI4Njk4Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+zuzx6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzkwNi5odG0iIHRhcmdldD0iX3NlbGYiPs7w5es8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzUxMjEuaHRtIiB0YXJnZXQ9Il9zZWxmIj7O8OXt4fPw4zwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzk2Mi5odG0iIHRhcmdldD0iX3NlbGYiPs/l7efgPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI4MjI1Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+z+Xw7Pw8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjI4MjAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7P5fLw7ufg4u7k8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzI1NDAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7P5fLw7u8uLcrg7PcuPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI2MjU4Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+z/Hq7uI8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzcwNTAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7P//Lo4+7w8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzQ3MzEuaHRtIiB0YXJnZXQ9Il9zZWxmIj7Q7vHy7uIt7eAtxC48L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc3MzEuaHRtIiB0YXJnZXQ9Il9zZWxmIj7Q/+fg7fw8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjg5MDAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7R4Ozg8OA8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc3NjAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7R4PDg7fHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM0MTcyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+0eDw4PLu4jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNjc4MS5odG0iIHRhcmdldD0iX3NlbGYiPtHs7uvl7fHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM3MDk5Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+0e736DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNDk0OS5odG0iIHRhcmdldD0iX3NlbGYiPtHy4OLw7u/u6/w8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjM4NDkuaHRtIiB0YXJnZXQ9Il9zZWxmIj7R8/Dj8/I8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjM4MDQuaHRtIiB0YXJnZXQ9Il9zZWxmIj7R++ry++Lq4PA8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc5NDcuaHRtIiB0YXJnZXQ9Il9zZWxmIj7S4Ozh7uI8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc0MDIuaHRtIiB0YXJnZXQ9Il9zZWxmIj7S4uXw/DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzg5MC5odG0iIHRhcmdldD0iX3NlbGYiPtLu6/z/8vLoPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI5NDMwLmh0bSIgdGFyZ2V0PSJfc2VsZiI+0u7s8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc3MTkuaHRtIiB0YXJnZXQ9Il9zZWxmIj7S8+vgPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI4MzY3Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+0v7s5e38PC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzMwODIzLmh0bSIgdGFyZ2V0PSJfc2VsZiI+0+vg7S3T5P08L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjc3ODYuaHRtIiB0YXJnZXQ9Il9zZWxmIj7T6/z/7e7i8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjg3MjIuaHRtIiB0YXJnZXQ9Il9zZWxmIj7T9OA8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzE3MzUuaHRtIiB0YXJnZXQ9Il9zZWxmIj7V4OHg8O7i8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjM5MzMuaHRtIiB0YXJnZXQ9Il9zZWxmIj7V4O3y+y3M4O3xLjwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNzU4MS5odG0iIHRhcmdldD0iX3NlbGYiPtfl4e7q8eDw+zwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yODY0Mi5odG0iIHRhcmdldD0iX3NlbGYiPtfl6//h6O3x6jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zMDc1OC5odG0iIHRhcmdldD0iX3NlbGYiPtfo8uA8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzQ4NjEuaHRtIiB0YXJnZXQ9Il9zZWxmIj7d6+jx8uA8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzIxNTAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7eLi3R4PXg6+jt8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjQ5NTkuaHRtIiB0YXJnZXQ9Il9zZWxmIj7f6vPy8eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjczMzEuaHRtIiB0YXJnZXQ9Il9zZWxmIj7f8O7x6+Di6/w8L2E+DQogICAgICAgICAgICAgIDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+DQogICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgPC90cj4NCiAgICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiNlMGUwZTAiPjxiPtHNwyDoIMHg6/Lo/yA8L2I+PC90ZD4NCiAgICAgICAgICA8L3RyPg0KICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTAwJSI+DQogICAgICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSI0Ij4NCiAgICAgICAgICAgICA8dGJvZHk+PHRyPg0KICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxMDAiIG5vd3JhcD0ibm93cmFwIj4gDQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNjg3MC5odG0iIHRhcmdldD0iX3NlbGYiPsDr7OAtwPLgPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM1MTg4Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+wPHy4O3gPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM4ODgwLmh0bSIgdGFyZ2V0PSJfc2VsZiI+wPj14OHg5DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNzg1MC5odG0iIHRhcmdldD0iX3NlbGYiPsHg6vM8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzgzNTMuaHRtIiB0YXJnZXQ9Il9zZWxmIj7B6Pjq5eo8L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMjY3MzAuaHRtIiB0YXJnZXQ9Il9zZWxmIj7C6Ov87f7xPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM4ODM2Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+xPP44O3h5TwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8zNzc4OS5odG0iIHRhcmdldD0iX3NlbGYiPsXw5eLg7TwvYT4NCiAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjMiPiZuYnNwOzwvdGQ+DQogICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjEwMCIgbm93cmFwPSJub3dyYXAiPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzMzNDUuaHRtIiB0YXJnZXQ9Il9zZWxmIj7K6OXiPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzMzODE1Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+yuj46O3l4jwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNjg1MC5odG0iIHRhcmdldD0iX3NlbGYiPszo7fHqPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzI2NDIyLmh0bSIgdGFyZ2V0PSJfc2VsZiI+0Ojj4DwvYT48YnI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS8yNjAzOC5odG0iIHRhcmdldD0iX3NlbGYiPtLg6+vo7e08L2E+PGJyPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvMzg0NTcuaHRtIiB0YXJnZXQ9Il9zZWxmIj7S4Pjq5e3yPC9hPjxicj4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vcGRhLmdpc21ldGVvLnJ1LzM3NTQ5Lmh0bSIgdGFyZ2V0PSJfc2VsZiI+0uHo6+jx6DwvYT48YnI+DQogICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgPC90cj4NCiAgICAgICAgICAgIDwvdGJvZHk+PC90YWJsZT4NCiAgICAgICAgICA8L3RkPg0KICAgICAgICAgIDwvdHI+DQoNCg0KICAgICAgPHRib2R5Pjx0cj4NCiAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIxIj4NCiAgICAgICAgICA8dGJvZHk+PHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJiaWciIHdpZHRoPSIxMDAlIiBiZ2NvbG9yPSIjYmJlMGZmIj48Y2VudGVyPsjt9O7w7OD26P88L2NlbnRlcj48L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIHdpZHRoPSIxMDAlIj4NCiAgICAgICAgICAgIC0gPGEgaHJlZj0iaHR0cDovL3BkYS5naXNtZXRlby5ydS9hYm91dC5odG0iIHRhcmdldD0iX3NlbGYiPs4g7/Du5ery5TwvYT48YnI+DQogICAgICAgICAgICAtIDxhIGhyZWY9Imh0dHA6Ly9wZGEuZ2lzbWV0ZW8ucnUvIiB0YXJnZXQ9Il9zZWxmIj5wZGEuZ2lzbWV0ZW8ucnU8L2E+PGJyPg0KICAgICAgICAgICAgLSA8YSBocmVmPSJodHRwOi8vd2FwLmdpc21ldGVvLnJ1LyIgdGFyZ2V0PSJfc2VsZiI+d2FwLmdpc21ldGVvLnJ1PC9hPg0KICAgICAgICAgICA8L3RkPg0KICAgICAgICAgIDwvdHI+DQogICAgICAgIDwvdGJvZHk+PC90YWJsZT4NCiAgICAgICAgPC90ZD4NCiAgICAgIDwvdHI+DQogICAgPC90Ym9keT48L3RhYmxlPg0KICAgIDwvdGQ+DQogIDwvdHI+DQogIDx0cj4NCiAgICA8dGQgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiMzMzk5ZmYiPjx0YWJsZSB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iI2ZmZmZmZiIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjAiPg0KPC90YWJsZT4NCiAgICA8L3RkPg0KICA8L3RyPg0KICA8dHI+DQoNCiAgICAgIDwvdHI+DQogICAgPC90Ym9keT48L3RhYmxlPg0KICAgIDwvdGQ+DQogIDwvdHI+DQo8L3Rib2R5PjwvdGFibGU+DQo8L2JvZHk+PC9odG1sPg=="); | ||||||||
| Infocatcher > 18-03-2009 13:56:13 | ||||||||
Код: case 0: if (document.getElementById('sidebar-box').getAttribute('sidebarcommand')) // close sidebar
toggleSidebar();
else // open in sidebar
openWebPanel(this.tooltipText, this.url2xul);
break;заменить на Код: openWebPanel(this.tooltipText, this.url2xul); // open in sidebar
break;
Секция «код»: Код:openWebPanel("SuperUploader", "data:text/html;base64,PCFET0NUWVBFIEhUTUwgU1lTVEVNICJodHRwOi8vdGFnc291cC5jb20vZHRkLyI+CjxodG1sIGxhbmc9ImVuIj48aGVhZD4NCgoKCTx0aXRsZT5TdXBlciBVcGxvYWRlcjwvdGl0bGU+DQoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPg0KCTxtZXRhIG5hbWU9IkRlc2NyaXB0aW9uIiBjb250ZW50PSJTdXBlciBVcGxvYWRlciBpcyBhIHBhbmVsIHRvIHF1aWNrbHkgdXBsb2FkIGZpbGVzIHRvIGltYWdlc2hhc2sudXMsIHJhcGlkc2hhcmUuY29tIGFuZCBzb21lIG90aGVyIGZpbGUtc2hhcmluZyBzZXJ2aWNlcy4iPg0KCTxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iaHR0cDovL3VwbG9hZGVyLXBhbmVsLmNvbS9pL3VwMy5naWYiPg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJKiB7bWFyZ2luOjA7IHBhZGRpbmc6MH0NCglodG1sIHtiYWNrZ3JvdW5kOiNFQUVDRjE7IGNvbG9yOiMzMzM7fQ0KCWJvZHkge2ZvbnQ6IG5vcm1hbCBub3JtYWwgbm9ybWFsIC43NWVtLzEuOGVtIEFyaWFsLFRhaG9tYSxzYW5zLXNlcmlmO30NCglpbWcge2JvcmRlcjowfQ0KCXVsIHttYXJnaW4tbGVmdDo0cHg7fQ0KCWxpIHtsaXN0LXN0eWxlLXR5cGU6bm9uZX0NCgloMSB7Zm9udC1zaXplOjEuNWVtfQ0KCWEgc3BhbiB7ZGlzcGxheTpibG9jazsgd2lkdGg6MTUwcHg7IG1hcmdpbjowIGF1dG87IHBhZGRpbmc6LjRlbSAwIC40ZW0gNHB4OyBmb250LXdlaWdodDo1MDB9DQoJI3ZlcnNpb24gc3BhbiB7cGFkZGluZy1sZWZ0OjhweH0NCglkaXYge2Rpc3BsYXk6YmxvY2s7IHdpZHRoOjE2MnB4OyBtYXJnaW46MCBhdXRvfQ0KCS5uIHtkaXNwbGF5Om5vbmV9DQoJOnRhcmdldCB7YmFja2dyb3VuZDojOGJjYzZhO30NCglkaXYuZmlsZWlucHV0cyB7cG9zaXRpb246cmVsYXRpdmU7IHdpZHRoOiAxNDRweDsgaGVpZ2h0OiAyNHB4OyBvdmVyZmxvdzogaGlkZGVuOyBtYXJnaW4tbGVmdDowfQ0KCWRpdi5mYWtlZmlsZSB7cG9zaXRpb246YWJzb2x1dGU7IHRvcDowcHg7IGxlZnQ6MHB4OyB6LWluZGV4OjF9DQoJZGl2LmZha2VmaWxlIGEge3BhZGRpbmc6IDAgNHB4OyB9DQoJaW5wdXQuZmlsZSB7cG9zaXRpb246YWJzb2x1dGU7IHJpZ2h0OjA7IGRpc3BsYXk6YmxvY2s7IHdpZHRoOjMwMHB4OyBmb250LXNpemU6M2VtICFpbXBvcnRhbnQ7IGhlaWdodDozMHB4OyB0ZXh0LWFsaWduOiByaWdodDsgb3BhY2l0eTogMDsgLW1vei1vcGFjaXR5OjA7IGZpbHRlcjphbHBoYShvcGFjaXR5OiAwKTsvKiovei1pbmRleDogMn0NCg0KCS5qcyAuc3VibWl0IHtkaXNwbGF5Om5vbmV9DQoNCgkvKiBMaW5rcyAqLwkNCglhIHtkaXNwbGF5OmJsb2NrOyBjb2xvcjojMDM2OyB0ZXh0LWRlY29yYXRpb246bm9uZTsgbWFyZ2luLXJpZ2h0OjFweH0NCgkuZmFrZWZpbGUgYSB7cGFkZGluZy1ib3R0b206LjFlbX0NCgkjdmVyc2lvbiBhIHtjb2xvcjojYTNiOGNjfQ0KCWE6aG92ZXIsIGgxOmhvdmVyIGEge2NvbG9yOiNmNGY1ZjggIWltcG9ydGFudH0NCglhOmhvdmVyLCBoMTpob3ZlciB7YmFja2dyb3VuZDojNmE5YmNjfQ0KCWEuYnRuLCBhLmJ0bnJlYWR5IHtmb250LXNpemU6IDlwdDsgY3Vyc29yOiBwb2ludGVyOyBkaXNwbGF5OiBibG9jazsgd2lkdGg6IDE0MHB4OyBoZWlnaHQ6IDI0cHg7IG1hcmdpbjogMnB4IDAgMCAycHh9ICANCglhLmJ0bnJlYWR5IHtjb2xvcjogI2ZmZjsgYmFja2dyb3VuZDogIzhiY2Q2YX0NCglhIGltZyB7ZmxvYXQ6bGVmdDsgcGFkZGluZzo0cHggMCAwOyAvKnBvc2l0aW9uOnJlbGF0aXZlOyBsZWZ0Oi0xOHB4OyBwYWRkaW5nOjAgNHB4IDAgMDsgbWFyZ2luLWJvdHRvbTotMjBweCovfQ0KDQoJLyogQ3Vyc29yICovDQoJYSwgYnV0dG9uLCBsYWJlbCwgaW5wdXQge2N1cnNvcjpwb2ludGVyICFpbXBvcnRhbnR9DQoJDQoJLyogSW50ZXJuZXQgRXhwbG9yZXIgKi8NCgkqIGh0bWwgaW1nIHtkaXNwbGF5Om5vbmV9DQoJKjpmaXJzdC1jaGlsZCtodG1sIGltZyB7ZGlzcGxheTpub25lO30NCgkNCglAbWVkaWEgYWxsIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOjApIHsNCgkJaDEsIGEgey13ZWJraXQtdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAuNHMgZWFzZS1vdXR9DQoJfQ0KCTwvc3R5bGU+DQoJPGxpbmsgcmVsPSJhbHRlcm5hdGUgZmVlZCIgdHlwZT0iYXBwbGljYXRpb24vYXRvbSt4bWwiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vY2hhbmdlbG9nLnhtbCIgdGl0bGU9IlVwbG9hZGVyIHBhbmVsOiBjaGFuZ2Vsb2ciPg0KCTxsaW5rIHJlbD0ic3RhcnQiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vIiB0aXRsZT0iVXBsb2FkZXIgcGFuZWwiPg0KCTxsaW5rIHJlbD0icHJldmlvdXMiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vdXAuaHRtbCIgdGl0bGU9IlVwbG9hZGVyIj4NCgk8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vZmFxLyIgdGl0bGU9IkZBUSI+DQoJPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJNaWtpdmFuY2gsIHByb2ZpVCDQuCDRh9GD0YLRjC3Rh9GD0YLRjCDQndC40LrQuNGC0LAg0JLQsNGB0LjQu9GM0LXQsiI+DQoJPGxpbmsgcmVsPSJhdXRob3IiIGhyZWY9Imh0dHA6Ly9lbHYxcy5ydS8iIHRpdGxlPSLQndC40LrQuNGC0LAg0JLQsNGB0LjQu9GM0LXQsiI+CQ0KPC9oZWFkPjxib2R5IGxpbmtpZnltYXg9IjAiIGxpbmtpZnljdXJyZW50PSIwIiBsaW5raWZ5aW5nPSJ0cnVlIiBjbGFzcz0ianMiPg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCWRvY3VtZW50LmJvZHkuY2xhc3NOYW1lKz0nIGpzJzsJDQo8L3NjcmlwdD4NCjxoMSBpZD0idG9wIj4NCgk8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj4NCgkJPHNwYW4+U3VwZXIgVXBsb2FkZXI8L3NwYW4+CQkNCgk8L2E+DQo8L2gxPg0KPHVsPg0KDQo8IS0tbGkgaWQ9ImZ1bmt5aW1nIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9mdW5reWltZy5jb20vIj48aW1nIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFMTUFBQUVCUk1mYjhJcVJud01uaGVQdDl5bGRyOHJOMVdweWd4WklvZUxrNnFxdnV1VG03SksyNE9yczhRQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBQVFBQkFBQUFRbXNNbEpxNzA0NjgyNy8walJBVVBBWkl0QU1vUjVKY0t4dHVkbHhLU2JHWW9RZnNDZ0pRSUFPdz09IiBhbHQ9IiI+PC9hPgo8Zm9ybSBhY3Rpb249Imh0dHA6Ly9mdW5reWltZy5jb20vdXAucGhwIiBuYW1lPSJ1cCIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiB0YXJnZXQ9Il9ibGFuayI+Cgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4KCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIgcmVxdWlyZWQgY2xhc3M9ImZpbGUiIHNpemU9IjEiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fZnVua3lpbWdfY29tJykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX2Z1bmt5aW1nX2NvbScpIiBvbmNoYW5nZT0ic2V0UmVhZHkyKCdidG5fZnVua3lpbWdfY29tJywgdGhpcykiPgoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9mdW5reWltZ19jb20iIGNsYXNzPSJidG4iPkZ1bmt5aW1nLmNvbTwvYT4KCQk8L2Rpdj4KCTwvZGl2PgoJPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkIiB2YWx1ZT0iVXBsb2FkIj4KCTxpbnB1dCBjbGFzcz0ibiIgdHlwZT0icmFkaW8iIG5hbWU9InVwdHlwZSIgdmFsdWU9ImZpbGUiIGNoZWNrZWQ+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJNQVhfRklMRV9TSVpFIiB2YWx1ZT0iMzE0NTcyOCI+Cgk8aW5wdXQgY2xhc3M9Im4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhZGRJbmZvIiBjaGVja2VkPgo8L2Zvcm0+CjwvZGl2PjwvbGktLT4NCg0KPGxpIGlkPSJiYXlpbWciPjxkaXY+PGEgaHJlZj0iaHR0cDovL2JheWltZy5jb20vIj48aW1nIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFOVS9BT2pzOWFxOTNmVHk3dGZtOUxURTI5dmo3clRINGRyYTJhUys0NXExM2JuUjdZcXAyV21MeWZMeThzVGI4NnpHNTM2ZDBuT1N5NFdqMUUxenZNdmg5dGJmN1ptdTFIK2F5K0hoNGNETjR1M3I2Y25iN3FmQjVlZm41dC9mMzU2NTRmRHU2Ky91N3M3aytNL2g4VGxpc3JmUDdOemY0OHZmOGNUWTdzclY1Ny9QNTQrczJZZWZ6V0dEd1c2T3lPam82TFBKNXMzVzZkYmQ1bnVYemNIWDhKYXgzYS9JNkorejA3L0szZUxxOHFuQTRwR3UyM21aME0vYzY3TEw2Ly8vL3lINUJBRUFBRDhBTEFBQUFBQVFBQkFBQUFhQ3dKOXdTQ3dhajBpaXdaQWM1bUFmU2FVNUtEMFNrRXR5UkNzaEZyeFpha29NblNnMDJ5ZWcydGdXQmFLbTRGRG9lZ09LN3dNSkZEc29QZ2taSWdvY0t4RVJSakljT3pjYkR6VVFEQk1aUlJvR0N4Y0VVUzRUSkJaR0poSXVCQXNNTFN3eFJ3STRCUTBXQVFBQ0FnZEhJQ0FlSVNFZEJ4Z05SdzBlSFJnSEwwMU5RUUE3IiBhbHQ9IiI+PC9hPgo8Zm9ybSBhY3Rpb249Imh0dHA6Ly9iYXlpbWcuY29tL3VwbG9hZCIgbmFtZT0idXBsb2FkIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPgoJCTxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9iYXlpbWdfY29tJykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX2JheWltZ19jb20nKSIgb25jaGFuZ2U9InNldFJlYWR5MignYnRuX2JheWltZ19jb20nLCB0aGlzKSI+CgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPgoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2JheWltZ19jb20iIGNsYXNzPSJidG4iPmJheWltZy5jb208L2E+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPgoJPGlucHV0IGNsYXNzPSJuIiB0eXBlPSJ0ZXh0IiBuYW1lPSJjb2RlIiB2YWx1ZT0idXBsb2FkZXIiPgoJPGlucHV0IGNsYXNzPSJuIiB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWdzIiB2YWx1ZT0idXBsb2FkZXIiPgkKCTxpbnB1dCBjbGFzcz0ibiIgdHlwZT0iY2hlY2tib3giIG5hbWU9InJlc2l6ZSI+Cgk8aW5wdXQgY2xhc3M9Im4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvZmZlbnNpdmUiPgkKPC9mb3JtPgo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9ImltYWdlc2hhY2siPjxkaXY+PGEgaHJlZj0iaHR0cDovL3d3dy5pbWFnZXNoYWNrLnVzLyI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU1RZkFLczlGbWx0VEtpV0s0WjJIc3UzSFJVWUhYWitkajVIUHE2QkZjM015cVpQR1VaalRPWEJFK3JvS3EzYzdkNmJGREU0TmxwWlY4UmhFOXUySnRPSkV1cThIRU0zSnFTbWwvelVGWkU0SUlna0d1U3FGUFRIR1pRckZHTlBKT3JzOFNINUJBRUFBQjhBTEFBQUFBQVFBQkFBQUFXZzRDY21seEVFeGhWNG5wRjhGeHNNUk5NUWczQmRnbmNkRzg0RVF5UUtBZzZIeVJPaFBDaEJEb2NBT1VDdWhVRUVzZGxVT01TSnBVQ0daQTBlNkpmSThFQVdpNE5GOElFb0pHb09BK0d4K0JFVk1CWVpBSGhlRXdJREhseUJNQWNlaEhnVEV3UUVGUnNUSWlJUmtCMkZEeE5nUXBvZkNSQVpIYWwzRkY4Y3BJS29xWjZHcng4Umc2a2FxWVcxdHBBYXdNQUF2YllXd2JyRHhCRVJHYzEzSVFBNyI+PC9hPg0KPGZvcm0gYWN0aW9uPSJodHRwOi8vd3d3LmltYWdlc2hhY2sudXMvaW5kZXgucGhwIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4NCgk8aW5wdXQgdmFsdWU9IjEwNDg1NzYiIG5hbWU9Ik1BWF9GSUxFX1NJWkUiIHR5cGU9ImhpZGRlbiI+DQoJPGlucHV0IHZhbHVlPSJibGFuayIgbmFtZT0idHlwZSIgdHlwZT0iaGlkZGVuIj4NCgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4NCgkJPGlucHV0IG5hbWU9ImZpbGV1cGxvYWQiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX2ltYWdlc2hhY2tfdXMnKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5faW1hZ2VzaGFja191cycpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9pbWFnZXNoYWNrX3VzJywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2ltYWdlc2hhY2tfdXMiIGNsYXNzPSJidG4iPkltYWdlc2hhY2sudXM8L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPGxpIGlkPSJpZm9sZGVyIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9lbHYxcy5pZm9sZGVyLnJ1LyI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQUxNQUFBRUJSTWZiOElxUm53TW5oZVB0OXlsZHI4ck4xV3B5Z3haSW9lTGs2cXF2dXVUbTdKSzI0T3JzOFFBQUFBQUFBQ0g1QkFBQUFBQUFMQUFBQUFBUUFCQUFBQVFtc01sSnE3MDQ2ODI3LzBqUkFVUEFaSXRBTW9SNUpjS3h0dWRseEtTYkdZb1Fmc0NnSlFJQU93PT0iPjwvYT4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL3VwbC5zdGcyMy5pZm9sZGVyLnJ1Lz9zZXJpYWw9ZjNkZjhjOTdjMmRkZmVkNjQ5YWYzNmIzYzFjNmNlNjMiIG5hbWU9InRoZXVwbG9hZGZvcm0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgdGFyZ2V0PSJfYmxhbmsiPg0KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPg0KCQk8aW5wdXQgbmFtZT0iZmlsZW5hbWUiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX2lmb2xkZXJfcnUnKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5faWZvbGRlcl9ydScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9pZm9sZGVyX3J1JywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2lmb2xkZXJfcnUiIGNsYXNzPSJidG4iPmlGb2xkZXIucnU8L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBuYW1lPSJ1cGxvYWRfcGFyYW1zIiB2YWx1ZT0iYmYwYWYzNTdmOWY0NzFkODYwNDZmMGQzMjQ2ZTg0ZGExOTVlNzMyYzZiNjRjNTRjZDkyODExYmZmYTcxYzExN2QzMjY0ZjQ4N2EwNjRhYTJmNzRiOTgxMGM4MGZlZDc5N2RhNTY2Y2Q2MTczNzNhNiIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0iY2xvbmUiIHZhbHVlPSJlbHYxcy5pZm9sZGVyLnJ1IiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJwcm9ncmVzc19iYXIiIHZhbHVlPSJmM2RmOGM5N2MyZGRmZWQ2NDlhZjM2YjNjMWM2Y2U2MyIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0idXBsb2FkX2hvc3QiIHZhbHVlPSJzdGcyMy5pZm9sZGVyLnJ1IiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJNQVhfRklMRV9TSVpFIiB2YWx1ZT0iMTA0ODU3NjAwIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0ic2hvd19wcm9ncmVzc19iYXIiIHZhbHVlPSIwIiB0eXBlPSJjaGVja2JveCI+DQoJPGlucHV0IGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9InNsaWwiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3NsaWwucnUvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTVFkQUJVVkZUUTBNek0wTkRRek5CVVdGWDkvZ0JVV0ZuK0FnSUNBZ0tlbnBzdkx6SCtBZjRDQWY4ekx5MzkvZnhZV0Zzdkx5eFVWRmxoWVdUUXpNNEIvZ0JZV0ZhZW1wNEIvZnhZVkZxZW5welEwTkZoWVdBQUFBUC8vL3dBQUFBQUFBQ0g1QkFFQUFCMEFMQUFBQUFBUUFCQUFBQVZoWUNlT1pHbWVwNktZRFZSbVNaYTk4MWpjMStHUXh6SnV3Q0R3dHhrTk5KM0FvS09aakRSSVVVUmtNSWdBSXdPMnhPR012SjJ1Q053QlBFWUVUS2VDSlJCR0FzRW9vS0VManRIT2tBaVVGRWNVUGlRSURBd0lKVEVtRmpVb2pZNG1JUUE3Ij48L2E+DQo8Zm9ybSBhY3Rpb249Imh0dHA6Ly96YWxpbC5ydS91cGxvYWQvIiBuYW1lPSJzZW5kZm9ybSIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQ9IiIgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9zbGlsX3J1JykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX3NsaWxfcnUnKSIgb25jaGFuZ2U9InNldFJlYWR5KCdidG5fc2xpbF9ydScsIHRoaXMpIiB0eXBlPSJmaWxlIj4NCgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9zbGlsX3J1IiBjbGFzcz0iYnRuIj5zbGlsLnJ1PC9hPg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0Ij4NCjwvZm9ybT4NCjwvZGl2PjwvbGk+DQoNCjxsaSBpZD0iZHVtcCI+PGRpdj48YSBocmVmPSJodHRwOi8vZHVtcC5ydS8iIHJlbD0ibm9mb2xsb3ciPjxpbWcgYWx0PSIiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFOVS9BSVBRNndHaDBsU3hBYlRkazFPd0FIek42bksrTFhYSzVnT2YwUnlwMmNYa3FVUzUzbWE3SEcyOUp3V2gxV0hFNUJTbTFxRFVjenExM1Z5MkRYckNPd1NnMDFHeUFRU2cwVGV5MjczaW5YUENNeWV2MlFXZjA5anR4SnJSYkhmTjVsS3dBZ0tnejZ6aDg4N291TG5pMnJIYmlUKzEyNmpaZnNMbHBjcmxycUxlNW4vUDZLcmY3OS94eTlYc3Zwdlk3Uyt5M0Zhd0FWT3lBS2ZjN2dTZjFWZTFDUU9lMW9USFJ0M3V5azY5NGIzbThyL2tvUWFpMDUzVmNtVzNGLy8vL3lINUJBRUFBRDhBTEFBQUFBQVFBQkFBQUFhTXdKOVFxQnNhajhQUERNbjhBUzZycHZDUXVBUWNJWXlxcERnbUtyUUtBc0dCUkEyZW9RUlJDVWtXbGR3UUo0Z0lMdzZiNkZlSUdtOENJejhWRnd0Q0xFZzdBZzAvTUFnUFVpNFdBaDB2RGlaSUtFSVpCQVFEUHdzOFJ5a0dQeTArQXA1Q0VKQkNKeUFNRkJZeEZqVkdHeUlEREFLcE1ha1RYVVlISkQwVEJBSXlCblpTUHcwYXpFY1VTRUVBT3c9PSI+PC9hPg0KPGZvcm0gYWN0aW9uPSJodHRwOi8vZHVtcC5ydTo4MDgwL2NnaS1iaW4vdXVfdXBsb2FkLnBsP3RtcF9zaWQ9YmUxOTMxMjQ4ZTg0NDg4OTU2MmRmZGFkZWI1OThlZDAmYW1wO2NvbmZpZ19maWxlPXV1X2RlZmF1bHRfY29uZmlnIiBuYW1lPSJmb3JtX3VwbG9hZCIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiB0YXJnZXQ9Il9ibGFuayI+DQoJPGlucHV0IG5hbWU9InVwbG9hZF9yYW5nZSIgdmFsdWU9IjEiIHR5cGU9ImhpZGRlbiI+DQoJPGlucHV0IG5hbWU9Im5vX3NjcmlwdCIgdmFsdWU9IjEiIHR5cGU9ImhpZGRlbiI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJ1cGZpbGVfMCIgY2xhc3M9ImZpbGUiIHNpemU9IjEiIHJlcXVpcmVkPSIiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fZHVtcF9ydScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9kdW1wX3J1JykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX2R1bXBfcnUnLCB0aGlzKSIgdHlwZT0iZmlsZSI+DQoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4NCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fZHVtcF9ydSIgY2xhc3M9ImJ0biI+ZHVtcC5ydTwvYT4NCgkJPC9kaXY+DQoJPC9kaXY+DQoJPGlucHV0IGNsYXNzPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiIHR5cGU9InN1Ym1pdCI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9InJhcGlkc2hhcmUtY29tIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9yYXBpZHNoYXJlLmNvbS8iIHJlbD0ibm9mb2xsb3ciPjxpbWcgYWx0PSIiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFMTUFBQUVCUk1mYjhJcVJud01uaGVQdDl5bGRyOHJOMVdweWd4WklvZUxrNnFxdnV1VG03SksyNE9yczhRQUFBQUFBQUNINUJBQUFBQUFBTEFBQUFBQVFBQkFBQUFRbXNNbEpxNzA0NjgyNy8walJBVVBBWkl0QU1vUjVKY0t4dHVkbHhLU2JHWW9RZnNDZ0pRSUFPdz09Ij48L2E+DQo8Zm9ybSBhY3Rpb249Imh0dHA6Ly9yczY1bDMucmFwaWRzaGFyZS5jb20vY2dpLWJpbi91cGxvYWQuY2dpP3JzdXBsb2FkaWQ9MTQxNTQ5MDU1NTYwMjk3NzA1IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJ1bCIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+DQoJPCEtLSA8aW5wdXQgbmFtZT0ibWlycm9yIiB0eXBlPSJyYWRpbyI+TGV2ZWwoMykgPGlucHV0IGNoZWNrZWQgbmFtZT0ibWlycm9yIiB0eXBlPSJyYWRpbyI+VGVsaWEgPGlucHV0IG5hbWU9Im1pcnJvciIgdHlwZT0icmFkaW8iPiAtLT4NCgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4NCgkJPGlucHV0IG5hbWU9ImZpbGVjb250ZW50IiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQ9IiIgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9yYXBpZHNoYXJlX2NvbScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9yYXBpZHNoYXJlX2NvbScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9yYXBpZHNoYXJlX2NvbScsIHRoaXMpIiB0eXBlPSJmaWxlIj4NCgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9yYXBpZHNoYXJlX2NvbSIgY2xhc3M9ImJ0biI+UmFwaWRzaGFyZS5jb208L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPCEtLWxpIGlkPSJ1cGxvYWQyIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly93d3cudXBsb2FkMi5uZXQvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1BQUFFQlJNZmI4SXFSbndNbmhlUHQ5eWxkcjhyTjFXcHlneFpJb2VMazZxcXZ1dVRtN0pLMjRPcnM4UUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBUW1zTWxKcTcwNDY4MjcvMGpSQVVQQVpJdEFNb1I1SmNLeHR1ZGx4S1NiR1lvUWZzQ2dKUUlBT3c9PSI+PC9hPgo8Zm9ybSBhY3Rpb249Imh0dHA6Ly93d3c1LnVwbG9hZDIubmV0L3VwbG9hZC5waHAiIG5hbWU9ImZvcm0xIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4KCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1BWF9GSUxFX1NJWkUiIHZhbHVlPSIyNzAwMDAwMCI+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0idXBsb2FkIj4KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPgoJCTxpbnB1dCBuYW1lPSJmaWxlIiB0eXBlPSJmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl91cGxvYWQyX25ldCcpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl91cGxvYWQyX25ldCcpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl91cGxvYWQyX25ldCcsIHRoaXMpIj4KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fdXBsb2FkMl9uZXQiIGNsYXNzPSJidG4iPlVwbG9hZDIubmV0PC9hPgoJCTwvZGl2PgoJPC9kaXY+Cgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj4KPC9mb3JtPgo8L2Rpdj48L2xpLS0+DQoNCjwhLS1saSBpZD0iZWdvc2hhcmUiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3d3dy5lZ29zaGFyZS5jb20vIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1KQVA4QUFLcXFxb2lJaU4zZDNVUkVSSGQzZC8vLy81bVptUUFBQVAvLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFRQUJBQUFBUlhNTW1KQ3BvWVYzTE11Vm15ZGNOZ2VLQlljRVZibklCSFhFZnAzZ2ZSQ2dnU2xBTlhiamREZkh6QllVRlE1Q0Y3bkVPdXgrd2RmNzFzRmVIRUlxSlRidkU2eUZLYlBTKzRXUlE5emRzTVZCb09VY3oydkQwQ0FEcz0iPjwvYT4KPGZvcm0gYWN0aW9uPSJodHRwOi8vd3d3LmVnb3NoYXJlLmNvbS8iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgdGFyZ2V0PSJfYmxhbmsiPgoJPGlucHV0IHR5cGU9ImhpZGRlbiIgdmFsdWU9InRydWUiIG5hbWU9InVwbG9hZCI+Cgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4KCQk8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0idXBmaWxlIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9lZ29zaGFyZV9jb20nKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5fZWdvc2hhcmVfY29tJykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX2Vnb3NoYXJlX2NvbScsIHRoaXMpIj4KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fZWdvc2hhcmVfY29tIiBjbGFzcz0iYnRuIj5FZ29zaGFyZS5jb208L2E+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJVcGxvYWQiPgo8L2Zvcm0+CjwvZGl2PjwvbGktLT4NCg0KPGxpIGlkPSJzZW5kc3BhY2UiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3d3dy5zZW5kc3BhY2UuY29tLyIgcmVsPSJub2ZvbGxvdyI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQUxNQUFBRUJSTWZiOElxUm53TW5oZVB0OXlsZHI4ck4xV3B5Z3haSW9lTGs2cXF2dXVUbTdKSzI0T3JzOFFBQUFBQUFBQ0g1QkFBQUFBQUFMQUFBQUFBUUFCQUFBQVFtc01sSnE3MDQ2ODI3LzBqUkFVUEFaSXRBTW9SNUpjS3h0dWRseEtTYkdZb1Fmc0NnSlFJQU93PT0iPjwvYT4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL2ZzMDJ1LnNlbmRzcGFjZS5jb20vcHJvY2Vzc3VwbG9hZC5odG1sIiBuYW1lPSJ1cGxvYWQiIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgdGFyZ2V0PSJfYmxhbmsiPg0KCTxpbnB1dCBuYW1lPSJNQVhfRklMRV9TSVpFIiB2YWx1ZT0iMzE0NTcyODAwIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJVUExPQURfSURFTlRJRklFUiIgdmFsdWU9IjIwODI3NzkxOTUuMTE3NjI4OTIxMy41NDVFMDUzOC4xNS4wIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJERVNUSU5BVElPTl9ESVIiIHZhbHVlPSIxMCIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0ianNfZW5hYmxlZCIgdmFsdWU9IjAiIHR5cGU9ImhpZGRlbiI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJmaWxlXzAiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX3NlbmRzcGFjZV9jb20nKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5fc2VuZHNwYWNlX2NvbScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9zZW5kc3BhY2VfY29tJywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX3NlbmRzcGFjZV9jb20iIGNsYXNzPSJidG4iPnNlbmRzcGFjZS5jb208L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPGxpIGlkPSJyYWRpa2FsIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9mb3RvLnJhZGlrYWwucnUvIiByZWw9Im5vZm9sbG93IiBsYW5nPSJydSI+PGltZyBhbHQ9IiIgc3JjPSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFQUFRQU1RZkFBNFVFemhtSUZsWldjckt5amMzTjB4cFBTb3FLam82T3FPam83Mit2a3hVU1Q0K1BnMDFTUmhnaFI5RldWZXdLSUNBZ0RsU1lOWFYxVWhNUlpXWWs0aUxqUnMxRFY1ZVhsR2pKbVZsWlJsa2kxcGFXMWl4S1JwbmpqTXpNLy8vL3lINUJBRUFBQjhBTEFBQUFBQVFBQkFBQUFWMjRDZCtWY1JjWXpvbVR0TnBLTEI0M21HSWJLZkRuNWRDbTQ5RHQ0c2RhSVFid0VYa0dTQUF3VUFFSUJaN0lnUkI4V0ZZWHlpSTZuUFltTS9qdEVyQmJrOCtnNk5nbE1Gdzd2Y0FHYUdxNCs4RlBUUWVCQXNmZm5nWUZEMThLWWdjRDRHTWZYYVFBUklpQjJOK0dBV1lhajBXQUFBcElRQTciPjwvYT4NCjxmb3JtIGFjdGlvbj0iaHR0cDovL2ZvdG8ucmFkaWthbC5ydS9hY3Rpb24uYXNweCIgbmFtZT0idXBsb2FkIiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRhcmdldD0iX2JsYW5rIj4NCgk8aW5wdXQgbmFtZT0idXBsb2FkIiB2YWx1ZT0ieWVzIiB0eXBlPSJoaWRkZW4iPg0KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPg0KCQk8aW5wdXQgbmFtZT0iRiIgY2xhc3M9ImZpbGUiIHNpemU9IjEiIHJlcXVpcmVkPSIiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fcmFkaWthbF9ydScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9yYWRpa2FsX3J1JykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX3JhZGlrYWxfcnUnLCB0aGlzKSIgdHlwZT0iZmlsZSI+DQoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4NCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fcmFkaWthbF9ydSIgY2xhc3M9ImJ0biI+0KDQsNC00LjQutCw0Lst0KTQvtGC0L48L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KCTxpbnB1dCBuYW1lPSJDUCIgdmFsdWU9InllcyIgY2hlY2tlZD0iY2hlY2tlZCIgdHlwZT0iaGlkZGVuIj4NCgk8aW5wdXQgbmFtZT0iVk0iIHZhbHVlPSIyMDAiIHR5cGU9ImhpZGRlbiI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9ImxldGl0Yml0Ij48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9sZXRpdGJpdC5uZXQvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1BQUFFQlJNZmI4SXFSbndNbmhlUHQ5eWxkcjhyTjFXcHlneFpJb2VMazZxcXZ1dVRtN0pLMjRPcnM4UUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBUW1zTWxKcTcwNDY4MjcvMGpSQVVQQVpJdEFNb1I1SmNLeHR1ZGx4S1NiR1lvUWZzQ2dKUUlBT3c9PSI+PC9hPg0KPGZvcm0gbmFtZT0iRjEiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaHR0cDovL3IyLmxldGl0Yml0Lm5ldC9jZ2ktYmluL2hvbWVyL3VwbG9hZC5jZ2k/dXBsb2FkX2lkPSIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJjaGVja2JveCIgdmFsdWU9ImNoZWNrYm94IiB0eXBlPSJjaGVja2JveCI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJhY2NlcHQiIHZhbHVlPSIwIiBjaGVja2VkPSJjaGVja2VkIiB0eXBlPSJjaGVja2JveCI+DQoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+DQoJCTxpbnB1dCBuYW1lPSJteWZpbGUiIGNsYXNzPSJmaWxlIiBzaXplPSIxIiByZXF1aXJlZD0iIiBvbm1vdXNlb3Zlcj0ib25PdmVyRmlsZSgnYnRuX2xldGl0Yml0X25ldCcpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9sZXRpdGJpdF9uZXQnKSIgb25jaGFuZ2U9InNldFJlYWR5KCdidG5fbGV0aXRiaXRfbmV0JywgdGhpcykiIHR5cGU9ImZpbGUiPg0KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+DQoJCQk8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCk7IiBpZD0iYnRuX2xldGl0Yml0X25ldCIgY2xhc3M9ImJ0biI+bGV0aXRiaXQubmV0PC9hPg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0Ij4NCgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InNlbGZfZGVzYyIgdmFsdWU9InVwbG9hZGVyLXBhbmVsLmNvbSIgdHlwZT0idGV4dCI+DQoJPGlucHV0IG5hbWU9Ik1BWF9GSUxFX1NJWkUiIHZhbHVlPSIxMjAwMDAwMDAwIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBuYW1lPSJ1aWQiIHZhbHVlPSIxMjMiIHR5cGU9ImhpZGRlbiI+DQo8L2Zvcm0+DQo8L2Rpdj48L2xpPg0KDQo8bGkgaWQ9ImlwaWN0dXJlIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9pcGljdHVyZS5ydS8iIHJlbD0ibm9mb2xsb3ciPjxpbWcgYWx0PSIiIHNyYz0iZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRUFBUUFNUUFBUC8vLzRDQWdNM055elF5THhVU0Roc1lGS1drbzVtWWwzVnpjYkt4c0JrV0VrQkFRQ0lmRy96TzN1NFdZZ0FBQUx5OHVzVER3cXFwcUxHd3NPYm01bmw0ZHZWNnBiQ3ZyWStPakhOeGIycG9abHBYVk1uSng5emMzQjRiRjM1OGVpSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBVjQ0QktNWkZtS0FOQllEY0FaaHNTbHdKaGFqZ1ZrWHFFb21wUk54UUlnQ2hmQlJoR3BCV2cwaEVJQWlCQU96aFJra0RCT1hRUk1GcEFnR0x6VU1uWllQaU04aU0rQTBSbTNqWXo4WUNKOGtzMUdCUkFVVUd5QVVsU0ZmaE9IWHc4MGhtNEZpWkIrQ1FWbkZSNVVqNDlEVUtDUUlpYWtJd3NoQURzPSI+PC9hPg0KPGZvcm0gYWN0aW9uPSJodHRwOi8vaXBpY3R1cmUucnUvVXBsb2FkLyIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJ1cGxvYWQiIHRhcmdldD0iX2JsYW5rIj4NCgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9Im9wdGltaXplIiB0eXBlPSJjaGVja2JveCI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJ0aHVtYl9yZXNpemVfb24iIGNoZWNrZWQ9ImNoZWNrZWQiIHR5cGU9ImNoZWNrYm94Ij4NCgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InRodW1iX3Jlc2l6ZSIgc2l6ZT0iOCIgdmFsdWU9IjIwMCIgdHlwZT0idGV4dCI+DQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJzdHJpbmdfc21hbGxfb24iIHR5cGU9ImNoZWNrYm94Ij4JDQoJPGlucHV0IGNsYXNzPSJuIiBuYW1lPSJtZXRob2QiIHZhbHVlPSJmaWxlIiB0eXBlPSJoaWRkZW4iPg0KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0idXBsb2FkdHlwZSIgdmFsdWU9IjEiIHR5cGU9InJhZGlvIj4NCgk8bGFiZWwgY2xhc3M9Im4iPtCd0LDQtNC/0LjRgdGMINC90LAg0L/RgNC10LLRjNGOIDxpbnB1dCBjbGFzcz0ibiIgc2l6ZT0iMTMiIG5hbWU9InN0cmluZ19zbWFsbCIgdmFsdWU9IiIgdHlwZT0idGV4dCI+PC9sYWJlbD4NCgk8ZGl2IGNsYXNzPSJmaWxlaW5wdXRzIj4NCgkJPGlucHV0IG5hbWU9InVzZXJmaWxlIiBzaXplPSIxIiBjbGFzcz0iZmlsZSIgcmVxdWlyZWQ9IiIgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9pcGljdHVyZV9ydScpIiBvbm1vdXNlb3V0PSJvbk91dEZpbGUoJ2J0bl9pcGljdHVyZV9ydScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl9pcGljdHVyZV9ydScsIHRoaXMpIiB0eXBlPSJmaWxlIj4NCgkJPGRpdiBjbGFzcz0iZmFrZWZpbGUiPg0KCQkJPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyIgaWQ9ImJ0bl9pcGljdHVyZV9ydSIgY2xhc3M9ImJ0biI+aVBpY3R1cmUucnU8L2E+DQoJCTwvZGl2Pg0KCTwvZGl2Pg0KCTxpbnB1dCBjbGFzcz0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIiB0eXBlPSJzdWJtaXQiPg0KPC9mb3JtPg0KPC9kaXY+PC9saT4NCg0KPGxpIGlkPSJ6c2hhcmUiPjxkaXY+PGEgaHJlZj0iaHR0cDovL3pzaGFyZS5uZXQvIiByZWw9Im5vZm9sbG93Ij48aW1nIGFsdD0iIiBzcmM9ImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVBQVFBTE1BQUFFQlJNZmI4SXFSbndNbmhlUHQ5eWxkcjhyTjFXcHlneFpJb2VMazZxcXZ1dVRtN0pLMjRPcnM4UUFBQUFBQUFDSDVCQUFBQUFBQUxBQUFBQUFRQUJBQUFBUW1zTWxKcTcwNDY4MjcvMGpSQVVQQVpJdEFNb1I1SmNLeHR1ZGx4S1NiR1lvUWZzQ2dKUUlBT3c9PSI+PC9hPg0KPGZvcm0gZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgYWN0aW9uPSJodHRwOi8vNjkuODAuMjU1LjEzMC91cGxvYWQucGhwIiBtZXRob2Q9InBvc3QiIG5hbWU9InVwbG9hZCIgdGFyZ2V0PSJfYmxhbmsiPg0KCTxpbnB1dCB2YWx1ZT0iMSIgbmFtZT0iVE9TIiBjaGVja2VkPSJjaGVja2VkIiBjbGFzcz0ibiIgdHlwZT0iY2hlY2tib3giPg0KCTxkaXYgY2xhc3M9ImZpbGVpbnB1dHMiPg0KCQk8aW5wdXQgbmFtZT0iZmlsZSIgc2l6ZT0iMSIgY2xhc3M9ImZpbGUiIHJlcXVpcmVkPSIiIG9ubW91c2VvdmVyPSJvbk92ZXJGaWxlKCdidG5fenNoYXJlJykiIG9ubW91c2VvdXQ9Im9uT3V0RmlsZSgnYnRuX3pzaGFyZScpIiBvbmNoYW5nZT0ic2V0UmVhZHkoJ2J0bl96c2hhcmUnLCB0aGlzKSIgdHlwZT0iZmlsZSI+DQoJCTxkaXYgY2xhc3M9ImZha2VmaWxlIj4NCgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fenNoYXJlIiBjbGFzcz0iYnRuIj56c2hhcmUubmV0PC9hPg0KCQk8L2Rpdj4NCgk8L2Rpdj4NCgk8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IlVwbG9hZCIgdHlwZT0ic3VibWl0Ij4NCjwvZm9ybT4NCg0KPCEtLTxsaSBpZD0iZnJlZXNoYXJlIj48ZGl2PjxhIGhyZWY9Imh0dHA6Ly9mcmVlc2hhcmUudXMvIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub2ZvbGxvdyI+ZnJlZXNoYXJlLnVzPC9hPgo8Zm9ybSBuYW1lPSJ1cGxvYWQiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iaHR0cDovL2ZyZWVzaGFyZS51cy91cGxvYWQxLnBocCIgbWV0aG9kPSJwb3N0IiB0YXJnZXQ9Il9ibGFuayI+Cgk8aW5wdXQgY2xhc3M9Im4iIHR5cGU9ImhpZGRlbiIgdmFsdWU9InVwbG9hZCIgbmFtZT0iYWN0aW9uIj4KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0idXBsb2FkIiB0eXBlPSJyYWRpbyIgdmFsdWU9ImZpbGUiIGNoZWNrZWQ+Cgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InVwbG9hZCIgdHlwZT0icmFkaW8iIHZhbHVlPSJ1cmwiPgoJPGRpdiBjbGFzcz0iZmlsZWlucHV0cyI+CgkJPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGVuYW1lIiBjbGFzcz0iZmlsZSIgc2l6ZT0iMSIgcmVxdWlyZWQgb25tb3VzZW92ZXI9Im9uT3ZlckZpbGUoJ2J0bl9mcmVlc2hhcmVfdXMnKSIgb25tb3VzZW91dD0ib25PdXRGaWxlKCdidG5fZnJlZXNoYXJlX3VzJykiIG9uY2hhbmdlPSJzZXRSZWFkeSgnYnRuX2ZyZWVzaGFyZV91cycsIHRoaXMpIj4KCQk8ZGl2IGNsYXNzPSJmYWtlZmlsZSI+CgkJCTxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKTsiIGlkPSJidG5fZnJlZXNoYXJlX3VzIiBjbGFzcz0iYnRuIj5mcmVlc2hhcmUudXM8L2E+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxpbnB1dCBjbGFzcz0ibiIgbmFtZT0icHVibGljIiB0eXBlPSJyYWRpbyIgdmFsdWU9IjEiIGNoZWNrZWQ+Cgk8aW5wdXQgY2xhc3M9Im4iIG5hbWU9InB1YmxpYyIgdHlwZT0icmFkaW8iIHZhbHVlPSIwIj4KCQo8L2Zvcm0+CjwvZGl2PjwvbGk+LS0+DQoNCjwvZGl2PjwvbGk+PC91bD4NCg0KPHAgaWQ9InZlcnNpb24iPg0KCTxhIGhyZWY9Imh0dHA6Ly91cGxvYWRlci1wYW5lbC5jb20vIj4NCgkJPHNwYW4+U3VwZXIgVXBsb2FkZXIgMC4yNiAoMTIuMDYuMjAwOCk8L3NwYW4+DQoJPC9hPg0KPC9wPg0KDQo8ZGl2IGNsYXNzPSJyb2JvdHMtbm9jb250ZW50Ij4NCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJZnVuY3Rpb24gc2hvd0Zvcm0ob2JqKSB7DQoJCWlmKCFvYmopIHJldHVybjsNCgkJb2JqLmNsYXNzTmFtZT0ndmlzaWJsZSc7DQoJCWlmKCFvYmouZm9ybSkgcmV0dXJuOw0KCQlvYmouZm9ybS5jbGFzc05hbWU9J3Zpc2libGUnfQ0KIA0KICBmdW5jdGlvbiBvbk92ZXJCdG4oYnRuKQ0KICB7DQogICAgaWYoYnRuKSANCiAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2NvbG9yOiAjZmZmOyBiYWNrZ3JvdW5kLWNvbG9yOiAjNmE5YmNkOycsIGZhbHNlKQ0KICAgICAgfQ0KICANCiAgZnVuY3Rpb24gb25PdXRCdG4oYnRuKQ0KICB7DQogICAgaWYoYnRuKQ0KICAgICAgYnRuLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnLCBmYWxzZSl9DQogIA0KICBmdW5jdGlvbiBvbk92ZXJGaWxlKGlkKQ0KICB7DQogICAgdmFyIGJ0biA9IGdldEJ0bihpZCk7DQogICAgb25PdmVyQnRuKGJ0bil9DQogIA0KICBmdW5jdGlvbiBvbk91dEZpbGUoaWQpDQogIHsNCg0KICAgIHZhciBidG4gPSBnZXRCdG4oaWQpOw0KICAgIG9uT3V0QnRuKGJ0bil9DQogIA0KICBmdW5jdGlvbiBzZXRSZWFkeShpZCwgZmlsZU9iaikNCiAgew0KICAgIHZhciBidG4gPSBnZXRCdG4oaWQpOw0KICAgIGlmKGJ0bikNCiAgICAgIGJ0bi5jbGFzc05hbWUgPSAnYnRucmVhZHknOw0KICAgICAgDQogICAgaWYoZmlsZU9iaikNCiAgICAgIGZpbGVPYmouZm9ybS5zdWJtaXQoKX0NCiAgDQogIGZ1bmN0aW9uIHNldFJlYWR5MihpZCwgZmlsZU9iaikNCiAgew0KICAgIHZhciBidG4gPSBnZXRCdG4oaWQpOw0KICAgIGlmKGJ0bikNCiAgICAgIGJ0bi5jbGFzc05hbWUgPSAnYnRucmVhZHknOw0KICAgICAgDQogICAgdmFyIGZvcm0gPSBmaWxlT2JqLmZvcm07DQogICAgaWYoZm9ybSkgIA0KICAgIHsNCiAgICAgIGZvcih2YXIgaSA9IGZvcm0uZWxlbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pDQogICAgICB7DQogICAgICAgIGlmKGZvcm0uZWxlbWVudHNbaV0udGFnTmFtZSA9PSAnSU5QVVQnICYmIGZvcm0uZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0JykNCiAgICAgICAgew0KICAgICAgICAgIGZvcm0uZWxlbWVudHNbaV0uY2xpY2soKTsNCiAgICAgICAgICBicmVha30NCiAgICAgIH0NCiAgICB9DQogIH0NCg0KICBmdW5jdGlvbiBnZXRCdG4oaWQpDQogIHsNCiAgICBpZighaWQpDQogICAgICByZXR1cm47DQogICAgICANCiAgICB2YXIgb2JqID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOw0KICAgIGlmKG9iaiAmJiBvYmoudGFnTmFtZSA9PSAnQScpDQogICAgew0KICAgICAgcmV0dXJuIG9ian0NCiAgICANCiAgICByZXR1cm4gbnVsbH0JDQoJPC9zY3JpcHQ+DQoNCjwvZGl2Pg0KPC9ib2R5PjwvaHRtbD4=");Открывается и закрывается панель через встроенную в Firefox функцию. Почему в этом случае панель не закрывается при повторном вызове – не знаю. | ||||||||
| Anton > 18-03-2009 16:02:48 | ||||||||
BALANCE
Его много, но чтобы научиться - такого нет.
Возможно, html загружаемый по chrome:// протоколу, будет иметь chrome-привилегии.
Есть такой вариант: в подкаталоге extensions\custombuttons@xsms.org профиля найти файл chrome.manifest, открыть его в редакторе, записать в конец строку Код:resuource myresource ../../htmls/ перезапустить браузер. После этого html можно хранить в подкаталоге htmls профиля и ссылаться на них посредством resource://myresource/myhtml.htm. | ||||||||
| Infocatcher > 18-03-2009 16:54:53 | ||||||||
Вот только этот файл будет перезаписан при переустановке или обновлении расширения. Код:var chromeDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("UChrm", Components.interfaces.nsILocalFile);
chromeDir = "file://" + chromeDir.path.replace(/\\/g, "/") + "/";
openWebPanel("", chromeDir + "userChrome-example.css");chromeDir – путь к папке chrome в профиле. Код:var dir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile);
dir = "file://" + dir.path.replace(/\\/g, "/") + "/my_dir/";
openWebPanel("", dir + "some.html");dir – путь к папке my_dir в профиле. | ||||||||
| 3Jlou > 18-03-2009 19:22:07 | ||||||||
Infocatcher, вот теперь точно ОГРОМНОЕ СПАСИБО!!! 2-й вариант как раз то что надо, 5 баллов! | ||||||||
| MAFi0Z0 > 20-03-2009 11:49:40 | ||||||||
Подскажите какой код на в кнопку написать, что бы туда влезло меню. Ну то которое "файл", "правка", "вид" и т.д. Есть такое расширение Tiny Menu, вот я хочу сделать тоже самое, т.к. Tiny Menu нельзя двигать по тулбару, а кнопку можно. | ||||||||
| pi.v.vitaly > 20-03-2009 18:18:29 | ||||||||
MAFi0Z0 | ||||||||
| Anton > 21-03-2009 13:12:21 | ||||||||
3Jlou
Код из раздела "Код" выполняется при нажатии на кнопку.
Код:var mp = document. createElement ("menupopup");
this. appendChild (mp);
var mc = document. getElementById ("main-menubar");
while (mc. hasChildNodes ())
mp. appendChild (mc. firstChild);
this. type = "menu";
this. orient = "horizontal";в раздел "Инициализация". | ||||||||
| Supernovus > 21-03-2009 13:53:34 | ||||||||
Есть расширение Reframe It, которое позволяет сохранять онлайн комментариии и заметки. Я его только установил. Кнопка Reframe It находится в строке состояния. Может я изобретаю велосипед, но через Custom Button (правда у меня CB с двойкой) сделал кнопку для размещения на панели инструментов. Традиционный вопрос - как запускать расширение через эту кнопку? Я в технической информации не профи, поэтому просьба подсказать в популярной форме. Заранее спасибо. | ||||||||
| Anton > 21-03-2009 14:46:48 | ||||||||
Supernovus
Что значит "запустить" ? | ||||||||
| Supernovus > 22-03-2009 00:24:37 | ||||||||
Вроде бы на английском это называется инициализация. А по нашему ВКЛ./ВЫКЛ. Я не хочу кнопку от Reframe It в строке состояния, потому что она длинная (с индикатором сообщений). По этой же причине не хочу на панель инструментов. Я сделал в Custom Buttons кнопку (скопировал с их сайта), но для включения расширения через мою самодельную кнопку нужны коды. Где их скопировать или как сделать? | ||||||||
| Anton > 22-03-2009 00:45:33 | ||||||||
Supernovus
Непонятно. Надо открыть/закрыть боковую панель ? Тогда пишите в раздел "Код": Код:ReframeIt.Extension.onHideButtonClick(event); | ||||||||
| 3Jlou > 25-03-2009 11:00:13 | ||||||||
Вопрос по аналогичному расширению Custom Buttons². | ||||||||
| Anton > 25-03-2009 14:51:19 | ||||||||
3Jlou
Со временем будет. | ||||||||
| austri > 25-03-2009 19:10:53 | ||||||||
прошу подсказать, что напис́ать в поле Код (мне нужно для FF 3.0.5 создать кнопку для запуска приложения). в этой теме в начале мной найдено вот что : Код:/*CODE*/
var path='C:\\Program Files\\Proxomitron\\Proxomitron.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(path);
process.init(file);
process.run(false,arguments,arguments.length);я лишь меняю путь на тот, который мне нужен, но не работает (что, в общем, и не удивительно - тогда ещё FF 3 не было, наверняка в этом причина) | ||||||||
| Infocatcher > 26-03-2009 00:19:41 | ||||||||
Я думаю, дело в аргументах. Код: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);
}
startProcess("c:\\WINDOWS\\system32\\notepad.exe");
startProcess("c:\\WINDOWS\\system32\\notepad.exe", ["c:\\boot.ini"]); | ||||||||
| austri > 26-03-2009 01:38:32 | ||||||||
Infocatcher, спасибо большое. всё получилось, хотя и не сразу. я использовал код, который ты привёл в своём последнем сообщении (честно признаться, не совсем понял назначение ссылки на более раннее обсуждение в этой теме - там тоже упоминается похожая на мою просьба, но с некоторыми отличиями), мне только пришлось экспериментальным путём убрать последнюю строку - сразу заработало как надо
дай, пожалуйста, ответ, можно ли такое осуществить ? | ||||||||
| 3Jlou > 26-03-2009 12:11:27 | ||||||||
насчёт кнопок от Custom Buttons² я высказался ошибочно, они частично подходят к Custom Buttons. Код:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAACXBIWXMAAAsTAAALEwEAmpwYAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBFTAyMHy7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BSMDVQYqg4jIKAUICxE+CDEESC4tKoMHJQODAIMCgwGDA0MAQyJDPcMChqMMbxjFGV0YSxlXMN5jEmMKYprAdIFZmDmSeSHzGxZLlg6WW6x6rK2s99gs2aaxfWMPZ9/NocTRxfGFM5HzApcj1xZuTe4FPFI8U3mFeCfxCfNN45fhXyygI7BD0FXwilCq0A/hXhEVkb2i4aJfxCaJG4lfkaiQlJM8JpUvLS19QqZMVl32llyfvIv8H4WtioVKekpvldeqFKiaqP5UO6jepRGqqaT5QeuA9iSdVF0rPUG9V/pHDBYY1hrFGNuayJsym740u2C+02KJ5QSrOutcmzjbQDtXe2sHY0cdJzVnJRcFV3k3BXdlD3VPXS8Tbxsfd99gvwT//ID6wIlBS4N3hVwMfRnOFCEXaRUVEV0RMzN2T9yDBLZE3aSw5IaUNak30zkyLDIzs+ZmX8xlz7PPryjYVPiuWLskq3RV2ZsK/cqSql01jLVedVPrHzbqNdU0n22VaytsP9op3VXUfbpXta+x/+5Em0mzJ/+dGj/t8AyNmf2zvs9JmHt6vvmCpYtEFrcu+bYsc/m9lSGrTq9xWbtvveWGbZtMNm/ZarJt+w6rnft3u+45uy9s/4ODOYd+Hmk/Jn58xUnrU+fOJJ/9dX7SRe1LR68kXv13fc5Nm1t379TfU75/4mHeY7En+59lvhB5efB1/lv5dxc+NH0y/fzq64Lv4T8Ffp360/rP8f9/AA0ADzT6lvFdAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAA4ElEQVR42oyRMWoCYRCFvz8sIpjCQpJaBNnKJo0nEOwED5HGLaxyDQsbqwQ8gBYewEpsxGBjWi0DgkUWweZLEZcIgaxvmuHNg5l5D7lUsLofx2mc7sdWDRmfjSOb80VJxJLzhU2ja0HR7miHODgNToijnV2LmaBiP0kRZ2vbtmdrxCS1b+VH0KqLNbcTY4PBeDupiXVtSQQckrdyobO5f+UTgI/4+X05bRzPHCBIhqsWwx82CGS0v5I7cpC7IgKehr1yobPx8XIkPHy9TBvHc2/IKvfNm4zKtfqGsP6J+3sAWOrW//ubszsAAAAASUVORK5CYII= Код кнопки: Код:this.LeftClick=function()
{
if (content.scrollY > 0) {
content.scrollTo(0, 0);
} else {
content.scrollTo(0, content.document.height);
}
}
this.MiddleClick=function()
{
content.scrollTo(0, (content.document.height - content.innerHeight)/2);
}
this.execute= function(evt)
{
switch(evt.button)
{
case 0:
this.LeftClick();
break;
case 1:
this.MiddleClick();
break;
}
}
this.setAttribute("onclick", "this.execute(event);");
this.tooltipText = "L: Go Top/Bottom | M: Go Middle | R: Menu";Кстати, что такого в коде, представленном мной, что кнопка работает быстро, а изначальный код "задумывается" при нажатии на кнопку? | ||||||||
| Anton > 26-03-2009 14:40:47 | ||||||||
austri
Не понятно, какую операцию требуется осуществить. Объясните пожалуйста подробней.
Зачем заморачиваться, используйте исходный код, он ведь работает как требуется.
Обработчик gQuot делает задержку в ~350 мс. Код:custombuttons. gQuot. dcDelay = 0;
this.setAttribute('onclick', 'gQuot(event, this)');это отключит задержку для вообще всех кнопок, использующих gQuot. Если надо изменить задержку для отдельной кнопки, можно написать Код:this. gQuot = {};
this. gQuot. __proto__ = custombuttons. gQuot;
this. gQuot. dcDelay = 1000;
this. setAttribute ('onclick', 'this.gQuot.mHandler(event, this)'); | ||||||||
| austri > 26-03-2009 16:31:50 | ||||||||
нужно, чтобы при нажатии кнопки страница отображалась так, как если бы я снимал галочку с пункта разрешить вэб-сайтам использовать свои цвет́а вместо установленных (настройки - содержимое - цвет́а) | ||||||||
| Anton > 26-03-2009 18:24:36 | ||||||||
austri Код:var pn = "browser.display.use_document_colors"; var pref = custombuttonsUtils. getPrefs (pn); custombuttonsUtils. setPrefs (pn, !pref); в раздел "Код". | ||||||||
| austri > 26-03-2009 20:09:56 | ||||||||
Anton | ||||||||
| DeeZ > 16-04-2009 19:39:53 | ||||||||
для Custom Buttons есть кнопка которая прячет и показывает панель закладок, код кнопки: Код:var a = document.getElementById("PersonalToolbar");
a.collapsed = !a.collapsed;Расширение Group/Sort Tabs 1.1.4 создает свою панель TabsGroum Manager GroupBar, вопрос в следующем, на что заменить "PersonalToolbar" из кнопки чтобы она скрывала\показывала панельку от Group/Sort Tabs 1.1.4 | ||||||||
| Anton > 16-04-2009 20:01:01 | ||||||||
DeeZ
На "TabGroupsManager.Toolbar" | ||||||||
| DeeZ > 17-04-2009 00:12:55 | ||||||||
Anton | ||||||||
| =Agasfer= > 11-05-2009 19:30:16 | ||||||||
Anton | ||||||||
| Anton > 11-05-2009 19:53:50 | ||||||||
68agasfer Код:toggleSidebar('viewSmileySidebar');если что - придётся уточнять у автора - у меня нет последней версии Smiley. | ||||||||
| =Agasfer= > 11-05-2009 20:10:59 | ||||||||
Anton | ||||||||
| Vladik > 14-05-2009 10:15:20 | ||||||||
А не подскажет ли кто - где хранятся файлы смайликов на компе ? Пусть на некоторые даже и ссылки будут , просто хочется эту папку забэкапить , как я понял при первом запуске смайлы подгружались откудато , но куда ? | ||||||||
| Крошка Ру > 14-05-2009 10:48:58 | ||||||||
Vladik а они на компе и храняться, а при использовании SmileySidebar подгружаются на форум с этого сайта > http://www.kolobok.us/,что бы это определить достаточно проследить URL одного из смайликов > http://www.kolobok.us/smiles/big_standart/help.gif | ||||||||
| 3Jlou > 27-05-2009 17:18:35 | ||||||||
Vladik, Крошка Ру тут вообще то обсуждают Custom Buttons, а не смайлики. | ||||||||
| 150pi > 28-05-2009 03:06:27 | ||||||||
Супер! Мощно у тя получилось! То же такой захотелось | ||||||||
| 3Jlou > 28-05-2009 10:34:21 | ||||||||
150pi, раздаю на торрентс_ру | ||||||||
| ragnaar > 28-05-2009 15:39:37 | ||||||||
Поясните мне, как соотносятся Custom Buttons и Custom Buttons2? Был форк или еще что? Просто подумал, что расширению самое место в нашей акции Сделано в России, но 2 аналогичных расширения меня смущают... | ||||||||
| 150pi > 28-05-2009 15:51:35 | ||||||||
3Jlou | ||||||||
| Anton > 28-05-2009 18:28:55 | ||||||||
150pi
Реально, только сложно.
Custom Buttons2 делала команда с custombuttons.phpbbnow.com | ||||||||
| 3Jlou > 28-05-2009 20:42:50 | ||||||||
150pi, вбей в поиск: Firefox Portable 3.0.10 | ||||||||
| ragnaar > 28-05-2009 23:20:07 | ||||||||
Между расширениями большая разница? И есть какие-то планы о будущем Custom Buttons? Не хотелось бы рекламировать заведомо остановившийся проект... | ||||||||
| Anton > 29-05-2009 19:50:37 | ||||||||
Технологическая - большая. CB2 - это всё ещё Custom Buttons 0.0.2 alpha, только с "довесами".
Если мне приходят идеи по поводу улучшений расширения, я их записываю и, по мере возможности реализую. Список пока не пуст, разработку я пока ещё не прекратил. | ||||||||
| ragnaar > 29-05-2009 22:30:12 | ||||||||
Anton | ||||||||
| 150pi > 30-05-2009 13:29:47 | ||||||||
3Jlou Спасибо, скачал. А как установить то? Черное окно моргает на секунду и все. Из командной строки то же самое. Поиск че т не помог. | ||||||||
| Anton > 30-05-2009 20:15:16 | ||||||||
ragnaar
Ссылка: https://addons.mozilla.org/ru/firefox/addon/2707 | ||||||||
| ragnaar > 31-05-2009 09:00:13 | ||||||||
Без иконки как-то... Стандертную иконку расширения юзать не хочется... | ||||||||
| Anton > 31-05-2009 16:13:07 | ||||||||
ragnaar
Пусть будет такая.
Код:var searchintab = "";
var searchinpage = "";
var interval = 180;
var tbr = getBrowser ();
var firstTab = tbr. tabContainer. childNodes [0];
var br = tbr. getBrowserForTab (firstTab);
if (!this. timer)
{
firstTab ["cbTimer"] =
{
tab: firstTab,
browser: br,
timer: null,
searchInTab: searchintab,
searchInPage: searchinpage,
pause: interval * 1000,
lastModified: br. contentDocument. lastModified,
win: window,
QueryInterface: function (iid)
{
if (iid. equals (Components. interfaces. nsISupports) ||
iid. equals (Components. interfaces. nsITimerCallback) ||
iid. equals (Components. interfaces. nsIEventHandler))
return this;
return Components. results. NS_ERROR_NO_INTERFACE;
},
removeEventListener: function ()
{
try
{
this. tab. removeEventListener ("load", this, false);
} catch (e) {}
},
handleEvent: function (event)
{
this. removeEventListener ();
if (this. isPageMatches ())
this. win. getAttention ();
},
isTabMatches: function ()
{
if (!this. searchInTab)
return true;
return (this. tab. label. indexOf (this. searchInTab) != -1);
},
isPageMatches: function ()
{
var plm = this. browser. contentDocument. lastModified;
var res = (this. lastModified != plm);
this. lastModified = plm;
return res;
},
notify: function (oTimer)
{
if (this. isTabMatches ())
{
this. tab. addEventListener ("load", this, false);
this. browser. reload ();
}
this. startTimer ();
},
startTimer: function ()
{
if (!this. timer)
this. timer = Components. classes ["@mozilla.org/timer;1"].
createInstance (Components. interfaces. nsITimer);
this. timer. initWithCallback (this, this. pause, Components. interfaces. nsITimer. TYPE_ONE_SHOT);
},
stopTimer: function ()
{
this. removeEventListener ();
if (!this. timer)
return;
this. timer. cancel ();
this. timer = null;
}
};
this. timer = firstTab ["cbTimer"];
if (!this. timer. isTabMatches ())
return;
this. timer. startTimer ();
}
else
{
this. timer. stopTimer ();
delete this. timer. tab ["cbTimer"];
this. timer = null;
}Если надо искать соответствие в заголовке таба, надо исправить строку Код:var searchintab = ""; например: Код:var searchintab = "Mozilla"; | ||||||||
| 150pi > 31-05-2009 20:45:44 | ||||||||
Супер! Только окно моргает после каждого интервала, а не только если на странице появились обновления...Еще, с заголовком что то не получается. Обновляет не зависимо от него. А так, все работает правильно - ваще респект! | ||||||||
| Anton > 31-05-2009 20:51:22 | ||||||||
Код проверяет изменения по lastModified документа, другого не придумалось. Код:this. tab. addEventListener ("load", this, false);вот так: Код://this. tab. addEventListener ("load", this, false); | ||||||||
| 150pi > 31-05-2009 22:22:00 | ||||||||
А как выключить скрипт то? | ||||||||
| Anton > 31-05-2009 23:31:29 | ||||||||
150pi | ||||||||
| 150pi > 01-06-2009 02:36:14 | ||||||||
А возможно сделать, что бы иконка кнопки после первого щелчка оставалась нажатой а после второго отжималась? А то не ясно работает в данный момент скрипт или нет. Ну или другими способами как нить сделать такое...msgbox например какой нить | ||||||||
| Anton > 01-06-2009 18:59:46 | ||||||||
Можно добавить в конце Код:this. checked = !this. checked; | ||||||||
| 150pi > 04-06-2009 13:28:21 | ||||||||
У меня возникла вот тут всем известная проблема с дублированием русских букв в ФФ. На сколько мне известно, на настоящий момент, решения этой проблеме нет. Можно ли сделать такую кнопку, которая в нажатом состоянии, при наборе текста русским языком после каждого символа, как бы нажимает бэкспейс? Только для русских букв что бы работало. Знаки препинания, спецсимволы, пробелы, английские буквы что бы не трогало. Если возможно такое, вы, фактически, станете первым, кто пофиксил этот редкий, странный баг. | ||||||||
| Lain_13 > 04-06-2009 16:00:12 | ||||||||
150pi | ||||||||
| Anton > 04-06-2009 17:20:41 | ||||||||
150pi
Можно, только я не уверен, что это поможет. Проверить не могу, у меня буквы не удваиваются. Вот код: Код:var handlerId = "cbKeyboardHandler-" + this. id;
if (!window [handlerId])
{
window [handlerId] =
{
win: window,
QueryInterface: function (iid)
{
if (iid. equals (Components. interfaces. nsISupports) ||
iid. equals (Components. interfaces. nsIEventHandler))
return this;
return Components. results. NS_ERROR_NO_INTERFACE;
},
setHandler: function ()
{
this. win. addEventListener ("keypress", this, true);
},
removeHandler: function ()
{
this. win. removeEventListener ("keypress", this, true);
},
handleEvent: function (event)
{
this. removeHandler ();
var target = event. originalTarget;
var e = document. createEvent ("KeyEvents");
e. initKeyEvent
(
"keypress", event. bubbles, event. cancelable, event. view,
event. ctrlKey, event. altKey, event. shiftKey, event. metaKey,
event. keyCode, event. charCode
);
target. dispatchEvent (e);
e = document. createEvent ("KeyEvents");
e. initKeyEvent
(
"keypress", true, true, event. view, false,
false, false, false, 8, 8
);
target. dispatchEvent (e);
event. preventDefault ();
this. setHandler ();
}
};
window [handlerId]. setHandler ();
this. checked = true;
}
else
{
window [handlerId]. removeHandler();
delete window [handlerId];
this. checked = false;
} | ||||||||
| 150pi > 04-06-2009 17:55:35 | ||||||||
спасибо, проверю, отпишу | ||||||||
| pyatikantrop > 04-06-2009 20:13:25 | ||||||||
Извинияюсь за оффтоп. | ||||||||
| 150pi > 04-06-2009 20:24:27 | ||||||||
нет, не стоит. вообще, слово яндекс даже не разу не набирал в браузере. расширения все стандартные. custom buttons, fast dial, addblock...на тот момент больше не было. темы все читал. вычитал, что возникает иногда при установленом стороннем приложении Shedko Badges. Снес его, ждем повторения. Слышал, что это не поможет уже. Потому и костыли. Сейчас пишу уже с мозиллы. Полет нормальный. | ||||||||
| pyatikantrop > 04-06-2009 20:36:30 | ||||||||
Вы его снесли, а настройки могли остаться... Лучше пробовать на новом профиле или до установки новых расширений его бекапить. Легче откатываться, если что. Ставите новый профиль переносите на него закладки, журнал и все такое, ставите по-новой расширения и избавляетесь от ошибок. | ||||||||
| 150pi > 04-06-2009 20:49:23 | ||||||||
ннее ззаассттааввииллоо ссееббяя ддооллггоо жжддааттьь. | ||||||||
| Anton > 04-06-2009 21:34:27 | ||||||||
ну, если код не даёт писать вообще никакими символами, значит, он работает. Код:target. dispatchEvent (e);
event. preventDefault ();
this. setHandler ();кусок кода на такой: Код://target. dispatchEvent (e);
event. preventDefault ();
this. setHandler ();Опять же, протестировать нечем, а если не поможет - ничем помочь не могу. | ||||||||
| pyatikantrop > 04-06-2009 21:39:20 | ||||||||
судя по всему без нового профиля вам не обойтись... | ||||||||
| 150pi > 05-06-2009 00:41:43 | ||||||||
А как сделать? У меня так все красиво там сделано...это портируется? | ||||||||
| 150pi > 05-06-2009 08:26:14 | ||||||||
Вот теперь код не работает | ||||||||
| pyatikantrop > 05-06-2009 09:03:33 | ||||||||
Портируется все, но в силу неконтролируемого размножения у вас букв, настройки лучше не переносить, иначе избавиться вам от этой проблемы вряд ли удастся. Настроить потом можно. О создании нового профиля написано подробно в FAQ | ||||||||
| 150pi > 05-06-2009 11:34:11 | ||||||||
спасибо | ||||||||
| 150pi > 12-06-2009 21:41:32 | ||||||||
Подскажите пожалуйста, как реализовать Код:javascript:var%20s=document.createElement('script');s.src='http://videosaver.ru/vs.js?nc='+Math.random();document.body.appendChild(s);void(0);Как сделать так, что бы его можно было вызывать кнопкой, а не закладкой? | ||||||||
| Anton > 12-06-2009 21:57:06 | ||||||||
"Завернуть" в loadURI: Код:loadURI ("javascript:var%20s=document.createElement('script');s.src='http://videosaver.ru/vs.js?nc='+Math.random();document.body.appendChild(s);void(0);"); | ||||||||
| 150pi > 12-06-2009 23:07:50 | ||||||||
Спасибо! Работает! | ||||||||
| Deim0s > 15-06-2009 13:24:08 | ||||||||
Anton Код: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);первый раз срабатывает нормально, при второй и последующих попытках запустить, в консоли появляется ошибка и приложение не запускается. Ошибка: Код:Ошибка: uncaught exception: [Exception... "Component returned failure code: 0xc1f30002 (NS_ERROR_ALREADY_INITIALIZED) [nsIProcess.init]" nsresult: "0xc1f30002 (NS_ERROR_ALREADY_INITIALIZED)" location: "JS frame :: chrome://custombuttons/content/cbbutton.js :: anonymous :: line 276" data: no] После перезапуска | ||||||||
| Infocatcher > 15-06-2009 14:40:14 | ||||||||
Кажется, оно: https://bugzilla.mozilla.org/show_bug.cgi?id=485379 Код:var nsIProcess = Components.classes["@mozilla.org/process/util;1"].getService(Components.interfaces.nsIProcess); Стало: Код:var nsIProcess = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess); | ||||||||
| Deim0s > 15-06-2009 14:58:34 | ||||||||
Infocatcher | ||||||||
| vurdalak > 04-07-2009 22:13:36 | ||||||||
Помогите создать кнопки: Код:toggleSidebar('viewBookmarksSidebar');А дальше нужно чтобы курсор сам установился на первый элемент (закладку) в сайдбаре. В смысле, чтобы была возможность клаишами стрелок "вниз" "вверх" передвигаться по сайдбару закладок сразу же после нажатия кнопки. Код:var a = document.getElementById("nav-bar");
a.collapsed = !a.collapsed;
var uBar = document.getElementById("urlbar");
uBar.focus();
uBar.select();При нажатии кнопки отображается панель адреса и курсор сразу же попадает туда и выделяет всю строку. Хотелось бы чтобы при повторном нажатии панель убиралась (это в принципе в этом коде уже есть) и потом срабатывало действие, которое можна вызвать клавишами Ctrl - Alt - F6 (тоесть сразу после этого можно двигать страницу клавишами стрелок "вверх","вниз") | ||||||||
| Infocatcher > 04-07-2009 23:46:54 | ||||||||
Примерно вот так: Код:toggleSidebar("viewBookmarksSidebar");
var sb = document.getElementById("sidebar");
if(sb.getAttribute("src") == "chrome://browser/content/bookmarks/bookmarksPanel.xul") {
sb.addEventListener(
"focus",
function(e) {
sb.removeEventListener(e.type, arguments.callee, true);
var tree = sb.contentDocument.getElementById("bookmarks-view");
tree.view.selection.select(0);
setTimeout(
function() { tree.focus(); },
0
);
},
true
);
} 04-07-2009 23:55:07
Про Ctrl+Alt+F6 не понял. Код:var nb = document.getElementById("nav-bar");
nb.collapsed = !nb.collapsed;
if(nb.collapsed)
content.focus();
else {
var uBar = document.getElementById("urlbar");
uBar.focus();
uBar.select();
}подойдет? | ||||||||
| vurdalak > 05-07-2009 02:00:02 | ||||||||
| ||||||||
| vurdalak > 05-07-2009 02:40:40 | ||||||||
| ||||||||
| Infocatcher > 05-07-2009 03:44:51 | ||||||||
Там четыре разных сайдбара получается – с разными идентификаторами. Код:var sbCmd = "viewBookmarksSidebar";
toggleSidebar(sbCmd);
var sbId = "sidebar" + ("MultiSidebar" in window ? MultiSidebar.getSidebarSuffix(sbCmd) : "");
var sb = document.getElementById(sbId);
var sbSrc = document.getElementById(sbCmd).getAttribute("sidebarurl");
if(sb.getAttribute("src") == sbSrc) {
sb.addEventListener(
"focus",
function(e) {
sb.removeEventListener(e.type, arguments.callee, true);
var tree = sb.contentDocument.getElementById("bookmarks-view");
setTimeout(
function() {
tree.view.selection.select(0);
tree.focus();
},
0
);
},
true
);
} | ||||||||
| vurdalak > 05-07-2009 04:05:22 | ||||||||
Несказанно благодарен | ||||||||
| E_U > 06-07-2009 04:27:17 | ||||||||
Здравствуйте! Можно ли добавить в панель инструментов кнопки из строки состояния? Интересуют кнопки дополнений QuickJava 0.4.2.1 (две кнопки - разрешить/запретить Java и разрешить/запретить JavaScript) и дополнения Yes Popups 0.9.8b (одна кнопка - разрешить/запретить всплывающие окна). Не нашел инструмента для того, чтобы посмотреть код кнопок этих дополнений, также не нашел инструмента для их перемещения. Помогите создать эти кнопки. Заранее спасибо! | ||||||||
| Anton > 06-07-2009 14:36:23 | ||||||||
E_U
Есть готовые здесь: http://xsms.nm.ru/custombuttons/en/ - последние две в самом низу страницы.
Вот: Код:var ps = Components. classes ['@mozilla.org/preferences-service;1'].
getService (Components. interfaces. nsIPrefBranch);
var state = ps. getIntPref ("privacy.popups.disable_from_plugins");
switch (state)
{
case 3:
ps. setCharPref ("dom.popup_allowed_events", "change click dblclick mouseup reset submit");
ps. setIntPref ("privacy.popups.disable_from_plugins", 0);
this. image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUA//////8AAAAA/wCgg87HAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfVDAoRIQMsGKdHAAAAKklEQVR42mNgQANaqxqghP7/Bgau9TCCMx9EZAElOEMjGJAIrlUrkLQDAHhSD9klS8gFAAAAAElFTkSuQmCC";
break;
case 0:
ps. setCharPref ("dom.popup_allowed_events", "");
ps. setIntPref ("privacy.popups.disable_from_plugins", 3);
this. image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEUA//////8AAAD/AACNPwdYAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfVDAoRIRJGqIe1AAAAKklEQVR42mNgQANaqxqghP7/Bgau9TCCMx9EZAElOEMjGJAIrlUrkLQDAHhSD9klS8gFAAAAAElFTkSuQmCC";
break;
} | ||||||||
| E_U > 06-07-2009 14:50:40 | ||||||||
Anton | ||||||||
| Najlus > 06-07-2009 16:03:11 | ||||||||
А что нужно прописать в кнопке, чтобы открыть нужную папку? (на программы такой код видел а вот на папки нет | ||||||||
| Anton > 06-07-2009 17:49:31 | ||||||||
Код:function startProcess (path, args)
{
var file = Components. classes["@mozilla.org/file/local;1"].
createInstance (Components.interfaces.nsILocalFile);
var process = Components. classes ["@mozilla.org/process/util;1"].
createInstance (Components. interfaces. nsIProcess);
file. initWithPath (path);
if (args == "")
{
file. launch ();
return;
}
process. init (file);
if (!this. pid)
this. pid = [];
this. pid. push (process. run (false, [args], 1));
}
startProcess ("c:\\windows\\explorer.exe", "c:\\temp\\");Не забывая про двойные слеши, в последней строчке вместо "c:\\temp\\" указываем нужный путь и, если необходимо, уточняем путь к explorer.exe. | ||||||||
| Najlus > 06-07-2009 18:12:21 | ||||||||
Не работает с папками с русским названием | ||||||||
| Anton > 06-07-2009 18:50:22 | ||||||||
Тогда в последней строке так: Код:startProcess ("c:\\Новая папка\\", ""); | ||||||||
| Najlus > 06-07-2009 18:56:56 | ||||||||
Спасибо Антон, всё работает | ||||||||
| Najlus > 10-07-2009 12:55:49 | ||||||||
Антон, извини что надоедаю, у меня проблема с переключением профилей без перезагрузки. Вот код:
во первых: список возможно вызвать только после одного щелчка по кнопке (после которого и появляется стрелочка рядом с иконкой). | ||||||||
| Anton > 10-07-2009 15:07:39 | ||||||||
Najlus
Значит, указанный код находится не в том разделе. Перемести его в раздел "Инициализация". После этого должно "отвалиться" и "во-вторых".
на
| ||||||||
| Najlus > 10-07-2009 16:05:51 | ||||||||
При попытке перехода выдаёт окно менеджера профилей | ||||||||
| Anton > 10-07-2009 16:45:26 | ||||||||
Это значит что профиль, на который производится переход, ещё не был создан. | ||||||||
| Najlus > 10-07-2009 19:12:02 | ||||||||
Профили существуют | ||||||||
| Anton > 10-07-2009 19:15:40 | ||||||||
Проверь внимательно. Вот в этой строке: Код:var _args = [["-no-remote", "-p", "Default"], ["-no-remote", "-p", "experementals"]]; вместо "Default" и "experementals" должны быть названия нужных профилей. | ||||||||
| Najlus > 10-07-2009 19:25:00 | ||||||||
Но у меня эти 2 профиля и стоят | ||||||||
| Anton > 10-07-2009 19:36:26 | ||||||||
Но отсутствие требуемого профиля или (что то же самое) несовпадение имени необходимого профиля с указанным в строке "var _args = ..." - это единственная причина, по которой появляется окно менеджера профилей. | ||||||||
| vurdalak > 12-07-2009 17:32:16 | ||||||||
Помогите написать скрипт Custom Button, где бы при нажатии кнопки: | ||||||||
| Anton > 12-07-2009 18:21:20 | ||||||||
vurdalak
Если я всё правильно понял, то вот: Код:var br = getBrowser ();
if (br. tabContainer. childNodes. length > 1)
{
br. removeCurrentTab ();
var fe = br. mCurrentBrowser. focusedElement;
fe && fe. blur ();
br. contentDocument. documentElement. focus ();
}
Могу только предложить (последней или предпоследней строкой) Код:custombuttons. alertSlide ("Осталось вкладок: ", br. tabContainer. childNodes. length);Монитор у меня один, проверить и попробовать ничего не могу. | ||||||||
| vurdalak > 12-07-2009 21:08:19 | ||||||||
Все вроде нормально, спасибо | ||||||||
| Anton > 12-07-2009 21:16:25 | ||||||||
И рад бы помочь, но моделировать нечем - один монитор у меня. | ||||||||
| Anton > 12-07-2009 22:41:31 | ||||||||
хотя Код:var br = getBrowser ();
if (br. tabContainer. childNodes. length > 1)
{
br. removeCurrentTab ();
var fe = br. mCurrentBrowser. focusedElement;
fe && fe. blur ();
br. contentDocument. documentElement. focus ();
}
f (this. id);
function f (bid)
{
var id = "cbpopup" + bid;
var p = document. getElementById (id);
if (!p)
{
p = <tooltip xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
id={id}
onpopupshown="setTimeout((function (arg) { return function () {arg. hidePopup ();}})(this), 2000);"/>
p = new DOMParser (). parseFromString (p. toXMLString (), "application/xml"). documentElement;
var ps = document. getElementById ("mainPopupSet");
ps. appendChild (p);
p. style. fontSize = "x-large";
p. onpopupshown = "{let THIS = this; setTimeout (function () { THIS. hidePopup (); }, 2);}";
}
p. label = "Осталось вкладок: " + br. tabContainer. childNodes. length;
var pw = p. boxObject. width;
var ph = p. boxObject. height;
var x = (window. screen. width - pw) / 2;
var y = (window. screen. height - ph) / 2;
p. openPopupAtScreen (x, y, false);
}? | ||||||||
| vurdalak > 13-07-2009 01:11:45 | ||||||||
Теперь работает по центру экрана на другом мониторе | ||||||||
| Sloopka > 14-07-2009 08:44:24 | ||||||||
Здравствуйте, у меня такой вопрос, а есть ли возможность сделать кнопку, которая будет брать текущий URL и favicon и создавать новую кнопку допустим с названием из <title>? И каким образом можно задать размер иконки? | ||||||||
| 3Jlou > 14-07-2009 12:41:31 | ||||||||
Господа, что то у меня перестала работать кнопка Backup Custom Buttons. FF 3.0.10, Custom Buttons 0.0.4.3. Код: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 Проверьте плиз | ||||||||
| Anton > 14-07-2009 19:01:19 | ||||||||
Sloopka
Так пойдёт: Код:var doc = getBrowser (). contentDocument;
var title = doc. title;
var pageURI = makeURI (doc. location. href, null, null);
var iconData = getFaviconData (pageURI);
custombuttons. cloneButton (this);
var newButtonLink = custombuttons. makeButtonLink ("update", this. nextSibling. id);
var params = custombuttons. cbService. getButtonParameters (newButtonLink). wrappedJSObject;
params. image = iconData;
params. name = title;
params. code = "loadURI (\"" + doc. location. href + "\");";
params. wrappedJSObject = params;
custombuttons. cbService. installButton (params);
function makeURI (aURL, aOriginCharset, aBaseURI)
{
var ioService = Components. classes["@mozilla.org/network/io-service;1"].
getService (Components. interfaces. nsIIOService);
return ioService. newURI (aURL, aOriginCharset, aBaseURI);
}
function getFaviconData (pageURI)
{
var fis = Components. classes ["@mozilla.org/browser/favicon-service;1"].
getService(Components.interfaces.nsIFaviconService);
var iconURL = fis. getFaviconForPage (pageURI);
return fis. getFaviconDataAsDataURL (iconURL);
}?
Можно так: Код:var elt = document. getAnonymousElementByAttribute (this, "class", "toolbarbutton-icon"); elt. style. height = "100px"; elt. style. width = "100px"; 3Jlou
Это не кнопка "Backup Custom Buttons". Это кнопка "Добавить закладку". Что именно не работает ? Код:custombuttons. getButtonById = function (num)
{
return document. getElementById ("custombuttons-button" + num);
}Если, конечно, я угадал с кнопкой. Если нет, мне нужен код переставшей работать кнопки. | ||||||||
| Sloopka > 14-07-2009 21:01:56 | ||||||||
Anton | ||||||||
| Najlus > 14-07-2009 21:06:13 | ||||||||
А как сделать кнопки перехода вперёд\назад (только без этой ненужной стрелочки сбоку). А то дефлорные в стиль както не вписываются | ||||||||
| Anton > 14-07-2009 21:31:04 | ||||||||
| ||||||||
| Infocatcher > 14-07-2009 22:09:17 | ||||||||
При установке в | ||||||||
| Infocatcher > 14-07-2009 23:08:33 | ||||||||
Сделал новый профиль. Не воспроизводится. Странно. *ковыряет расширения* | ||||||||
| Anton > 14-07-2009 23:08:33 | ||||||||
bug #351043, в 3.6 уже поправили : ) | ||||||||
| Infocatcher > 14-07-2009 23:12:51 | ||||||||
Т.е. страничка уже изменилась? (О вреде безлимитных интернетов, ага.) Код:var pId = "browser.tabs.warnOnClose";
var woc = navigator.preference(pId);
navigator.preference(pId, false);
var appStartup = Components.interfaces.nsIAppStartup;
if(canQuitApplication())
Components.classes["@mozilla.org/toolkit/app-startup;1"]
.getService(appStartup)
.quit(appStartup.eForceQuit | appStartup.eRestart);
navigator.preference(pId, woc);(Это были пляски с бубном в районе Session Manager'а. Оно, вроде, работает, и я не трогаю.
14-07-2009 23:22:26 Код:custombutton://<?xml version="1.0" encoding="UTF-8"?> <custombutton xmlns:cb="http://xsms.nm.ru/custombuttons/"> <name>alert</name> <image><![CDATA[custombuttons-stdicon-1]]></image> <mode>0</mode> <initcode><![CDATA[/*Initialization Code*/]]></initcode> <code><![CDATA[alert(0);]]></code> <accelkey><![CDATA[]]></accelkey> <help><![CDATA[]]></help> <attributes/> </custombutton> | ||||||||
| Anton > 14-07-2009 23:52:20 | ||||||||
Так поделись конфигами. | ||||||||
| Infocatcher > 15-07-2009 00:01:10 | ||||||||
Конфликт с расширением Firediff.
Пухлые конфиги были. Что для 3.0, что для 3.5.1pre. Код:function escape(s) {
var n = s;
n = n.replace(/&/g, "&");
n = n.replace(/</g, "<");
n = n.replace(/>/g, ">");
n = n.replace(/"/g, """);
return n;
}overlay chrome://firebug/content/firebugOverlay.xul chrome://firediff/content/firediff.xul Код:top.opener.escape из консоли ошибок это подтверждает. | ||||||||
| Anton > 15-07-2009 00:22:56 | ||||||||
Ок, завтра буду смотреть. Видимо, придётся escape-ить в сервисе. | ||||||||
| Infocatcher > 15-07-2009 00:35:23 | ||||||||
Нужно стучать по голове автору за кривую подмену стандартной глобальной функции. | ||||||||
| Najlus > 19-07-2009 15:02:01 | ||||||||
Антон, возможно слишком сложно, но было бы полезно. Нужна кнопка: при перетаскивании на неё вкладки сама вкладка закрывается, а в кнопке, в выпадающем списке появляется закладка с названием из заголовка. Удаляется закладка правым щелчком мыши. При открытии закладки (как в текущей, так и в новой вкладке) соответствующая закладка удаляется из списка кнопки. | ||||||||
| Infocatcher > 19-07-2009 15:56:42 | ||||||||
Najlus | ||||||||
| Najlus > 19-07-2009 16:25:13 | ||||||||
Не айс (с). | ||||||||
| Anton > 19-07-2009 16:53:25 | ||||||||
Najlus | ||||||||
| Al_H > 19-07-2009 16:58:09 | ||||||||
Ну тогда Taboo или Ридлейтер (Read it Later) Код:[v] аддон включен Стили: Default scrollbars [v] | Default buttons [v] | Large statusbar [v] ... Default [_] | [_] | [_] [откл. все] MuraCom [v] | [_] | [_] [откл. все] IdioticDark [_] | [_] | [_] [откл. все] FourDots [_] | [v] | [v] [откл. все] EyesClosed [v] | [v] | [v] [откл. все] [+ новый стиль] [turn searchbar icon on ][V] [+ добавить] У меня уже есть подборки стилей для лечения отвалившихся полосок прокрутки у темы и отвалившихся значков поисковой строки, закладок и табов. | ||||||||
| Anton > 19-07-2009 17:14:16 | ||||||||
Najlus Код:var menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. orient = "horizontal";
this. appendChild (menu);
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
};
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
var label = tab. label;
var br = getBrowser ();
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
var menu = this. getElementsByTagName ("menupopup") [0];
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("url", url);
menu. appendChild (mi);
this. type = "menu";
};
this. openTab = function (event)
{
var mi = event. target;
var url = mi. getAttribute ("url");
if (event. button < 2)
{
if (event. button == 0)
getBrowser (). loadURI (url, null, null);
else
getBrowser (). addTab (url);
menu. hidePopup ();
}
this. deleteMenuitem (mi);
};
this. deleteMenuitem = function (menuitem)
{
var menu = menuitem. parentNode;
menu. removeChild (menuitem);
if (menu. childNodes. length == 0)
{
menu. hidePopup ();
this. type = "";
}
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");Al_H
Поподробней, пожалуйста - я с темами и стилями как пользователь дела совсем не имею. | ||||||||
| Najlus > 19-07-2009 17:36:11 | ||||||||
Спасибо
Жаль | ||||||||
| Al_H > 19-07-2009 18:10:41 | ||||||||
С удовольствием. Есть аддон Stylish. Он фактически предоставляет интерфейс к двум сервисам - встроенным userChrome.css и userContent.css (которые, как Вы знаете, позволяют модифицировать внешний вид браузера и сайтов, соответственно, причем, начиная с версии 1.5, еще и специфично для URL или домена), плюс службы userstyles, таковые стили распространяющей. | ||||||||
| Anton > 19-07-2009 21:42:17 | ||||||||
Najlus Код:var path = "c:\\tabbookmarks.xml";
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
var label = tab. label;
var br = getBrowser ();
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
this. addMenuitem (label, url);
};
this. addMenuitem = function (label, url)
{
var menu = this. getElementsByTagName ("menupopup") [0];
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("url", url);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu ();
};
this. deleteMenuitem = function (menuitem)
{
var menu = this. getElementsByTagName ("menupopup") [0];
menu. removeChild (menuitem);
if (menu. getElementsByTagName ("menuitem"). length == 0)
{
menu. hidePopup ();
this. type = "";
}
this. flushMenu ();
};
this. flushMenu = function ()
{
var menu = this. getElementsByTagName ("menupopup") [0];
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. openTab = function (event)
{
var mi = event. target;
var menu = mi. parentNode;
var url = mi. getAttribute ("url");
if (event. button < 2)
{
if (event. button == 0)
getBrowser (). loadURI (url, null, null);
else
getBrowser (). addTab (url);
menu. hidePopup ();
}
else
event. stopPropagation ();
this. deleteMenuitem (mi);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();пойдёт ? | ||||||||
| Al_H > 19-07-2009 21:43:57 | ||||||||
Спасибо большое заранее! | ||||||||
| Крошка Ру > 19-07-2009 22:25:47 | ||||||||
Al_H, Anton | ||||||||
| Infocatcher > 19-07-2009 23:58:17 | ||||||||
На правах развлекательства: Код:var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\tabbookmarks.xml";
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
var label = tab. label;
var image = tab. image;
var br = getBrowser ();
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
this. addMenuitem (label, url, image);
};
this. addMenuitem = function (label, url, image)
{
var menu = this. getElementsByTagName ("menupopup") [0];
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("url", url);
mi. setAttribute ("tooltiptext", url);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu ();
};
this. deleteMenuitem = function (menuitem)
{
var menu = this. getElementsByTagName ("menupopup") [0];
menu. removeChild (menuitem);
if (menu. getElementsByTagName ("menuitem"). length == 0)
{
menu. hidePopup ();
this. type = "";
}
this. flushMenu ();
};
this. flushMenu = function ()
{
var menu = this. getElementsByTagName ("menupopup") [0];
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. openTab = function (event)
{
var mi = event. target;
var menu = mi. parentNode;
var url = mi. getAttribute ("url");
if (event. button < 2)
{
if (event. button == 0)
getBrowser (). loadURI (url, null, null);
else
getBrowser (). loadOneTab(url, null, null, null, false /*load in background*/, false);
menu. hidePopup ();
}
else
event. stopPropagation ();
this. deleteMenuitem (mi);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();+ путь относительно профиля | ||||||||
| Najlus > 20-07-2009 11:05:01 | ||||||||
Спасибо огромное
Тоже огромное спасибо | ||||||||
| Al_H > 20-07-2009 11:52:08 | ||||||||
Спасибо, Крошка Ру. Пока что не планирую научиться писать расширения. Думаю, копаться интересно в The Extra Dimension https://addons.mozilla.org/en-US/firefox/addon/12296 | ||||||||
| 3Jlou > 20-07-2009 12:25:58 | ||||||||
Хотелось бы посредством Custom Buttons привязать к портабельному фоксу портабельный менеджер загрузки (например Orbit Downloader). Мысль такая: папка PortableOrbitdownloader находится в папке FirefoxPortable, при перетаскивании ссылки на кнопку должен запускаться орбит и начинать закачку, нажатие ЛКМ на кнопку просто запускает орбит. Путь к менеджеру загрузки высчитывается относительно папки с профилем ФФ. Возможно ли реализовать подобное? | ||||||||
| Anton > 20-07-2009 15:55:32 | ||||||||
3Jlou
Мне не удалось найти ключа командной строки для Orbit, который бы указывал ему начинать закачку сразу же, без показа диалогового окна. (Да и вообще никаких ключей командной строки не нашел). Код:var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\orbit\\orbitdm.exe";
this. runOrbit = function (url)
{
var file = Components. classes["@mozilla.org/file/local;1"].
createInstance (Components.interfaces.nsILocalFile);
var process = Components. classes ["@mozilla.org/process/util;1"].
createInstance (Components. interfaces. nsIProcess);
file. initWithPath (path);
process. init (file);
if (!this. pid)
this. pid = [];
this. pid. push (process. run (false, url && [url]|| null, url && 1 || 0));
};
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/plain", 0);
if (!url)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/plain", 0);
if (url)
this. runOrbit (url);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");В раздел "Код": Код:this. runOrbit (""); | ||||||||
| 3Jlou > 20-07-2009 16:59:46 | ||||||||
Anton, огромное спасибо, то что надо, всё работает,но только при передаче ссылки напрямую orbitdm.exe, если же прописать в коде путь к лоадеру, то "лодырь" не передает ссылку орбиту, так что придётся отказаться от портабельной версии Орбита, попробую Download Master, он вроде без кривых лодырей портабится Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041D%u0438%u0436%u043D%u044F%u044F%20%u043F%u0430%u043D%u0435%u043B%u044C%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABxUlEQVR4XqWRP2oVURSHvztzXyZg/ENiZ2NjOsUtCHYuQndh4QIs3YCbsLBRwQUIgpViIQQFQdTE5M2bNzPnj+cy7zGFgRT+4OM7d5hzONybbj89enVwrbkngzO0wtBpEF7N9bgOr5SxG5HesF5wWePd0dt0//nP9d3D/ebkBJan0LZwVhwsC2ewCrpgHWdrAQcMaF/2eX83jbf2aE6BdRNcDq5Ctw534dXGhRaGHsyhwvn8IY/58MB5dAfcAcK2MYDPtRmoGmqKidMs4OGTilwDi4o5NefG3RFxzILsNDXkysmYclFKk4iFDdVpSAWohvWCfndH1cIW3g5RrOBGFjF+LwcS6fy1tWBTg3kxGl7UMIqSv/5oefbiGHX+SUrz0Lmciku7Fcetkm9c3+Xxg5uMNk9wKxjmHiZsQVgddwvgyo7x7s1Hcq5gr6mYA5ijmhDV0oSaIhIm8Onb2AcG2efdcWd704EhYrgXl/OMmYNPVME2mG1/sOLtC2ybwrZxYIYDuQ5Nceo6SAZiaA6JYmlaXcxY4NMTVrCTy0sk8uv3v+Tb9z/Sr0ZkEKQfkHEMK1o8FAQVAQdnSl0lPn05keTu/E/+ApLnoYXyGb2zAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.bottomPanel%20%3D%20function%28aURL%29%20%7B%0A%20%20var%20prefBranch%20%3D%20%22custombuttons.bottomPanel.%22%0A%0A%20%20if%28%21aURL%20%26%26%20aURL%20%21%3D%20%22%22%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20aURL%20%3D%20gPrefService.getCharPref%28prefBranch%20+%20%22url%22%29%3B%0A%20%20%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20%20%20aURL%20%3D%20%22%22%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%20%20if%28aURL%20%3D%3D%20%22%22%29%20return%3B%0A%0A%20%20if%28aURL%20%3D%3D%20gURLBar.value%20%26%26%20%21aURL.match%28/%5E%5Cw+%3F%5C%3A/%29%29%20aURL%20%3D%20%22http%3A//%22%20+%20aURL%3B%0A%0A%20%20var%20panelID%20%3D%20%22bottom-panel%22%3B%0A%20%20var%20gPanel%20%3D%20document.getElementById%28panelID%29%3B%0A%20%20var%20height%3B%0A%20%20try%20%7B%0A%20%20%20%20height%20%3D%20gPrefService.getIntPref%28prefBranch%20+%20%22height%22%29%3B%0A%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%20%20height%20%3D%20300%3B%0A%20%20%7D%0A%0A%20%20if%28gPanel%29%20%7B%0A%0A%20%20%20%20var%20src%20%3D%20gPanel.firstChild.nextSibling.getAttribute%28%22src%22%29%3B%0A%20%20%20%20if%28aURL%20%21%3D%20src%29%20%7B%0A%20%20%20%20%20%20gPanel.firstChild.nextSibling.setAttribute%28%22src%22%2C%20aURL%29%3B%0A%20%20%20%20%20%20//gPanel.firstChild.nextSibling.loadURI%28aURL%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20gPrefService.setIntPref%28prefBranch%20+%20%22height%22%2C%20gPanel.height%29%3B%0A%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel.previousSibling%29%3B%0A%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%7D%20else%20%7B%0A%0A%20%20%20%20var%20appContent%20%3D%20document.getElementById%28%22appcontent%22%29%3B%0A%0A%20%20%20%20var%20spl%20%3D%20appContent.appendChild%28document.createElement%28%22splitter%22%29%29%3B%0A%20%20%20%20%20%20%20%20spl.setAttribute%28%22collapse%22%2C%20%22after%22%29%3B%0A%20%20%20%20%20%20%20%20spl.style.border%20%3D%20%22none%22%3B%0A%20%20%20%20%20%20%20%20spl.style.borderTop%20%3D%20%222px%20solid%20threedhighlight%22%3B%0A%20%20%20%20%20%20%20%20spl.setAttribute%28%22onclick%22%2C%20%22this.setAttribute%28%27state%27%2C%20%27%27%29%3B%22%29%3B%0A%0A%20%20%20%20var%20box%20%3D%20appContent.appendChild%28document.createElement%28%22hbox%22%29%29%3B%0A%20%20%20%20%20%20%20%20box.id%20%3D%20panelID%3B%0A%20%20%20%20%20%20%20%20box.height%20%3D%20height%3B%0A%20%20%20%20%20%20%20%20box.orient%20%3D%20%22vertical%22%3B%0A%0A%20%20%20%20var%20tbr%20%3D%20box.appendChild%28document.createElement%28%22toolbar%22%29%29%3B%0A%20%20%20%20%20%20%20%20tbr.setAttribute%28%22fullscreentoolbar%22%2C%20true%29%3B%0A%0A%20%20%20%20var%20spr%20%3D%20tbr.appendChild%28document.createElement%28%22spacer%22%29%29%3B%0A%20%20%20%20%20%20%20%20spr.setAttribute%28%22flex%22%2C%201%29%3B%0A%0A%20%20%20%20var%20btn%20%3D%20tbr.appendChild%28document.createElement%28%22toolbarbutton%22%29%29%3B%0A%20%20%20%20%20%20%20%20btn.style.listStyleImage%20%3D%20%22url%28chrome%3A//global/skin/icons/Minimize.gif%29%22%3B%0A%20%20%20%20%20%20%20%20btn.minimize%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20gPanel%20%3D%20document.getElementById%28%22bottom-panel%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPanel.previousSibling.setAttribute%28%22state%22%2C%20%22collapsed%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20btn.setAttribute%28%22oncommand%22%2C%20%22this.minimize%28%29%22%29%3B%0A%0A%20%20%20%20var%20btc%20%3D%20tbr.appendChild%28document.createElement%28%22toolbarbutton%22%29%29%3B%0A%20%20%20%20%20%20%20%20btc.className%20%3D%20%22tabs-closebutton%22%3B%0A%20%20%20%20%20%20%20%20btc.closePanel%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20gPanel%20%3D%20document.getElementById%28%22bottom-panel%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPrefService.setIntPref%28prefBranch%20+%20%22height%22%2C%20gPanel.height%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel.previousSibling%29%3B%0A%20%20%20%20%20%20%20%20%20%20gPanel.parentNode.removeChild%28gPanel%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20btc.setAttribute%28%22oncommand%22%2C%20%22this.closePanel%28%29%22%29%3B%0A%0A%20%20%20%20var%20ifr%20%3D%20box.appendChild%28document.createElement%28%22browser%22%29%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22type%22%2C%20%22content%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22flex%22%2C%201%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22src%22%2C%20aURL%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22tooltip%22%2C%20%22aHTMLTooltip%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22onclick%22%2C%20%22return%20contentAreaClick%28event%2C%20true%29%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22autocompletepopup%22%2C%20%22PopupAutoComplete%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22contextmenu%22%2C%20%22contentAreaContextMenu%22%29%3B%0A%20%20%20%20%20%20%20%20ifr.setAttribute%28%22contentcontextmenu%22%2C%20%22contentAreaContextMenu%22%29%3B%0A%20%20%7D%0A%0A%20%20gPrefService.setCharPref%28prefBranch%20+%20%22url%22%2C%20aURL%29%3B%0A%0A%7D%20%20%0A%0A%0Athis.getBookmark%20%3D%20function%28%29%20%7B%0A%20%20var%20appInfo%20%3D%20Components.classes%5B%22@mozilla.org/xre/app-info%3B1%22%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%20%20%20.getService%28Components.interfaces.nsIXULAppInfo%29%3B%0A%20%20var%20isFx2%20%3D%20appInfo.version%20%3D%3D%20%222.0%22%3B%0A%20%20var%20url%20%3D%20%22%22%3B%0A%20%20var%20rv%20%3D%20isFx2%20%3F%20%7B%20urls%3A%20null%2C%20names%3A%20null%20%7D%20%3A%20%7B%20url%3A%20null%20%7D%3B%0A%20%20openDialog%28%22chrome%3A//browser/content/places/places.xul%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%2C%20%22modal%2C%20dialog%3Dno%2C%20minimizable%3Dno%2C%20centerscreen%2C%20resizable%22%2C%20rv%29%3B%0A%0A%20%20if%20%28rv.urls%20%26%26%20rv.names%29%20url%20%3D%20rv.urls%5B0%5D%0A%20%20else%20if%20%28rv.url%29%20%7B%0A%20%20%20%20url%20%3D%20rv.url%3B%0A%20%20%20%20if%20%28url.indexOf%28%22%7C%22%29%20%3E%200%29%0A%20%20%20%20%20%20url%20%3D%20url.split%28%22%7C%22%29%5B0%5D%3B%0A%20%20%7D%0A%20%20return%20url%3B%0A%7D%0A%0A%0Athis.getFile%20%3D%20function%28%29%20%7B%0A%20%20try%20%7B%0A%20%20%20%20const%20nsIFilePicker%20%3D%20Components.interfaces.nsIFilePicker%3B%0A%20%20%20%20var%20fp%20%3D%20Components.classes%5B%27@mozilla.org/filepicker%3B1%27%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28nsIFilePicker%29%3B%0A%20%20%20%20fp.init%28window%2C%20gNavigatorBundle.getString%28%22openFile%22%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nsIFilePicker.modeOpen%29%3B%0A%20%20%20%20fp.appendFilters%28nsIFilePicker.filterAll%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nsIFilePicker.filterText%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nsIFilePicker.filterImages%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nsIFilePicker.filterXML%20%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20nsIFilePicker.filterHTML%29%3B%0A%20%20%20%20if%28fp.show%28%29%20%3D%3D%20nsIFilePicker.returnOK%29%0A%20%20%20%20%20%20return%20fp.fileURL.spec%3B%0A%20%20%20%20else%20return%20%22%22%3B%0A%20%20%7D%20catch%20%28ex%29%20%7B%0A%20%20%7D%0A%7D%0A%0A%0Athis.popupShowing%20%3D%20function%28aNode%29%20%7B%0A%20%20var%20ioService%20%3D%20Components.classes%5B%22@mozilla.org/network/io-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.nsIIOService%29%3B%0A%20%20try%20%7B%0A%20%20%20%20var%20pasteURL%20%3D%20ioService.newURI%28readFromClipboard%28%29%2C%20null%2C%20null%29%3B%0A%20%20%7D%20catch%28ex%29%20%7B%0A%20%20%7D%0A%20%20if%28pasteURL%29%20aNode.lastChild.tooltipText%20%3D%20readFromClipboard%28%29%3B%0A%20%20aNode.lastChild.setAttribute%28%22disabled%22%2C%20%21pasteURL%20%3F%20true%20%3A%20false%29%3B%0A%7D%0A%0A%0Afunction%20addMenuitem%28aLabel%2C%20aURL%2C%20aNode%2C%20aObjString%29%20%7B%0A%20%20var%20mItem%20%3D%20aNode.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20mItem.setAttribute%28%22label%22%2C%20aLabel%29%3B%0A%20%20mItem.setAttribute%28%22oncommand%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20aObjString%20+%20%22.bottomPanel%28%27%22%20+%20aURL%20+%20%22%27%29%3B%22%29%3B%0A%7D%0A%0A%0Afunction%20addSeparator%28aNode%2C%20aNum%29%20%7B%0A%20%20var%20separator%20%3D%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20separator.id%20%3D%20%22bottom-panel-button-separator%22%20+%20aNum%3B%0A%7D%0A%0Avar%20mPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0AmPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0AmPopup.setAttribute%28%22onpopupshowing%22%2C%20%22this.parentNode.popupShowing%28this%29%22%29%3B%0A%0Avar%20smPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0AsmPopup.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.appendChild%28smPopup%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22%u0418%u0437%20%u0431%u043E%u043A%u043E%u0432%u043E%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%22%29%3B%0A%0Avar%20objString%20%3D%20%22this.parentNode.parentNode.parentNode.parentNode%22%3B%0Avar%20viewSidebarMenu%20%3D%20document.getElementById%28%22viewSidebarMenu%22%29%3B%0Avar%20sidebarItems%20%3D%20viewSidebarMenu.childNodes%3B%0Afor%28var%20i%20%3D%200%3B%20i%20%3C%20sidebarItems.length%3B%20i++%29%20%7B%0A%20%20var%20sidebarItem%20%3D%20sidebarItems%5Bi%5D%3B%0A%20%20if%28%28sidebarItem.hasAttributes%28%22sidebarurl%22%29%20%26%26%0A%20%20%20%20%20%20sidebarItem.getAttribute%28%22sidebarurl%22%29%20%21%3D%20%22%22%29%20%26%26%0A%20%20%20%20%20%28sidebarItem.hasAttributes%28%22label%22%29%20%26%26%0A%20%20%20%20%20%20sidebarItem.getAttribute%28%22label%22%29%20%21%3D%20%22%22%29%29%0A%20%20%20%20addMenuitem%28sidebarItem.getAttribute%28%22label%22%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sidebarItem.getAttribute%28%22sidebarurl%22%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20smPopup%2C%20objString%29%3B%0A%7D%0A%0AobjString%20%3D%20%22this.parentNode.parentNode%22%3B%0AaddMenuitem%28%22about%3Aconfig%22%2C%20%22about%3Aconfig%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u041A%u043E%u043D%u0441%u043E%u043B%u044C%20%u043E%u0448%u0438%u0431%u043E%u043A%22%2C%20%22chrome%3A//global/content/console.xul%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%22%2C%20%22chrome%3A//browser/content/places/places.xul%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20Cookies%22%2C%20%22chrome%3A//browser/content/preferences/cookies.xul%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%22%2C%20%22chrome%3A//mozapps/content/extensions/extensions.xul%3Ftype%3Dextensions%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0417%u0430%u0433%u0440%u0443%u0437%u043A%u0438%22%2C%20%22chrome%3A//mozapps/content/downloads/downloads.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%0A%0A//DownTHEMall%0Aif%20%28typeof%20DTA_ContextOverlay%20%3D%3D%20%22object%22%29%0A%20%20addMenuitem%28%22DownTHEMall%22%2C%20%22chrome%3A//dta/content/dta/manager.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%0A%0A//Stylish%0Aif%20%28typeof%20stylishCommon%20%3D%3D%20%22object%22%29%20%7B%0A%20%20if%20%28typeof%20stylishCommonOverlay%20%3D%3D%20%22object%22%29%20//if%20Stylish%200.5%0A%20%20%20%20addMenuitem%28%22Stylish%20Manager%22%2C%20%22chrome%3A//stylish/content/manage.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%20%20else%0A%20%20%20%20addMenuitem%28%22Stylish%20Manager%22%2C%20%22chrome%3A//stylish/content/stylish.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%7D%0A%0A%0A//MR%20Tech%20Local%20Install%20-%20My%20Config%0Aif%20%28typeof%20Local_Install%20%3D%3D%20%22object%22%29%0A%20%20addMenuitem%28%22%u041C%u043E%u044F%20%u043A%u043E%u043D%u0444%u0438%u0433%u0443%u0440%u0430%u0446%u0438%u044F%22%2C%20%22chrome%3A//local_install/content/infolister.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%0A%0A//QuickNote%0Aif%20%28typeof%20QuickNote_openQuickNote%20%3D%3D%20%22function%22%29%0A%20%20addMenuitem%28%22QuickNote%22%2C%20%22chrome%3A//quicknote/content/quicknote.xhtml%22%2C%20mPopup%2C%20objString%29%3B%0A%0A%0A//ChromeList%0Aif%20%28typeof%20startChromeEnumerator%20%3D%3D%20%22function%22%29%0A%20%20addMenuitem%28%22%u041F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%20Chrome%22%2C%20%22chrome%3A//chromelist/content/chromelist.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%0A//ChatZilla%0Aif%20%28typeof%20toIRC%20%3D%3D%20%22function%22%29%0A%20%20addMenuitem%28%22ChatZilla%22%2C%20%22chrome%3A//chatzilla/content/chatzilla.xul%22%2C%20mPopup%2C%20objString%29%3B%0A%0A%0AaddSeparator%28mPopup%2C%200%29%3B%0A%0Avar%20homePages%20%3D%20gHomeButton.getHomePage%28%29.split%28%22%7C%22%29%3B%0Avar%20homePage%20%3D%20homePages%5B0%5D%3B%0A%0AaddMenuitem%28%22%u0414%u043E%u043C%u0430%u0448%u043D%u044F%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22%2C%20homePage%2C%20mPopup%2C%20objString%29%3B%0A%0AaddMenuitem%28%22%u0422%u0435%u043A%u0443%u0449%u0430%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%22%2C%20%22%27%20+%20content.location.href%20+%20%27%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0418%u0441%u0445%u043E%u0434%u043D%u044B%u0439%20%u043A%u043E%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%22%2C%20%22view-source%3A%27%20+%20content.location.href%20+%27%22%2C%20mPopup%2C%20objString%29%3B%0A%0AaddSeparator%28mPopup%2C%201%29%3B%0A%0AmPopup.appendChild%28subMenu%29%3B%0AaddMenuitem%28%22%u0418%u0437%20%u0430%u0434%u0440%u0435%u0441%u043D%u043E%u0439%20%u0441%u0442%u0440%u043E%u043A%u0438%22%2C%20%22%27%20+%20gURLBar.value%20+%20%27%22%2C%20mPopup%2C%20objString%29%3B%0A%0A/*%20addMenuitem%28%22%u0418%u0437%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%22%2C%20%22%27%20+%20this.parentNode.parentNode.getBookmark%28%29%20+%20%27%22%2C%20mPopup%2C%20objString%29%3B%20*/%0AaddMenuitem%28%22%u0418%u0437%20%u0444%u0430%u0439%u043B%u0430%22%2C%20%22%27%20+%20this.parentNode.parentNode.getFile%28%29%20+%20%27%22%2C%20mPopup%2C%20objString%29%3B%0AaddMenuitem%28%22%u0418%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%u043E%u0431%u043C%u0435%u043D%u0430%22%2C%20%22%27%20+%20readFromClipboard%28%29%20+%20%27%22%2C%20mPopup%2C%20objString%29%3B%0A%0Athis.appendChild%28mPopup%29%3B%0Athis.type%20%3D%20%22menu-button%22%3B%0A%0A%0Athis.style.opacity%20%3D%20%27.65%27%3B%0Athis.setAttribute%28%27onmouseover%27%2C%20%27custombuttons.ButtonBrt%28event%29%3B%27%20%29%3B%0Athis.setAttribute%28%27onmouseout%27%2C%20%27custombuttons.ButtonDim%28event%29%3B%27%20%29%3B%0A%0A%0A//%20this.tooltipText%20+%3D%20%27%27%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.bottomPanel%28%29%3B%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5Bnull%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| Anton > 20-07-2009 17:26:30 | ||||||||
Firefox 3.5.1, Custom Buttons 0.0.4.3 - из downloads, т. е., тот, который выгружался для общего пользования на amo и mozdev - кнопка работает. | ||||||||
| 3Jlou > 20-07-2009 17:34:23 | ||||||||
Anton, спасибо, понял, буду искать косяк у себя | ||||||||
| vv07 > 22-07-2009 13:48:44 | ||||||||
Привет спецы.Вы как то помогли мне,с кнопкой закрытия вкладки.Сейчас очень нужна анлогичная,но для закрытия окна.То есть всплыло окно,которое необходимо закрыть.В частности при выставлении новости,просмотр идет через отдельное окно а не вкладку.Надеюсь что более менее обьяснил суть проблемы | ||||||||
| Anton > 22-07-2009 14:26:35 | ||||||||
vv07 | ||||||||
| Najlus > 24-07-2009 12:52:12 | ||||||||
по поводу кнопки videosafer: вот код
Вопрос: а как сделать чтобы вместо этого окношка videosafer'a сразу переправляло на сайт скачки? (ну типо автоматическое нажатие кнопки ОК. а то Вконтакте эта пенлька почемуто ЗА видяху уезжает и так не нажать | ||||||||
| Anton > 24-07-2009 20:49:46 | ||||||||
Najlus Код:var doc = getBrowser (). contentDocument;
var url = 'http://cs.videosaver.ru/get/?url=' + escape (doc. location);
var ps = "x=78&y=89&VideoSaverDoc=" + escape (doc. body. innerHTML);
var ss = Components. classes ["@mozilla.org/io/string-input-stream;1"].
createInstance (Components. interfaces. nsIStringInputStream);
if ("data" in ss)
ss. data = ps;
else
ss. setData (ps, ps. length);
var pd = Components. classes ["@mozilla.org/network/mime-input-stream;1"].
createInstance (Components. interfaces. nsIMIMEInputStream);
pd. addHeader("Content-Type", "application/x-www-form-urlencoded");
pd. addContentLength = true;
pd. setData (ss);
loadURI (url, makeURI (doc. location. href), pd, false); | ||||||||
| Najlus > 25-07-2009 11:02:12 | ||||||||
Спасибо | ||||||||
| razoo > 25-07-2009 12:00:50 | ||||||||
Здоровья всем. Код:MPContext.OEDownload(event); Как правильно? | ||||||||
| Najlus > 25-07-2009 14:00:28 | ||||||||
Антон, извини, что опять надоедаю, но не мог бы ты к кнопке с закладками (которой я тебя так долго мучал), прицепить внизу списка функцию "открыть всё в новых вкладках? | ||||||||
| Anton > 25-07-2009 16:44:29 | ||||||||
Najlus
никак | ||||||||
| Najlus > 25-07-2009 20:18:08 | ||||||||
А по поводу второго вопроса (пост 927)? | ||||||||
| Anton > 25-07-2009 20:25:26 | ||||||||
Najlus
Я сейчас занимаюсь вопросами razoo | ||||||||
| Infocatcher > 25-07-2009 21:08:35 | ||||||||
Секция «код»: Код:if(this.isBriefOpen())
gBrowser.removeTab(gBrief.tab);
else {
try { toggleSidebar(); }
catch(e) {}
gBrief.open(gBrief.shouldOpenInNewTab());
}Секция «инициализация»: Код:this.image = "chrome://brief/skin/toolbarbutton.png";
this.type = "checkbox";
this.isBriefOpen = function() {
return gBrief.tab == gBrowser.selectedTab;
};
this.updState = function() {
this.checked = this.isBriefOpen();
};
if(gBrief.onTabLoad.toString().indexOf("var ret = _onTabLoad.apply(this, arguments);") != -1)
return;
var _onTabLoad = gBrief.onTabLoad;
var _onTabSelect = gBrief.onTabSelect;
var _this = this;
gBrief.onTabLoad = function() {
var ret = _onTabLoad.apply(this, arguments);
_this.updState();
return ret;
};
gBrief.onTabSelect = function() {
var ret = _onTabSelect.apply(this, arguments);
_this.updState();
return ret;
};Если нужно поставить свою картинку, строку Код:this.image = "chrome://brief/skin/toolbarbutton.png"; нужно убрать. | ||||||||
| razoo > 25-07-2009 21:53:21 | ||||||||
Infocatcher | ||||||||
| Infocatcher > 25-07-2009 22:20:25 | ||||||||
Не должно бы. А оригинальная кнопка правильно меняет «нажатость»? Код:this.image = "chrome://brief/skin/toolbarbutton.png";
this.type = "checkbox";
this.isBriefOpen = function() {
return gBrief.tab == gBrowser.selectedTab;
};
this.updState = function() {
this.checked = this.isBriefOpen();
};
this.updState();
if(gBrief.onTabLoad.toString().indexOf("_cb_onTabLoad") != -1)
return;
var _cb_onTabLoad = gBrief.onTabLoad;
var _cb_onTabSelect = gBrief.onTabSelect;
var _cb_this = this;
gBrief.onTabLoad = function() {
var ret = _cb_onTabLoad.apply(this, arguments);
_cb_this.updState();
return ret;
};
gBrief.onTabSelect = function() {
var ret = _cb_onTabSelect.apply(this, arguments);
_cb_this.updState();
return ret;
};+ теперь устанавливается правильное состояние при создании кнопки. Код:if(gBrief.tab == gBrowser.selectedTab)
gBrowser.removeTab(gBrief.tab);
else {
try { toggleSidebar(); }
catch(e) {}
gBrief.open(gBrief.shouldOpenInNewTab());
} | ||||||||
| Anton > 25-07-2009 22:21:20 | ||||||||
razoo
В раздел "Код": Код:var url = getBrowser (). contentDocument. location. href;
url = url. match (/^([a-zA-Z]+:\/\/)?([^\/]+)\/([^?]*)?(.*)$/);
var domain = "";
if (url)
domain = url [1] + url [2] + "/*";
this. blockURL (this. uriToBlock || domain);
this. uriToBlock = "";В раздел "Инициализация": Код:/*Initialization Code*/
this. clickHandler = function (event)
{
if (event. button == 2)
return;
if (event. originalTarget. nodeName == "toolbarbutton")
return;
else if (event. originalTarget. nodeName == "menuitem")
this. uriToBlock = event. originalTarget. getAttribute ("label");
};
this. blockURL = function (url)
{
var Cc = Components. classes;
var Ci = Components. interfaces;
var NSISSI = Ci. nsISupportsString;
var blockedWebsitesArray;
var BlockSitePrefBranch = Cc ["@mozilla.org/preferences-service;1"]. getService (Ci. nsIPrefService). getBranch("BlockSite.");
if (BlockSitePrefBranch. prefHasUserValue ("locations"))
{
blockedWebsitesString = BlockSitePrefBranch. getComplexValue ("locations", NSISSI). data;
blockedWebsitesArray = blockedWebsitesString. split ("|||");
}
else
{
blockedWebsitesArray = new Array();
}
blockedWebsitesArray. push (url);
var locationNsIString = Cc ["@mozilla.org/supports-string;1"]. createInstance (NSISSI);
locationNsIString. data = blockedWebsitesArray. join ("|||");
BlockSitePrefBranch. setComplexValue ("locations", NSISSI, locationNsIString);
custombuttons. alertSlide ("Blocked: ", url);
};
this. createMenu = function (event)
{
var url = getBrowser (). contentDocument. location. href;
if (event && (event. originalTarget. nodeName != "toolbarbutton"))
return;
url = url. match (/^([a-zA-Z]+:\/\/)?([^\/]+)\/([^?]*)?(.*)$/);
var domain = "";
var levels = "";
if (url)
{
domain = url [1] + url [2] + "/";
var path = url [3] && url [3]. split ("/") || "";
var levels = [];
var curpath = "";
for (var i = 0; i < path. length; i++)
{
curpath = curpath + path [i] + "/";
levels. push (domain + curpath);
}
}
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
var menuitem;
for (var i = 0; i < levels. length; i++)
{
menuitem = <menuitem label={levels [i]}/>
menu.menuitem[i] = menuitem;
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
this. type = "menu-button";
this. orient = "horizontal";
};
this. createMenu (null);
this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
У меня получилось "корявей" чем у Infocatcher'а (и получилось ли как надо - я не пользователь Brief). Кстати, Infocatcher - спасибо.
Вторая в разделе "Инициализация", вроде бы как.
Перед строкой "MPContext.OEDownload(event);" надо добавить Код:var url = getBrowser (). contentDocument. location. href;
this. setAttribute ("url", url);Что касается вопросов по визуальному отображению кнопок.
Скорее всего, можно, но я не настолько знаток css, чтобы "слету" придумать, что там надо записать в "Инициализацию", нужны дополнительные исследования. | ||||||||
| razoo > 25-07-2009 22:27:58 | ||||||||
Infocatcher | ||||||||
| Anton > 25-07-2009 22:44:20 | ||||||||
"Прицеплением" дополнительного пункта меню я заморачиваться не стал. Код:type = "menu"; на Код:type = "menu-button"; В раздел "Код" добавить: Код:var menu = this. getElementsByTagName ("menupopup") [0];
var mi = menu. getElementsByTagName ("menuitem");
while (mi. length > 0)
{
getBrowser (). loadOneTab(mi [0]. getAttribute ("url"), null, null, null, false /*load in background*/, false);
this. deleteMenuitem (mi [0]);
} | ||||||||
| Infocatcher > 25-07-2009 22:50:01 | ||||||||
По поводу отображения кнопок. Код:-moz-appearance: none; border: none; + другие иконки на Код:with(this.style) {
MozAppearance = "none";
border = "none";
}
this.onmouseover = function() { this.image = "hover"; };
this.onmouseout = function() { this.image = "normal"; };
this.onmousedown = function() { this.image = "active"; };
this.onmouseup = function() { this.image = "hover"; };Вместо "normal", "hover" и "active" – должны быть соответствующие картинки. Код:with(this.style) {
MozAppearance = "none";
border = "none";
}
this.onmouseover = function() { this.style.opacity = "0.8"; };
this.onmouseout = function() { this.style.opacity = "1"; };
this.onmousedown = function() { this.style.opacity = "0.5"; };
this.onmouseup = function() { this.style.opacity = "0.8"; }; 25-07-2009 23:02:11 | ||||||||
| Anton > 25-07-2009 23:24:23 | ||||||||
Infocatcher | ||||||||
| Infocatcher > 26-07-2009 03:43:22 | ||||||||
Или можно открывать весь список при клике средней кнопкой мыши (по-прежнему в раздел «инициализация»): Код:var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\tabbookmarks.xml";
var loadInBackground = true;
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
var label = tab. label;
var image = tab. image;
var br = getBrowser ();
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
this. addMenuitem (label, url, image);
};
this. addMenuitem = function (label, url, image)
{
var menu = this. menu;
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("url", url);
mi. setAttribute ("tooltiptext", url);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu (menu);
};
this. deleteMenuitem = function (menuitem)
{
var menu = this. menu;
menu. removeChild (menuitem);
this. checkEmpty (menu);
this. flushMenu (menu);
};
this. checkEmpty = function (menu)
{
if (menu. getElementsByTagName ("menuitem"). length > 0)
return;
menu. hidePopup ();
this. type = "";
};
this. flushMenu = function (menu)
{
menu = menu || this. menu;
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. menu;
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. __defineGetter__
(
"menu",
function ()
{
return this. getElementsByTagName("menupopup") [0];
}
);
this. openTab = function (event)
{
var mi = event. target;
var menu = mi. parentNode;
var url = mi. getAttribute ("url");
if (event. button < 2)
{
if (event. button == 0)
getBrowser (). loadURI (url, null, null);
else
getBrowser (). loadOneTab(url, null, null, null, loadInBackground, false);
menu. hidePopup ();
}
else
event. stopPropagation ();
this. deleteMenuitem (mi);
this. flushMenu (menu);
};
this. onclick = function (event)
{
if (event. button != 1 || event. target != this)
return;
var menu = this. menu;
var mis = menu. getElementsByTagName ("menuitem");
var mi;
while (mis. length)
{
mi = mis[0];
getBrowser (). loadOneTab(mi. getAttribute ("url"), null, null, null, true /*load in background*/, false);
menu. removeChild (mi);
}
this. checkEmpty (menu);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu (); | ||||||||
| Najlus > 26-07-2009 10:47:52 | ||||||||
Infocatcher, Anton СПА-СИ-БО! | ||||||||
| Infocatcher > 26-07-2009 17:55:36 | ||||||||
Anton Код:if(gBrief.onTabLoad.toString().indexOf("_cb_onTabLoad") != -1)
return;
var _cb_onTabLoad = gBrief.onTabLoad;
var _cb_onTabSelect = gBrief.onTabSelect;
var _cb_this = this;
gBrief.onTabLoad = function() {
var ret = _cb_onTabLoad.apply(this, arguments);
_cb_this.updState();
return ret;
};
gBrief.onTabSelect = function() {
var ret = _cb_onTabSelect.apply(this, arguments);
_cb_this.updState();
return ret;
};
this.buttonDestructor = function() {
gBrief.onTabLoad = _cb_onTabLoad;
gBrief.onTabSelect = _cb_onTabSelect;
};Если пойти дальше, может пригодиться и чуть более расширенный вариант, который будет выполняться еще и при событии «unload» окна браузера. Код:var cssStr = "%button%:hover { opacity: 0.7 !important; }";
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
.getService(Components.interfaces.nsIStyleSheetService);
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var data = "data:text/css," + encodeURIComponent(cssStr.replace(/%button%/g, "#" + this.id));
var uri = ios.newURI(data, null, null);
sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
var _this = this;
this.addEventListener(
"DOMNodeRemoved",
function(e) {
_this.removeEventListener("DOMNodeRemoved", arguments.callee, true);
alert(e.type);
if(sss.sheetRegistered(uri, sss.USER_SHEET))
sss.unregisterSheet(uri, sss.USER_SHEET);
},
true
); 26-07-2009 18:07:23 Код:var cssStr = "%button%:hover { opacity: 0.7 !important; }";
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
.getService(Components.interfaces.nsIStyleSheetService);
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var data = "data:text/css," + encodeURIComponent(cssStr.replace(/%button%/g, "#" + this.id));
var uri = ios.newURI(data, null, null);
sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
var _this = this;
var unloadDestroy = false;
function destroy(e) {
alert(e.type + " => destroy()");
_this.removeEventListener("DOMNodeRemoved", destroy, true);
window.removeEventListener("unload", destroy, false);
if(e.type == "unload" && !unloadDestroy)
return;
if(sss.sheetRegistered(uri, sss.USER_SHEET))
sss.unregisterSheet(uri, sss.USER_SHEET);
}
this.addEventListener("DOMNodeRemoved", destroy, true);
window.addEventListener("unload", destroy, false); 26-07-2009 18:21:02 Код:this.image = "chrome://brief/skin/toolbarbutton.png";
this.type = "checkbox";
this.isBriefOpen = function() {
return gBrief.tab == gBrowser.selectedTab;
};
this.updState = function() {
this.checked = this.isBriefOpen();
};
this.updState();
if(gBrief.onTabLoad.toString().indexOf("_cb_onTabLoad") != -1)
return;
var _cb_onTabLoad = gBrief.onTabLoad;
var _cb_onTabSelect = gBrief.onTabSelect;
var _cb_this = this;
gBrief.onTabLoad = function() {
var ret = _cb_onTabLoad.apply(this, arguments);
_cb_this.updState();
return ret;
};
gBrief.onTabSelect = function() {
var ret = _cb_onTabSelect.apply(this, arguments);
_cb_this.updState();
return ret;
};
var _this = this;
var unloadDestroy = false;
function destroy(e) {
_this.removeEventListener("DOMNodeRemoved", destroy, true);
window.removeEventListener("unload", destroy, false);
if(e.type == "unload" && !unloadDestroy)
return;
gBrief.onTabLoad = _cb_onTabLoad;
gBrief.onTabSelect = _cb_onTabSelect;
}
this.addEventListener("DOMNodeRemoved", destroy, true);
window.addEventListener("unload", destroy, false); | ||||||||
| razoo > 26-07-2009 20:15:32 | ||||||||
Infocatcher Код:/*Initialization Code*/
with(this.style) {
MozAppearance = "none";
border = "none";
this. mouseover = function (event)
{
this. oldimage = this. image;
this. image = "file:///W:/ReloadwoCach2.png";
}
this. mouseout = function (event)
{
this. image = this. oldimage;
}
this. setAttribute ("onmouseover", "this.mouseover()");
this. setAttribute ("onmouseout", "this.mouseout()");Было: | ||||||||
| Infocatcher > 26-07-2009 21:22:56 | ||||||||
На отсутствие закрывающей фигурной скобки у
Примерно так: Код:function isVisible(node) {
if(!node)
return false;
var win = node.ownerDocument.defaultView;
return win.getComputedStyle(node, "").display != "none"
&& win.getComputedStyle(node, "").visibility != "collapse"
}
// Отступ слева:
if(isVisible(this.previousSibling))
this.style.marginLeft = "10px";
// Отступ справа:
if(isVisible(this.nextSibling))
this.style.marginRight = "10px";Или вообще без проверок: Код:this.style.marginLeft = "10px"; this.style.marginRight = "10px"; | ||||||||
| razoo > 27-07-2009 11:53:37 | ||||||||
Infocatcher Код:this.style.marginLeft = "-5px"; кнопки можно ставить вплотную. Именно, как хотелось!
Нет. Все равно исправить?
В предложенном вами коде так и было. Это я просто заменил на кусок, которым пользовался раньше :) | ||||||||
| Infocatcher > 27-07-2009 16:46:18 | ||||||||
Да, лучше исправить. Код:Ошибка: missing } in compound statement Источник: custombutton://buttons/Firefox/code/custombuttons-button11 Строка: 14 Более того, можно заменить код в инициализации на Код:try {
new Function(
'with(this.style) {\n\
MozAppearance = "none";\n\
border = "none";\n\
this. mouseover = function (event)\n\
{\n\
this. oldimage = this. image;\n\
this. image = "file:///W:/ReloadwoCach2.png";\n\
}\n\
this. mouseout = function (event)\n\
{\n\
this. image = this. oldimage;\n\
}\n\
this. setAttribute ("onmouseover", "this.mouseover()");\n\
this. setAttribute ("onmouseout", "this.mouseout()");'
).call(this);
} catch(e) { alert(e); }, и будет сообщение:
| ||||||||
| Najlus > 27-07-2009 19:20:48 | ||||||||
А можете сделать кнопку для менеджера сессий навроде той для закладок? | ||||||||
| Infocatcher > 27-07-2009 21:11:00 | ||||||||
Najlus | ||||||||
| Najlus > 27-07-2009 21:21:12 | ||||||||
Сори, переработал | ||||||||
| Anton > 27-07-2009 22:19:00 | ||||||||
Infocatcher
Они были в 0.0.3.0-0.0.3.5 на this. destroy = ...
Кажется, вопросы по визуальному оформлению разрешились ? | ||||||||
| Infocatcher > 27-07-2009 23:13:46 | ||||||||
Все же от деструктора при (пере)создании кнопки пользы больше. И настраивать кнопки при этом проще (а рестарты – это не айс). Код:var _this = this;
var unloadDestroy = false;
function destroy(e) {
(e.type == "DOMNodeRemoved" && e.originalTarget !== _this)
return;
_this.removeEventListener("DOMNodeRemoved", destroy, true);
window.removeEventListener("unload", destroy, false);
if(e.type == "unload" && !unloadDestroy)
return;
// Some code
}
this.addEventListener("DOMNodeRemoved", destroy, true);
window.addEventListener("unload", destroy, false); | ||||||||
| razoo > 27-07-2009 23:30:50 | ||||||||
...поставил Session Manager, но быстро удалил. Код:sg.Grab(new sg.VisibleTarget(), sg.CaptureViewPort, new sg.SaveAction()); Код:sg.Grab(new sg.FrameTarget(), sg.CaptureViewPort, new sg.SaveAction()); Код:sg.Grab(new sg.SelectionTarget(), sg.CaptureViewPort, new sg.SaveAction()); По отдельности все работают правильно, но зачем делать 3 кнопки, если можно объединить это в одной. Код:getWebNavigation().gotoIndex(0); Как сделать, чтобы, вернувшись к самой первой - кнопка становилась (выглядела) неактивной как и стандартные лисовские стрелки, показывая что дальше «мотать некуда»? | ||||||||
| Infocatcher > 27-07-2009 23:50:53 | ||||||||
В инициализацию: Код:this.onclick = function(e) {
if(e.button == 0 && e.shiftKey) { ... }
};В наличии свойства:
Код:this.disabled = true; Только стилевого оформления почему-то нету.
Применительно к стрелкам – Код:this. setAttribute ("command", "Browser:BackOrBackDuplicate");
this. setAttribute ("oncommand", "BrowserBack(event)");
this. setAttribute ("onclick", "checkForMiddleClick(this,event)");(но это все копировалось из Firefox 3.5)
Если только сделать «обертку» для оригинальной функции открытия. И то потом может выясниться, что нужно еще и код в самом окне как-то корректировать. | ||||||||
| Infocatcher > 28-07-2009 00:55:13 | ||||||||
В том плане, что хотелось бы, чтобы все CB-кнопки визуализировали [disabled="true"] через стили. | ||||||||
| Infocatcher > 28-07-2009 06:13:26 | ||||||||
Кстати, автор Firediff одумался. Код:var JsDiff = (function() {
// ...
function escapeHTML(s) {
var n = s;
n = n.replace(/&/g, "&");
n = n.replace(/</g, "<");
n = n.replace(/>/g, ">");
n = n.replace(/"/g, """);
return n;
}Примерно через 5 дней, однако. При этом я ему не писал. | ||||||||
| Najlus > 28-07-2009 12:20:48 | ||||||||
А можно как нить через CSS скрыть в кнопке менеджера дополнений пункты: "Загрузить сессию", "Восстановить сессию", "переименовать сессию", "группировать сессию(ии)", "открыть папку сессий" и "Настройки менеджера сессий" | ||||||||
| Al_H > 28-07-2009 15:43:41 | ||||||||
Спасибо! | ||||||||
| Infocatcher > 28-07-2009 19:11:10 | ||||||||
В общем случае вот так: Код:menuitem[label="Загрузить сессию..."],
menu[label="Восстановить сессию"],
menuitem[label="Переименовать сессию"],
menuitem[label="Группировать сессию(ии)"],
menuitem[label="Открыть папку сессий"],
menuitem[label="Настройки Менеджера сессий"] {
display: none !important;
}Чтобы скрыть разделители, можно заменить Код:menuitem[label="Загрузить сессию..."],
menu[label="Восстановить сессию"],
menu[label="Восстановить сессию"] + menuseparator,
menuitem[label="Переименовать сессию"],
menuitem[label="Группировать сессию(ии)"],
menuitem[label="Открыть папку сессий"],
menuitem[label="Открыть папку сессий"] + menuseparator,
menuitem[label="Настройки Менеджера сессий"] {
display: none !important;
}А вообще, лучше смотреть в DOM Inspector'е (а то в меню Инструменты тоже скроет, ну, и лучше, когда без привязки к локали): Код:#sessionmanager-toolbar [oncommand="gSessionManager.load();"],
#sessionmanager-toolbar [_id="backup-separator"],
#sessionmanager-toolbar [_id="backup-menu"],
#sessionmanager-toolbar [oncommand="gSessionManager.rename();"],
#sessionmanager-toolbar [oncommand="gSessionManager.group();"],
#sessionmanager-toolbar [oncommand="gSessionManager.openFolder();"],
#sessionmanager-toolbar [_id="options-separator"],
#sessionmanager-toolbar [oncommand="gSessionManager.openOptions();"] {
display: none !important;
} | ||||||||
| Najlus > 28-07-2009 19:33:08 | ||||||||
СПАСИБО!!!
Меню я вообще убрал, так что ничего страшного | ||||||||
| Al_H > 29-07-2009 02:21:55 | ||||||||
Anton | ||||||||
| Anton > 29-07-2009 15:45:50 | ||||||||
razoo
Не получилось. Если делать меню, как оно прописано в оверлее TMP, то почему-то не отображается список сессий в основном меню и в меню "Rename", отображается в меню "Delete".
Примерно так:
Не понял. В FF, кажется, нет функции upOneFolder.
В коде той кнопки, что уже есть, перед строкой Код:menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement; надо добавить строки Код:menu. appendChild (<menuseparator/>);
menu. appendChild (<menuitem label="Black List" oncommand="event.stopPropagation();window.open('chrome://blocksite/content/BlockSitePrefs.xul', '', 'chrome,centerscreen');"/>);Infocatcher
Ок, посмотрю.
Не могу воспроизвести. На какой минимальной конфигурации это происходит и после выполнения каких действий ? | ||||||||
| Al_H > 29-07-2009 16:29:07 | ||||||||
Будем считать, Stylish+Stylish Custom. Мне тоже не удалось воспроизвести. У Вас самопроизвольно стили не включаются? | ||||||||
| 3Jlou > 29-07-2009 16:36:28 | ||||||||
Anton, приспособил написанную тобой кнопку под Download Master Portable, папку которого кинул в папку с профилем лисы: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EDownload%20Master%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20profileDir%20%3D%20Components.classes%5B%22@mozilla.org/file/directory_service%3B1%22%5D%0A%20%20%20%20.getService%28Components.interfaces.nsIProperties%29%0A%20%20%20%20.get%28%22ProfD%22%2C%20Components.interfaces.nsILocalFile%29%0A%20%20%20%20.path%3B%0Avar%20path%20%3D%20profileDir%20+%20%22%5C%5CDmaster%5C%5Cdmaster.exe%22%3B%0A%0Athis.%20runDM%20%3D%20function%20%28url%29%0A%7B%0A%20%20%20%20var%20file%20%3D%20Components.%20classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.%20classes%20%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIProcess%29%3B%0A%20%20%20%20file.%20initWithPath%20%28path%29%3B%0A%20%20%20%20process.%20init%20%28file%29%3B%0A%20%20%20%20if%20%28%21this.%20pid%29%0A%20%20%20%20%20%20%20%20this.%20pid%20%3D%20%5B%5D%3B%0A%20%20%20%20this.%20pid.%20push%20%28process.%20run%20%28false%2C%20url%20%26%26%20%5Burl%5D%7C%7C%20null%2C%20url%20%26%26%201%20%7C%7C%200%29%29%3B%0A%7D%3B%0A%0Athis.%20handleDragOver%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20dt%20%3D%20event.%20dataTransfer%3B%0A%20%20%20%20var%20url%20%3D%20dt.%20mozGetDataAt%20%28%22text/plain%22%2C%200%29%3B%0A%20%20%20%20if%20%28%21url%29%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20event.%20preventDefault%20%28%29%3B%0A%20%20%20%20event.%20stopPropagation%20%28%29%3B%0A%20%20%20%20return%20dt.%20effectAllowed%20%3D%20dt.%20dropEffect%20%3D%20%22link%22%3B%0A%7D%0A%0Athis.%20handleDrop%20%3D%20function%20%28event%29%0A%7B%0A%20%20%20%20var%20dt%20%3D%20event.%20dataTransfer%3B%0A%20%20%20%20var%20url%20%3D%20dt.%20mozGetDataAt%20%28%22text/plain%22%2C%200%29%3B%0A%20%20%20%20if%20%28url%29%0A%20%20%20%20%20%20%20%20this.%20runDM%20%28url%29%3B%0A%7D%3B%0A%0Athis.%20setAttribute%20%28%22ondragdrop%22%2C%20%22return%20this.%20handleDrop%20%28event%29%3B%22%29%3B%0Athis.%20setAttribute%20%28%22ondragover%22%2C%20%22return%20this.%20handleDragOver%20%28event%29%3B%22%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.%20runDM%20%28%22%22%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E Напомню: при нажатии на кнопку ЛКМ запускается DMaster, при перетаскивании ссылки на кнопку - ссылка передается для закачки DMaster`у. | ||||||||
| Najlus > 29-07-2009 16:44:18 | ||||||||
Пытался сделать кнопку для открытия\закрытия тулбара дополнения TextFormattingToolbar.
| ||||||||
| Anton > 29-07-2009 16:49:20 | ||||||||
При переключении на тему в строке которой для стиля установлен флажок - включаются.
Не понятно: надо отображать стили с определённым префиксом или не отображать стили с определённым префиксом ?
Фильтрацию по коду стиля делать не буду.
Попробую.
Здесь не понятно.
Если по средней кнопке - надо добавить в раздел "Инициализация" Код:this. handleClick = function (event)
{
if (event. button == 1)
this. runDM (custombuttonsUtils. gClipboard. read ());
};
this. setAttribute ("onclick", "this. handleClick (event);");Если по левой кнопке - в раздел "Код" поместить строку Код:this. runDM (custombuttonsUtils. gClipboard. read ()); 29-07-2009 17:04:23 Код:getElementById("Text Formatting toolbar");Таких id вроде бы не бывает. Сможешь выяснить с помощью DOM Inspector'а её (панели инструментов) id ? | ||||||||
| Najlus > 29-07-2009 17:40:08 | ||||||||
Если с ним поразбираться, то наверное | ||||||||
| 3Jlou > 29-07-2009 17:40:54 | ||||||||
Так работает: Код:var a = document.getElementById("toolbar-format");
a.collapsed = !a.collapsed; 29-07-2009 17:47:26 | ||||||||
| Najlus > 29-07-2009 18:47:25 | ||||||||
3Jlou спасибо | ||||||||
| Infocatcher > 29-07-2009 19:08:17 | ||||||||
Я как-то встречал с пробелами. Ну, то есть оно, вроде бы, не валидно, но браузер значение не проверяет. Код:var clone = this.cloneNode(true); var id = "Кириллица, однако!"; clone.id = id; this.parentNode.insertBefore(clone, this.nextSibling); alert(document.getElementById(id).id); | ||||||||
| Anton > 29-07-2009 20:50:58 | ||||||||
Al_H
При переключении тем удалось "поймать" самопроизвольное включение. Попробую исправить. | ||||||||
| Al_H > 29-07-2009 21:11:25 | ||||||||
Я предложил скрыть часть стилей из таблицы, оставив только те, что относятся к темам. Как это сделать? Либо с помощью части имени стиля themecustomization- (themecustomization-defaultscrollbars, themecustomization-outlinedscrollbars, themecustomization-searchfavicon), либо уже делать отдельное окошко с перечнем стилей и флажком [_]Показать в таблице. В любом случае, так как сейчас – неразумно. Большая часть стилей в Stylish у меня не для тем, а для сайтов. И в них даже задано, что они относятся не к хрому. Как минимум, их можно сразу не выводить. И из остальных много лишних, только таблицу забивают.
ок
Допустим, у Вас включен стиль при добавлении этой кнопки. Значит, он будет включен для всех тем. Логично? Теперь Вы открываете Stylish-Custom, и там его отключаете. Затем выбираете другую тему или ставите новую. Что произойдет?
1. Стили, относящиеся именно к исправлению ошибок тем, то есть, те, которые нас с Вами интересуют. В отличие от тех, которые перекрашивают Яндекс в зеленый цвет, или увеличивают в 4 раза кнопку с плюсиком на сайте, посвященном физике тотализаторов. | ||||||||
| Anton > 29-07-2009 21:39:18 | ||||||||
Al_H
Понятно.
Самопроизвольное включение я уже видел. Предполагаю, что код кнопки срабатывает раньше кода Stylish.
Понятно, т. е., стили с заданными префиксами. | ||||||||
| Al_H > 30-07-2009 04:47:43 | ||||||||
Тут путаница. При установке новой темы как раз происходит переключение на нее. | ||||||||
| Anton > 30-07-2009 17:01:55 | ||||||||
Al_H | ||||||||
| razoo > 01-08-2009 09:23:49 | ||||||||
Антон.
Точно. Это была команда одной из кнопок расширения “Toolbar Buttons”. Самодельная кнопка работала, но после того как расширение было удалено – перестала. Как, кстати, и Рестарт Лисы. Какой код теперь нужно ставить в кнопку для перезагрузки? Или только с расширением? Код:this. onclick = function (event)
{
if (event. button > 0)
return;
if (event. ctrlKey)
sg.Grab(new sg.FrameTarget(), sg.CaptureViewPort, new sg.SaveAction());;
else if (event. shiftKey)
sg.Grab(new sg.SelectionTarget(), sg.CaptureViewPort, new sg.SaveAction());;
else
sg.Grab(new sg.VisibleTarget(), sg.CaptureViewPort, new sg.SaveAction());
};не работает Код:{
if (e.button > 0)
return;
if(e.button == 0)
sg.Grab(new sg.VisibleTarget(), sg.CaptureViewPort, new sg.SaveAction());;
if(e.button == 0 && e.ctrlKey)
sg.Grab(new sg.FrameTarget(), sg.CaptureViewPort, new sg.SaveAction());;
if(e.button == 0 && e.shiftKey)
sg.Grab(new sg.SelectionTarget(), sg.CaptureViewPort, new sg.SaveAction());
};работает, но косо: если щелкнуть ctrl – клик или shift – клик, предлагает сначала сохранить как на просто клик, а только потом то, что прописано на ctrl или shift, соответственно.
можно узнать, что значит "обертка"? ) | ||||||||
| 3Jlou > 01-08-2009 13:20:30 | ||||||||
razoo, есть кнопки рестарта: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3ERestart%20%28with%20confirmation%29%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjM2qefiJQAAA5xJREFUOE9Vk3tMW1Ucx09ZfMznFMTAH8rciNlGtomSGZOpy0xo0JXpomS/y+2ljw1oqdCxDRQ6oERhTKakQHSsgKUrfRAJpmPLVoogYwErQ8iUR2+5XSc0Osk2jWwp9OdpiW7e5JN7cnK+n3N+v5MjIvd/2e51RBSTFpfwWNYTInxbRDB+KRQOL4VRuB1C98pfoQ4SxkmyRnSbrGAS/X91Lw7uhCcLhtvEp2b+yLQJKP02gEpnALMcc5jeMYsvN/+C6yvHFohi8EvC9L/ysOZyz5oDQ6FVAbgTE4pGe7Wu35YP9l7H9+0+3Gvl8d37eM/G414Ljy8ZrobW5g1dy+ycW97ysQcJ2d8X+5TmsqW47/fwwbPXUUIXRcL7bD6UdPJRIuPIXHSeyt8yzeJnnkVM1Y1RgWwg/Z1W7y3NxSCKO7yYYfbSI3sxqeYnTCwZjbKxbgLFVJxBBRlUtoeWpR9ZxO26H5HEFw059zsX8E0zjztaZ3GHcQYfLRq8RTJaW8jmbDHZxIhFEkv32uLhUErLDKaZfPiazY+FlxZxS8kIkiz1AEqcwdUwJbIzeaPRQDsTR4khu4wvkD12J8kdXCYl9MiVE/hMkxclF2/gBs139wRJzdP4fNM0Pn5kGElyQUq0ua+3P0h2n7lAmPMhcojudpQ2rYwe+9g4JrfNYTzbi0RW4cEDLUGEWh+CfhpBPbAEinOJUUHaFx+Q1Dor2faJmWylbK42k036VV6sMpPtx22EKxy4I2+mgmoeQXcVQTOEwDnzo7cL8AgllvI0MPUpoDKmQqExBTSNyZB3Yj2wZc8RNtc5KjX4kdFTQekkQjlFcf4aQDfHQle8FOxxdLyT+9BVUNwh5Hx0RsiscPh3ag1XtkGOJZGwYMxXVI/dVRmEVYHuZ1rK1Apoh2+CyjWerXJ9L9eNXKBhk87qr6nqErSVdh5Ux1y7OWiIJVI4voGRdfVVWgJhZV2kjCmET/kVqOP/hJP8gqLZN6H9OuAutwesVQ7/Sb1DKD3U4MkBpu3VHKh6iNbJxMigfpdc2TNZ2u4P5zcKyJzgw1Av3GEM/htqY2C6rGv+UnX3/DdU0HS46UqFVGbK4qBk3X8PiTbpARnUpnNye39hjeeusoHHvJZfl1XtwZtHOoO8zjH/w+FTU+fUuv7T2VJTLgdHn6UZ0f9eckTCQvlWFhpKOWWPR65xLVH+pgQV6rPjrNz6OQe1YhbKEujamH/D/wBqNRb8pCuFJAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20*****%20VARS%20*****%20//%0A%0Avar%20prompts%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%20%20%20%20.getService%28Components.interfaces.nsIPromptService%29%3B%0A%0A%0A%0A%0A//%20*****%20FUNCTIONS%20*****%20//%0A%0Afunction%20createBrandingBundle%28%29%20%7B%0A%20%20%20%20var%20myBrandingPath%20%3D%20null%3B%0A%20%20%20%20var%20myStringBundleService%20%3D%20Components.classes%5B%22@mozilla.org/intl/stringbundle%3B1%22%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%20.getService%28Components.interfaces.nsIStringBundleService%29%3B%0A%20%20%20%20%0A%20%20%20%20myBrandingPath%20%3D%20%22chrome%3A//branding/locale/brand.properties%22%0A%20%20%20%20return%20myStringBundleService.createBundle%28myBrandingPath%29%3B%0A%7D%0A%0A%0Afunction%20getWindowType%28%29%20%7B%0A%20%20%20%20//%20Relies%20on%20Branding%20Code%20so%20can%20not%20be%20run%20on%20startup%0A%20%20%20%20var%20myBrandStrings%20%3D%20createBrandingBundle%28%29%3B%0A%20%20%20%20var%20thisBrandShortName%20%3D%20myBrandStrings.GetStringFromName%28%22brandShortName%22%29%0A%20%20%20%20switch%20%28thisBrandShortName%29%20%7B%0A%20%20%20%20%20%20case%20%22Mozilla%20Thunderbird%22%3A%0A%20%20%20%20%20%20case%20%22Shredder%22%3A%0A%20%20%20%20%20%20case%20%22Thunderbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22mail%3A3pane%22%3B%0A%20%20%20%20%20%20case%20%22Nvu%22%3A%0A%20%20%20%20%20%20%20%20return%20%22composer%3Ahtml%22%3B%0A%20%20%20%20%20%20case%20%22Calendar%22%3A%0A%20%20%20%20%20%20case%20%22Sunbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22calendarMainWindow%22%3B%0A%20%20%20%20%20%20case%20%22eMusic%20Download%20Manager%22%3A%0A%20%20%20%20%20%20case%20%22eMusic%20Remote%22%3A%0A%20%20%20%20%20%20%20%20return%20%22emusic%3Awindow%22%3B%0A%20%20%20%20%20%20case%20%22Songbird%22%3A%0A%20%20%20%20%20%20%20%20return%20%22Songbird%3AMain%22%3B%0A%20%20%20%20%20%20default%3A%0A%20%20%20%20%20%20%20%20return%20%22navigator%3Abrowser%22%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%0Afunction%20Restart%28%29%0A%7B%0A%20%20%20%20//%20Notify%20all%20windows%20that%20an%20application%20quit%20has%20been%20requested.%0A%20%20%20%20var%20os%20%3D%20Components.classes%5B%22@mozilla.org/observer-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%20.getService%28Components.interfaces.nsIObserverService%29%3B%0A%20%20%20%20var%20cancelQuit%20%3D%20Components.classes%5B%22@mozilla.org/supports-PRBool%3B1%22%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%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsISupportsPRBool%29%3B%0A%20%20%20%20os.notifyObservers%28cancelQuit%2C%20%22quit-application-requested%22%2C%20%22restart%22%29%3B%0A%0A%20%20%20%20//%20Something%20aborted%20the%20quit%20process.%0A%20%20%20%20if%20%28cancelQuit.data%29%0A%20%20%20%20%20return%20false%3B%0A%0A%20%20%20%20var%20wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%20%20%20%20var%20windows%20%3D%20wm.getEnumerator%28%22%22%29%3B%0A%0A%20%20%20%20var%20windowType%20%3D%20getWindowType%28%29%3B%0A%0A%20%20%20%20while%20%28windows.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20%20%20var%20myConfigWindow%20%3D%20windows.getNext%28%29.QueryInterface%28Components.interfaces.nsIDOMWindowInternal%29%3B%0A%20%20%20%20%20%20if%20%28myConfigWindow.document.documentElement.getAttribute%28%22windowtype%22%29%20%21%3D%20windowType%29%20%7B%0A%20%20%20%20%20%20%20%20%20myConfigWindow.close%28%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28%22@zeniko/crashrecoveryservice%3B1%22%20in%20Components.classes%29%20%7B%0A%20%20%20%20%20%20nsPreferences.setBoolPref%28%22extensions.crashrecovery.resume_session_once%22%2C%20true%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20appStartup%20%3D%20Components.interfaces.nsIAppStartup%3B%0A%20%20%20%20Components.classes%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D%0A%20%20%20%20%20%20.getService%28appStartup%29.quit%28appStartup.eRestart%20%7C%20appStartup.eAttemptQuit%29%3B%0A%0A%20%20%20%20return%20true%3B%0A%7D%0A%0A%0A%0A%0A//%20*****%20MOUSE%20HANDLING%20*****%20//%0A%0Athis.leftclick%20%3D%20function%28evt%29%20%7B%0A%20%20var%20RestartProceed%20%3D%20prompts.confirm%28null%2C%20%22Restart%20Firefox%22%2C%20%22Restart%20now%3F%22%29%3B%0A%20%20if%20%28RestartProceed%29%20%7B%0A%20%20%20%20Restart%28%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.aleftclick%20%3D%20function%28evt%29%20%7B%0A%20%20Restart%28%29%3B%0A%7D%0A%0A%0A%0A%0A//%20*****%20INITIALISATION%20*****%20//%0A%0A%0A//%20%u0415%u0441%u043B%u0438%20%u0436%u0435%20%u043D%u0430%u0434%u043E%20%u0438%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u043E%u0442%u0434%u0435%u043B%u044C%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u043C%u043E%u0436%u043D%u043E%20%u043D%u0430%u043F%u0438%u0441%u0430%u0442%u044C%0A%0Athis.%20gQuot%20%3D%20%7B%7D%3B%0Athis.%20gQuot.%20__proto__%20%3D%20custombuttons.%20gQuot%3B%0Athis.%20gQuot.%20dcDelay%20%3D%200%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0A%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%0A%0A%20%20Left%20%20%20%20%20%3D%20Restart%20application%20with%20confirmation%20dialogue%0A%20%20Alt+Left%20%3D%20Restart%20application%0A%0A%20%20Rawny%20%5E%5E%0A%0A*/%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E 2. Restart Tabbed: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3ERestart%20Tabbed%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACwUlEQVQ4y42T20tUURTGv7PPPuds5+ZcdDyOY44z4yUsGbuZSHQxCqOCiiJ6iqAXX3vqLwiKDIkeo3+geg4KEoMQLwhSXiqyJphxjmPizDijc87ZuwctyQu4X9ZefHy/xVqLJWMv7zZz4KCsYNI2t0pkL/6qisCZkEvvww0326rRnQx19+rCsWA87mXekMQlBFjgfFei4+bQxGjXdO3co7GBoeHdAXeg97Sdfry/JXaIs6IfAlCJxiw9rR71Ri4qYI6xs1+u4918YRug+X5z6/GmzoH64+5zGfMbaImVISRQiZJfC8twWwEqy6oflmAAtgMa/Y0JV7Uz8TWVRKVRPVVYLL0ggloOSTkZb2m/+Hl6bmT2S/IBBjPZHVvIZ1f0/M9SQbWqspPfvz6Zmp95s0otIyRi2Q8jk8WFpexT3acXIle6mrWCSM2+HS7If829vRcSh8Idd91lF2FFVuKWtU9UkFOeomvmAGJtbf7Y/mBDzdWeE523PMR7Sc3Z9U0N0ffSuvmyo6kp/qi//2FfqVzCy9GXWJINmBlSHp+YeB12hU/VhHTdjPyGO25i4ZUPuTkDs5+nGygAKAojmsZo2Srj/dQg0vIPpDwz8GkhNeR3XuV8maboEkhVEcrPFmSSBjxEBiGqSgGgstIfrKurbycSgUpUrOYtZMwcqBWAuUpUCAIqNOjz7SimyjgSD0MIAY878JwCgNPpIdFolChUQXdrN9KLBtYMICCC0Ct1uCs8kISEQMiHqg4vmKIBEBgeHndQAGDMCUoVAABTNNzovoZPc9N4N/4Rx1oPo9rjA+ccnHPYtg3btgEIyLKCvzOALG9uVCYEbZEW1Ppq4NAqdr0RQuR1gKY5sLZmW+l0tiwE/6/aaiEHzu2NnP/7CyFgmsKiG6RsMmk8W1lZ04UQ4BwAODgXEEIAWI/r2maez5eMP+y1LNBcwVPrAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20code*/%0A%20%20%0A%0A%0A//this.style.opacity%20%3D%20%27.65%27%3B%0A//this.setAttribute%28%22onmouseover%22%2C%20%22if%20%28custombuttons%29%20custombuttons.ButtonBrt%28event%29%3B%22%20%29%3B%0A//this.setAttribute%28%22onmouseout%22%2C%20%22if%20%28custombuttons%29%20custombuttons.ButtonDim%28event%29%3B%22%20%29%3B%0A%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%0A%0A//%20Code%20from%20codefisher.org%20button%0Avar%20restart_tabbed_g%20%3D%20function%20%28%29%20%7B%0A%20%20var%20Cc%20%3D%20Components.classes%3B%0A%20%20var%20Ci%20%3D%20Components.interfaces%3B%0A%20%20var%20wm%20%3D%20Cc%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D.getService%28Ci.nsIWindowMediator%29%3B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20var%20startup%20%3D%20Ci.nsIAppStartup%3B%0A%20%20var%20home%20%3D%20%22browser.startup.homepage%22%3B%0A%20%20var%20old_home%20%3D%20%22extension_buttons.old_home%22%3B%0A%20%20var%20others%20%3D%20%22extension_buttons.others%22%3B%0A%20%20var%20lock%20%3D%20%22extension_buttons.lock%22%3B%0A%20%20var%20browser_window%20%3D%20%22navigator%3Abrowser%22%3B%0A%20%20var%20do_quit%20%3D%20function%20%28flag%29%20%7B%0A%20%20%20%20prefs.setBoolPref%28lock%2C%20false%29%3B%0A%20%20%20%20Cc%5B%22@mozilla.org/toolkit/app-startup%3B1%22%5D.getService%28startup%29%0A%20%20%20%20%20%20%20.quit%28startup.eAttemptQuit%20%7C%20%28flag%20%3F%20startup.eRestart%20%3A%200%29%29%3B%0A%20%20%7D%3B%0A%20%20var%20do_restart%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20do_quit%28true%29%3B%0A%20%20%7D%3B%0A%20%20var%20do_exit%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20do_quit%28false%29%3B%0A%20%20%7D%3B%0A%20%20var%20collect_urls%20%3D%20function%20%28win%29%20%7B%0A%20%20%20%20var%20url%20%3D%20%22%22%3B%0A%20%20%20%20var%20ntabs%20%3D%20win.gBrowser.mPanelContainer.childNodes.length%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20ntabs%3B%20++i%29%20%7B%0A%20%20%20%20%20%20var%20b%20%3D%20win.gBrowser.getBrowserAtIndex%28i%29%3B%0A%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20url%20+%3D%20b.currentURI.spec%20+%20%22%7C%22%3B%0A%20%20%20%20%20%20%7D%20catch%20%28e%29%20%7B%0A%20%20%20%20%20%20//%20ignore%20e%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20url%20%3D%20url.replace%28/%5C%7C%24/%2C%20%22%22%29%3B%0A%20%20%20%20return%20url%3B%0A%20%20%7D%3B%0A%20%20var%20collect_other_windows%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20var%20enumvar%20%3D%20wm.getEnumerator%28browser_window%29%3B%0A%20%20%20%20var%20out%20%3D%20%5B%5D%3B%0A%20%20%20%20while%20%28enumvar.hasMoreElements%28%29%29%20%7B%0A%20%20%20%20%20%20var%20win%20%3D%20enumvar.getNext%28%29%3B%0A%20%20%20%20%20%20if%20%28win%20%21%3D%20window%29%20%7B%0A%20%20%20%20%20%20%20%20out.push%28win%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20out%3B%0A%20%20%7D%3B%0A%20%20var%20x_escape%20%3D%20function%20%28s%29%20%7B%0A%20%20%20%20return%20s.replace%28/%5B%3E%5C%5C%5D/g%2C%20function%20%28x%29%20%7B%20return%20%22%5C%5C%22%20+%20%28x%20%3D%3D%20%22%3E%22%20%3F%20%22%7E%22%20%3A%20x%29%3B%20%7D%29%3B%0A%20%20%7D%3B%0A%20%20var%20x_unescape%20%3D%20function%20%28s%29%20%7B%0A%20%20%20%20return%20s.replace%28/%5C%5C%28.%29/g%2C%20function%20%28_%2C%20x%29%20%7B%20return%20x%20%3D%3D%20%22%7E%22%20%3F%20%22%3E%22%20%3A%20x%3B%20%7D%29%3B%0A%20%20%7D%3B%0A%20%20var%20save_state%20%3D%20function%20%28%29%20%7B%0A%20%20%20%20prefs.setBoolPref%28%27extension.tbutton.restart.do.load%27%2Ctrue%29%3B%0A%20%20%20%20prefs.setCharPref%28others%2C%20collect_other_windows%28%29.map%28%0A%20%20%20%20%20%20function%20%28w%29%20%7B%0A%20%20%20%20%20%20%20%20return%20%22%3E%22%20+%20x_escape%28collect_urls%28w%29%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%29.join%28%22%22%29%29%3B%0A%20%20%20%20var%20prev%20%3D%20prefs.getCharPref%28home%29%3B%0A%20%20%20%20var%20cur%20%3D%20collect_urls%28window%29%3B%0A%20%20%20%20prefs.setCharPref%28home%2C%20cur%20%3D%3D%20%22%22%20%3F%20%22about%3Ablank%22%20%3A%20cur%29%3B%0A%20%20%20%20prefs.setCharPref%28old_home%2C%20prev%29%3B%0A%20%20%7D%3B%0A%20%20return%20%7B%0A%20%20%20%20exec%3A%20function%20%28%29%20%7B%0A%20%20%20%20%20%20save_state%28%29%3B%0A%20%20%20%20%20%20%20%20do_restart%28%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20exit%3A%20function%20%28%29%20%7B%0A%20%20%20%20%20%20save_state%28%29%3B%0A%20%20%20%20%20%20do_exit%28%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20restore_state%3A%20function%20%28%29%20%7B%0A%20%20%20%20%20%20prefs.setBoolPref%28%27extension.tbutton.restart.do.load%27%2Cfalse%29%3B%0A%20%20%20%20%20%20try%20%7B%20%0A%20%20%20%20%20%20%20%20prefs.getBoolPref%28lock%29%3B%0A%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20prefs.setBoolPref%28lock%2C%20true%29%3B%0A%20%20%20%20%20%20var%20orig%20%3D%20prefs.getCharPref%28old_home%29%3B%0A%20%20%20%20%20%20if%20%28orig%20%21%3D%20%27%27%29%20%7B%0A%20%20%20%20%20%20%20%20prefs.setCharPref%28home%2C%20orig%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20prefs.setCharPref%28old_home%2C%20%22%22%29%3B%0A%20%20%20%20%20%20var%20saved%20%3D%20prefs.getCharPref%28others%29%3B%0A%20%20%20%20%20%20var%20chunks%20%3D%20saved.match%28/%3E%5B%5E%3E%5D*/g%29%3B%0A%20%20%20%20%20%20if%20%28chunks%20%26%26%20chunks%20%21%3D%20%27%27%20%26%26%20chunks.length%20%21%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20var%20wins%20%3D%20chunks.map%28%0A%20%20%20%20%20%20%20%20function%20%28p%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20return%20x_unescape%28p.substr%281%29%29.split%28%22%7C%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20wins.forEach%28%0A%20%20%20%20%20%20%20%20function%20%28w%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20window.open%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28w.lenth%20%21%3D%200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20tb%20%3D%20wm.getMostRecentWindow%28browser_window%29.getBrowser%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20first%20%3D%20w.shift%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20tb.loadURI%28first%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20w.forEach%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20function%20%28url%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tb.addTab%28url%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20prefs.setCharPref%28others%2C%20%22%22%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%7D%28%29%3B%0A%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefBranch%29%3B%0Aif%20%28prefs.getBoolPref%28%27extension.tbutton.restart.do.load%27%29%20%3D%3D%20true%29%20%7B%0A%20%20%20%20addEventListener%28%22load%22%2C%20restart_tabbed_g.restore_state%2C%20false%29%3B%0A%7D%0A%0Arestart_tabbed_g.exec%28%29%3B%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E P.S. Предлагаю потестить свою сборку Firefox Portable 3.5.1, которая существует благодаря данной теме. | ||||||||
| Anton > 01-08-2009 14:03:28 | ||||||||
razoo
Я не обратил внимания на удвоенные точки с запятой. Сделай одинарные - будет работать.
Код:var href = window.content.document.location.href;
if (href.indexOf("index") != -1) {
href = href.substring(0, href.indexOf("index"));
}
href = href.substring(0, href.substring(0, href.length - 1).lastIndexOf("/") + 1);
if (!href.match(/:\/\/$/)) {
window.content.document.location = href;
}Что касается неактивности кнопки «когда выше подняться некуда» - сделать можно, но неактивное состояние кнопки при переключении на вкладку где «есть куда подняться» так и останется неактивным. | ||||||||
| Anton > 01-08-2009 14:44:05 | ||||||||
razoo
Можно, код в раздел "Инициализация": Код:this. oldimage = this. image;
this. onmouseover = function (event)
{
if (event. ctrlKey)
this. image = "file:///m:/redicon.png";
else if (event. shiftKey)
this. image = "file:///m:/greenicon.png";
else
this. image = this. oldimage;
};
this. onmouseout = function (event)
{
this. image = this. oldimage;
};Соответственно, поправить this. image = "file:///... нужными адресами. | ||||||||
| Anton > 01-08-2009 15:30:23 | ||||||||
razoo
Page Info: Код:aios_addTab ("chrome://browser/content/pageinfo/pageInfo.xul");Multipanel: Код:aios_addTab ("chrome://browser/content/web-panels.xul");AiOS должен быть установлен.
Здесь имеется в виду, что в общем случае то, что задумано быть открытым в окне, на вкладке открыть невозможно.
Так: Код:getBrowser (). addTab ("chrome://scrapbook/content/scrapbook.xul");? | ||||||||
| Anton > 02-08-2009 01:36:41 | ||||||||
Al_H | ||||||||
| Dreyk > 02-08-2009 15:25:14 | ||||||||
Классный аддончик, как раз для меня, мне только дай чегонить поскриптить Код:var aaa='bbb'; А я хочу, чтобы зайдя на эту страницу, я мог нажать свою кнопку, где написано что-то вроде Код:alert(aaa); и мне выведет текст переменной? | ||||||||
| Infocatcher > 02-08-2009 18:31:28 | ||||||||
В общем случае это небезопасно, вроде как. Код:content.location.href = "javascript: var aaa='bbb'; void 0"; alert(content.wrappedJSObject.aaa); А content.location.href = "javascript: ... " выполняет код без chrome-привилегий. Код:function bookmarklet() {
window.aaa='bbb';
alert(aaa);
}
content.location.href = "javascript: (" + uneval(bookmarklet) + ")();"; | ||||||||
| Dreyk > 02-08-2009 18:54:30 | ||||||||
нене, через window я сам знаю) дело в том, что страницу-то не я пишу) | ||||||||
| Anton > 02-08-2009 19:21:32 | ||||||||
Dreyk
Если "где-то в скриптах страницы" есть переменная x, то Код:alert (content. wrappedJSObject. x) отобразит её значение. Код:alert (content. wrappedJSObject. xajax) выдаёт её значение.
Какие переменные тебя интересуют ? | ||||||||
| Dreyk > 02-08-2009 21:59:03 | ||||||||
Во. То, что надо, спасибо. Просто не знал как достучаться до тех переменных. | ||||||||
| Anton > 02-08-2009 22:08:22 | ||||||||
На http://developer.mozilla.org/ | ||||||||
| Dreyk > 03-08-2009 00:34:01 | ||||||||
О, еще, как к функциям получить доступ, тем которые в страничке объявлены? | ||||||||
| Anton > 03-08-2009 00:45:02 | ||||||||
Так же, как и к переменным. | ||||||||
| Dreyk > 03-08-2009 01:17:23 | ||||||||
кто бы мог поудмать >.< вроде пробовал, не получалось... знач руки искривились | ||||||||
| Infocatcher > 03-08-2009 02:09:01 | ||||||||
Только функции со странички лучше не вызывать... Код:content.location.href = "javascript: someFuncFromPage(); void 0;";
Пример на тему: Код:function bookmarklet() {
alert(xajax);
}
content.location.href = "javascript: (" + uneval(bookmarklet) + ")();";Или изучать матчасть про Components.utils.evalInSandbox. | ||||||||
| Anton > 03-08-2009 15:40:39 | ||||||||
Вообще говоря, лучше не трогать и переменные - к некоторым может быть привязана функция (getter). | ||||||||
| Infocatcher > 03-08-2009 15:54:17 | ||||||||
Видимо, враппер там уже не один: | ||||||||
| Infocatcher > 03-08-2009 17:07:51 | ||||||||
Да, забыл про них...
Я тоже поигрался – только через eval() и прочие new Function() удалось вызвать код со страницы с повышенными привилегиями. | ||||||||
| Dreyk > 03-08-2009 22:38:22 | ||||||||
Та нет там вроде геттеров) | ||||||||
| razoo > 04-08-2009 08:49:08 | ||||||||
Anton, спасибо, работает. | ||||||||
| Anton > 04-08-2009 14:06:12 | ||||||||
Dreyk
В тегах [code] или на pastebin, я думаю.
Код:getBrowser (). addTab ("chrome://browser/content/places/places.xul");?
Так же, как и обычные клики: Код:this. ondblclick = function (event)
{
...
};
Для этой конкретной кнопки - нет. Я проверил на CB2 3.0.1 - она работает точно так же. Наверное, так задумано. Код:var url = getBrowser (). contentDocument. location. href;
url = url. match (/^([a-zA-Z]+:\/\/\/?)?([^\/]+)\/([^?]*)?(.*)$/);
var domain = "";
if (url)
domain = url [1] + url [2] + "/"
loadURI (this. uriToLoad || domain);
this. uriToLoad = "";В раздел "Инициализация": Код:var THIS = this;
var enabledImg = "";
var disabledImg = "";
this. clickHandler = function (event)
{
if (event. button == 2)
return;
if (event. originalTarget. nodeName == "toolbarbutton")
return;
else if (event. originalTarget. nodeName == "menuitem")
this. uriToLoad = event. originalTarget. getAttribute ("label");
};
this. getPaths = function (event)
{
var url = getBrowser (). contentDocument. location. href;
url = url. match (/^([a-zA-Z]+:\/\/\/?)?([^\/]+)\/([^?]*)?(.*)$/);
var domain = "";
var levels = "";
if (url)
{
domain = url [1] + url [2] + "/";
var path = url [3] && url [3]. split ("/") || "";
var levels = [];
var curpath = "";
for (var i = 0; i < path. length; i++)
{
if (path [i])
{
curpath = curpath + path [i] + "/";
levels. push (domain + curpath);
}
}
levels. pop ();
}
if (!levels)
{
THIS. disabled = true;
if (disabledImg)
THIS. image = disabledImg;
}
else
{
THIS. disabled = false;
if (enabledImg)
THIS. image = enabledImg;
}
return levels || [];
};
this. createMenu = function (event)
{
if (event && (event. originalTarget. nodeName != "toolbarbutton"))
return;
var levels = this. getPaths (event);
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
var menuitem;
for (var i = 0; i < levels. length; i++)
{
menuitem = <menuitem label={levels [i]} tooltiptext={levels [i]}/>
menu.menuitem[i] = menuitem;
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
this. type = "menu-button";
this. orient = "horizontal";
};
this. onUnload = function (event)
{
window. removeEventListener ("focus", THIS. getPaths, true);
window. removeEventListener ("unload", THIS. onUnload, false);
};
this. destroy = function ()
{
this. onUnload (null);
};
window. addEventListener ("focus", this. getPaths, true);
window. addEventListener ("unload", this. getPaths, false);
this. createMenu (null);
this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
Вот это не просите. Я пару раз честно за это брался, оба раза не справился, и браться больше не хочу. | ||||||||
| 3Jlou > 04-08-2009 15:38:05 | ||||||||
у меня подобное реализовано через userChrome.css:
Правда не всплывают подсказки при наведении на иконку папки | ||||||||
| Dreyk > 04-08-2009 18:38:59 | ||||||||
Я имею в виду через собственный протокол custombuttons:// как это сделано тут | ||||||||
| Anton > 04-08-2009 18:53:22 | ||||||||
Dreyk
В контекстном меню кнопки есть пункт "Копировать код в буфер". Он копирует в буфер обмена ссылку вида custombutton://... | ||||||||
| razoo > 04-08-2009 21:19:13 | ||||||||
Отлично, спасибо.
Это мелочь, можно, например, чуть расширить изображение иконки папки и вписать название прямо в нее.
Работает. Я и не знал, что places - это букмарки ((
Везде работает, но сайты с результатами поискового запроса почему-то не обрабатывает. | ||||||||
| Anton > 04-08-2009 22:19:26 | ||||||||
Я посмотрел на тестовом профиле 3.5 и FirefoxPortable 3.0.6 + Fission 1.0.9 - "недогруза" не увидел.
Могу попробовать доделать, только нужен адрес, сам не найду. | ||||||||
| razoo > 05-08-2009 10:00:03 | ||||||||
Любой Google-Яндекс. | ||||||||
| 3Jlou > 05-08-2009 10:23:08 | ||||||||
razoo, не удобней ли использовать Locationbar² для перехода по уровням? И кнопки нет, и можно одним кликом на любой уровень перейти Есть кнопка "Добавить страницу в закладки | Управление закладками" (ЛКМ - добавить в закладки, СКМ - открыть вкладку "Собранное", ПКМ - открыть окно "Собранное") в 2-х вариантах: 1: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%7C%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.leftclick%20%20%20%3D%20function%28evt%29%7B%0A%09%20%20%20%20PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%0A%7D%0A%0Athis.midclick%20%20%3D%20function%28evt%29%7B%0A%20%20%20%20%20%20%20%20getBrowser%20%28%29.%20addTab%20%28%22chrome%3A//browser/content/places/places.xul%22%29%3B%0A%7D%0A%0Athis.rightclick%20%20%20%3D%20function%28evt%29%7B%0A%09PlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%0A%7D%0A%0A//%20%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20gQuot%20%u0434%u0435%u043B%u0430%u0435%u0442%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0432%20%7E350%20%u043C%u0441.%0A//%20%u042D%u0442%u043E%20%u043E%u0442%u043A%u043B%u044E%u0447%u0438%u0442%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u0432%u043E%u043E%u0431%u0449%u0435%20%u0432%u0441%u0435%u0445%20%u043A%u043D%u043E%u043F%u043E%u043A%2C%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u044E%u0449%u0438%u0445%20gQuot%3A%0A//%20custombuttons.%20gQuot.%20dcDelay%20%3D%200%3B%0A//%20this.setAttribute%28%27onclick%27%2C%20%27gQuot%28event%2C%20this%29%27%29%3B%0A%0A//%20%u0415%u0441%u043B%u0438%20%u0436%u0435%20%u043D%u0430%u0434%u043E%20%u0438%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u043E%u0442%u0434%u0435%u043B%u044C%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u043C%u043E%u0436%u043D%u043E%20%u043D%u0430%u043F%u0438%u0441%u0430%u0442%u044C%0Athis.%20gQuot%20%3D%20%7B%7D%3B%0Athis.%20gQuot.%20__proto__%20%3D%20custombuttons.%20gQuot%3B%0Athis.%20gQuot.%20dcDelay%20%3D%200%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0A%0A//%20this.style.opacity%20%3D%20%27.65%27%3B%0A//%20this.setAttribute%28%27onmouseover%27%2C%20%27custombuttons.ButtonBrt%28event%29%3B%27%20%29%3B%0A//%20this.setAttribute%28%27onmouseout%27%2C%20%27custombuttons.ButtonDim%28event%29%3B%27%20%29%3B%0A%0A//this.tooltipText%20+%3D%20%27%5Cn%20%u041B%u041A%u041C%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0443%20%5Cn%20%u0421%u041A%u041C%3A%20%u0417%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%u0432%20%u0431%u043E%u043A%u043E%u0432%u043E%u0439%20%u043F%u0430%u043D%u0435%u043B%u0438%20%5Cn%20%u041F%u041A%u041C%3A%20%u041C%u0435%u043D%u0435%u0434%u0436%u0435%u0440%20%u0437%u0430%u043A%u043B%u0430%u0434%u043E%u043A%20%27%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%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%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E 2: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%20%u0432%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%20%7C%20%u0423%u043F%u0440%u0430%u0432%u043B%u0435%u043D%u0438%u0435%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0430%u043C%u0438%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.url2xul%3D%20%27chrome%3A//browser/content/places/places.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%20%0A%09%09%09PlacesCommandHook.bookmarkCurrentPage%28true%2C%20PlacesUtils.bookmarksMenuFolderId%29%3B%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%09case%202%3A%20%0A%09%09%09PlacesCommandHook.showPlacesOrganizer%28%27AllBookmarks%27%29%3B%0A%09%09%09break%3B%0A%09%7D%3B%0A%7D%3B%0Athis.setAttribute%28%27onclick%27%2C%27this.onClick%28event%29%3B%27%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E 1-й - исправно работают клики всеми 3-мя кнопками мыши, но не нравится что по среднему клику вкладка открывается в фоне и при повторном среднем клике не закрывается (как во 2-м варианте), а открывается ещё одна вкладка. | ||||||||
| razoo > 05-08-2009 12:18:23 | ||||||||
:) | ||||||||
| vurdalak > 05-08-2009 16:00:37 | ||||||||
Есть расширение https://lastpass.com/ Код:toggleSidebar('viewSidebar');Открывает сайты в LastPass в сайдбаре , но проблема в том что все treeitem-ы этого сайдбара имеют аттрибут "true" *(то есть открытые , растянутые ) а нужно "false", как сделать ? | ||||||||
| Atilla7777 > 05-08-2009 16:17:14 | ||||||||
Подскажите как сделать часы другого цвета? | ||||||||
| Anton > 05-08-2009 18:20:16 | ||||||||
razoo
Чтобы не отображалось пустое меню, в разделе "Инициализация" существующей кнопки надо заменить функцию getPaths: Код:this. getPaths = function (event)
{
var url = getBrowser (). contentDocument. location. href;
url = url. match (/^([a-zA-Z]+:\/\/\/?)?([^\/]+)\/([^?]*)?(.*)$/);
var domain = "";
var levels = "";
if (url)
{
domain = url [1] + url [2] + "/";
var path = url [3] && url [3]. split ("/") || "";
var levels = [];
var curpath = "";
for (var i = 0; i < path. length; i++)
{
if (path [i])
{
curpath = curpath + path [i] + "/";
levels. push (domain + curpath);
}
}
levels. pop ();
}
if (!levels)
{
THIS. disabled = true;
if (disabledImg)
THIS. image = disabledImg;
}
else
{
THIS. disabled = false;
if (enabledImg)
THIS. image = enabledImg;
}
if (levels. length != 0)
THIS. type = "menu-button";
else
THIS. type = "";
return levels || [];
};
Попробовал сделать Код:this. loadURL (); "Инициализация": Код:var enabledImg = "";
var disabledImg = "";
var THIS = this;
var id = this. id;
this. clickHandler = function (event)
{
if (event. button == 2)
return;
if (event. originalTarget. nodeName == "toolbarbutton")
return;
else if (event. originalTarget. nodeName == "menuitem")
this. uriToLoad = event. originalTarget. getAttribute ("label");
};
this. getPaths = function (event)
{
var url = getBrowser (). contentDocument. location. href;
var hurl = getBrowser (). mCurrentTab [id] || "";
if ((hurl. indexOf (url) == 0) && (url. length < hurl. length))
url = hurl;
getBrowser (). mCurrentTab [id] = url;
url = makeURI (url);
if (url. schemeIs ("about"))
return [];
var host = url. prePath + "/";
var curpath = host;
var path = url. path. split ("/");
var paths = [];
for (var i = 0; i < path. length; i++)
{
if (path [i])
{
curpath += path [i] + "/";
paths. push (curpath);
}
}
if (!url. host && (paths. length != 0))
host = paths. shift ();
paths. unshift (host);
THIS. host = host;
if (paths. length == 0)
{
THIS. disabled = true;
if (disabledImg)
THIS. image = disabledImg;
}
else
{
THIS. disabled = false;
if (enabledImg)
THIS. image = enabledImg;
}
if (paths. length != 0)
THIS. type = "menu-button";
else
THIS. type = "";
return paths;
};
this. createMenu = function (event)
{
if (event && (event. originalTarget. nodeName != "toolbarbutton"))
return;
var paths = this. getPaths (event);
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
var menuitem;
for (var i = 0; i < paths. length; i++)
{
menuitem = <menuitem label={paths [i]} tooltiptext={paths [i]}/>
if ((paths [i] == getBrowser (). contentDocument. location. href) ||
(paths [i] == getBrowser (). contentDocument. location. href + "/"))
{
menuitem.@checked = "true";
menuitem.@type = "checkbox";
}
menu.menuitem[i] = menuitem;
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
};
this. loadURL = function ()
{
loadURI (this. uriToLoad || this. host);
this. uriToLoad = "";
};
this. onUnload = function (event)
{
window. removeEventListener ("focus", THIS. getPaths, true);
window. removeEventListener ("unload", THIS. onUnload, false);
};
this. destroy = function ()
{
this. onUnload (null);
};
window. addEventListener ("focus", this. getPaths, true);
window. addEventListener ("unload", this. getPaths, false);
this. createMenu (null);
this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
this. orient = "horizontal";В разделе "Инициализация" в первых двух строках можно указать url для разрешенного/запрещенного состояний кнопки. Код:this.url2xul= 'chrome://browser/content/places/places.xul';
this.onClick= function(e)
{
switch (e.button)
{
case 0:
PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
break;
case 1:
{
var t= gBrowser.mTabs;
var current= content.document.location.href;
var i= t.length;
if (current==this.url2xul) gBrowser.removeCurrentTab();
else while (true)
{
if (--i<0)
{
if (current=='about:blank') // replace blank tab
loadURI(this.url2xul);
else // add new tab
gBrowser.selectedTab= gBrowser.addTab(this.url2xul);
break;
};
if (t[i].linkedBrowser.currentURI.spec==this.url2xul) // popup loaded
{
gBrowser.selectedTab= gBrowser.tabContainer.childNodes[i];
break;
};
};
}; break;
case 2:
if (e. shiftKey) return;
e. preventDefault ();
PlacesCommandHook.showPlacesOrganizer('AllBookmarks');
break;
};
};
this.setAttribute('onclick','this.onClick(event);'); 05-08-2009 18:26:22
И рад бы помочь, но не могу.
Цвет тех часов изменить невозможно в принципе - они используют xbm-картинки, а они двухцветные. Код: displayColor: "black",
displayBackground: "white",
canvasBackground: "white",
displayBorderColor: "black",надо прописать нужные цвета, например Код: displayColor: "red",
displayBackground: "rgb(153,153,255)", | ||||||||
| vurdalak > 05-08-2009 19:13:13 | ||||||||
Где хоть копать ? | ||||||||
| Anton > 05-08-2009 19:20:43 | ||||||||
vurdalak | ||||||||
| vurdalak > 05-08-2009 19:40:07 | ||||||||
Штатными средствами, если речь идет об обычных сайдбарах (хистори или букмаркс), то там запоминаются настройки.
| ||||||||
| Anton > 05-08-2009 20:23:44 | ||||||||
А если речь идет о сайдбаре lastpass ? Как-то так: Код:toggleSidebar('viewSidebar');
var sb = document. getElementById ("sidebar");
var doc = sb. contentDocument;
setTimeout
(
function ()
{
var sb = document. getElementById ("sidebar");
var doc = sb. contentDocument;
var tree = doc. getElementById ("lastpass-tree");
if (!tree)
return;
var ti = tree. getElementsByTagName ("treeitem");
for (var i = 0; i < ti. length; i++)
ti [i]. removeAttribute ("open");
},
500
); | ||||||||
| 3Jlou > 05-08-2009 21:04:01 | ||||||||
Очередное спасибо с + | ||||||||
| vurdalak > 05-08-2009 21:41:04 | ||||||||
Ну вот и супер | ||||||||
| Anton > 05-08-2009 21:46:59 | ||||||||
Кровопийца : ) | ||||||||
| vurdalak > 05-08-2009 21:52:10 | ||||||||
Да ладно , если серьезно то большое спасибо, очень помогаешь и плюсики зарабатываешь | ||||||||
| Anton > 05-08-2009 21:59:47 | ||||||||
В шутку я, в шутку.
Last Pass ? Не могу сказать ничего определённого, потому как постигнуть не в состоянии. | ||||||||
| 3Jlou > 05-08-2009 22:04:49 | ||||||||
vurdalak, я давно обратил на Lastpass внимание - удобно... но сливать свои пароли на сервак как то не решился, поэтому приходится обходиться без удобств | ||||||||
| razoo > 06-08-2009 10:15:12 | ||||||||
Anton, существенный недочет. Кнопка не обрабатывает субдомены. | ||||||||
| Dreyk > 06-08-2009 15:28:04 | ||||||||
Код:var urlToOpen = 'INSERT_YOUR_URL_HERE';
function openURI(url)
{
var tabs = gBrowser.tabContainer.childNodes;
for (i=0; i<tabs.length; i++)
{
var tab = gBrowser. getBrowserForTab(tabs[i]);
var location = tab.contentDocument.location.href;
if (location == url)
{
gBrowser.selectedTab = tabs[i];
return false;
}
}
gBrowser.selectedTab = gBrowser.addTab(url);
return true;
}
openURI(urlToOpen);ЗЫ: я тут только начал разбираться, так что буду рад, если гуру сего дела укажут на возможные ошибки/неточности | ||||||||
| 3Jlou > 06-08-2009 16:18:45 | ||||||||
Dreyk, кнопка полезная, спасибо. Тут же возникла мысль использовать кнопки открытия url'ов на всплывающих барах с помощью спец. кнопки, но в совокупности они не работают - вместо открытия (или перехода на открытую вкладу) выпадает меню кнопки. Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EPopup%20Toolbar%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAIAEBAAAAAAAABoAwAAJgAAACAgAAAAAAAAqAwAAI4DAAAoAAAAEAAAACAAAAABABgAAAAAAEADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8gzP//pRD//3Wg//8Z4P9/AAz/fwBs/38AC/9/ABL/fwAA/38n0P9/AAb/f//++A8AAf//AAH//yFw//8AACgAAAAgAAAAQAAAAAEAGAAAAAAAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8////AAP//wAD//////////////////////////////////////w%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20code*/%0A%0Avar%20popupToolbarName%20%3D%20%22%22%3B%0Avar%20popupToolbarId%20%3D%20%22%22%3B%0Avar%20popupId%20%3D%20%22%22%3B%0Avar%20contextPopupId%20%3D%20%22popuptoolbar-contextpopup%22%3B%0A%0Athis.type%20%3D%20%22menu%22%3B%0Athis._init%20%3D%20function%28%29%20%7B%0A%20%20popupToolbarName%20%3D%20this.label%3B%0A%20%20popupToolbarId%20%3D%20%22__customToolbar_%22%20+%20popupToolbarName.replace%28%22%20%22%2C%20%22_%22%29%3B%0A%20%20popupId%20%3D%20popupToolbarName.replace%28%22%20%22%2C%20%22%22%29.toLowerCase%28%29%20+%20%22-%22%20+%20this.type%20+%20%22popup%22%3B%0A%0A%20%20var%20popupToolbar%20%3D%20document.getElementById%28popupToolbarId%29%3B%0A%20%20if%20%28popupToolbar%29%20%7B%0A%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22true%22%29%3B%0A%20%20%20%20document.persist%28popupToolbarId%2C%20%22collapsed%22%29%3B%0A%20%20%7D%0A%0A%20%20var%20popup%20%3D%20document.getElementById%28popupId%29%3B%0A%20%20if%20%28popup%29%20%7B%0A%20%20%20%20popup.hidePopup%28%29%3B%0A%20%20%20%20popup.parentNode.removeChild%28popup%29%3B%0A%20%20%7D%0A%0A%20%20popup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20popup.setAttribute%28%22id%22%2C%20popupId%29%3B%0A%20%20popup.setAttribute%28%22position%22%2C%20%22after_start%22%29%3B%0A%0A%20%20if%20%28this.type%20%3D%3D%20%22menu%22%29%20%7B%0A%20%20%20%20while%20%28this.firstChild%20%26%26%20this.firstChild.localName%20%3D%3D%20%22menupopup%22%29%20%7B%0A%20%20%20%20%20%20this.firstChild.hidePopup%28%29%3B%0A%20%20%20%20%20%20this.removeChild%28this.firstChild%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20this.appendChild%28popup%29%3B%0A%20%20%20%20popup.setAttribute%28%22onpopupshowing%22%2C%20%27this.parentNode.setPopup%28event%29%3B%27%29%3B%0A%20%20%7D%0A%20%20else%20%7B%0A%20%20%20%20popup.setAttribute%28%22onpopupshowing%22%2C%20%27document.popupNode.setPopup%28event%29%3B%27%29%3B%0A%20%20%7D%0A%0A%20%20popup.setAttribute%28%22onpopupshown%22%2C%20%27%7B%5C%0A%20%20%20%20window.addEventListener%28%22popuphidden%22%2C%20function%28e%29%20%7B%5C%0A%20%20%20%20%20%20var%20popup%20%3D%20document.getElementById%28popupId%29%3B%5C%0A%20%20%20%20%20%20if%20%28e.target%20%3D%3D%20popup%29%20%7B%5C%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popuphidden%22%2C%20arguments.callee%2C%20false%29%3B%5C%0A%20%20%20%20%20%20%20%20return%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20var%20popupNode%20%3D%20document.popupNode%3B%5C%0A%20%20%20%20%20%20while%20%28popupNode%20%26%26%20popupNode%20%21%3D%20popup%29%20popupNode%20%3D%20popupNode.parentNode%3B%5C%0A%20%20%20%20%20%20if%20%28popupNode%20%3D%3D%20popup%29%20popup.hidePopup%28%29%3B%5C%0A%20%20%20%20%7D%2C%20false%29%3B%5C%0A%20%20%7D%27.replace%28%22popupId%22%2C%20%27%22%27%20+%20popupId%20+%20%27%22%27%29%29%3B%0A%0A%20%20popup.setAttribute%28%22onpopuphidden%22%2C%20%27%7B%5C%0A%20%20%20%20var%20popup%20%3D%20event.target%3B%5C%0A%20%20%20%20if%20%28popup.firstChild%20%26%26%20popup.firstChild.localName%20%3D%3D%20%22toolbar%22%29%20%7B%5C%0A%20%20%20%20%20%20var%20popupToolbar%20%3D%20popup.firstChild%3B%5C%0A%20%20%20%20%20%20popupToolbar.removeAttribute%28%22style%22%29%3B%5C%0A%20%20%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22true%22%29%3B%5C%0A%20%20%20%20%20%20document.persist%28popupToolbar.id%2C%20%22collapsed%22%29%3B%5C%0A%20%20%20%20%20%20var%20navbox%20%3D%20document.getElementById%28%22navigator-toolbox%22%29%3B%5C%0A%20%20%20%20%20%20var%20nextElement%20%3D%20navbox.firstChild%3B%5C%0A%20%20%20%20%20%20while%20%28nextElement%20%26%26%20nextElement.localName%20%21%3D%20%22toolbarset%22%29%20%7B%5C%0A%20%20%20%20%20%20%20%20if%20%28Number%28nextElement.getAttribute%28%22customindex%22%29%29%20%3E%20Number%28popupToolbar.getAttribute%28%22customindex%22%29%29%29%5C%0A%20%20%20%20%20%20%20%20%20%20break%3B%5C%0A%20%20%20%20%20%20%20%20nextElement%20%3D%20nextElement.nextSibling%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20navbox.insertBefore%28popupToolbar%2C%20nextElement%29%3B%5C%0A%20%20%20%20%20%20popupToolbar.firstPermanentChild%20%3D%20null%3B%5C%0A%20%20%20%20%20%20popupToolbar.lastPermanentChild%20%3D%20null%3B%5C%0A%20%20%20%20%20%20popupToolbar.currentSet%20%3D%20popupToolbar.getAttribute%28%22currentset%22%29%3B%5C%0A%20%20%20%20%7D%5C%0A%20%20%20%20while%20%28popup.lastChild%20%26%26%20popup.lastChild.localName%20%3D%3D%20%22menuitem%22%29%5C%0A%20%20%20%20%20%20popup.removeChild%28popup.lastChild%29%3B%5C%0A%20%20%7D%27%29%3B%0A%0A%20%20var%20contextPopup%20%3D%20document.getElementById%28contextPopupId%29%3B%0A%20%20if%20%28contextPopup%29%20%7B%0A%20%20%20%20contextPopup.hidePopup%28%29%3B%0A%20%20%20%20contextPopup.parentNode.removeChild%28contextPopup%29%3B%0A%20%20%7D%0A%0A%20%20contextPopup%20%3D%20document.getElementById%28%22mainPopupSet%22%29.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20contextPopup.setAttribute%28%22id%22%2C%20contextPopupId%29%3B%0A%20%20contextPopup.setAttribute%28%22position%22%2C%20%22at_pointer%22%29%3B%0A%20%20contextPopup.setAttribute%28%22onpopupshowing%22%2C%20%27document.popupNode.setContextPopup%28event%29%3B%27%29%3B%0A%0A%20%20var%20menuitem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20menuitem.setAttribute%28%22label%22%2C%20%22Show%20Context%20Menu%20With%20Toolbar%22%29%3B%0A%20%20menuitem.setAttribute%28%22type%22%2C%20%22checkbox%22%29%3B%0A%20%20menuitem.setAttribute%28%22checked%22%2C%20this.getBoolPref%28%27showContextWithToolbar%27%29%29%3B%0A%20%20menuitem.setAttribute%28%22oncommand%22%2C%20%22document.popupNode.setBoolPref%28%27showContextWithToolbar%27%2C%20this.getAttribute%28%27checked%27%29%20%3D%3D%20%27true%27%29%3B%22%29%3B%0A%20%20contextPopup.appendChild%28menuitem%29%3B%0A%20%20contextPopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%0A%20%20this.tooltipText%20%3D%20this.label%3B%0A%7D%0A%0Athis.setBoolPref%20%3D%20function%28name%2C%20value%29%20%7B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20prefs.setBoolPref%28%22custombuttons.popuptoolbar.%22%20+%20name%2C%20value%29%3B%0A%7D%0A%0Athis.getBoolPref%20%3D%20function%28name%29%20%7B%0A%20%20var%20prefs%20%3D%20Cc%5B%22@mozilla.org/preferences-service%3B1%22%5D.getService%28Ci.nsIPrefBranch%29%3B%0A%20%20return%20prefs.getPrefType%28%22custombuttons.popuptoolbar.%22%20+%20name%29%0A%20%20%20%20%20%20%20%20%26%26%20prefs.getBoolPref%28%22custombuttons.popuptoolbar.%22%20+%20name%29%3B%0A%7D%0A%0Athis.setPopup%20%3D%20function%28event%29%20%7B%0A%20%20if%20%28this.getBoolPref%28%27showContextWithToolbar%27%29%29%20%7B%0A%20%20%20%20document.popupNode%20%3D%20this%3B%0A%20%20%20%20this.setContextPopup%28event%29%3B%0A%20%20%7D%0A%0A%20%20var%20popup%20%3D%20event.target%3B%0A%20%20var%20popupToolbar%20%3D%20document.getElementById%28popupToolbarId%29%3B%0A%20%20if%20%28popupToolbar%20%26%26%20popupToolbar.parentNode%20%21%3D%20popup%20%26%26%20this.parentNode%20%21%3D%20popupToolbar%29%20%7B%0A%20%20%20%20popup.insertBefore%28popupToolbar%2C%20popup.firstChild%29%3B%0A%20%20%20%20popupToolbar.setAttribute%28%22collapsed%22%2C%20%22false%22%29%3B%0A%20%20%20%20if%20%28%21this.getBoolPref%28%27showContextWithToolbar%27%29%29%0A%20%20%20%20%20%20popupToolbar.setAttribute%28%22style%22%2C%20%22border%3A%20none%20%21important%3B%22%29%3B%0A%20%20%7D%0A%0A%20%20if%20%28%21popup.firstChild%29%20%7B%0A%20%20%20%20document.popupNode%20%3D%20this%3B%0A%20%20%20%20this.setContextPopup%28event%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.setContextPopup%20%3D%20function%28event%29%20%7B%0A%20%20var%20contextPopup%20%3D%20event.target%3B%0A%20%20while%20%28contextPopup.lastChild%20%26%26%20contextPopup.lastChild.localName%20%3D%3D%20%22menuitem%22%29%0A%20%20%20%20contextPopup.removeChild%28contextPopup.lastChild%29%3B%0A%0A%20%20var%20toolbars%20%3D%20document.getElementById%28%22navigator-toolbox%22%29.getElementsByTagName%28%22toolbar%22%29%3B%0A%20%20for%20%28var%20i%3D0%3B%20i%3Ctoolbars.length%3B%20i++%29%20%7B%0A%20%20%20%20var%20toolbarname%20%3D%20toolbars%5Bi%5D.getAttribute%28%22toolbarname%22%29%3B%0A%20%20%20%20var%20toolbarid%20%3D%20toolbars%5Bi%5D.getAttribute%28%22id%22%29%3B%0A%20%20%20%20var%20menuitem%20%3D%20contextPopup.appendChild%28document.createElement%28%22menuitem%22%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20toolbarname%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22type%22%2C%20%22radio%22%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22name%22%2C%20%22toolbars-radio%22%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22checked%22%2C%20%28this.label%20%3D%3D%20toolbarname%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22disabled%22%2C%20%28%22__customToolbar_%22%20+%20toolbarname.replace%28%22%20%22%2C%20%22_%22%29%20%21%3D%20toolbarid%29%20%7C%7C%20%28this.parentNode%20%3D%3D%20toolbars%5Bi%5D%29%29%3B%0A%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20%22document.popupNode.setToolbar%28this.label.toString%28%29%29%3B%22%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.setToolbar%20%3D%20function%28toolbarname%29%20%7B%0A%20%20var%20toolbar%20%3D%20document.getElementById%28%22__customToolbar_%22%20+%20toolbarname.replace%28%22%20%22%2C%20%22_%22%29%29%3B%0A%20%20if%20%28toolbar%20%26%26%20toolbar%20%21%3D%20this.parentNode%29%20%7B%0A%20%20%20%20this.label%20%3D%20toolbarname%3B%0A%20%20%20%20if%20%28toolbar.firstChild%20%26%26%20toolbar.firstChild.image%29%0A%20%20%20%20%20%20this.image%20%3D%20toolbar.firstChild.image%3B%0A%0A%20%20%20%20this._init%28%29%3B%0A%20%20%7D%0A%7D%0A%0Avar%20that%20%3D%20this%3B%0Athis.hideDropMarker%20%3D%20function%28%29%20%7B%0A%20%20var%20dropMarker%20%3D%20document.getAnonymousElementByAttribute%28that%2C%20%22class%22%2C%20%22toolbarbutton-menu-dropmarker%22%29%3B%0A%20%20if%20%28dropMarker%29%20%7B%0A%20%20%20%20dropMarker.setAttribute%28%22hidden%22%2C%20%22true%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20setTimeout%28that.hideDropMarker%2C%2010%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.showPopup%20%3D%20function%28event%29%20%7B%0A%20%20document.popupNode%20%3D%20this%3B%0A%20%20document.getElementById%28popupId%29.showPopup%28this%2C%20-1%2C%20-1%2C%20%22popup%22%2C%20%22bottomleft%22%2C%20%22topleft%22%29%3B%0A%7D%0A%0Athis.showContextPopup%20%3D%20function%28event%29%20%7B%0A%20%20document.popupNode%20%3D%20this%3B%0A%20%20document.getElementById%28contextPopupId%29.showPopup%28this%2C%20event.screenX%2C%20event.screenY%2C%20%22context%22%2C%20%22none%22%2C%20%22none%22%29%3B%0A%7D%0A%0Athis.leftclick%20%3D%20this.showPopup%3B%0Athis.rightclick%20%3D%20this.showContextPopup%3B%0A%0Aif%20%28this.type%20%3D%3D%20%22menu%22%29%20%7B%0A%20%20this.leftclick%20%3D%20this.hideDropMarker%3B%0A%20%20this.hideDropMarker%28%29%3B%0A%7D%0A%0Athis._init%28%29%3B%0A%0A//this.setAttribute%28%27onclick%27%2C%20%27if%20%28event.target%20%3D%3D%20event.currentTarget%29%20gQuot%28event%2C%20this%29%3B%27%29%3B%0A//%u0438%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0437%u0430%u0434%u0435%u0440%u0436%u043A%u0443%20%u0434%u043B%u044F%20%u043E%u0442%u0434%u0435%u043B%u044C%u043D%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%0Athis.%20gQuot%20%3D%20%7B%7D%3B%0Athis.%20gQuot.%20__proto__%20%3D%20custombuttons.%20gQuot%3B%0Athis.%20gQuot.%20dcDelay%20%3D%200%3B%0Athis.%20setAttribute%20%28%27onclick%27%2C%20%27this.gQuot.mHandler%28event%2C%20this%29%27%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| razoo > 06-08-2009 17:58:40 | ||||||||
Не знаю как старожилы оценят, но у меня твой код работает так как хотелось. | ||||||||
| Anton > 06-08-2009 18:05:14 | ||||||||
razoo
Насчёт "существенности" не уверен, но допустим.
Не знаю, не знаю. Очень сложно, по моему, скажем, при переходе на http://deviantart.com загружается http://www.deviantart.com и как определить, что выше уже не подняться ? Код:var enabledImg = "";
var disabledImg = "";
var topLevelImg = "";
var THIS = this;
var id = this. id;
this. clickHandler = function (event)
{
if (event. button == 2)
return;
if (event. originalTarget. nodeName == "toolbarbutton")
return;
else if (event. originalTarget. nodeName == "menuitem")
this. uriToLoad = event. originalTarget. getAttribute ("label");
};
this. decodeURL = function (url)
{
try
{
url = losslessDecodeURI (makeURI (url));
}
catch (e) {}
return url;
};
this. getDomain = function (url, level)
{
var uri = makeURI (url);
var tlds = Components. classes ["@mozilla.org/network/effective-tld-service;1"].
getService (Components. interfaces. nsIEffectiveTLDService);
var domain;
try
{
domain = tlds. getBaseDomain (uri, level);
}
catch (e)
{
domain = uri. asciiHost;
}
return domain;
};
this. getCBObject = function ()
{
var cbobj = getBrowser (). mCurrentTab [id];
if (typeof (cbobj) != "object")
getBrowser (). mCurrentTab [id] = {};
return getBrowser (). mCurrentTab [id];
};
this. getPaths = function (event)
{
var url = getBrowser (). contentDocument. location. href;
var cbobj = getBrowser (). mCurrentTab [id];
cbobj = THIS. getCBObject ();
var hurl = cbobj. url || url;
if ((THIS. getDomain (url, 0) == THIS. getDomain (hurl, 0)) && (url. length < hurl. length))
url = hurl;
cbobj. url = url;
url = makeURI (url);
if (url. schemeIs ("about"))
return [];
var host = url. prePath + "/";
var curpath = host;
var path = url. path. split ("/");
var paths = [];
for (var i = 0; i < path. length; i++)
{
if (path [i])
{
curpath += path [i] + "/";
paths. push (THIS. decodeURL (curpath));
}
}
if (!url. host && (paths. length != 0))
host = paths. shift ();
var dLevel = 0;
var domains = [];
var tld = "";
while (tld != THIS. getDomain (host, dLevel))
{
tld = THIS. getDomain (host, dLevel++);
domains. push (url. scheme + "://" + tld +"/");
}
paths = domains. concat (paths);
url = THIS. decodeURL (getBrowser (). contentDocument. location. href);
if ((paths. indexOf (url) == -1) && (paths. indexOf (url + "/") == -1))
{
for (var i = 0; i < paths. length; i++)
{
if (url. length < paths [i]. length)
{
paths. splice (i, 0, url);
break;
}
}
}
THIS. host = paths [0] || host;
if (paths. length == 0)
{
if (disabledImg)
THIS. image = disabledImg;
}
else
{
if (cbobj. toplevel)
{
if (topLevelImg)
THIS. image = topLevelImg;
}
else
{
if (enabledImg)
THIS. image = enabledImg;
}
}
if (paths. length != 0)
THIS. type = "menu-button";
else
THIS. type = "";
return paths;
};
this. createMenu = function (event)
{
if (event && (event. originalTarget. nodeName != "toolbarbutton"))
return;
var paths = this. getPaths (event);
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
var menuitem;
for (var i = 0; i < paths. length; i++)
{
menuitem = <menuitem label={paths [i]} tooltiptext={paths [i]}/>
if ((paths [i] == this. decodeURL (getBrowser (). contentDocument. location. href)) ||
(paths [i] == this. decodeURL (getBrowser (). contentDocument. location. href) + "/"))
{
menuitem.@checked = "true";
menuitem.@type = "checkbox";
}
menu.menuitem[i] = menuitem;
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
};
this. loadURL = function ()
{
var url = this. uriToLoad || this. host;
if (url == this. host)
this. getCBObject (). toplevel = true;
else
this. getCBObject (). toplevel = false;
loadURI (this. uriToLoad || this. host);
this. uriToLoad = "";
};
this. onUnload = function (event)
{
window. removeEventListener ("focus", THIS. getPaths, true);
window. removeEventListener ("unload", THIS. onUnload, false);
};
this. destroy = function ()
{
this. onUnload (null);
};
window. addEventListener ("focus", this. getPaths, true);
window. addEventListener ("unload", this. getPaths, false);
this. createMenu (null);
this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.createMenu(event,getBrowser().contentDocument.location.href)");
this. orient = "horizontal";+ расшифровка всяких "%D0..." в URL | ||||||||
| Anton > 06-08-2009 19:16:42 | ||||||||
Что она должна делать ? | ||||||||
| Najlus > 06-08-2009 19:43:19 | ||||||||
По поводу кнопки открытия папки: можно ли сделать так, чтобы адрес она брала из того места, куда Firefox сохраняет файлы?
| ||||||||
| razoo > 06-08-2009 19:51:20 | ||||||||
:) Поправка: для меня - "существенный". | ||||||||
| Anton > 06-08-2009 22:35:13 | ||||||||
Najlus Код:function startProcess (path, args)
{
...
}
var dir = custombuttonsUtils. getPrefs ("browser.download.defaultFolder");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.lastDir");
if (!dir)
dir = Components. classes ["@mozilla.org/file/directory_service;1"].
getService (Components. interfaces. nsIProperties).
get ("DfltDwnld", Components. interfaces. nsILocalFile).
path;
startProcess (dir, ""); | ||||||||
| Najlus > 07-08-2009 11:35:40 | ||||||||
Не работает | ||||||||
| Anton > 07-08-2009 13:20:46 | ||||||||
Najlus Код:function startProcess (path, args)
{
....
}
var dir = custombuttonsUtils. getPrefs ("browser.download.downloadDir");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.dir");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.lastDir");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.defaultFolder");
if (!dir)
dir = Components. classes ["@mozilla.org/file/directory_service;1"].
getService (Components. interfaces. nsIProperties).
get ("DfltDwnld", Components. interfaces. nsILocalFile).
path;
startProcess (dir, ""); | ||||||||
| Najlus > 07-08-2009 14:22:22 | ||||||||
Уже лучше, но всёравно | ||||||||
| Anton > 07-08-2009 14:40:36 | ||||||||
А вот так если: Код:function startProcess (path, args)
{
....
}
var dir = custombuttonsUtils. getPrefs ("browser.download.downloadDir");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.dir");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.lastDir");
if (!dir)
dir = custombuttonsUtils. getPrefs ("browser.download.defaultFolder");
if (!dir)
dir = Components. classes ["@mozilla.org/file/directory_service;1"].
getService (Components. interfaces. nsIProperties).
get ("DfltDwnld", Components. interfaces. nsILocalFile).
path;
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
dir = suc. ConvertToUnicode (dir);
startProcess (dir, "");? | ||||||||
| 3Jlou > 07-08-2009 15:09:47 | ||||||||
Кнопка "поглощает" любой тулбар (кроме панелей навигации и закладок) и отображает расположенные на нём кнопки во всплывающей панели.
Работает. Продублирую кнопку целиком: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-3%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bfunction%20startProcess%20%28path%2C%20args%29%0A%7B%0A%20%20%20%20var%20file%20%3D%20Components.%20classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.%20classes%20%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIProcess%29%3B%0A%20%20%20%20file.%20initWithPath%20%28path%29%3B%0A%20%20%20%20if%20%28args%20%3D%3D%20%22%22%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20process.%20init%20%28file%29%3B%0A%20%20%20%20if%20%28%21this.%20pid%29%0A%20%20%20%20%20%20%20%20this.%20pid%20%3D%20%5B%5D%3B%0A%20%20%20%20this.%20pid.%20push%20%28process.%20run%20%28false%2C%20%5Bargs%5D%2C%201%29%29%3B%20%0A%7D%0Avar%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.downloadDir%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.dir%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.lastDir%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.defaultFolder%22%29%3B%0Aif%20%28%21dir%29%0A%20%20%20%20dir%20%3D%20Components.%20classes%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIProperties%29.%0A%20%20%20%20%20%20%20%20%20%20get%20%28%22DfltDwnld%22%2C%20Components.%20interfaces.%20nsILocalFile%29.%0A%20%20%20%20%20%20%20%20%20%20path%3B%0Avar%20suc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.%0A%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIScriptableUnicodeConverter%29%3B%0Asuc.%20charset%20%3D%20%22UTF-8%22%3B%0Adir%20%3D%20suc.%20ConvertToUnicode%20%28dir%29%3B%0AstartProcess%20%28dir%2C%20%22%22%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| Najlus > 07-08-2009 15:23:30 | ||||||||
ТАДАМ!!! РАБОТАЕТ!!!! | ||||||||
| Anton > 07-08-2009 15:58:17 | ||||||||
3Jlou
Ну, стало быть, gQuote.mHandler CB и CB2 не полностью совместимы. Код://this.setAttribute('onclick', 'if (event.target == event.currentTarget) gQuot(event, this);');
//изменить задержку для отдельной кнопки
this. gQuot = {};
this. gQuot. __proto__ = custombuttons. gQuot;
this. gQuot. dcDelay = 0;
this. setAttribute ('onclick', 'this.gQuot.mHandler(event, this)');на Код:this.setAttribute('onclick', 'if (event.target == event.currentTarget) this.gQuot.mHandler(event, this);');
//изменить задержку для отдельной кнопки
this. gQuot = {};
this. gQuot. __proto__ = custombuttons. gQuot;
this. gQuot. dcDelay = 0;
//this. setAttribute ('onclick', 'this.gQuot.mHandler(event, this)');?
Кажется, вот так: Код:function startProcess (path, args)
{
...
}
function getPref (pName)
{
var prefs = Components. classes ["@mozilla.org/preferences-service;1"].
getService (Components. interfaces. nsIPrefBranch);
var res = "";
try
{
res = prefs. getComplexValue ("browser.download." + pName, Components. interfaces. nsILocalFile);
} catch (e) {};
return res;
}
var folderList = custombuttonsUtils. getPrefs ("browser.download.folderList");
var fileLoc = Components. classes ["@mozilla.org/file/directory_service;1"].
getService (Components. interfaces. nsIProperties);
var desk = fileLoc. get ("Desk", Components. interfaces. nsILocalFile);
var dnldMgr = Components. classes["@mozilla.org/download-manager;1"].
getService(Components.interfaces.nsIDownloadManager);
var ddd = dnldMgr. defaultDownloadsDirectory;
var dir = "";
if (folderList == 0) // desktop
dir = desk. path;
else if (folderList == 1) // default downloads directory
dir = ddd. path;
else
{
dir = getPref ("dir") || getPref ("downloadDir") || getPref ("lastDir") || getPref ("defaultFolder") || "";
if (!dir)
dir = fileLoc. get ("DfltDwnld", Components. interfaces. nsILocalFile);
dir = dir. path;
}
startProcess (dir, "");будет надежнее. | ||||||||
| 3Jlou > 07-08-2009 16:26:22 | ||||||||
Попробовал - не работает эта кнопка, хотя недавно я как то ей пользовался без проблем, да вот уже не помню, может действительно CB2 ставил. | ||||||||
| Anton > 07-08-2009 16:35:47 | ||||||||
У меня эта кнопка работает. | ||||||||
| 3Jlou > 07-08-2009 16:48:06 | ||||||||
Anton, всё, понял - работает, но не со всеми кнопками - в частности отказывают ранее упомянутые: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3Eya.ru%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-4%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bvar%20urlToOpen%20%3D%20%27http%3A//ya.ru/%27%3B%0Afunction%20openURI%28url%29%0A%7B%0A%20%20%20%20var%20tabs%20%3D%20gBrowser.tabContainer.childNodes%3B%0A%20%20%20%20for%20%28i%3D0%3B%20i%3Ctabs.length%3B%20i++%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20tab%20%3D%20gBrowser.%20getBrowserForTab%28tabs%5Bi%5D%29%3B%0A%20%20%20%20%20%20%20%20var%20location%20%3D%20tab.contentDocument.location.href%3B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20if%20%28location%20%3D%3D%20url%29%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20gBrowser.selectedTab%20%3D%20tabs%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28url%29%3B%0A%20%20%20%20return%20true%3B%0A%7D%0AopenURI%28urlToOpen%29%3B%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E кнопка для открытия папки загрузок: Код: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%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%20%u0437%u0430%u0433%u0440%u0443%u0437%u043E%u043A%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-3%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%5Bfunction%20startProcess%20%28path%2C%20args%29%0A%7B%0A%20%20%20%20var%20file%20%3D%20Components.%20classes%5B%22@mozilla.org/file/local%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.interfaces.nsILocalFile%29%3B%0A%20%20%20%20var%20process%20%3D%20Components.%20classes%20%5B%22@mozilla.org/process/util%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createInstance%20%28Components.%20interfaces.%20nsIProcess%29%3B%0A%20%20%20%20file.%20initWithPath%20%28path%29%3B%0A%20%20%20%20if%20%28args%20%3D%3D%20%22%22%29%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20file.%20launch%20%28%29%3B%0A%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%7D%0A%20%20%20%20process.%20init%20%28file%29%3B%0A%20%20%20%20if%20%28%21this.%20pid%29%0A%20%20%20%20%20%20%20%20this.%20pid%20%3D%20%5B%5D%3B%0A%20%20%20%20this.%20pid.%20push%20%28process.%20run%20%28false%2C%20%5Bargs%5D%2C%201%29%29%3B%20%0A%7D%0Afunction%20getPref%20%28pName%29%0A%7B%0A%20%20%20%20var%20prefs%20%3D%20Components.%20classes%20%5B%22@mozilla.org/preferences-service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIPrefBranch%29%3B%0A%20%20%20%20var%20res%20%3D%20%22%22%3B%0A%20%20%20%20try%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20res%20%3D%20prefs.%20getComplexValue%20%28%22browser.download.%22%20+%20pName%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0A%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%3B%0A%20%20%20%20return%20res%3B%0A%7D%0Avar%20folderList%20%3D%20custombuttonsUtils.%20getPrefs%20%28%22browser.download.folderList%22%29%3B%0Avar%20fileLoc%20%3D%20Components.%20classes%20%5B%22@mozilla.org/file/directory_service%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%20%28Components.%20interfaces.%20nsIProperties%29%3B%0Avar%20desk%20%3D%20fileLoc.%20get%20%28%22Desk%22%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0Avar%20dnldMgr%20%3D%20Components.%20classes%5B%22@mozilla.org/download-manager%3B1%22%5D.%0A%20%20%20%20%20%20%20%20%20%20getService%28Components.interfaces.nsIDownloadManager%29%3B%0Avar%20ddd%20%3D%20dnldMgr.%20defaultDownloadsDirectory%3B%0Avar%20dir%20%3D%20%22%22%3B%0Aif%20%28folderList%20%3D%3D%200%29%20//%20desktop%0A%20%20%20%20dir%20%3D%20desk.%20path%3B%0Aelse%20if%20%28folderList%20%3D%3D%201%29%20//%20default%20downloads%20directory%0A%20%20%20%20dir%20%3D%20ddd.%20path%3B%0Aelse%0A%7B%0A%20%20%20%20dir%20%3D%20getPref%20%28%22dir%22%29%20%7C%7C%20getPref%20%28%22downloadDir%22%29%20%7C%7C%20getPref%20%28%22lastDir%22%29%20%7C%7C%20getPref%20%28%22defaultFolder%22%29%20%7C%7C%20%22%22%3B%0A%20%20%20%20if%20%28%21dir%29%0A%20%20%20%20%20%20%20%20dir%20%3D%20fileLoc.%20get%20%28%22DfltDwnld%22%2C%20Components.%20interfaces.%20nsILocalFile%29%3B%0A%20%20%20%20dir%20%3D%20dir.%20path%3B%0A%7D%0AstartProcess%20%28dir%2C%20%22%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%20%20%3Cattributes/%3E%0A%3C/custombutton%3E | ||||||||
| Anton > 07-08-2009 17:00:31 | ||||||||
3Jlou | ||||||||
| Najlus > 07-08-2009 17:32:57 | ||||||||
Да вам надо памятник из метеоритной платины ставить | ||||||||
| razoo > 07-08-2009 21:13:23 | ||||||||
Anton, Код:this.onmouseover = function() { this.image = "file:///W:/GoUp2.png"; };
this.onmouseout = function() { this.image = "file:///W:/GoUp.png"; };
this.onmousedown = function() { this.image = "file:///W:/GoUp3.png"; };
this.onmouseup = function() { this.image = "file:///W:/GoUp2.png"; };после этого кнопка на любой странице создает меню с того таба, который был открыт до этого. | ||||||||
| Infocatcher > 07-08-2009 21:39:47 | ||||||||
Или найти, где в коде добавляются такие же обработчики, и подправить там, или примерно вот так (добавлять в самый низ): Код:var _this = this;
this.addHandler = function _ah(onEvt, func) {
_ah[onEvt] = this[onEvt];
_ah[onEvt + "+"] = func;
this[onEvt] = function(e) {
var et = "on" + e.type;
var h = _ah[et];
h && h.call(_this, e);
_ah[et + "+"].call(_this, e);
};
};
this.addHandler("onmouseover", function() { this.style.opacity = "0.8"; });
this.addHandler("onmouseout", function() { this.style.opacity = "1"; });
this.addHandler("onmousedown", function() { this.style.opacity = "0.4"; });
this.addHandler("onmouseup", function() { this.style.opacity = "1"; }); | ||||||||
| razoo > 08-08-2009 10:43:20 | ||||||||
Я и обработчики менял и внизу добавлял, просто, наверно, мой кодец был кривой :)
Твой предыдущий код, хавает адреса с chrome:// как обычные. | ||||||||
| Anton > 08-08-2009 22:22:52 | ||||||||
Попробовал соорудить аналог: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname/%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAIAEBAAAAAAAABoAwAAJgAAACAgAAAAAAAAqAwAAI4DAAAoAAAAEAAAACAAAAABABgAAAAAAEADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8gzP//pRD//3Wg//8Z4P9/AAz/fwBs/38AC/9/ABL/fwAA/38n0P9/AAb/f//++A8AAf//AAH//yFw//8AACgAAAAgAAAAQAAAAAEAGAAAAAAAgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8/////P////z////8////AAP//wAD//////////////////////////////////////w%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.%20onPopupShowing%20%3D%20function%20%28event%2C%20menupopup%29%0A%7B%0A%09if%20%28event.%20target%20%21%3D%20menupopup%29%0A%09%09return%3B%0A%09menupopup.%20parentNode.%20buildMenu%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20buildMenu%20%3D%20function%20%28menupopup%29%0A%7B%0A%09this.%20setCheckboxState%20%28menupopup%29%3B%0A%09this.%20createToolbarsList%20%28menupopup%29%3B%0A%09this.%20appendToolbar%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20setCheckboxState%20%3D%20function%20%28menupopup%29%0A%7B%0A%09var%20scwt%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%29%3B%0A%09var%20checkbox%20%3D%20menupopup.%20getElementsByTagName%20%28%22menuitem%22%29%20%5B0%5D%3B%0A%09checkbox.%20setAttribute%20%28%22checked%22%2C%20scwt%29%3B%0A%09checkbox.%20setAttribute%20%28%22hidden%22%2C%20this.%20cbMainMenu%29%3B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20toolbar%20%3D%20document.%20getElementById%20%28toolbarId%29%3B%0A%09var%20isToolbar%20%3D%20toolbar%3F%20true%3A%20false%3B%0A%09var%20menuseparator%20%3D%20menupopup.%20getElementsByTagName%20%28%22menuseparator%22%29%20%5B0%5D%3B%0A%09menuseparator.%20setAttribute%20%28%22hidden%22%2C%20%28this.%20cbMainMenu%20%26%26%20%21%28isToolbar%20%26%26%20scwt%29%29%29%3B%0A%7D%3B%0A%0Athis.%20createToolbarsList%20%3D%20function%20%28menupopup%29%0A%7B%0A%09var%20scwt%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%29%3B%0A%09if%20%28%21scwt%20%26%26%20this.%20cbMainMenu%29%0A%09%09return%3B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20ctid%20%3D%20this.%20parentNode.%20getAttribute%20%28%22id%22%29%3B%0A%09var%20navbox%20%3D%20document.%20getElementById%20%28%22navigator-toolbox%22%29%3B%0A%09var%20toolbars%20%3D%20navbox.%20getElementsByTagName%20%28%22toolbar%22%29%3B%0A%09var%20groupname%20%3D%20this.%20id%20+%20%22-radiogroup%22%3B%0A%09var%20tid%3B%0A%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%20toolbars.%20length%3B%20i++%29%0A%09%7B%0A%09%09if%20%28%21toolbars%20%5Bi%5D.%20hasAttribute%20%28%22customindex%22%29%29%0A%09%09%09continue%3B%0A%09%09tid%20%3D%20toolbars%20%5Bi%5D.%20getAttribute%20%28%22id%22%29%3B%0A%09%09mi%20%3D%20document.%20createElement%20%28%22menuitem%22%29%3B%0A%09%09mi.%20setAttribute%20%28%22label%22%2C%20toolbars%20%5Bi%5D.%20getAttribute%20%28%22toolbarname%22%29%29%3B%0A%09%09mi.%20setAttribute%20%28%22type%22%2C%20%22radio%22%29%3B%0A%09%09mi.%20setAttribute%20%28%22name%22%2C%20groupname%29%3B%0A%09%09mi.%20setAttribute%20%28%22disabled%22%2C%20ctid%20%3D%3D%20tid%29%3B%0A%09%09mi.%20setAttribute%20%28%22checked%22%2C%20toolbarId%20%3D%3D%20tid%29%3B%0A%09%09mi.%20setAttribute%20%28%22value%22%2C%20tid%29%3B%0A%09%09mi.%20setAttribute%20%28%22oncommand%22%2C%20%22document.popupNode.setToolbar%28this.value%29%22%29%3B%0A%09%09menupopup.%20appendChild%20%28mi%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20appendToolbar%20%3D%20function%20%28menupopup%29%0A%7B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20toolbar%20%3D%20document.%20getElementById%20%28toolbarId%29%3B%0A%09if%20%28toolbar%29%0A%09%7B%0A%09%09toolbar.%20collapsed%20%3D%20%21this.%20cbMainMenu%3B%0A%09%09menupopup.%20insertBefore%20%28toolbar%2C%20menupopup.%20firstChild%29%3B%0A%09%09toolbar.%20currentSet%20%3D%20toolbar.%20getAttribute%20%28%22currentset%22%29%3B%0A%09%09document.%20persist%20%28toolbar.%20id%2C%20%22currentset%22%29%3B%0A%09%09this.%20label%20%3D%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%3B%0A%09%09this.%20setAttribute%20%28%22tooltiptext%22%2C%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%29%3B%0A%09%09if%20%28toolbar.%20firstChild%20%26%26%20toolbar.%20firstChild.%20image%29%0A%09%09%09this.%20image%20%3D%20toolbar.%20firstChild.%20image%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20setToolbar%20%3D%20function%20%28toolbarId%29%0A%7B%0A%09this.%20restoreToolbar%20%28true%29%3B%0A%09custombuttons.%20setPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%2C%20toolbarId%29%3B%0A%09var%20menupopup%20%3D%20this.%20firstChild%3B%0A%09this.%20appendToolbar%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20restoreToolbar%20%3D%20function%20%28showToolbar%29%0A%7B%0A%09var%20mp%20%3D%20this.%20firstChild%3B%0A%09var%20ct%20%3D%20mp.%20firstChild%3B%0A%09if%20%28ct.%20nodeName%20%3D%3D%20%22toolbar%22%29%0A%09%7B%0A%09%09var%20navbox%20%3D%20document.%20getElementById%20%28%22navigator-toolbox%22%29%3B%0A%09%09var%20next%20%3D%20navbox.%20firstChild%3B%0A%09%09while%20%28next%20%26%26%20%28next.%20nodeName%20%21%3D%20%22toolbarset%22%29%29%0A%09%09%7B%0A%09%09%09if%20%28Number%20%28next.%20getAttribute%20%28%22customindex%22%29%29%20%3E%20Number%20%28ct.%20getAttribute%20%28%22customindex%22%29%29%29%0A%09%09%09%09break%3B%0A%09%09%09next%20%3D%20next.%20nextSibling%3B%0A%09%09%7D%0A%09%09ct.%20collapsed%20%3D%20%21showToolbar%3B%0A%09%09navbox.%20insertBefore%20%28ct%2C%20next%29%3B%0A%09%09ct.%20firstPermanentChild%20%3D%20null%3B%0A%09%09ct.%20lastPermanentChild%20%3D%20null%3B%0A%09%09ct.%20currentSet%20%3D%20ct.%20getAttribute%20%28%22currentset%22%29%3B%0A%09%09document.%20persist%20%28toolbar.%20id%2C%20%22currentset%22%29%3B%0A%09%7D%0A%7D%3B%0A%0Athis.%20onPopupHidden%20%3D%20function%20%28event%2C%20menupopup%29%0A%7B%0A%09if%20%28event.%20target%20%21%3D%20menupopup%29%0A%09%09return%3B%0A%09menupopup.%20parentNode.%20destroyMenu%20%28menupopup%29%3B%0A%7D%3B%0A%0Athis.%20destroyMenu%20%3D%20function%20%28menupopup%29%0A%7B%0A%09this.%20restoreToolbar%20%28false%29%3B%0A%09var%20mi%20%3D%20menupopup.%20lastChild%3B%0A%09while%20%28menupopup.%20lastChild.%20nodeName%20%3D%3D%20%22menuitem%22%29%0A%09%09menupopup.%20removeChild%20%28menupopup.%20lastChild%29%3B%0A%7D%3B%0A%0Athis.%20setSCWTState%20%3D%20function%20%28checkbox%29%0A%7B%0A%09custombuttons.%20setPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%2C%20checkbox.%20getAttribute%20%28%22checked%22%29%20%3D%3D%20%22true%22%29%3B%0A%7D%3B%0A%0Athis.%20showMenu%20%3D%20function%20%28%29%0A%7B%0A%09this.%20cbMainMenu%20%3D%20true%3B%0A%09document.%20popupNode%20%3D%20this%3B%0A%09var%20mp%20%3D%20this.%20firstChild%3B%0A%09mp.%20openPopup%20%28this%2C%20%22after_start%22%2C%200%2C%200%2C%20false%2C%20false%29%3B%0A%7D%3B%0A%0Athis.%20showContextMenu%20%3D%20function%20%28contextId%29%0A%7B%0A%09this.%20cbMainMenu%20%3D%20false%3B%0A%09this.%20setAttribute%20%28%22context%22%2C%20contextId%29%3B%0A%7D%3B%0A%0Athis.%20onclick%20%3D%20function%20%28event%29%0A%7B%0A%09var%20mp%20%3D%20this.%20firstChild%3B%0A%09if%20%28event.%20originalTarget%20%21%3D%20this%29%0A%09%7B%0A%09%09if%20%28event.%20target%20%21%3D%20this%29%0A%09%09%09mp.%20hidePopup%20%28%29%3B%0A%09%09return%3B%0A%09%7D%0A%09if%20%28event.%20button%20%3D%3D%200%29%0A%09%09this.%20showMenu%20%28%29%3B%0A%09else%20if%20%28event.%20button%20%3D%3D%202%29%0A%09%09this.%20showContextMenu%20%28event.%20shiftKey%3F%20%22custombuttons-contextpopup%22%3A%20%22_child%22%29%3B%0A%7D%3B%0A%0Athis.%20hideSelectedToolbar%20%3D%20function%20%28%29%0A%7B%0A%09var%20toolbarId%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.toolbarId%22%29%3B%0A%09var%20toolbar%20%3D%20document.%20getElementById%20%28toolbarId%29%3B%0A%09if%20%28toolbar%29%0A%09%7B%0A%09%09toolbar.%20setAttribute%20%28%22collapsed%22%2C%20true%29%3B%0A%09%09this.%20label%20%3D%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%3B%0A%09%09this.%20setAttribute%20%28%22tooltiptext%22%2C%20toolbar.%20getAttribute%20%28%22toolbarname%22%29%29%3B%0A%09%7D%0A%7D%3B%0A%0Avar%20scwt%20%3D%20custombuttons.%20getPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%29%3B%0Aif%20%28scwt%20%3D%3D%20null%29%0A%09custombuttons.%20setPrefs%20%28%22custombuttons.%22%20+%20this.%20id%20+%20%22.showContextWithToolbar%22%2C%20true%29%3B%0Avar%20popup%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.hidePopup%28%29%22%20onclick%3D%22event.stopPropagation%28%29%22%20style%3D%22border%3A%20none%20%21important%3Boverflow%3Avisible%20%21important%3B%22%20flex%3D%221%22%0A%09%20%20%20onpopupshowing%3D%22this.parentNode.onPopupShowing%28event%2Cthis%29%22%20onpopuphidden%3D%22this.parentNode.onPopupHidden%28event%2Cthis%29%22%3E%0A%09%3Cmenuitem%20type%3D%22checkbox%22%20label%3D%22Show%20Context%20Menu%20With%20Toolbar%22%20oncommand%3D%22document.popupNode.setSCWTState%28this%29%22/%3E%0A%09%3Cmenuseparator/%3E%0A%3C/menupopup%3E%3B%0Apopup%20%3D%20new%20DOMParser%20%28%29.%20parseFromString%20%28popup.%20toXMLString%20%28%29%2C%20%22application/xml%22%29.%20documentElement%3B%0Athis.%20appendChild%20%28popup%29%3B%0Athis.%20hideSelectedToolbar%20%28%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E Вроде работает | ||||||||
| Najlus > 09-08-2009 17:07:11 | ||||||||
Ещё одна просьба по поводу кнопки QickBookmarks. Вот код: Код:/*Initialization Code*/
var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\tabbookmarks.xml";
var loadInBackground = true;
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
var label = tab. label;
var image = tab. image;
var br = getBrowser ();
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
this. addMenuitem (label, url, image);
};
this. addMenuitem = function (label, url, image)
{
var menu = this. menu;
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("url", url);
mi. setAttribute ("tooltiptext", url);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu (menu);
};
this. deleteMenuitem = function (menuitem)
{
var menu = this. menu;
menu. removeChild (menuitem);
this. checkEmpty (menu);
this. flushMenu (menu);
};
this. checkEmpty = function (menu)
{
if (menu. getElementsByTagName ("menuitem"). length > 0)
return;
menu. hidePopup ();
this. type = "";
};
this. flushMenu = function (menu)
{
menu = menu || this. menu;
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. menu;
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. __defineGetter__
(
"menu",
function ()
{
return this. getElementsByTagName("menupopup") [0];
}
);
this. openTab = function (event)
{
var mi = event. target;
var menu = mi. parentNode;
var url = mi. getAttribute ("url");
if (event. button < 2)
{
if (event. button == 0)
getBrowser (). loadURI (url, null, null);
else
getBrowser (). loadOneTab(url, null, null, null, loadInBackground, false);
menu. hidePopup ();
}
else
event. stopPropagation ();
this. deleteMenuitem (mi);
this. flushMenu (menu);
};
this. onclick = function (event)
{
if (event. button != 1 || event. target != this)
return;
var menu = this. menu;
var mis = menu. getElementsByTagName ("menuitem");
var mi;
while (mis. length)
{
mi = mis[0];
getBrowser (). loadOneTab(mi. getAttribute ("url"), null, null, null, true /*load in background*/, false);
menu. removeChild (mi);
}
this. checkEmpty (menu);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu ();Можете сделать так, чтобы закладка при открытии сразу перематывала страницу к тому месту, где она была перед её занесением в кнопку. | ||||||||
| 3Jlou > 09-08-2009 19:21:25 | ||||||||
Господа разработчики расширения, вопрос "косметического" характера: почему бы не сделать в диалоге редактирования кнопки 2 поля: "Картинка" и "Картинка маленькая" - которые будут выбираться в зависимости от настройки панели инструментов? | ||||||||
| Najlus > 09-08-2009 20:07:08 | ||||||||
Сомневаюсь что такое возможно. Во всяком случае надо обращаться к разработчику | ||||||||
| 3Jlou > 09-08-2009 21:54:04 | ||||||||
Najlus, дык я к ним и обращаюсь Набросал кнопку для перехода в режим приватного просмотра: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u0412%u043E%u0439%u0442%u0438%20%u0432%20%u0440%u0435%u0436%u0438%u043C%20%u043F%u0440%u0438%u0432%u0430%u0442%u043D%u043E%u0433%u043E%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACzklEQVR4nL2TTUhUURTHz33v3vdmdHRmdHRs1HRm/Ao/UjOECRMkK5FWMYsooUAaoU0tyq3iLiqKVhIEbfpQKVtIHxIMBJZSpBZpWn7k55g6TjNvxnnv3Xd7CoK7XEQHDvd/FueeP4ffAfhX4fV28bvrNm+XsJc+bkc4RTFvR7d6u8wxMGZc9fZlbNVXvF0pu5uunXteuKNR69neUlnm1zFPXcCxsKooPzHGpRxoqxpDJSql/YSQPKTgZYqVTIJFTZXlVdAESQVJ5o8XWy/EOVdIt1LOMTiIsFiEGV9LEZtGHGniePSZMVbGY+bRGASAQhNDEK71DLqra7h7qNNX/Bjz9typoPe7DA6qT07UjZkYoH7901QKzKQ7XUQAJo6FsNu5Uu+pITHX4UbPxvrGCiZoJcdhXat2266XRWihpDLzWCCcm8hAayBEnnM4EovtTrclsyDbLIqmVAMVeCaYQTClwvLIxx9YUTVxapmfMRtiGfmOcZs1Sag55PwKxiQLWLOrAJX5AGgconMD0NfrDwZDmxvnm5udVInCxMS4H6saW0tJ0tIWgzbP8FDklM2sNFTsD1fnuwhKScqByXfdse5nr3r6h+bfp9ssr9t9dU8QEZ0Lk6PhX1ryQ6wo3ADPqceKHOEHBVnGpxyIdyWVOg36YgDxMD3y9pbbEOotaczeV1JefD/LnVnJGAejI8MDq6vyGLp9Jt1utdLBjBSSk2ZJgEQDhrG5ANRWHACTvQxmp+chLT1dX34CMKKnYIGZSLL0YUE40tLSMsK//CJJdUX2TzxBlQqV7EvrITAQkY6vuTpwZKFKpKoQjcgQleKwqedSiKmjAUPHxUuXe7ZA2sb3xejGbH3tiUc0LlNEjBFmcN453f7mxsmj1ePROK2MSbLxt4LlRZoa/LaZ07YQjN30+/1sm8S/sd7Z2Uk0TcvU6UT6G/D5fNG93Mj/iz9oYC5kMgYmNwAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BgPrivateBrowsingUI.toggleMode%28%29%3B%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E в принципе там только одна строчка:
Как должен выглядеть код, чтобы кнопка имела вид нажатой во время сёрфинга в режиме приватного просмотра? | ||||||||
| Infocatcher > 09-08-2009 23:02:16 | ||||||||
Пока что можно, например, так: Код:var sId = "__custombuttonsStyle__" + this.id; // Unique style "id"
var cssStr = 'toolbar %button% { list-style-image: url("http://forum.mozilla-russia.org/img/smilies/smile.png") !important; }\n'
+ 'toolbar[iconsize="small"] %button% { list-style-image: url("http://forum.mozilla-russia.org/img/smilies/neutral.png") !important; }';
cssStr = cssStr.replace(/%button%/g, "#" + this.id);
function sheet(cssStr, removeFlag) {
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
.getService(Components.interfaces.nsIStyleSheetService);
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var data = "data:text/css," + encodeURIComponent(cssStr);
var uri = ios.newURI(data, null, null);
if(sss.sheetRegistered(uri, sss.USER_SHEET))
sss.unregisterSheet(uri, sss.USER_SHEET);
if(removeFlag)
return;
sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
window[sId] = cssStr;
}
if(!(sId in window))
sheet(cssStr);
else if(window[sId] != cssStr) {
sheet(window[sId], true);
sheet(cssStr);
}(в инициализацию) | ||||||||
| Dreyk > 09-08-2009 23:31:16 | ||||||||
Код:gPrivateBrowsingUI.toggleMode(); this.checked = !this.checked; Единственное, у меня кнопка выделяется как буд-то она очень большая по вертикали, на весь тулбар. Я еще подумаю как бы ее сделать получше | ||||||||
| Jarichek > 09-08-2009 23:39:34 | ||||||||
А можно и я парочку заказов оставлю. Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EPaste%20and%20Go%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAEG0lEQVR4AQEQBO/7Af///wAAAAAAAAAAAAAAAAB+g5B4AAUOhwAAAAAAAAAAAPvyeYJ9cIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB////AMabF/L17eoN2wFgAO8DPABgWkoA8fHwANXW2ADa3+4AEf3EACX/oAALExbzO2bqEv////wAAAAAAAAAAAH///8Au4gB/wk9vwC6w94AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARj0gAPfDQwBGeQAZAAAA7P////wAAAATBAAAAAAAAAAAMzI3ABgVwwDx8fcA+vr8AAEBAQAAAAAA/wAAAAAAAAApKlIAy8MAAAAAAAgAAAABAAAAAAAAAE4EAAAAAAAAAAAJCQkAIyIRANrb+wCKrjsADgkGAPL16gDw9OUA9/jxAAAAiwAICIgAYoIb3/7/DQABAQEG////nwQAAAAAAAAAAAAAAAAA/f0AAwAAAAQDBABPQAUAlburAO4c3gAID/0A9/37AOXt/AAd9yoAAvI6ABMTEyIBAQHeBAAAAAAAAAAAAAAAAAD8+wD++fsA7/XZAHyuqgAoQ/4ACQkGAAETBAD9BwAAEfb1AO3k0wDcpeIABTAFOCrnKuUEAAAAAAAAAAAAAAAAAPb5AOvu9QDV7q0APlgCAP0WBAD3yBsAAvsCANYSyQAAD/0ADhUGABRW6ADhpPlkNSs11gIAAAAAAAAAAAAAAAAA+/sA5u/3AAMd4gASIw0A6P3zACsaKwChX6EAYxBwAAveFwDYzuoA/hMBAPsl9ij/Cf8vAgAAAAAAAAAAAAAAAAD6/QD4+wUAGRgMAPkJ/QD4+fsAAP8AAAgFCABrP2sAnkyiAE4HVADm5PIADBUFERUOFSICAAAAAAAAAAAAAAAAAP37AAUFCAD6APoA8fj2APPz9wAA/QAAAAAAAAAAAAACAQIAAQABAPr8/QD5//0BEQ8RDAQAAAAAAAAAAAAAAAAA/P0ADwkDAOne+AAX9PQA9vf5AAD/AAD4+/gAn8afAJ/WnQDU/tMACSsDAPnaAfQJHAnuBAAAAAAAAAAAAPTYAAEniwApDuAAF8bWAOri2AAJBwMA1dzVAF+eXwDDAr0A9w/3AAkXAwD27PkALvY06SwcLNcB////AMeWE/D08u4PAAAAAAIGEADBCI4Aw+yjAO801gDzAvcA/AUAAP0HAAD6/fsA9Oz5ACfFNQBYM1GRIQUhiAH///8AAAAAAAEBARsAAAAFDw8PA2VwmdwNGfcAxuqvANIJyQD+C/UA+v/8AAPyDAAz+joAOxdRAAPt5kbExMTCAf///wAAAAAAAQEBAwAAAAIAAAAAJycnCEBAQCI7SjtK8f/xMgsGCx8AAAAA9fr14Q8BD869rr26sbGx7PDw8OaiWEPH7uRLhgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pasteURL%20%3D%20function%28aEvent%2C%20go%29%20%7B%0A%20%20var%20paste%20%3D%20readFromClipboard%28%29%3B%0A%20%20if%28%21paste%29%20return%3B%0A%20%20if%28%21go%29%20%7B%0A%20%20%20%20gURLBar.value%20%3D%20paste%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20openUILink%28paste%2C%20aEvent%2C%20false%2C%20true%29%3B%0A%20%20%7D%0A%7D%0A%0Athis.copyURLBar%20%3D%20function%28%29%20%7B%0A%20%20var%20clipb%20%3D%20Components.classes%5B%22@mozilla.org/widget/clipboardhelper%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIClipboardHelper%29%3B%0A%20%20clipb.copyString%28gURLBar.value%29%3B%0A%7D%0A%0Athis.clearURLBar%20%3D%20function%28%29%20%7B%0A%20%20gURLBar.value%20%3D%20%22%22%3B%0A%20%20gURLBar.focus%28%29%3B%0A%7D%0A%0Athis.resetURLBar%20%3D%20function%28%29%20%7B%0A%20%20gURLBar.value%20%3D%20gBrowser.currentURI.spec%3B%0A%7D%0A%0Athis.checkForMiddleClick%20%3D%20function%28aNode%2C%20aEvent%29%20%7B%0A%20%20if%20%28aEvent.button%20%3D%3D%201%29%20%7B%0A%20%20%20%20var%20fn%20%3D%20new%20Function%28%22event%22%2C%20aNode.getAttribute%28%22cb-oncommand%22%29%29%3B%0A%20%20%20%20fn.call%28aNode%2C%20aEvent%29%3B%0A%20%20%20%20closeMenus%28aEvent.target%29%3B%0A%20%20%7D%0A%7D%0Afunction%20cloneCBMenuitem%20%28id%29%0A%7B%0A%09var%20cbMenuitemId%20%3D%20%22custombuttons-contextpopup-%22%20+%20id%3B%0A%09var%20menuitem%20%3D%20document.%20getElementById%20%28cbMenuitemId%29%3B%0A%09var%20menuitem2%20%3D%20menuitem.%20cloneNode%20%28true%29%3B%0A%09menuitem2.%20setAttribute%20%28%22id%22%2C%20menuitem.%20id%20+%20this.%20id%29%3B%0A%09return%20menuitem2%3B%0A%7D%0Afunction%20createMenuitem%20%28label%2C%20command%29%0A%7B%0A%09var%20menuitem%20%3D%20document.%20createElement%20%28%22menuitem%22%29%3B%0A%09menuitem.%20setAttribute%20%28%22label%22%2C%20label%29%3B%0A%09menuitem.%20setAttribute%20%28%22oncommand%22%2C%20%22document.popupNode.%22%20+%20command%29%3B%0A%09return%20menuitem%3B%0A%7D%0A%0Avar%20submenu%20%3D%20document.%20createElement%20%28%22menupopup%22%29%3B%0Avar%20ids%20%3D%20%5B%22edit%22%2C%20%22remove%22%2C%20%22clone%22%2C%20%22copyURI%22%2C%20%22separator2%22%2C%20%22updateButton%22%2C%0A%09%09%20%20%20%22bookmarkButton%22%2C%20%22buttonHelp%22%2C%20%22separator3%22%2C%20%22customize%22%5D%3B%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20ids.%20length%3B%20i++%29%0A%7B%0A%09try%0A%09%7B%0A%09%09submenu.%20appendChild%20%28cloneCBMenuitem%20%28ids%20%5Bi%5D%29%29%3B%0A%09%7D%0A%09catch%20%28e%29%20%7B%7D%0A%7D%0Avar%20menu%20%3D%20document.%20createElement%20%28%22menupopup%22%29%3B%0Amenu.%20setAttribute%20%28%22id%22%2C%20%22cbContext-pgnButton%22%29%3B%0Amenu.%20setAttribute%20%28%22oncommand%22%2C%20%22event.%20stopPropagation%20%28%29%3B%22%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Paste%22%2C%20%22pasteURL%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Copy%22%2C%20%22copyURLBar%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Cut%22%2C%20%22copyURLBar%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Clear%22%2C%20%22clearURLBar%28%29%22%29%29%3B%0Amenu.%20appendChild%20%28createMenuitem%20%28%22Reset%22%2C%20%22resetURLBar%28%29%22%29%29%3B%0Avar%20menunode%20%3D%20document.%20createElement%20%28%22menu%22%29%3B%0Amenunode.%20setAttribute%20%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0Amenunode.%20appendChild%20%28submenu%29%3B%0Amenu.%20appendChild%20%28menunode%29%3B%0Athis.%20appendChild%20%28menu%29%3B%0Athis.%20setAttribute%20%28%22context%22%2C%20menu.%20id%29%3B%0A%0Athis.setAttribute%28%22onclick%22%2C%20%22this.checkForMiddleClick%28this%2C%20event%29%22%29%3B%0Athis.setAttribute%28%22onmouseover%22%2C%20%22this.tooltipText%20%3D%20readFromClipboard%28%29%20%3F%20readFromClipboard%28%29%20%3A%20this.label%3B%22%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*%20---------------------------------------------------------------------------%0A%20%20%20%20%20Paste%20and%20Go%20button%0A%20%20%20%20%20by%20Anton%0A%20%20%20%20%20Original%20code%20is%20LouCypher%20%28aka%20Zoolcar9%29%20%22Paste%20and%20Go%22%0A%20%20%20%20%20%28http%3A//loucypher.wordpress.com/projects/extensions/%23paste-and-go-button%29%0A%0A%20%20%20%20%20Lets%20you%20paste%20an%20URL%20from%20the%20clipboard%20and%20directly%20load%20it%0A%20%20%20---------------------------------------------------------------------------%20*/%0Atry%20%7B%0A%20%20this.pasteURL%28event%2C%20true%29%3B%0A%7D%20catch%28ex%29%20%7B%0A%20%20this.pasteURL%28null%2C%20true%29%3B%0A%7D%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E как бы ее изменить, чтобы по ЛКМ ссылка из буфера вставлялась в новой фоновой вкладке (т.е. текущая вкладка продолжала быть активной), а по средней - вставить и открыть адрес в текущей вкладке? | ||||||||
| Anton > 10-08-2009 20:32:27 | ||||||||
razoo
В "Код" по-прежнему Код:this. loadURL (); В "Инициализацию": Код:var THIS = this;
var id = this. id;
this. clickHandler = function (event)
{
if (event. button == 2)
return;
if (event. originalTarget. nodeName == "toolbarbutton")
return;
else if (event. originalTarget. nodeName == "menuitem")
this. uriToLoad = event. originalTarget. getAttribute ("label");
};
this. decodeURL = function (url)
{
try
{
var uri = makeURI (url);
if (uri. schemeIs ("chrome") ||
uri. schemeIs ("file"))
url = losslessDecodeURI (makeURI (url, null, makeURI (url)));
else
url = losslessDecodeURI (makeURI (url));
}
catch (e) {}
return url;
};
this. makePathsList = function (path, prefix)
{
var res = [];
var paths = path. split ("/");
if (!paths. pop ())
paths. pop ();
var url = prefix;
for (var i = 0; i < paths. length; i++)
{
if (!paths [i])
continue;
url += paths [i] + "/";
url = this. decodeURL (url);
res. push (url);
}
return res;
};
this. getJARPaths = function (uri)
{
uri = uri. QueryInterface (Components. interfaces. nsINestedURI);
uri = uri. QueryInterface (Components. interfaces. nsIURL);
var filePaths = this. getPaths (uri. innerURI);
var jarPaths = this. makePathsList (uri. filePath, "jar:" + uri. innerURI. spec + "!/");
var res = filePaths. concat (jarPaths);
res. push (this. decodeURL (uri. spec));
return res;
};
this. getDomain = function (uri, level)
{
if (uri. schemeIs ("about"))
return "";
if (uri. schemeIs ("jar"))
{
uri = uri. QueryInterface (Components. interfaces. nsINestedURI);
uri = uri. innerURI;
}
var tlds = Components. classes ["@mozilla.org/network/effective-tld-service;1"].
getService (Components. interfaces. nsIEffectiveTLDService);
var domain;
try
{
domain = tlds. getBaseDomain (uri, level);
}
catch (e)
{
try
{
domain = uri. asciiHost;
}
catch (e)
{
domain = uri. host;
}
}
return domain;
};
this. getDomains = function (host)
{
var domains = [];
var dLevel = 0;
var tld = "";
while (tld != this. getDomain (host, dLevel))
{
tld = this. getDomain (host, dLevel++);
if (host. spec == (host. scheme + "://" + tld + "/"))
continue;
domains. push (this. decodeURL (host. scheme + "://" + tld +"/"));
}
return domains;
};
this. getPaths = function (uri)
{
var paths = [];
if (uri. schemeIs ("about"))
return paths;
if (uri. schemeIs ("jar"))
return this. getJARPaths (uri);
var initialURL = uri. spec;
paths = this. makePathsList (uri. path, uri. prePath + "/");
paths. push (this. decodeURL (initialURL));
paths = this. getDomains (uri). concat (paths);
return paths;
};
this. getCBObject = function ()
{
var cbobj = getBrowser (). mCurrentTab [id];
if (typeof (cbobj) != "object")
getBrowser (). mCurrentTab [id] = {};
return getBrowser (). mCurrentTab [id];
};
this. handleMouseOver = function (event)
{
if (event && (event. originalTarget. nodeName != "toolbarbutton"))
return;
this. updateButton (event);
};
this. updateButton = function (event)
{
var uri = makeURI (getBrowser (). contentDocument. location. href);
var cbObject = THIS. getCBObject ();
var uri2 = makeURI (cbObject. uri || uri. spec);
if ((THIS. getDomain (uri, 0) == THIS. getDomain (uri2, 0)) &&
(uri. spec. length < uri2. spec. length))
uri = uri2;
var f1 = (THIS. getDomain (uri, 0) == THIS. getDomain (uri2, 0));
var f2 = (uri. spec. length < uri2. spec. length);
cbObject. uri = uri. spec;
var paths = THIS. getPaths (uri);
var url = THIS. decodeURL (getBrowser (). contentDocument. location. href);
if ((paths. indexOf (url) == -1) && (paths. indexOf (url + "/") == -1))
{
for (var i = 0; i < paths. length; i++)
{
if (url. length < paths [i]. length)
{
paths. splice (i, 0, url);
break;
}
}
}
THIS. host = paths [0] || uri. spec;
if (paths. length > 1)
THIS. type = "menu-button";
else
THIS. type = "";
var menu = THIS. getElementsByTagName ("menupopup") [0];
if (menu)
THIS. removeChild (menu);
menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"/>
var menuitem;
var curl = THIS. decodeURL (getBrowser (). contentDocument. location. href);
for (var i = 0; i < paths. length; i++)
{
menuitem = <menuitem label={paths [i]} tooltiptext={paths [i]}/>
if ((paths [i] == curl) ||
(paths [i] == (curl + "/")))
{
menuitem.@checked = "true";
menuitem.@type = "radio";
}
menu.menuitem[i] = menuitem;
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
THIS. appendChild (menu);
};
this. loadURL = function ()
{
var url = this. uriToLoad || this. host;
loadURI (this. uriToLoad || this. host);
this. uriToLoad = "";
};
this. onUnload = function (event)
{
window. removeEventListener ("focus", THIS. updateButton, true);
window. removeEventListener ("unload", THIS. onUnload, false);
};
this. destroy = function ()
{
this. onUnload (null);
};
window. addEventListener ("focus", this. updateButton, true);
window. addEventListener ("unload", this. updateButton, false);
this. updateButton (null);
this. setAttribute ("onclick", "this.clickHandler(event)");
this. setAttribute ("onmouseover", "this.handleMouseOver(event)");
this. orient = "horizontal"; | ||||||||
| Infocatcher > 10-08-2009 21:24:47 | ||||||||
Пока есть идея воспользоваться Код:var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\tabbookmarks.xml";
this. loadInBackground = true;
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
this. addMenuitem (tab, url);
};
this. __defineGetter__
(
"ss",
function ()
{
delete this.ss;
return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
}
);
this. addMenuitem = function (tab, url)
{
var label = tab. label;
var image = tab. image;
var menu = this. menu;
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("tab_data", this.ss.getTabState(tab));
mi. setAttribute ("tooltiptext", url);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu (menu);
var br = gBrowser;
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
};
this. deleteMenuitem = function (menuitem, dontFlush)
{
var menu = this. menu;
menu. removeChild (menuitem);
this. checkEmpty (menu);
!dontFlush && this. flushMenu (menu);
};
this. checkEmpty = function (menu)
{
if (menu. getElementsByTagName ("menuitem"). length > 0)
return;
menu. hidePopup ();
this. type = "";
};
this. flushMenu = function (menu)
{
menu = menu || this. menu;
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. menu;
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. __defineGetter__
(
"menu",
function ()
{
return this. getElementsByTagName("menupopup") [0] || null;
}
);
this. openTab = function (event, mi)
{
mi = mi || event. target;
var bg = event ? this. loadInBackground : true;
var menu = mi. parentNode;
if (!event || event. button < 2)
{
var tab;
if (event && event. button == 0)
tab = gBrowser. mCurrentTab;
else
tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false);
menu. hidePopup ();
var tabData = mi. getAttribute ("tab_data");
this.ss.setTabState(tab, tabData);
}
else
event. stopPropagation ();
this. deleteMenuitem (mi, !event);
};
this. onclick = function (event)
{
if (event. button != 1 || event. target != this)
return;
var menu = this. menu;
var mis = menu. getElementsByTagName ("menuitem");
while (mis. length)
this. openTab (null, mis[0]);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu (); 10-08-2009 21:53:11 | ||||||||
| Anton > 10-08-2009 22:59:58 | ||||||||
Ок, буду иметь в виду. Но без обещаний.
Можно добавить в раздел "Инициализация" Код:var THIS = this;
this. cbObserver =
{
button: THIS,
win: window,
observe: function (subject, topic, data)
{
if (topic != "private-browsing")
return;
if (data == "enter")
this. button. checked = true;
else if (data == "exit")
this. button. checked = false;
}
};
var os = Components. classes ["@mozilla.org/observer-service;1"].
getService (Components. interfaces. nsIObserverService);
os. addObserver (this. cbObserver, "private-browsing", false);
this. destroy = function ()
{
var os = Components. classes ["@mozilla.org/observer-service;1"].
getService (Components. interfaces. nsIObserverService);
os. removeObserver (this, "private-browsing");
};тогда состояние кнопки будет изменяться даже если переключение будет производиться не кнопкой, а из меню. | ||||||||
| Infocatcher > 11-08-2009 00:29:21 | ||||||||
Исследовать лениво, но если открыть два окна, а потом одно из них закрыть, observer будет оповещать уже несуществующий объект. Так что, опять же по идее, утечек памяти может и не случиться. | ||||||||
| Anton > 11-08-2009 00:31:52 | ||||||||
В раздел "Инициализация": Код:this. onclick = function (event)
{
var focusedWindow = document. commandDispatcher. focusedWindow;
var text = focusedWindow. getSelection (). toString ();
if (!text || event. shiftKey)
return;
var doc = getBrowser (). contentDocument;
var url = doc. location. hostname;
var charset = doc. characterSet;
try
{
charset = PlacesUtils. history. getCharsetForURI (makeURI (doc. location. href));
} catch (e) {}
if (charset)
{
text = escape (convertFromUnicode (charset, text));
url = escape (convertFromUnicode (charset, url));
}
else
{
text = encodeURIComponent (text);
url = encodeURIComponent (url);
}
var searchURL = "";
if (event. button == 2)
{
event. preventDefault ();
event. stopPropagation ();
searchUrl = "http://yandex.ru/yandsearch?rpt=rad&text=" + text + "&serverurl=" + url;
}
else if (event. button == 0)
searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
getBrowser (). addTab (searchUrl);
};Если надо, чтобы результаты поиска загружались в текущей вкладке, надо заменить строку Код:getBrowser (). addTab (searchUrl); на Код:loadURI (searchUrl);
В разделе "Инициализация" этой кнопки заменить строку Код:openUILink(paste, aEvent, false, true); на Код:openUILinkIn(paste, (aEvent. button == 1)? "current": "tabshifted"); | ||||||||
| Infocatcher > 11-08-2009 00:34:45 | ||||||||
Таки не удержался. | ||||||||
| Anton > 11-08-2009 00:41:32 | ||||||||
Infocatcher | ||||||||
| Infocatcher > 11-08-2009 01:24:36 | ||||||||
Так все же, что там касательно DOMNodeRemoved? | ||||||||
| Najlus > 11-08-2009 08:14:11 | ||||||||
При открытии закладки она не удаляется из списка | ||||||||
| Jarichek > 11-08-2009 10:35:11 | ||||||||
Anton | ||||||||
| Kemerover > 11-08-2009 11:09:52 | ||||||||
Можно мне объяснить как делать кнопки? Поэтапно... ну или просто напишите код кнопки чтобы при нажатии она кидала на такой url: firstpeaceсайтскоторогонажатакнопкаsecondpeace сам разберусь... | ||||||||
| Infocatcher > 11-08-2009 16:42:32 | ||||||||
Было такое, исправил.
| ||||||||
| Najlus > 11-08-2009 17:55:08 | ||||||||
Кажись пока стабильно | ||||||||
| Anton > 11-08-2009 19:56:16 | ||||||||
Infocatcher
Некогда. | ||||||||
| Infocatcher > 11-08-2009 20:06:48 | ||||||||
Понятно.
Я правильно понимаю, что это не спасет при перемещении кнопки в toolbarpalette? | ||||||||
| Anton > 11-08-2009 21:10:24 | ||||||||
Jarichek
Перед Код:openUILinkIn(paste, (aEvent. button == 1)? "current": "tabshifted"); надо добавить Код: if (getBrowser (). contentDocument. location. href == "about:blank")
loadURI (paste);
else
В раздел "Инициализация": Код:this. searchGoogle = function (text, url, encode)
{
if (encode)
{
text = escape (convertFromUnicode ("UTF-8", text));
url = encodeURIComponent (url);
}
var searchUrl = "http://www.google.com/search?as_q=" + text + "&as_sitesearch=" + url;
getBrowser (). addTab (searchUrl);
};
this. searchYandex = function (text, url, encode)
{
if (encode)
{
text = escape (convertFromUnicode ("UTF-8", text));
url = encodeURIComponent (url);
}
var searchUrl = "http://yandex.ru/yandsearch?rpt=rad&text=" + text + "&serverurl=" + url;
getBrowser (). addTab (searchUrl);
};
this. showSearchDialog = function (callback, url)
{
XML. ignoreProcessingInstructions = false;
var dialog = <>
<?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="resource://gre/res/html.css"?>
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
id="dlg02"
title="Custom Buttons"
onload="windowController.init()"
ondialogaccept="return windowController.accept();">
<script type="application/x-javascript">
<![CDATA[
var windowController =
{
init: function ()
{
var stb = document. getElementById ("sitetb");
stb. value = window. arguments [1];
window. sizeToContent ();
},
accept: function ()
{
var text = document. getElementById ("texttb"). value;
var url = document. getElementById ("sitetb"). value;
window. arguments [0] (text, url, true);
}
};
]]>
</script>
<vbox flex="1">
<grid>
<columns>
<column/>
<column flex="1"/>
</columns>
<rows>
<row align="center">
<label value="Искать текст"/>
<textbox id="texttb" flex="1"/>
</row>
<row align="center">
<label value="Сайт"/>
<textbox id="sitetb" flex="1"/>
</row>
</rows>
</grid>
</vbox>
</dialog>
</>;
window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog. toXMLString (), "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback, url);
};
this. onclick = function (event)
{
var focusedWindow = document. commandDispatcher. focusedWindow;
var text = focusedWindow. getSelection (). toString ();
var doc = getBrowser (). contentDocument;
var url = doc. location. hostname;
if (event. ctrlKey)
{
if (event. button == 0)
this. showSearchDialog (this. searchGoogle, url);
else if (event. button == 2)
{
event. preventDefault ();
event. stopPropagation ();
this. showSearchDialog (this. searchYandex, url);
}
return;
}
if (!text || event. shiftKey)
return;
var charset = doc. characterSet;
try
{
charset = PlacesUtils. history. getCharsetForURI (makeURI (doc. location. href));
} catch (e) {}
if (charset)
{
text = escape (convertFromUnicode (charset, text));
url = escape (convertFromUnicode (charset, url));
}
else
{
text = encodeURIComponent (text);
url = encodeURIComponent (url);
}
var searchURL = "";
if (event. button == 2)
{
event. preventDefault ();
event. stopPropagation ();
this. searchYandex (text, url, false);
}
else if (event. button == 0)
this. searchGoogle (text, url, false);
};Kemerover
Код:loadURL ("firstpeaceсайтскоторогонажатакнопкаsecondpeace");?
Не знаю. | ||||||||
| Infocatcher > 11-08-2009 21:37:53 | ||||||||
Еще есть что-то там про busy-флаг. Код:/* DEPRECATED */ function getBrowser() gBrowser; function getNavToolbox() gNavToolbox; в chrome://browser/content/browser.js Код: shouldOpenInNewTab: function gBrief_shouldOpenInNewTab() {
var openInNewTab = this.prefs.getBoolPref('openInNewTab');
var isLoading = gBrowser.webProgress.isLoadingDocument;
var isBlank = (gBrowser.currentURI.spec == 'about:blank');
return openInNewTab && (!isBlank || isLoading);
}, 11-08-2009 21:42:21 Код: if (gBrowser.currentURI.spec == "about:blank" && !gBrowser.webProgress.isLoadingDocument)
loadURI (paste);
else | ||||||||
| Anton > 11-08-2009 23:22:11 | ||||||||
Najlus
Попробуй Код:var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\tabbookmarks.xml";
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
var label = tab. label;
var image = tab. image;
var sss = Components. classes ["@mozilla.org/browser/sessionstore;1"].
getService (Components. interfaces. nsISessionStore);
var ts = JSON. parse (sss. getTabState (tab));
var entry = ts. entries [ts. entries. length - 1];
var scroll = entry && entry. scroll || "0,0";
var br = getBrowser ();
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
this. addMenuitem (label, url, image, scroll);
};
this. addMenuitem = function (label, url, image, scroll)
{
var menu = this. getElementsByTagName ("menupopup") [0];
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("url", url);
mi. setAttribute ("tooltiptext", url);
mi. setAttribute ("tabscroll", scroll);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu ();
};
this. deleteMenuitem = function (menuitem)
{
var menu = this. getElementsByTagName ("menupopup") [0];
menu. removeChild (menuitem);
if (menu. getElementsByTagName ("menuitem"). length == 0)
{
menu. hidePopup ();
this. type = "";
}
this. flushMenu ();
};
this. flushMenu = function ()
{
var menu = this. getElementsByTagName ("menupopup") [0];
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. getElementsByTagName ("menupopup") [0];
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. openTab = function (event)
{
var mi = event. target;
var menu = mi. parentNode;
var url = mi. getAttribute ("url");
var scroll = mi. getAttribute ("tabscroll"). split (",");
var scrollLeft = scroll [0];
var scrollTop = scroll [1];
var tab = getBrowser (). mCurrentTab;
if (event. button < 2)
{
if (event. button == 0)
getBrowser (). loadURI (url, null, null);
else
tab = getBrowser (). loadOneTab(url, null, null, null, false /*load in background*/, false);
menu. hidePopup ();
}
else
event. stopPropagation ();
gBrowser. addEventListener
(
"DOMContentLoaded",
function (event)
{
gBrowser. removeEventListener ("DOMContentLoaded", arguments. callee, true);
var tab = event. target;
var br = gBrowser. getBrowserForDocument (tab);
br. contentDocument. documentElement. scrollTop = scrollTop;
br. contentDocument. documentElement. scrollLeft = scrollLeft;
},
true
);
this. deleteMenuitem (mi);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu (); | ||||||||
| Jarichek > 11-08-2009 23:50:42 | ||||||||
Anton, Infocatcher Спабибо! | ||||||||
| Infocatcher > 12-08-2009 00:32:22 | ||||||||
Поковырял Session Manager, там сделано через Код:// If tab reloading enabled and not offline
if (gSessionManager.mPref_reload && !gSessionManager.mIOService.offline) {
// Restore tabs that are marked restore.
var sessionStore = gSessionManager.mSessionStore;
var allowReload = sessionStore.getTabValue(aEvent.originalTarget, "session_manager_reload");
if (allowReload == "true")
{
var nsIWebNavigation = Components.interfaces.nsIWebNavigation;
var browser = this.getBrowserForTab(aEvent.originalTarget);
browser.reloadWithFlags(nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE);По идее, должно работать: Код:var profileDir = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get("ProfD", Components.interfaces.nsILocalFile)
.path;
var path = profileDir + "\\tabbookmarks.xml";
this. loadInBackground = true;
this. reload = true;
this. handleDragOver = function (event)
{
var dt = event. dataTransfer;
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
if (!tab)
return;
event. preventDefault ();
event. stopPropagation ();
return dt. effectAllowed = dt. dropEffect = "link";
}
this. handleDrop = function (event)
{
var dt = event. dataTransfer;
var url = dt. mozGetDataAt ("text/x-moz-text-internal", 0);
var tab = dt. mozGetDataAt (TAB_DROP_TYPE, 0);
this. addMenuitem (tab, url);
};
this. __defineGetter__
(
"ss",
function ()
{
delete this.ss;
return this.ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
}
);
this. __defineGetter__
(
"ios",
function ()
{
delete this.ios;
return this.ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
}
);
this. addMenuitem = function (tab, url)
{
var label = tab. label;
var image = tab. image;
var menu = this. menu;
var mi = document. createElement ("menuitem");
mi. setAttribute ("label", label);
mi. setAttribute ("tab_data", this.ss.getTabState(tab));
mi. setAttribute ("tooltiptext", url);
mi. className = "menuitem-iconic bookmark-item";
image && mi. setAttribute ("image", "moz-anno:favicon:" + image);
menu. appendChild (mi);
this. type = "menu";
this. flushMenu (menu);
var br = gBrowser;
//if (br. tabContainer. childNodes. length > 1)
br. removeTab (tab);
};
this. deleteMenuitem = function (menuitem, dontFlush)
{
var menu = this. menu;
menu. removeChild (menuitem);
this. checkEmpty (menu);
!dontFlush && this. flushMenu (menu);
};
this. checkEmpty = function (menu)
{
if (menu. getElementsByTagName ("menuitem"). length > 0)
return;
menu. hidePopup ();
this. type = "";
};
this. flushMenu = function (menu)
{
menu = menu || this. menu;
var xs = new XMLSerializer ();
var xmenu = xs. serializeToString (menu);
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
xmenu = suc. ConvertFromUnicode (xmenu);
custombuttons. writeFile (path, xmenu);
};
this. getMenu = function (event)
{
var menu = this. menu;
if (menu)
this. removeChild (menu);
menu = "";
try
{
file = Components. classes ["@mozilla.org/file/local;1"].
createInstance (Components. interfaces. nsILocalFile);
file. initWithPath (path);
var fis = Components. classes ["@mozilla.org/network/file-input-stream;1"].
createInstance (Components. interfaces. nsIFileInputStream);
fis.init (file, 0x01, 00004, null);
var sis = Components. classes ["@mozilla.org/scriptableinputstream;1"].
createInstance (Components. interfaces. nsIScriptableInputStream);
sis. init (fis);
menu = sis. read (sis. available ());
sis. close ();
var suc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"].
createInstance (Components. interfaces. nsIScriptableUnicodeConverter);
suc. charset = "UTF-8";
menu = suc. ConvertToUnicode (menu);
menu = new XML (menu) || "";
}
catch (e)
{
menu = "";
}
if (!menu)
{
menu =
<menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onclick="this. parentNode. openTab (event);"/>
}
menu = new DOMParser (). parseFromString (menu. toXMLString (), "application/xml"). documentElement;
this. appendChild (menu);
if (menu. getElementsByTagName ("menuitem"). length > 0)
this. type = "menu";
this. orient = "horizontal";
return menu;
};
this. __defineGetter__
(
"menu",
function ()
{
return this. getElementsByTagName("menupopup") [0] || null;
}
);
this. openTab = function (event, mi)
{
mi = mi || event. target;
var bg = event ? this. loadInBackground : true;
var menu = mi. parentNode;
if (!event || event. button < 2)
{
var tab;
if (event && event. button == 0)
tab = gBrowser. mCurrentTab;
else
tab = gBrowser. loadOneTab("about:blank", null, null, null, bg, false);
menu. hidePopup ();
var tabData = mi. getAttribute ("tab_data");
this.ss.setTabState(tab, tabData);
if(this.reload && !this.ios.offline)
{
var wn = Components.interfaces.nsIWebNavigation;
gBrowser.getBrowserForTab(tab).reloadWithFlags(wn.LOAD_FLAGS_BYPASS_PROXY | wn.LOAD_FLAGS_BYPASS_CACHE);
}
}
else
event. stopPropagation ();
this. deleteMenuitem (mi, !event);
};
this. onclick = function (event)
{
if (event. button != 1 || event. target != this)
return;
var menu = this. menu;
var mis = menu. getElementsByTagName ("menuitem");
while (mis. length)
this. openTab (null, mis[0]);
this. flushMenu (menu);
};
this. setAttribute ("ondragdrop", "return this. handleDrop (event);");
this. setAttribute ("ondragover", "return this. handleDragOver (event);");
this. setAttribute ("onmouseover", "if (event. target == this) this. getMenu (event);");
this. getMenu (); | ||||||||
| Jarichek > 12-08-2009 10:39:49 | ||||||||
Кстати, а как задать например кнопке "Остановить" стандартную иконку из текущей темы, что бы при смене темы она подхватывалась из нее? | ||||||||
| Anton > 12-08-2009 20:24:14 | ||||||||
Jarichek
Никак. | ||||||||
| vurdalak > 13-08-2009 15:37:58 | ||||||||
Скажите пожалуйста , почему ранее выложенная кнопка Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EprofilesMenu%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E1%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20apps%3Dnew%20Array%3B%0A//------menu%20items--------%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%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%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%0A%0Athis.appendChild%28mP%29%3B%0Athis.type%20%3D%20%22menu%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E работает на моем :::: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729) только единожды ? | ||||||||
| Anton > 13-08-2009 18:58:59 | ||||||||
vurdalak Код:.getService(Components.interfaces.nsIProcess); на Код:.createInstance(Components.interfaces.nsIProcess); | ||||||||
| vurdalak > 13-08-2009 19:22:21 | ||||||||
Anton | ||||||||
| vurdalak > 13-08-2009 19:55:37 | ||||||||
Посмею еще задать один вопрос. Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-4%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%2C%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%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%2C%20%27c%3A%5Creadme.txt%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.createInstance%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-button%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E В коде я прописал, чтобы кнопка была типа: this.type = "menu-button"; | ||||||||
| Anton > 13-08-2009 20:55:32 | ||||||||
vurdalak Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%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%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%2C%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%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%2C%20%27c%3A%5Creadme.txt%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%27event.stopPropagation%28%29%3Bthis.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%2Cthis%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%2Cmi%29%20%7B%0A%20%20this.currentCommand%3Dmi%3B%0A%20%20this.image%3Dmi.getAttribute%28%22image%22%29%3B%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.createInstance%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-button%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.image%3DmP.firstChild.getAttribute%20%28%22image%22%29%3B%0Athis.currentCommand%3DmP.firstChild%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Athis.currentCommand.doCommand%28%29%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| vurdalak > 13-08-2009 21:35:35 | ||||||||
Есть еще один момент Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAgtJREFUOE+NU99LU2EYnvSHdNP0uHUcw7n8RTmNgYKgWESXQexGNAoSIsoiutDhUDbndEmLWo1ayEydgV1FXWi1HINipC1rP9x2cptnJoo8nu+Dc9xxg3XggcP3ve/zvu/zPl8FAMX/fuaVGA0+keMUN9rYCppHCMphZCmI4eWoEHYUS85o8VLJ5FJE15s1dAR2ce62j0KML0kgJplCMRAYV3eg9Weh8nLQvN6C3p2QSIoICtu0hLNo9P2C8r4fpyyfwbiiqHr0B6wriQb3pqwTaYSxLynanuFjHo0zETBd/dC0XsaZi9dRfXMB1Y4YTk/EUf8sW0xQmEwImAeLULb3SvMSAv1wAKw9AZ3zL4Woh0zE1g95sN40Kh8LLdvXwdgiUFkjUFt/g7XGoR3fRMNUBoYnXDHB2SUe7CsOldNRqAe/loWsA5N/A3VzPFSuBJTjGzhpegpd97WykHzQPL+DWu82agSVVfYoGHMY6ksPZcYhOjR5ePQFD3DH//1ohCuC4uzkGq2mf56D1plCjTCvZjRONyBuweDj0Rvah/UbL99C52waLbde0mqUxCGsypmBfkIwztQWml/k0P3uHwZCexhaTtJkEic6UmGc4SQCkaT27ns02dZh9CTRM5fB1dmf9F/UpdD+ih73D9TfeysxXnCsSlWOC1nq3VAfnLcFoBv6BJJc7mUevz8EdJ2boXU7oPQAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%0AGchrome%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/SqMCEBNtAAAALQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGRUeD3dShTXYerNF/3nFov844ff/E9///xLY//8Vz/X/G6jG8RBIVqoAAABAAAAABQAAAAAAAAAAAAAAChsoEndjpzvzY6sr/3q7nf835f//Etz//xDZ//8P1vz/EdL3/yDJ7f8jwOP/D2d7wwECAjUAAAAAAAAAAAcNBD5enDjpUq4e/0CPFf91n5z/ZeP5/zbm//8h3f//Edn//w/X/f8U0PX/H8Hl/yC94f8NUWGhAAAADQAAAAY5WSWYYLYw/0CiHv9LskP/V6BZ/3iUkf973O7/XfD//zjl//8O2f//Ddf9/xLP9P8iweT/HKbF8wMSFTwOFAooZJxD11CuLf9MsEX/Vr1t/23Tm/+Zyqn/fYGB/4ajr/+Qzdv/bOv//xLb//8O1fr/Fsjt/yK94f8LS1l5KDYeTWyxTO5Lrz7/Vrxq/2jOmP+m2bz/ZHpc/01JMP9aQCD/TD8y/3iQmv9e5fz/Ctf+/xLQ9f8hxOn/GXOIoSk7IFNntVL0ULdX/13GiP+S4L7/epN2/2VWJP/Hghv/340n/7l7Iv9TRzT/ZbLI/yTi//8J1f3/H9H2/x17kak1Qi86d8Bv6la+bv9q0KH/ot69/2JuTf+8fiz/759M//K6g//yo1L/mXs+/1ubp/887///I9Tt/0Covf8fc4mRHyocC3u6fMpiyYn/c9Sq/6Tfwf9wcWH/wYg4//WtYv/2yJH/96te/7KNTP9ff5P/Voel/0NQkf9KWbL/Hl9xUwAAAABTelpzgd6q/5Hfu/+ZwKn/hYS//3RjY//Hk1//0o9Z/7J5Of+WhI3/UE/U/w8I3f8JA+7/P2Dz3RQnJhEAAAAAFyEaDKTiw8244sL/jY+5/zQy9/9kZdT/a2me/2dilf9naK//YmPt/xEQ8/8AAOr/EhL0/ytPj1IAAAAAAAAAAAAAAAA5SUMqpcip2nJ0sP8WFeb/AwPh/yor5f81NuX/ISHk/wAA2f8AANb/CAje/w0Nj3kAAAAAAAAAAAAAAAAAAAAAAAAAAB8kHRZAQ4OKXFzf7iUlzP8TE8v/EhLK/xoay/8tLc/+NTXD0h8fe1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2cD98fOOadnbc03d33Nh/f+TAa2u9bx4eNBcAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAEAAMADAADgBwAA+A8AAA%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%0ANotepadPP%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAD//P8A//zwAP/3/wD/9/AA8P//APD98ADw9/8A8PTwAPD34ADw5+AA7///AO/08ADg8P8A4PDwAO//7wDv8O8A4PTvAO/o/wDg5/AA7+3vAO/n4ADg6O8A4OjgAODi4ADg3+AA4NzfAODY0ADf7+8A3+DgANDg7wDP+P8AwPD/ANDg0ADf3+AA393fAN/Y0ADQ2tAA0NDfANDU0ADQ0M8A0M/QAN/HwADP3N8Az9DfAM/Q0ADP1M8AwNDPAM/M0ADAyNAAz87PAM/HzwDPxcAAwM/PAMDEwADAx78A0LfQAM+3wADAv8AAsMjQAL/HwACwyMAAoMDAAJ/A4ACQx98Av8C/ALDAsACfr8AAn6DAAI+YwAC/v78Av7e/ALC4sACwt78AsLCwAL+orwC/r6AAv6egAK+/vwCvv7AAr7ewAK+vrwCvr6AAoKigAKCkoACgn7AAn6i/AJCosACfop8AkKCfAJ+foACPh68An5yfAJCYkACQl5AAj5CQAICQnwCPj48AgIeAAH/P3wBf3/AAT8jgAEDI3wB/sN8Af7/AAG+3wABgt8AAYKiwAH+QkABfoK8AT6+/AECgvwBAkK8AQICgAECAnwAw2OAAMNDvADDI7wAg0O8AIMjvACDH4AAvwNAAEMDgAC+43wAvl68AcGiPAHB4cABwd3AAb2xvAEBPXwAAAAAAf5CfAH+PkABwgJAAf4SPAHCAgABfmL8AUIe/AE+HvwA/zPAAP8fwADDP/wAwwvAAP8jvAC/A8AAwvPAAL77wAC+18AAguPAAH6//ABCH0AAfiM8AEIfPAA+A0AAgh78AH4i/AB+PsAAQgL8Af2/wAG93wABgWN8AYF/AAHB/gABveIAAYHeAAEB4vwBAf7AAQHigAEBwrwBfeJ8AUE+/AE9PrwBfUI8AT1+PABB/0AAQf88AD3/QAA9/zwA/YJAAP2CPADBojwA/X48AL1yPAC9YgAAvV4AAIF+PACBcgAAQfL8AEHiwABB3sAAPfL8AD3ewAABwsAB/fX8AcHh/AHB1cABgcH8Ab29wAG9qbwBgaG8AYGdvAGBiYABQZ3AAX2dvAF9gYABAYH8AUFhgAF9bXwBAT1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AYGF/f35hW0H+/v7+/v7+/lAHAAcTIjVQW2BhfX1+XP5TABMMAwgOBQAHAQADBS3+UwAWBwoACRkVAAAAAwBP/lsHJCAZgEIYBwQTAwcAYP5TAAsFAitobB0DEAsHB13+WwcxLyYzanJ7EQULBDEx/lcAMS8tGj14dW8wKhBd/v5TADUhNSYlPnpzcE0bXf7+WwtSNSY0ODdmd3lrKkj+/lcHJiImJCYzOmlldXES/v5bByIXFxABAgYfYnNkZ/7+WwdFRk8uNSlKWVZuY208/lwXRzlFTkFLTAMoQj8eXzJdFhcUIyRBNVEm/v7+VEN8UyYmMzE1QVhX/v7+/v5EWgD///8AAf//AAH//wAB//8AAf//AAH//wAB//8AA///AAP//wAD//8AA///AAP//wAB//8AAP//ADj//wB8//8%3D%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%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%20%20%20%20CurrentPage%20%3D%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%3B%0A%0A//%20------%20Menu%20Items%20------%0Aapps.push%28%5B%27Run%20in%20IE%27%2C%20%20%20IExplorer%2C%20%27C%3A/Program%20Files/Internet%20Explorer/IEXPLORE.EXE%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%5B%27Run%20in%20Google%20Chrome%27%2C%20%20%20%20%20%20%20%20Gchrome%2C%20%20%27C%3A/Documents%20and%20Settings/Admin/Local%20Settings/Application%20Data/Google/Chrome/Application/chrome.exe%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0A%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%0A%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%27Notepad++%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20NotepadPP%2C%20%27F%3A/Run/Textutils/notepad++/notepad++.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%27event.stopPropagation%28%29%3Bthis.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%2Cthis%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%2Cmi%29%20%7B%0A%20%20this.currentCommand%3Dmi%3B%0A%20%20this.image%3Dmi.getAttribute%28%22image%22%29%3B%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.createInstance%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-button%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.image%3DmP.firstChild.getAttribute%20%28%22image%22%29%3B%0Athis.currentCommand%3DmP.firstChild%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Athis.currentCommand.doCommand%28%29%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E То-есть назначил на первые пункты меню, в коде инициализации, запуск браузеров | ||||||||
| 3Jlou > 13-08-2009 23:23:23 | ||||||||
Помогите вылечить кнопку, лепил код из нескольких кнопок (контекстное меню брал от кнопки под Custom Buttons 2), в принципе кнопка рабочая (ЛКМ открывает дополнения в боковухе, СКМ открывает/закрывает вкладку с дополнениями, ПКМ выкидывает меню со списком дополнений), но иконка выглядит неактивной и консоль ошибок отображает ошибку в строке: Код:subMenu.setAttribute("image", Cb.defaultImg());Закомментировал эту строку, кнопка стала конфликтовать с расширением MR Tech Toolkit: ЛКМ не работает, СКМ не закрывает вкладку при повторном нажатии, а на ПКМ вообще выпадает меню MR Tech Toolkit Код:this.url2xul= 'chrome://mozapps/content/extensions/extensions.xul';
this.onClick= function(e)
{
switch (e.button)
{
case 0:
openWebPanel(this.tooltipText, this.url2xul);
break;
case 1:
{
var t= gBrowser.mTabs;
var current= content.document.location.href;
var i= t.length;
if (current==this.url2xul) gBrowser.removeCurrentTab();
else while (true)
{
if (--i<0)
{
if (current=='about:blank') // replace blank tab
loadURI(this.url2xul);
else // add new tab
gBrowser.selectedTab= gBrowser.addTab(this.url2xul);
break;
};
if (t[i].linkedBrowser.currentURI.spec==this.url2xul) // popup loaded
{
gBrowser.selectedTab= gBrowser.tabContainer.childNodes[i];
break;
};
};
}; break;
};
};
this.setAttribute('onclick','this.onClick(event);');
const Cb = custombuttons;
const EXTENSION = Ci.nsIUpdateItem.TYPE_EXTENSION;
function prop( aElement, aString ) {
var emRDF = "http://www.mozilla.org/2004/em-rdf#";
var arc = RDFService.GetResource(emRDF+ aString);
var target = extensionDS.GetTarget(aElement, arc, true);
if(target instanceof Ci.nsIRDFLiteral) return target.Value;
if(target instanceof Ci.nsIRDFInt) return target.Value;
return null;
}
var cloneCBcontext = {
cloneItems: function(aNode, aID, aSeparate) {
var menupopup = document.getElementById(aID).cloneNode(true);
var menuitems = menupopup.childNodes.length;
for(var i = 0; i < menuitems; i++)
aNode.appendChild(menupopup.firstChild);
if(aSeparate)
aNode.appendChild(document.createElement("menuseparator"));
},
makeMenu: function(aNode) {
var m = aNode.appendChild(document.createElement("menu"));
m.setAttribute("label", "Custom Button");
m.setAttribute("oncommand", "event.stopPropagation()");
var mp = m.appendChild(document.createElement("menupopup"));
cloneCBcontext.cloneItems(mp, "custombuttons-contextpopup");
aNode.insertBefore(document.createElement("menuseparator"), m);
}
}
const popupID = "cbContext-extensionsButton";
var test = document.getElementById(popupID);
if(test) test.parentNode.removeChild(test);
var main = document.getElementById("mainPopupSet");
var cPopup = main.appendChild(document.createElement("popup"));
cPopup.id = popupID;
cPopup.setAttribute("oncommand",
"event.stopPropagation(); document.popupNode.openPrefs(event);")
var RDFService = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService);
var Container = Cc["@mozilla.org/rdf/container;1"].getService(Ci.nsIRDFContainer);
var extensionDS = Cc["@mozilla.org/extensions/manager;1"].getService(Ci.nsIExtensionManager).datasource;
var root;
try {
root = RDFService.GetResource("urn:mozilla:item:root");
} catch(err) {
root = RDFService.GetResource("urn:mozilla:extension:root");
}
Container.Init(extensionDS,root);
var elements = Container.GetElements();
var extensionArray = [];
var i = -1;
while(elements.hasMoreElements()) {
i++;
var element=elements.getNext();
element.QueryInterface(Components.interfaces.nsIRDFResource);
var prop_OptionsURL = prop(element, "optionsURL");
if(prop(element, "type") == EXTENSION && prop_OptionsURL) {
var prop_name = prop(element, "name");
extensionArray[i] = [];
extensionArray[i] [0] = prop_name.charAt(0).toUpperCase() + prop_name.substr(1);
extensionArray[i] [1] = prop_OptionsURL;
extensionArray[i] [2] = prop(element, "userDisabled");
extensionArray[i] [3] = prop(element, "version");
extensionArray[i] [4] = prop(element, "iconURL");
if(!extensionArray[i] [4])
extensionArray[i] [4] = "chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png";
}
}
extensionArray.sort();
var features = "chrome, dialog = 0, resizable, titlebar, toolbar, centerscreen";
var extCommand = "window.openDialog('ZZZ', '', '" + features + "');";
for(var i = 0; i < extensionArray.length; i++) {
var extArray = extensionArray[i];
try {
var mItem = document.createElement("menuitem");
mItem.setAttribute("label", extArray[0] + " " + extArray[3]);
if(extArray[4]) {
mItem.setAttribute("class", "menuitem-iconic bookmark-item");
mItem.setAttribute("image", extArray[4]);
}
if(extArray[1])
mItem.setAttribute("oncommand", extCommand.replace("ZZZ", extArray[1]));
if(extArray[2]) mItem.setAttribute("disabled", true);
cPopup.appendChild(mItem);
} catch(e) {
}
}
cloneCBcontext.makeMenu(cPopup);
this.setAttribute("context", popupID);
if(typeof Local_Install != "object") return;
var test = document.getElementById("cbContext-extensions");
if(test) test.parentNode.removeChild(test);
var cbPopup = document.getElementById("custombuttons-contextpopup-subCall").cloneNode(true); // Cb context
// var subPopup = document.createElement("menupopup");
// subPopup.appendChild(cbPopup);
// subPopup.appendChild(cbPopup.lastChild);
var subMenu = document.createElement("menu");
subMenu.setAttribute("label", "Custom Button");
subMenu.setAttribute("image", Cb.defaultImg());
subMenu.appendChild(cbPopup.lastChild);
var extensionsPopup = document.getElementById("emb-context");
var popup = extensionsPopup.cloneNode(true);
popup.id = "cbContext-extensions";
popup.appendChild(document.createElement("menuseparator"));
popup.appendChild(subMenu);
// popup.appendChild(subPopup);
extensionsPopup.parentNode.appendChild(popup);
this.setAttribute("context", popup.id);
this.onclick = function(aEvent) {
if(aEvent.button === 1) gBrowser.selectedTab = gBrowser.addTab('chrome://mozapps/content/extensions/extensions.xul?type=extensions');
} | ||||||||
| Jarichek > 14-08-2009 14:03:58 | ||||||||
Anton Код:Ошибка: uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMLocation.hostname]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: chrome://custombuttons/content/cbbutton.js :: anonymous :: line 356" data: no] при нажатии на кнопку "Поиск по сайту" (ту, что ты выше помог сделать) при зажатом Ctrl на пустой вкладке. Может быть нужно исправить, чтобы на пустой вкладке выскакивало это окно без заполненного поля "Сайт"? | ||||||||
| Anton > 14-08-2009 17:45:37 | ||||||||
Код кнопки не предназначен передавать в качестве аргументов url. | ||||||||
| Infocatcher > 14-08-2009 17:50:57 | ||||||||
Найти все обращения к location.hostname и завернуть в try/catch.
Стало: Код:try { var url = doc. location. hostname; }
catch(e) { var url = ""; } 14-08-2009 17:51:41
Скорее даже не «до», а «пере». | ||||||||
| vurdalak > 14-08-2009 18:00:48 | ||||||||
Ничего себе, не ожидал | ||||||||
| Anton > 14-08-2009 18:15:19 | ||||||||
Это потому что в конце кода устанавливается ещё один обработчик onclick: Код:;
this.onclick = function(aEvent) {
if(aEvent.button === 1) gBrowser.selectedTab = gBrowser.addTab('chrome://mozapps/content/extensions/extensions.xul?type=extensions');
}Его надо убрать, тогда будут работать ЛКМ, СКМ.
Это как раз случается, если упомянутая строка Код:subMenu.setAttribute("image", Cb.defaultImg());не закомментирована. | ||||||||
| Anton > 14-08-2009 18:46:26 | ||||||||
Я не знаю. Если честно, я и свои не все помню (но эту точно не писал).
Ну, вообще-то мысль. Будет работать. Допиши в конец Код:this. onmouseover = function (event)
{
this. removeAttribute ("initialized");
this. init ();
}; | ||||||||
| vurdalak > 14-08-2009 19:16:07 | ||||||||
Эх-йолы палы | ||||||||
| Anton > 14-08-2009 19:20:27 | ||||||||
vurdalak Код:this. onmouseover = function (event)
{
if (event. originalTarget != this)
return;
this. removeAttribute ("initialized");
this. init ();
};ps. Но от "фишки" с сохранением иконки придётся отказаться. | ||||||||
| vurdalak > 14-08-2009 19:31:16 | ||||||||
Вот это я и написал выше, пока не видел твое сообщение ..... | ||||||||
| Anton > 14-08-2009 19:42:42 | ||||||||
vurdalak Код:mP. firstChild. setAttribute ("oncommand", 'event.stopPropagation();this.f(this.getAttribute("path"),getBrowser().contentDocument.location.href,this);');
mP. firstChild. nextSibling. setAttribute ("oncommand", 'event.stopPropagation();this.f(this.getAttribute("path"),getBrowser().contentDocument.location.href,this);');а после Код:var m = document.createElement('menuitem');добавляем Код:m.setAttribute('path',path); | ||||||||
| vurdalak > 14-08-2009 20:00:10 | ||||||||
УРА - Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/SqMCEBNtAAAALQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGRUeD3dShTXYerNF/3nFov844ff/E9///xLY//8Vz/X/G6jG8RBIVqoAAABAAAAABQAAAAAAAAAAAAAAChsoEndjpzvzY6sr/3q7nf835f//Etz//xDZ//8P1vz/EdL3/yDJ7f8jwOP/D2d7wwECAjUAAAAAAAAAAAcNBD5enDjpUq4e/0CPFf91n5z/ZeP5/zbm//8h3f//Edn//w/X/f8U0PX/H8Hl/yC94f8NUWGhAAAADQAAAAY5WSWYYLYw/0CiHv9LskP/V6BZ/3iUkf973O7/XfD//zjl//8O2f//Ddf9/xLP9P8iweT/HKbF8wMSFTwOFAooZJxD11CuLf9MsEX/Vr1t/23Tm/+Zyqn/fYGB/4ajr/+Qzdv/bOv//xLb//8O1fr/Fsjt/yK94f8LS1l5KDYeTWyxTO5Lrz7/Vrxq/2jOmP+m2bz/ZHpc/01JMP9aQCD/TD8y/3iQmv9e5fz/Ctf+/xLQ9f8hxOn/GXOIoSk7IFNntVL0ULdX/13GiP+S4L7/epN2/2VWJP/Hghv/340n/7l7Iv9TRzT/ZbLI/yTi//8J1f3/H9H2/x17kak1Qi86d8Bv6la+bv9q0KH/ot69/2JuTf+8fiz/759M//K6g//yo1L/mXs+/1ubp/887///I9Tt/0Covf8fc4mRHyocC3u6fMpiyYn/c9Sq/6Tfwf9wcWH/wYg4//WtYv/2yJH/96te/7KNTP9ff5P/Voel/0NQkf9KWbL/Hl9xUwAAAABTelpzgd6q/5Hfu/+ZwKn/hYS//3RjY//Hk1//0o9Z/7J5Of+WhI3/UE/U/w8I3f8JA+7/P2Dz3RQnJhEAAAAAFyEaDKTiw8244sL/jY+5/zQy9/9kZdT/a2me/2dilf9naK//YmPt/xEQ8/8AAOr/EhL0/ytPj1IAAAAAAAAAAAAAAAA5SUMqpcip2nJ0sP8WFeb/AwPh/yor5f81NuX/ISHk/wAA2f8AANb/CAje/w0Nj3kAAAAAAAAAAAAAAAAAAAAAAAAAAB8kHRZAQ4OKXFzf7iUlzP8TE8v/EhLK/xoay/8tLc/+NTXD0h8fe1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2cD98fOOadnbc03d33Nh/f+TAa2u9bx4eNBcAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAEAAMADAADgBwAA+A8AAA%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%0AGchrome%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/SqMCEBNtAAAALQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGRUeD3dShTXYerNF/3nFov844ff/E9///xLY//8Vz/X/G6jG8RBIVqoAAABAAAAABQAAAAAAAAAAAAAAChsoEndjpzvzY6sr/3q7nf835f//Etz//xDZ//8P1vz/EdL3/yDJ7f8jwOP/D2d7wwECAjUAAAAAAAAAAAcNBD5enDjpUq4e/0CPFf91n5z/ZeP5/zbm//8h3f//Edn//w/X/f8U0PX/H8Hl/yC94f8NUWGhAAAADQAAAAY5WSWYYLYw/0CiHv9LskP/V6BZ/3iUkf973O7/XfD//zjl//8O2f//Ddf9/xLP9P8iweT/HKbF8wMSFTwOFAooZJxD11CuLf9MsEX/Vr1t/23Tm/+Zyqn/fYGB/4ajr/+Qzdv/bOv//xLb//8O1fr/Fsjt/yK94f8LS1l5KDYeTWyxTO5Lrz7/Vrxq/2jOmP+m2bz/ZHpc/01JMP9aQCD/TD8y/3iQmv9e5fz/Ctf+/xLQ9f8hxOn/GXOIoSk7IFNntVL0ULdX/13GiP+S4L7/epN2/2VWJP/Hghv/340n/7l7Iv9TRzT/ZbLI/yTi//8J1f3/H9H2/x17kak1Qi86d8Bv6la+bv9q0KH/ot69/2JuTf+8fiz/759M//K6g//yo1L/mXs+/1ubp/887///I9Tt/0Covf8fc4mRHyocC3u6fMpiyYn/c9Sq/6Tfwf9wcWH/wYg4//WtYv/2yJH/96te/7KNTP9ff5P/Voel/0NQkf9KWbL/Hl9xUwAAAABTelpzgd6q/5Hfu/+ZwKn/hYS//3RjY//Hk1//0o9Z/7J5Of+WhI3/UE/U/w8I3f8JA+7/P2Dz3RQnJhEAAAAAFyEaDKTiw8244sL/jY+5/zQy9/9kZdT/a2me/2dilf9naK//YmPt/xEQ8/8AAOr/EhL0/ytPj1IAAAAAAAAAAAAAAAA5SUMqpcip2nJ0sP8WFeb/AwPh/yor5f81NuX/ISHk/wAA2f8AANb/CAje/w0Nj3kAAAAAAAAAAAAAAAAAAAAAAAAAAB8kHRZAQ4OKXFzf7iUlzP8TE8v/EhLK/xoay/8tLc/+NTXD0h8fe1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2cD98fOOadnbc03d33Nh/f+TAa2u9bx4eNBcAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAEAAMADAADgBwAA+A8AAA%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%0ANotepadPP%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAD//P8A//zwAP/3/wD/9/AA8P//APD98ADw9/8A8PTwAPD34ADw5+AA7///AO/08ADg8P8A4PDwAO//7wDv8O8A4PTvAO/o/wDg5/AA7+3vAO/n4ADg6O8A4OjgAODi4ADg3+AA4NzfAODY0ADf7+8A3+DgANDg7wDP+P8AwPD/ANDg0ADf3+AA393fAN/Y0ADQ2tAA0NDfANDU0ADQ0M8A0M/QAN/HwADP3N8Az9DfAM/Q0ADP1M8AwNDPAM/M0ADAyNAAz87PAM/HzwDPxcAAwM/PAMDEwADAx78A0LfQAM+3wADAv8AAsMjQAL/HwACwyMAAoMDAAJ/A4ACQx98Av8C/ALDAsACfr8AAn6DAAI+YwAC/v78Av7e/ALC4sACwt78AsLCwAL+orwC/r6AAv6egAK+/vwCvv7AAr7ewAK+vrwCvr6AAoKigAKCkoACgn7AAn6i/AJCosACfop8AkKCfAJ+foACPh68An5yfAJCYkACQl5AAj5CQAICQnwCPj48AgIeAAH/P3wBf3/AAT8jgAEDI3wB/sN8Af7/AAG+3wABgt8AAYKiwAH+QkABfoK8AT6+/AECgvwBAkK8AQICgAECAnwAw2OAAMNDvADDI7wAg0O8AIMjvACDH4AAvwNAAEMDgAC+43wAvl68AcGiPAHB4cABwd3AAb2xvAEBPXwAAAAAAf5CfAH+PkABwgJAAf4SPAHCAgABfmL8AUIe/AE+HvwA/zPAAP8fwADDP/wAwwvAAP8jvAC/A8AAwvPAAL77wAC+18AAguPAAH6//ABCH0AAfiM8AEIfPAA+A0AAgh78AH4i/AB+PsAAQgL8Af2/wAG93wABgWN8AYF/AAHB/gABveIAAYHeAAEB4vwBAf7AAQHigAEBwrwBfeJ8AUE+/AE9PrwBfUI8AT1+PABB/0AAQf88AD3/QAA9/zwA/YJAAP2CPADBojwA/X48AL1yPAC9YgAAvV4AAIF+PACBcgAAQfL8AEHiwABB3sAAPfL8AD3ewAABwsAB/fX8AcHh/AHB1cABgcH8Ab29wAG9qbwBgaG8AYGdvAGBiYABQZ3AAX2dvAF9gYABAYH8AUFhgAF9bXwBAT1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AYGF/f35hW0H+/v7+/v7+/lAHAAcTIjVQW2BhfX1+XP5TABMMAwgOBQAHAQADBS3+UwAWBwoACRkVAAAAAwBP/lsHJCAZgEIYBwQTAwcAYP5TAAsFAitobB0DEAsHB13+WwcxLyYzanJ7EQULBDEx/lcAMS8tGj14dW8wKhBd/v5TADUhNSYlPnpzcE0bXf7+WwtSNSY0ODdmd3lrKkj+/lcHJiImJCYzOmlldXES/v5bByIXFxABAgYfYnNkZ/7+WwdFRk8uNSlKWVZuY208/lwXRzlFTkFLTAMoQj8eXzJdFhcUIyRBNVEm/v7+VEN8UyYmMzE1QVhX/v7+/v5EWgD///8AAf//AAH//wAB//8AAf//AAH//wAB//8AA///AAP//wAD//8AA///AAP//wAB//8AAP//ADj//wB8//8%3D%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%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%20%20%20%20CurrentPage%20%3D%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%3B%0A%0A//%20------%20Menu%20Items%20------%0Aapps.push%28%5B%27Run%20in%20IE%27%2C%20%20%20IExplorer%2C%20%27C%3A/Program%20Files/Internet%20Explorer/IEXPLORE.EXE%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%5B%27Run%20in%20Google%20Chrome%27%2C%20%20%20%20%20%20%20%20Gchrome%2C%20%20%27C%3A/Documents%20and%20Settings/Admin/Local%20Settings/Application%20Data/Google/Chrome/Application/chrome.exe%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0A%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%0A%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%27Notepad++%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20NotepadPP%2C%20%27F%3A/Run/Textutils/notepad++/notepad++.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%27path%27%2Cpath%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%27event.stopPropagation%28%29%3Bthis.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%2Cthis%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%2Cmi%29%20%7B%0A%20%20this.currentCommand%3Dmi%3B%0A%20%20this.image%3Dmi.getAttribute%28%22image%22%29%3B%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.createInstance%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-button%22%3B%0Athis.orient%20%3D%20%22horizontal%22%3B%0Athis.image%3DmP.firstChild.getAttribute%20%28%22image%22%29%3B%0Athis.currentCommand%3DmP.firstChild%3B%0A%0AmP.%20firstChild.%20setAttribute%20%28%22oncommand%22%2C%20%27event.stopPropagation%28%29%3Bthis.f%28this.getAttribute%28%22path%22%29%2CgetBrowser%28%29.contentDocument.location.href%2Cthis%29%3B%27%29%3B%0AmP.%20firstChild.%20nextSibling.%20setAttribute%20%28%22oncommand%22%2C%20%27event.stopPropagation%28%29%3Bthis.f%28this.getAttribute%28%22path%22%29%2CgetBrowser%28%29.contentDocument.location.href%2Cthis%29%3B%27%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Athis.currentCommand.doCommand%28%29%0A%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| Anton > 14-08-2009 20:10:52 | ||||||||
ps
нп, не бери в голову | ||||||||
| Infocatcher > 14-08-2009 20:47:35 | ||||||||
Твои как раз видно по характерным пробелам.
Ну, там структура не предусматривает передачу динамических параметров. | ||||||||
| Kemerover > 15-08-2009 12:38:39 | ||||||||
ПОМОГИТЕ МНЕ СОЗДАТЬ КНОПКУ ПЕРЕВЕСТИ | ||||||||
| Jarichek > 15-08-2009 13:46:41 | ||||||||
Такая кнопка уже есть. Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041F%u0435%u0440%u0435%u0432%u043E%u0434%u0447%u0438%u043A%20Google%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADPElEQVR4nGWTTWhjZRSG3/uTNr39mTqTn1KacagTqyKIlYJ2ExQCUhiprgpduRVFpLvZjOCsXEgWFqRk0RZcWLopmOnCQcPUsVBiTEZbalrGTJOZJm2aNGm++92b737fcdGZTfvAuznwnMV7OBouEI/HdSHEyNzcXCwajb7r8/n6T09P99bW1u4PDw8/SiQSbHd396IGBINBJJPJQDqdvssYK0kpO0SkiIiUUlII0SqVSr8lk8n3JycnjUsLZmdnb5bL5T+klPK5RNzp0BlzyHEFKXU+cxynubKy8tXExIQJABoAzM/PB6amptYikch70DRtv3iMh5kClPQglcKzozMMXhnAh7E3EL0RhCcEX19f/6xSqSxhdHRUT6VS39i2LYUQtJ7epm9/uEdHtSZJKUkpRa0zm75fvE+f3/mRmM3JcRyqVqulmZmZl7G6uhopl8sHtm3TduEpffH1T1Srn9FFavUmnTRaJKUkx3Go0WiojY2N22aj0Yj5fL6wJyVS6R289koYVwd7L3V07aUBAICUEkopSCk1v99/Sw+Hw5NSyi7OXZQrTQwFBy6f6DlKKSil4HkeOp0ODMO4btq23S+EgFQaAAKzO1BKQdd1AICmaSAiEBGUlBBCwHVduK4LzrlpHh4e7nHOVW+vofdbPmxkHuPWB6/D6vFD13UoRfj38TPsP6mBOxJjN64gdNUC5xz1er2l5/P5XxqNBvNEByPBLmS2n+LXzQK4zcH5ebp9GkAeEksPwJgNxhhs20axWMzo7Xb7US6Xyx7Xanh7LIhXRywklh7i9z/30Wy1YNsMfT0mrG4DGoCO64Ixhlqt5uTz+UVjZ2dHDA0NFYPB4Cd9fVb3W2MhnDZb+DldwD+FCk5OWvivVEX27ycY7APevHkNouNSNpu9l8vlvtMAIBQKGfF4/Mvp6em7oVCoxzAMOB0PjAsQEfxdPvi7DBgG4Dgu5fP5vxYWFj4uFAoHBgAwxmhvby8jpTywLOsdy7IGfKah9XSb56IOeJ7A0dGxs7m5mVpeXv60Xq8fcM7Pf+EFsVhMq1Qq18fHx2ej0ehHgUAgYpqm2W63W6VSKVMsFhe3trYeVKtV/sL5HwhICaDODiyAAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%0D%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/%2030%29%3B%0A%09%20%20%20%20%20%20%20%20w%20%3D%20parseInt%20%28w%20*%20win.%20innerWidth%20/%2050%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%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| vurdalak > 17-08-2009 00:47:36 | ||||||||
Есть расширение | ||||||||
| 3Jlou > 17-08-2009 02:01:38 | ||||||||
vurdalak Код:loadURI ("chrome://sitelauncher/content/home.html");либо так (+средний клик для новой вкладки): Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3ESiteLauncher%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.url2xul%3D%20%27chrome%3A//sitelauncher/content/home.html%27%3B%0Athis.onClick%3D%20function%28e%29%0A%7B%0A%09switch%20%28e.button%29%0A%09%7B%0A%09%09case%200%3A%20%0A%09%09%09loadURI%28this.url2xul%29%3B%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%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| vurdalak > 17-08-2009 03:40:46 | ||||||||
Это немного не то , чего бы хотелось. Об chrome://sitelauncher/content/home.html я знал. | ||||||||
| Infocatcher > 17-08-2009 13:36:51 | ||||||||
Как-то так: Код:var evt = document.createEvent("KeyEvents");
evt.initKeyEvent(
"keydown", true, true, window,
true /*ctrlKey*/, false /*altKey*/, false /*shiftKey*/, false /*metaKey*/,
evt.DOM_VK_SPACE /*keyCode*/, 0 /*charCode*/
);
document.documentElement.dispatchEvent(evt);Но после изменения настроек расширения код кнопки нужно будет править (про keyCode). | ||||||||
| vurdalak > 17-08-2009 14:55:20 | ||||||||
Infocatcher | ||||||||
| Anton > 17-08-2009 15:17:20 | ||||||||
Публикация кода "как бы изнутри" нарушает требование, изложенное в copyright.txt расширения. | ||||||||
| vurdalak > 17-08-2009 15:27:04 | ||||||||
Блин, так это ж для самоизучения. | ||||||||
| Infocatcher > 17-08-2009 15:56:26 | ||||||||
А для самообучения пригодится http://jsbeautifier.org/. | ||||||||
| Infocatcher > 17-08-2009 20:01:48 | ||||||||
Кнопка для удаления истории текущей вкладки (ЛКМ) или истории всех вкладок (СКМ, Ctrl+ЛКМ) Код:// Purge Tab(s) History
// (c) Infocatcher 2009
// version 0.2.0 - 2009-12-13
const uid = "__custombutton__" + this.id;
if(uid in window)
window[uid]("rebuild");
var destroy = window[uid] = function _ds(reason) {
var hnd = _ds.evtHandler;
window.removeEventListener("unload", hnd, false);
window.removeEventListener("TabOpen", hnd, false);
window.removeEventListener("TabClose", hnd, false);
gBrowser.removeProgressListener(hnd.progressListener);
_ds.evtHandler = null;
//alert(reason + " => destroy()");
};
this.updUI = function() {
UpdateBackForwardCommands(gBrowser.webNavigation);
};
this.updButtonState = function() {
this.setAttribute(
"disabled",
!gBrowser.browsers.some(
function(br) {
return br.sessionHistory && br.sessionHistory.count > 1;
}
)
);
};
this.forceSaveSession = function() {
const dummyVal = "custombuttonsDummyValue-" + Math.random();
// Firefox or SeaMonkey
var ss = (
Components.classes["@mozilla.org/browser/sessionstore;1"]
|| Components.classes["@mozilla.org/suite/sessionstore;1"]
).getService(Components.interfaces.nsISessionStore);
setTimeout(function(ss, val) {
ss.setWindowValue(window, val, "0");
ss.deleteWindowValue(window, val);
}, 0, ss, dummyVal);
};
this.upd = function() {
this.updUI();
this.updButtonState();
this.forceSaveSession();
};
this.purgeBrowserHistory = function(br, updFlag) {
var sh = br.sessionHistory
.QueryInterface(Components.interfaces.nsISHistoryInternal);
if(sh.count == 0)
return;
var indx = sh.index;
var cur = indx > -1 ? sh.getEntryAtIndex(indx, false) : null;
sh.PurgeHistory(sh.count);
cur && sh.addEntry(cur, true);
if(updFlag === true)
this.upd();
};
this.purgeBrowsersHistory = function() {
gBrowser.browsers.forEach(this.purgeBrowserHistory, this);
this.upd();
};
var dummy = function() {};
var progressListener = {
button: this,
QueryInterface: function(iid) {
if(
iid.equals(Components.interfaces.nsIWebProgressListener)
|| iid.equals(Components.interfaces.nsISupportsWeakReference)
|| iid.equals(Components.interfaces.nsISupports)
)
return this;
throw Components.results.NS_NOINTERFACE;
},
onStateChange: dummy,
onProgressChange: dummy,
onLocationChange: function(aWebProgress, aRequest, aLocation) {
this.button.updButtonState();
},
onStatusChange: dummy,
onSecurityChange: dummy
};
var hnd = destroy.evtHandler = {
button: this,
progressListener: progressListener,
destroy: destroy,
handleEvent: function(e) {
switch(e.type) {
case "TabOpen":
case "TabClose":
setTimeout(function(button) {
button.updButtonState();
}, 5, this.button);
break;
case "unload":
this.destroy(e.type);
}
}
};
window.addEventListener("TabOpen", hnd, false);
window.addEventListener("TabClose", hnd, false);
window.addEventListener("unload", hnd, false);
gBrowser.addProgressListener(progressListener, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
this.updButtonState();
this.onclick = function(e) {
if(e.button == 1 || e.button == 0 && e.ctrlKey)
this.purgeBrowsersHistory();
else if(e.button == 0)
this.purgeBrowserHistory(gBrowser.mCurrentBrowser, true);
}; | ||||||||
| MySh > 18-08-2009 15:38:38 | ||||||||
Такой вопрос: можно ли с помощью кнопки реализовать подобную функцию? | ||||||||
| Najlus > 19-08-2009 09:37:43 | ||||||||
А можете сделать кнопку для отчистки кэша в дополнении Textarea cache. а то задолбало каждый раз окно открывать | ||||||||
| Anton > 20-08-2009 17:38:55 | ||||||||
MySh
Можно, другой вопрос - кто бы справился с Selection и Range : ) Код:var doc = gBrowser. contentDocument; var win = document. commandDispatcher. focusedWindow; var sel = win. getSelection (). QueryInterface (Components. interfaces. nsISelectionPrivate); var range = sel. getRangeAt (0). cloneRange (); sel. startBatchChanges (); sel. removeAllRanges (); var r = doc. createRange (); sel. addRange (r); r. selectNodeContents (doc. body); r. setEnd (range. startContainer, range. startOffset); r = doc. createRange (); sel. addRange (r); r. selectNodeContents (doc. body); r. setStart (range. endContainer, range. endOffset); sel. endBatchChanges (); //win. blur (); //win. focus (); Инвертирует одинарное выделение, правда, по самому выделению после выполнения операции этого не видно (синим окрашено как попало), но если скопировать и посмотреть во внешнем редакторе, то, вроде бы выделенное не копируется. Код:window.openDialog ("chrome://tacache/content/cacheWindow.xul"); 20-08-2009 17:54:05 Код:gPref.clearUserPref("extensions.tacache.cache");а это, вроде, очищает кэш | ||||||||
| Najlus > 20-08-2009 19:57:06 | ||||||||
Это и стандартная кнопка дополнения умеет
Не работает | ||||||||
| Anton > 20-08-2009 20:29:27 | ||||||||
Najlus Код:var gPref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); | ||||||||
| Najlus > 20-08-2009 20:54:15 | ||||||||
Спасибо | ||||||||
| Anton > 20-08-2009 21:10:56 | ||||||||
Najlus Код:window. focus (); | ||||||||
| MySh > 20-08-2009 23:16:27 | ||||||||
Anton | ||||||||
| Anton > 21-08-2009 00:27:02 | ||||||||
MySh
Выделение инвертируется полностью, только этого не видно. Предлагаю для проверки выделить кусок текста на этой странице, выполнить код кнопки, "Правка" -> "Копировать", и вставить куда-нибудь в OO Writer - там будет видно.
Захватывает он, кстати, только одну из частей множественного выделения (при ручном выделении - первую). У меня, по крайней мере (версия 1.3.3.10). Код:var sel = document. commandDispatcher. focusedWindow. getSelection (); sel. deleteFromDocument (); Он работает и с множественным выделением. | ||||||||
| MySh > 21-08-2009 00:50:04 | ||||||||
Anton
Гм… А ведь верно! Работает, и работает весьма неплохо! Правда, местами всё равно подчищать приходится. Чёткой закономерности пока не вывел. Поработаю ещё, попробую, как пойдёт.
Наоборот — то, что не выделено изначально. | ||||||||
| Najlus > 21-08-2009 16:05:32 | ||||||||
Спасибо | ||||||||
| Anton > 21-08-2009 20:43:30 | ||||||||
MySh
Ну, пока только вот так: Код:var doc = gBrowser. contentDocument; var win = document. commandDispatcher. focusedWindow; var sel = win. getSelection (). QueryInterface (Components. interfaces. nsISelectionPrivate); var range = sel. getRangeAt (0); sel. startBatchChanges (); var docfrag = range. extractContents (); sel. removeAllRanges (); range = doc. createRange (); sel. addRange (range); range. selectNodeContents (doc. body); range. deleteContents (); sel. endBatchChanges (); doc. body. appendChild (docfrag); только для одинарного выделения. | ||||||||
| Anton > 22-08-2009 21:24:46 | ||||||||
Инверсия множественного выделения: Код:function notNull (x) x != null;
function compareRanges (r1, r2)
{
return r1. compareBoundaryPoints (Range. START_TO_START, r2);
}
var doc = gBrowser. contentDocument;
var win = document. commandDispatcher. focusedWindow;
var sel = win. getSelection (). QueryInterface (Components. interfaces. nsISelectionPrivate);
var ranges = [];
var i, j;
for (i = 0; i < sel. rangeCount; i++)
ranges. push (sel. getRangeAt (i). cloneRange ());
ranges. sort (compareRanges);
var range1, range2;
var css, cse, ces, cee;
for (i = 0; i < ranges. length; i++)
{
range1 = ranges [i];
if (!range1)
continue;
if (range1. collapsed)
{
ranges [i] = null;
continue;
}
for (j = i + 1; j < ranges. length; j++)
{
range2 = ranges [j];
if (!range2)
continue;
css = range1. compareBoundaryPoints (Range. START_TO_START, range2);
cse = range1. compareBoundaryPoints (Range. START_TO_END, range2);
ces = range1. compareBoundaryPoints (Range. END_TO_START, range2);
cee = range1. compareBoundaryPoints (Range. END_TO_END, range2);
if ((css <= 0) && (cee >= 0))
{
ranges [j] = null;
continue;
}
if ((css <= 0) && (cse >= 0) && (cee <= 0))
{
range1. setEnd (range2. endContainer, range2. endOffset);
ranges [j] = null;
continue;
}
}
if (range1. collapsed)
{
ranges [i] = null;
continue;
}
}
ranges = ranges. filter (notNull);
sel. startBatchChanges ();
sel. removeAllRanges ();
var range = doc. createRange ();
sel. addRange (range);
range. setStartBefore (doc. body. firstChild);
for (i = 0; i < ranges. length; i++)
{
range. setEnd (ranges [i]. startContainer, ranges [i]. startOffset);
if (range. collapsed)
sel. removeRange (range);
range = doc. createRange ();
sel. addRange (range);
range. setStart (ranges [i]. endContainer, ranges [i]. endOffset);
}
range. setEndAfter (doc. body. lastChild);
if (range. collapsed)
sel. removeRange (range);
if (sel. rangeCount == 0)
sel. addRange (doc. createRange ());
sel. endBatchChanges ();
win. blur ();
win. focus ();
//sel. deleteFromDocument (); | ||||||||
| MySh > 24-08-2009 14:35:32 | ||||||||
Anton Код:data:image/png;base64,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 | ||||||||
| Infocatcher > 25-08-2009 16:54:21 | ||||||||
Кнопка для отмены закрытия вкладок (аналог расширения Undo Closed Tabs Button) Код:this._strings = {
...
};Иконки взяты из расширения Undo Closed Tabs Button. Часть кода, определяющая внешний вид, начинается с Код://=================== // Styles Код (секция «инициализация»): Код:this._strings = {
restoreAllTabs: "Restore all tabs",
restoreAllTabsAccesskey: "t",
clearTabsHistory: "Clear history of closed tabs",
clearTabsHistoryAccesskey: "C",
restoreAllWindows: "Restore all windows",
restoreAllWindowsAccesskey: "w",
clearWindowsHistory: "Clear history of closed windows",
clearWindowsHistoryAccesskey: "l"
};
this.openOnMouseover = false;
this._mp = this.appendChild(document.createElement("menupopup"));
this._mp.setAttribute("onpopupshowing", "return this.parentNode.drawUndoList();");
this._ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
this.clearUndoTabsList = function() {
var pId = "browser.sessionstore.max_tabs_undo";
var val = navigator.preference(pId);
navigator.preference(pId, 0);
navigator.preference(pId, val);
this.updUIGlobal();
};
this.getClosedWindowCount = function() {
return "getClosedWindowCount" in this._ss ? this._ss.getClosedWindowCount() : null;
};
this.clearUndoWindowsList = function() {
if(!("getClosedWindowCount" in this._ss))
return;
this._ss.setWindowState(window, '{"windows":[{}],"_closedWindows":[]}', false);
this.updUIGlobal();
};
this.showMenu = function(e, button) {
var mp = this._mp;
if("openPopupAtScreen" in mp)
mp.openPopupAtScreen(e.screenX, e.screenY);
else
mp.showPopup(button, e.screenX, e.screenY, "popup", null, null);
};
this.drawUndoList = function() {
var mp = this._mp;
while(mp.hasChildNodes())
mp.removeChild(mp.lastChild);
var wc = this.getClosedWindowCount();
var tc = this._ss.getClosedTabCount(window);
if(wc) {
this.addUndoWindowsList(mp);
tc && mp.appendChild(document.createElement("menuseparator"));
}
if(tc)
this.addUndoTabsList(mp);
if(wc || tc)
return true;
mp.hidePopup();
return false;
};
this.addUndoWindowsList = function(undoPopup) {
// Code from chrome://browser/content/browser.js
// Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.3a1pre) Gecko/20090824 Minefield/3.7a1pre
// with some improvements
// populate menu
let undoItems = JSON.parse(this._ss.getClosedWindowData());
for (let i = 0; i < undoItems.length; i++) {
let undoItem = undoItems[i];
let menuLabel = "%title (%count)"
.replace("%title", undoItem.title)
.replace("%count", undoItem.tabs.length);
let m = document.createElement("menuitem");
m.setAttribute("label", menuLabel);
let selectedTab = undoItem.tabs[undoItem.selected - 1];
if (selectedTab.attributes.image) {
let iconURL = selectedTab.attributes.image;
// don't initiate a connection just to fetch a favicon (see bug 467828)
if (/^https?:/.test(iconURL))
iconURL = "moz-anno:favicon:" + iconURL;
m.setAttribute("image", iconURL);
}
m.setAttribute("class", "menuitem-iconic bookmark-item");
m.setAttribute("oncommand", "undoCloseWindow(" + i + ");");
m.setAttribute("onclick", "if(event.button == 1) { undoCloseWindow(" + i + "); this.parentNode.parentNode.drawUndoList(); }");
m.setAttribute("tooltiptext", selectedTab.entries[selectedTab.index - 1].url);
if (i == 0)
m.setAttribute("key", "key_undoCloseWindow");
undoPopup.appendChild(m);
}
// "Open All in Windows"
undoPopup.appendChild(document.createElement("menuseparator"));
let m = undoPopup.appendChild(document.createElement("menuitem"));
m.id = "menu_restoreAllWindows";
m.setAttribute("label", this._strings.restoreAllWindows);
m.setAttribute("accesskey", this._strings.restoreAllWindowsAccesskey);
m.setAttribute("tooltiptext", "");
m.setAttribute("oncommand", "for (var i = 0; i < " + undoItems.length + "; i++) undoCloseWindow();");
// Clear tabs list:
m = undoPopup.appendChild(document.createElement("menuitem"));
m.setAttribute("label", this._strings.clearWindowsHistory);
m.setAttribute("accesskey", this._strings.clearWindowsHistoryAccesskey);
m.setAttribute("tooltiptext", "");
m.setAttribute("oncommand", "this.parentNode.parentNode.clearUndoWindowsList();");
};
this.addUndoTabsList = function(undoPopup) {
// Code from chrome://browser/content/browser.js
// Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.3a1pre) Gecko/20090824 Minefield/3.7a1pre
// with some improvements
// populate menu
var undoItems = eval("(" + this._ss.getClosedTabData(window) + ")");
for (var i = 0; i < undoItems.length; i++) {
var m = document.createElement("menuitem");
var undoItem = undoItems[i];
m.setAttribute("label", undoItem.title);
if (undoItem.image) {
let iconURL = undoItem.image;
// don't initiate a connection just to fetch a favicon (see bug 467828)
if (/^https?:/.test(iconURL))
iconURL = "moz-anno:favicon:" + iconURL;
m.setAttribute("image", iconURL);
}
m.setAttribute("class", "menuitem-iconic bookmark-item");
m.setAttribute("value", i);
m.setAttribute("oncommand", "undoCloseTab(" + i + ");");
m.setAttribute("onclick", "if(event.button == 1) { undoCloseTab(" + i + "); this.parentNode.parentNode.drawUndoList(); }");
m.setAttribute("tooltiptext", undoItem.state.entries[undoItem.state.index - 1].url);
//m.addEventListener("click", this._undoCloseMiddleClick, false);
if (i == 0)
m.setAttribute("key", "key_undoCloseTab");
undoPopup.appendChild(m);
}
// "Restore All Tabs"
undoPopup.appendChild(document.createElement("menuseparator"));
m = undoPopup.appendChild(document.createElement("menuitem"));
m.setAttribute("label", this._strings.restoreAllTabs);
m.setAttribute("accesskey", this._strings.restoreAllTabsAccesskey);
m.setAttribute("tooltiptext", "");
m.setAttribute("oncommand", "for (var i = 0; i < " + undoItems.length + "; i++) undoCloseTab();");
// Clear tabs list:
m = undoPopup.appendChild(document.createElement("menuitem"));
m.setAttribute("label", this._strings.clearTabsHistory);
m.setAttribute("accesskey", this._strings.clearTabsHistoryAccesskey);
m.setAttribute("tooltiptext", "");
m.setAttribute("oncommand", "this.parentNode.parentNode.clearUndoTabsList();");
};
this.updUI = function() {
if(this.getClosedWindowCount() || this._ss.getClosedTabCount(window))
this.removeAttribute("disabled");
else
this.setAttribute("disabled", "true");
};
this.updUIGlobal = function() {
var ws = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator)
.getEnumerator("navigator:browser");
while(ws.hasMoreElements())
ws.getNext().customButtonUndoCloseList.updUI();
};
this.evtHandler = {
button: this,
handleEvent: function(e) {
switch(e.type) {
case "TabClose":
case "SSTabRestoring":
this.button.updUI();
break;
case "unload":
this.button.updUIGlobal();
delete window.customButtonUndoCloseList;
window.removeEventListener("TabClose", this, false);
window.removeEventListener("SSTabRestoring", this, false);
window.removeEventListener("unload", this, false);
}
}
};
this.onclick = function(e) {
if(e.target != this)
return;
if(e.button == 1 || e.button == 0 && e.ctrlKey) {
this.clearUndoTabsList();
this.clearUndoWindowsList();
}
else if(e.button == 0) {
if(this._ss.getClosedTabCount(window))
undoCloseTab();
else
this.showMenu(e, this);
}
else if(e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey) {
this.showMenu(e, this);
}
};
this.oncontextmenu = function(e) {
if(e.target == this && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey)
e.preventDefault();
};
this.onmouseover = function() {
this.updUI();
if(!this.openOnMouseover)
return;
var mp = this._mp;
if("openPopup" in mp)
mp.openPopup(this, "after_start");
else
mp.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
};
window.addEventListener("TabClose", this.evtHandler, false);
window.addEventListener("SSTabRestoring", this.evtHandler, false);
window.addEventListener("unload", this.evtHandler, false);
window.customButtonUndoCloseList = this;
this.updUIGlobal();
//===================
// Styles
// Used icons from Undo Closed Tabs Button extension
var sId = "__custombuttonsStyle__" + this.id; // Unique style "id"
var cssStr = <![CDATA[
%button% {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPbSURBVEiJzVVbTBxlFP7+mX9ndmcvXIRiuYSL0K2him2hatIisRqoJqJV40M1NftirLHWqDGV+CCJlRhIm6gvpjV9wEbpk4kETU2pRDFSUWlrQV1a2LZQwZ1lZ9mZ2cvM8UFoYKkUiU38ku/lzznn+79z/gsjItxMCKtNPA6IY4ATAPvPBYJByP4YKmNxbB0EXMsGE9G/Yv8lcg3rdO/Pmt214/0vzlS1HPt2ufgVO2AAGwQUXzbuiSetA62fnGyuLcnb4OTC+mAQ8lv/0I2VCrBfALekoSGeSh14s/Or+vuqiqXWRzYzj8R97/7Q/7qrb+Tu8xpyT50CX5Q4f4raO9qeA7AfQHZmdYcss1uKy3n+7XXyO5//KD68cR2e2uKHVwKmojrOXp7Gse+GcXUmZm0rEI8Emne+6s/DLABiRIT2jjaJMabu2rVbzsleXJ8AxGyRjcZSwr6PvmT11evQVFuNoAaIDMiRgTVOoCYXuDxj4I3jXyNJ7ETrC41P1gLafIsUAHbBmgLTMEx9IWeNpBmxGB3tPcO4pMDvr8bIDJCyAdMCJnVgSAU6R4HxhAsfBhqhcGH7e53fvPw7IGXOwCai8EIKsMOKnYw8U78hpcdjODHwE2YNA3HDgG6Y1zhrmDg3nUDPWAotzVuF4JWplq7e83U8U4AxFl40JACKneKlbil+KNC49sXDPbKZSGJ9RRlAwPDFi4jGNGT5fCjKz4fq9cFKSrizrFgMTqivZAoQEYUz1sBAcFFSLfVI8UOBpoq9R3pcRsKEV3HjQmjM2r2tOjw8GfH2Dgy4Sm5di0RFGfSkzVJWumqJgCAIaqYA8Pd59lB65rYsWT8Y2FG993C3wrmMXEXSAnWlfcTKpUii5qEH2z/jHpcbU5Eo8txC7g1nsJAirAk3EkOVufLpg4Em1TT1NAimQPZVTtaVIp9MAojC0Sj+jKhouKN8cokDAEtatBCibcNLiYg/T1E/ePZ+iZlmaC6H9/02yYjAptUIeZwOe/tdlV2Lbx1jtiAIywrMtUvNouQfmwp9osP2mABIT1rOfZ/28zQRvIpotT79wFlO6ObtHW0OAHtW6uCaEyKIRGwuBy6nw/la0yZrIqoJDTVV474cb6uu4QLnnO8vLCzaWVRUPAjAD+C6Q74RLMDz+BY/GxkP/Roa6k8NhkI5Lz2/x+AASh979AmdMXYynU53r9RBJhxEMw7BfntjRUlBDktlj4+cEwEQZ0w4zTm/pGnax6spPA8iQiIeP+p0Oku5IGwGMAoAXBSF7xljim3bq9r5dYTSTGAGgAlgwXN9s7DqT/9/I/AXr+4N9n05Pw8AAAAASUVORK5CYII=") !important;
}
%button%:hover {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPWSURBVEiJzVVbaFxVFF3n3MfM3EkmSWObTJrnmGJrEklpYj6iBSEaEpDQooJiv9L6IalURAP2xyrSfCRq0A+xIKIWYj/8kFa0lDbFKmptadImhJhM3s/Oo/O4c+/MnXu2PwkkY5umKYILNud87H3WWWvvw2FEhP8S/GFq+yfhBMA2SmJbUTAMqEiilCyUmDH8sc+LxD2TieiB4hKRcyhBDQMR0df62U8Du949fWWj/E1bxAB2DdAK0ngyadkfnvju4oEab161Q+a7hwEV97BqswRsCHArOvbrMevk8W8uPLPHm692PLuPOxXJ83Hfr+/0XB5puAnk9fdDXle42oPunq4jADoBZGXeXVYdLL+kQt2xp8598ux1pc5XjOfrq+CQgPH5ZYwu3MbFWxMQwk43Fsin2tsOdD72COIAiBERunu6VMZY4JWXD7k8npx1xxOABJPZeCzNj335M6utKEVj9S5MRdKQGKDJHB4HR3G2jKnlAL6+fB3Zbu38Bx3NL9UB0VWLNAAoLPSalmUl1oZp2eYdIdFX/YOMSwq8hUW4tRBDRDcQihuYDesYXozh/FgYwbQDrzU/hXBMb/r02ytv/g2omT0QRBRcGxwiqIlU+NDTNZZpmvhtaBSxhAndMKGvriv7yUAcN+bjeG5vFb82Onv8zKXhejmTgDEWXN8BwE2WVO5W9d7DLd6jp350WOk0SnYUgIgws7wM0zTgdDqR78lBwuVCVOHIz8uVxhfCb2UqoEwFRBSEEMsupPxlbmmst73FCISD8M/NYTEYQiB0236hvnzJt81hDPnH4J+dRSiagJGyWcqyKzMVEOc8dLc55QCyKH3H51ETnxxuffyNL85pQXC2XXNE2+vLfhH1FWogUdPa/NEPssvhgm0L6MnUtvv2YG1IsOddSA48mqv+1XukJSzSKYuBTCbEokz2XFG2gyQQxQ0DUT2G/VXli/9SACCIDaAIgWxKhivznKHP25sUShjTKzXyheEZTmCIxGPk0VTRVFvZt/7VMSY45xsSrNgVyqHU0hMFWZIiNBMARQxL6/z+T8kmgkeT0++/2jTAFZyTu3u6FADHNqtgFRIRJCK2UgOP06G/3bJXBBMGGqt807l5WSciKiZkznlnWWn5waKdOwcB+DZLkAkbyHqxYTdGZ2bHpwd/N25MTWw/+nqHKQMoaWs7qAM4a1mWCeCuU3Q/KJwiioT3aitKinMopU2O3GQASGaMXZUkaSkajZ7ZysGrICIkdf20y+XyyZxXA/ADgMwYu8oYGxFCbMmaTAghbM55FMAisMUv80HwMJ/+/4PgH15AMczwErl/AAAAAElFTkSuQmCC") !important;
}
%button%[disabled="true"] {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMJSURBVEiJvZVLbxtVFMf/59x7Z+zadVXHYMdikGmSsUOQKK8s2CBF8B34AGxAirJg4awCCySUXVcsIsQnYMUmiEWzQUg8khhQm6I8JBPjoSFOYns8djyPy4ZGaWP3kSj8VyPNOed3f2dGuqS1xmWGL3X6RQHlcvn6/Pz8+4+rofOuqFwuj0opvw+C4AYAc3FxsT+o7lwGCwsLNxKJxNrU1NSLiUSiZ5rmlWG1JwbrlVUG8C6A9OOG13Zr1sbGH5/Yth0fGxvjlZWV4yiK/o7FzLupVOrHyZdLt167+UbzDKDy69ptIWRBSvHPsOH7+/vJtdVKsVQqiXw+DwAIggDNZhOtVgt1px5JIcNOp/P23NzcLyeA9cpqEsDezVdfV0EQdAcNdxxHLC8vx23bpkwmM/AAWms4joPt7e1eGIZvzs7O3pH/vZMAfADadd3eoOajoyMzHo8jlUoNXR8RIZ/PQwhhVqvVb5aWlqbkIzUaQGNQs2VZ6Ha76a2trczExAQrpYaCstksua6ba7fbn50BENFAAAAUi8UGEXWr1eoLhUJBCCFQq9VC13VZKRUlk0keGRkhpRSy2ewV3/ffGWRwMPRoAGzbPgBwXK/Xx3K5nPB9HzMzM8ue58Xb7fZbOzs7CcuyyDAMGIaROwNg5qEGD1IqlX5g5n6j0ZiMxWKRYRh7hmHAsiz7/t590ev14lJKmKapHwIQ0RMNTpl8t7m56XueVzjVE0khWSkFz/M6SqnPzxhorZ9o8CDj4+Nfa61Zax0BwOHhoRJSGGEY+sx8aJrmV8/8DR4NEZ08O45zXUlFRPS7Uuq96enpY7leWc0C+JKIPAAGhvymT2lU37h3J9RatwG8BOBAMvOno6P5V5KJq00AV6WUz2RwOoZhdIr2ZMzretnd3eqHAD6QzNx9LvP8Xd/3v+j3++FFDPr9/sdCiNi11LWP/mL+EwAkEf9ERLUwDH8DAObz30FRFDWISDDzbSK+BwCSmX4GEG+1WudezekwM6XT6W+ZqQlc4EZ7auClTv8/AP8CT2Mu5lYEkjwAAAAASUVORK5CYII=") !important;
}
toolbar[iconsize="small"] %button% {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABZVBMVEX////w8PD09PTx8fHw8PCPkIvv7++LjIfw8PDu7u6ZmZXv7+/29vbw8PD///+Txdt8lJ2RkY2Sk4+bzeJcnLsbcp6LjIcwf6bg4N/m//+XyuDf7/+LvNGmr68ufqbg4N9OhaLm8PJvrstCjrPg4N9Rk7Q8hqfk8PRoqMc5h60vgKk9ia/f4N7w8PDi7/ZgpMOLtMny9fYmeaIqfaff4N6hpKLv7+/h8PVwqcTB1N3L3ebv7+9trMqLjIeOj4rf39719vbM7PaMt81hpMPL7fmbnJeoqaXr6+tin774+/vF2t+lq6qKlI+hop38/Pz7+/v5+fn9/f29vruLjIeqq6f7+/v5+fnGxsSLjId5rcfg8vw4ibN8ud3n8vgacZ2extrA5//4+/wacp4yha8ZcZ18wuyIxuthrNc5irdvt+KRzvO62ep+w+7N6PeY1/+U1v+h2/9am7sbcp4keaXm8/ovgq07jLe+yJo8AAAAWXRSTlMAES5KZr+CMJ7X7Lr4ZwHdD4f0yftxJtP6Cj4Q/EIe9HPg/tXy/kvL/fr++fGfuf3Bzv787+6DptCRyLvRDs/u+P3O+TSw5Or8ovXiHqKWW0aBpyVHNSZMDw1FfDAAAACvSURBVHhehchTcwRBAIXRXmewtG3btm0jtn9/elPZmpqnnKd7P0DgADK5glyUQpH4b0pYkJo730t1PADxBSiKhlVvT4v11myBgSHD8Vz+cP388rr7rGlg0CIIojccrx5v7u4fjDCYMAxLWm1f33bHcuWEwXUBuT3eS58/cBuEIcQ8iURj8cT7RwqkM1n6LzabXtgUS6BcqdLO6o1mC7Q7XepZrz8YgtGYQphMZ+BfP976HHRDoNUhAAAAAElFTkSuQmCC") !important;
}
toolbar[iconsize="small"] %button%:hover {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAJBSURBVDiNlZNdSJNhFMf/Z+/HfOfHXMvwYyZNIleWTCUpjC7Mishl1E0QgXQVXeqVV1Y3XrjIroIoLAILgu7CSLpQ+1DCzI8lSKJu6LA5B+51m3vf93Q1W6m1fvBcPJznf/ifc55DzIxMIAIxY8tjUyZiHyD3Ti1XEUD/neAHkDPydfHNq8EvIyWtPTe2OEuV0OXtLAOgpAdL9x2wRhxVj4cmZg+2nanGtYd9n0vk5ANXsdDrbbm6vpmg+/7d2wBaJUmKp8RmS7YpWlqb2zfuF1pO1SHfYsZyOIzx+SAm5pdYjcdOD7Rf6Sdmxr3urncez8UTRYXFBgAwgJl1kjydz+nyyWOQlVxoBiNbMsFuESHpKl4MjekRNV4mppWixePxuZSDPaKknD/q2ts/OknVFS4QgOlIBJasLNjzcrDfUST4/MHXIn7BRBRIXRTWqL2xMnRL090ffVMmsyxDhJaMJXVRECQq3F2A1WisYnMKBDKIyJ92FnJIm+g4535bU15oLIZW0HzYMTzU1jQWVaMcXAmDmYV0B2DmAP7AgkTgjqcmZJNNh447C0a/BVfr1jeSxOoaGt3lk2KXt9MqCMIuBhtE5N/uL+Qh6e84WzkAgB99+l4PEBqqnBvXG2tbRJvN9jQ/32a35ln19B7sxM2GI1P1TnvFzNhwaPDJ+1VRkuSV5guXXhqG8SGRSGzr4Dd0vcftdEyv+WdcSwuzoqgolmfMHFZVde6fYgCapgUURZk3m+VyAMuU6TbuREbb+Dd+Auhp6cpgWPGjAAAAAElFTkSuQmCC") !important;
}
toolbar[iconsize="small"] %button%[disabled="true"] {
list-style-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAHnSURBVDiNvZPPi9NQEMdnXl7yknTbpdCljaLSluCpIrQWRBC9Sukf4a0nj4Fe/Q88yR4E0WNvnmV19Wi3P9h61JW+2tDqNhpqaF7a58UusbqsKPiFOc18P/NlYFBKCf8i8qeDjuPcdBwn81eAZrPZQMQXiHh3s4dSSuh02zoA1ABga3Og/ebgjud9qedyOTYej93Udur1+XPWw1qt/vwE0Ot3nupMr2uaJuLmweCtORp9ZOVyGSmlMJ1OYTabgeu6oKrqvUaj8WAN2Cvki9cBMFybwzDEVqu1VSqVIJlM/pQqCALo9/tBFEU3Tm4gAaLlcnm0LkVR3lerVT4cDldhGIIQAiaTCXieB4wxsG1bT6VSuzQGXiEij28qFApcSvmVc36ZMYaKohwLIRKcc92yLDQMIx8HSAAYbR6xWCyOCCHfXNetWJY1sG3b3N9/WQ6CABOJREBj9l8SxJOYpvkunU4f+b5/S9MYkVIudF2/TzvddhYRdxBBAvweAABgWRYHAPB9/7ZhGBIRnlUq13YpY/pj0zS3NY2JxWJxKmCtbDZ7qCgkfzz7fKXbOyhQVVX5xQuXelEUvSKEnAkQQjzKZHa6q9Xq6vTTFKmqqk8IIbP5fP7hLPMPAAcATik9JIRM8L9942n6DjCB0nCnWKo+AAAAAElFTkSuQmCC") !important;
}
]]>.toString().replace(/%button%/g, "#" + this.id);
function sheet(cssStr, removeFlag) {
var sss = Components.classes["@mozilla.org/content/style-sheet-service;1"]
.getService(Components.interfaces.nsIStyleSheetService);
var ios = Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var data = "data:text/css," + encodeURIComponent(cssStr);
var uri = ios.newURI(data, null, null);
if(sss.sheetRegistered(uri, sss.USER_SHEET))
sss.unregisterSheet(uri, sss.USER_SHEET);
if(removeFlag)
return;
sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
window[sId] = cssStr;
}
if(!(sId in window))
sheet(cssStr);
else if(window[sId] != cssStr) {
sheet(window[sId], true);
sheet(cssStr);
} 21-11-2009 19:53:33 | ||||||||
| 3Jlou > 25-08-2009 17:31:58 | ||||||||
Infocatcher, а вот за это громадный + | ||||||||
| Infocatcher > 25-08-2009 17:38:20 | ||||||||
Заменить Код: if(wc) {
this.addUndoWindowsList(mp);
tc && mp.appendChild(document.createElement("menuseparator"));
}
if(tc)
this.addUndoTabsList(mp);на Код: if(tc) {
this.addUndoTabsList(mp);
wc && mp.appendChild(document.createElement("menuseparator"));
}
if(wc)
this.addUndoWindowsList(mp); | ||||||||
| Jarichek > 25-08-2009 18:51:22 | ||||||||
Infocatcher | ||||||||
| Najlus > 25-08-2009 20:28:06 | ||||||||
Помогите, дайте пожалуйста CSS код для изменения фона полей ввода на белый и цвета букв на чёрный (Тема просто стоит такая | ||||||||
| Infocatcher > 26-08-2009 00:34:53 | ||||||||
Или userContent.css Код:input[type="text"], textarea {
color: black !important;
background-color: white !important;
}, или нужны подробности. | ||||||||
| Najlus > 26-08-2009 07:07:29 | ||||||||
Или userContent.css | ||||||||
| Infocatcher > 26-08-2009 08:27:25 | ||||||||
А так: Код:input[type="text"], input:not([type]), textarea {
color: black !important;
background-color: white !important;
-moz-appearance: none !important;
}? | ||||||||
| Najlus > 26-08-2009 09:33:15 | ||||||||
Не пашет | ||||||||
| Anton > 26-08-2009 18:17:51 | ||||||||
(На всякий случай.) | ||||||||
| ishua > 26-08-2009 18:19:35 | ||||||||
гм... у гугла есть прекрасная кнопка, работающая из закладок вида: Код:javascript:var%20b=document.body;var%20GR________bookmarklet_domain='http://www.google.com';if(b&&!document.xmlVersion){void(z=document.createElement('script'));void(z.src='http://www.google.com/reader/ui/link-bookmarklet.js');void(b.appendChild(z));}else{}А можно как нибудть это в кнопку интегрировать? банальным Код:loadURI('')непроходит... | ||||||||
| Anton > 26-08-2009 18:21:46 | ||||||||
А Код:loadURI("")? | ||||||||
| ishua > 26-08-2009 20:01:54 | ||||||||
Anton | ||||||||
| Anton > 27-08-2009 18:22:22 | ||||||||
Вот, что-то вроде: Код:var menu = document. getElementById ("goPopup"). cloneNode (true);
for (var i = 0; i < menu. childNodes. length; i++)
{
if (menu. childNodes [i]. hasAttribute ("id"))
menu. childNodes [i]. setAttribute ("hidden", "true");
}
menu. setAttribute ("place", "type=0&sort=4&maxResults=30");
this. appendChild (menu);
this. type = "menu";
this. orient = "horizontal";
this. onclick = function (event)
{
var node = event. originalTarget. node;
if ((event. button < 2) && node)
{
PlacesUIUtils. markPageAsTyped (node. uri);
openUILink (node. uri, event, false, true);
}
else if (event. button == 1)
PlacesCommandHook.showPlacesOrganizer('History');
else if (event. button == 2)
{
if (event. shiftKey)
return;
toggleSidebar ("viewHistorySidebar");
event. preventDefault ();
event. stopPropagation ();
}
}; 27-08-2009 18:25:07
Простое копирование меню "Закладки": Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
this. appendChild (menu);
this. type = "menu";
this. orient = "horizontal"; | ||||||||
| Infocatcher > 27-08-2009 18:35:02 | ||||||||
Anton Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
this. appendChild (menu);
this. type = "menu";
this. orient = "horizontal";
alert(document. getElementById ("bookmarksMenuPopup").parentNode.getAttribute("label"));А теперь размести кнопку слева от панели меню. Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu); | ||||||||
| Anton > 27-08-2009 18:49:23 | ||||||||
Infocatcher
Это "убъёт" первую кнопку. | ||||||||
| Infocatcher > 27-08-2009 18:58:43 | ||||||||
Так ведь Код:var menu = document. getElementById ("goPopup"). cloneNode (true);
for (var i = 0; i < menu. childNodes. length; i++)
{
if (menu. childNodes [i]. hasAttribute ("id"))
menu. childNodes [i]. setAttribute ("hidden", "true");
}
function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu);На первый взгляд все нормально. | ||||||||
| Anton > 27-08-2009 19:05:44 | ||||||||
Всё верно, это у меня баг был. | ||||||||
| Jarichek > 27-08-2009 20:37:39 | ||||||||
Что-то я не совсем понял про кнопку закладок ... Добавил в Инициализацию вот этот код: Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
this. appendChild (menu);
this. type = "menu";
this. orient = "horizontal";
alert(document. getElementById ("bookmarksMenuPopup").parentNode.getAttribute("label"));Теперь при каждом запуске вылетает окно - "[Приложение Javascript] - Закладки". И еще вот эта кнопка клонировалась и появилась в Настройке панелей: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pref%3D%27permissions.default.image%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%09switch%28this.PS.getIntPref%28this.pref%29%29%0A%09%7B%0A%09case%201%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%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%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u0417%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u0432%u0441%u0435%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%27%3B%0A%09%20%09break%3B%0A%09case%202%3A%0A%09%09this.image%3D%0A%27data%3Aimage/png%3Bbase64%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%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u041D%u0435%20%u0437%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u043A%u0430%u0440%u0442%u0438%u043D%u043A%u0438%27%3B%0A%09%09break%3B%0A%09case%203%3A%20%0A%09%09this.image%3D%0A%27data%3Aimage/png%3Bbase64%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%27%3B%0A%09%09this.tooltipText%3D%20%27%u0417%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u043A%u0430%u0440%u0442%u0438%u043D%u043A%u0438%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0434%u043E%u043C%u0435%u043D%u0430%27%3B%0A%09%09break%3B%0A%09%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%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%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%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E И что делать с этим: Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu);А вот это надо было добавить в код кнопки Истории: Код:function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu);? | ||||||||
| Infocatcher > 27-08-2009 21:25:13 | ||||||||
Jarichek Код:function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu);перед Код:this. appendChild (menu); (в обоих случаях)
Это для демонстрации. Если эту кнопку разместить перед панелью с меню, вылетать будет название кнопки, а не название меню. | ||||||||
| Jarichek > 27-08-2009 21:54:10 | ||||||||
Infocatcher, Anton | ||||||||
| Anton > 27-08-2009 22:01:26 | ||||||||
Jarichek | ||||||||
| Infocatcher > 27-08-2009 22:57:23 | ||||||||
Я воспроизвел только раскопирование CB-кнопок, но они получаются вполне полноценными и легко удаляются. | ||||||||
| Jarichek > 27-08-2009 23:12:18 | ||||||||
Infocatcher | ||||||||
| Jarichek > 28-08-2009 14:04:18 | ||||||||
дико извиняюсь Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
//this. type = "menu-button";
//this. orient = "horizontal";
this. setAttribute ("popup", menu. id = "cbBookmarks-" + this. id);
this. onclick = function (event)
{
if (event. button == 1)
PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
else if (event. button == 2)
{
if (event. shiftKey)
return;
toggleSidebar('viewBookmarksSidebar');
event. preventDefault ();
event. stopPropagation ();
}
};как тут сделать, чтобы по правому клику на закладках появлялось стандартное меню (сейчас открывается в боковой панели), и по средней кнопке на закладках не появлялось окно для добавления в закладки? | ||||||||
| Anton > 28-08-2009 18:54:43 | ||||||||
Jarichek
Для этого надо заменить строку Код:if (event. shiftKey) на Код:if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
Для этого надо убрать строку Код:this. onclick = function (event) и всё, что после неё. | ||||||||
| Jarichek > 28-08-2009 19:56:44 | ||||||||
Anton
Да нет, я хотел дополнить кнопку: СКМ - добавить страницу в закладки, а ПКМ - открытие в боковой панели Код:var menu = document. getElementById ("bookmarksMenuPopup"). cloneNode (true);
function delId(node) {
node.removeAttribute("id");
Array.forEach(node.childNodes, delId);
}
delId(menu);
this. appendChild (menu);
//this. type = "menu-button";
//this. orient = "horizontal";
this. setAttribute ("popup", menu. id = "cbBookmarks-" + this. id);
this. onclick = function (event)
{
if (event. button == 1)
{
if (event. originalTarget. nodeName != "toolbarbutton")
return;
PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksMenuFolderId);
}
else if (event. button == 2)
{
if (event. shiftKey || (event. originalTarget. nodeName != "toolbarbutton"))
return;
toggleSidebar('viewBookmarksSidebar');
event. preventDefault ();
event. stopPropagation ();
}
};Надеюсь особых ошибок не наделал. Очередное спасибо! | ||||||||
| alexmac > 28-08-2009 23:33:41 | ||||||||
Что могут означать следующие записи в консоле ошибок (при этом ни одна из кнопок не отображается.): | ||||||||
| Anton > 28-08-2009 23:52:02 | ||||||||
Это значит, что используется версия Custom Buttons 0.0.4.3 или более ранняя, а кроме того, установлено какое-нибудь расширение, которое при инициализации своих js xpcom сервисов загружает скрипты из chrome:// с помощью mozISubscriptLoader. | ||||||||
| Najlus > 29-08-2009 18:23:25 | ||||||||
А можно ли как нибудь поднять строку поиска (вызываемую F3) где нибудь пикселей на 10 выше | ||||||||
| Anton > 29-08-2009 21:59:12 | ||||||||
Najlus
Строку поиска браузера ? Custom Buttons - не лучший инструмент для решения этой задачи. userChrome.css, я думаю, более подходит в данном случае. | ||||||||
| Najlus > 30-08-2009 12:09:07 | ||||||||
именно её
Ну через него тогда как нибудь можно? | ||||||||
| Anton > 30-08-2009 13:46:14 | ||||||||
Najlus | ||||||||
| Jarichek > 31-08-2009 15:18:53 | ||||||||
Anton | ||||||||
| Anton > 31-08-2009 22:14:19 | ||||||||
Jarichek Код:var doc = gBrowser. contentDocument;
var win = doc. defaultView;
win. navigator. lastFocusedTextArea = document.commandDispatcher.focusedElement;
var ssl = Components. classes ["@mozilla.org/moz/jssubscript-loader;1"].
getService (Components. interfaces. mozIJSSubScriptLoader);
if (!win. ujs_bbcode_tag)
ssl. loadSubScript ("file:///C:/bbcode1.js", win);
ssl. loadSubScript ("file:///C:/bbcode2.js", win); | ||||||||
| Jarichek > 31-08-2009 22:57:03 | ||||||||
Anton Код:Deprecated method document.getSelection() called. Please use window.getSelection() instead. Ошибка: c.parentNode.firstChild.innerText is undefined Источник: custombutton://buttons/Firefox/code/custombuttons-button73 Строка: 4294967127 Кстати, когда первый раз когда пробовал эту кнопку, стояла версия 0.0.4.3 - так в ней показывалась правильно "Строка: 115" в ошибке. Установил новую версию, номер строки стал каким-то большим | ||||||||
| Anton > 31-08-2009 23:34:59 | ||||||||
Jarichek
Сдаюсь. | ||||||||
| Jarichek > 31-08-2009 23:49:04 | ||||||||
| ||||||||
| Sergeys > 01-09-2009 00:22:23 | ||||||||
Jarichek | ||||||||
| Jarichek > 01-09-2009 00:25:39 | ||||||||
Sergeys | ||||||||
| Anton > 01-09-2009 00:29:24 | ||||||||
Jarichek Код:this. pasteText = function (desc, url)
{
var doc = new XPCNativeWrapper (gBrowser. contentDocument). wrappedJSObject;
var theBox = doc. forms ["post"] ["req_message"];
var startPos = theBox.selectionStart;
var endPos = theBox. selectionEnd;
var oPosition = theBox. scrollTop;
var oHeight = theBox. scrollHeight;
var text = theBox. value. substring (0, startPos);
text += "[url= + url + ]" + desc + "[/url]";
text += theBox. value. substring (endPos, theBox. value. length);
theBox. value = text;
theBox. selectionStart = startPos;
theBox. selectionEnd = startPos + 6 + url. length + desc. length + 6;
var nHeight = theBox. scrollHeight - oHeight;
theBox. scrollTop = oPosition + nHeight;
};
this. showURLDialog = function (callback, url)
{
XML. ignoreProcessingInstructions = false;
var dialog = <>
<?xml-stylesheet href="chrome://global/skin/"?>
<?xml-stylesheet href="resource://gre/res/html.css"?>
<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
id="dlg02"
title="Custom Buttons"
onload="windowController.init()"
ondialogaccept="return windowController.accept();">
<script type="application/x-javascript">
<![CDATA[
var windowController =
{
init: function ()
{
var stb = document. getElementById ("texttb");
stb. value = window. arguments [1];
window. sizeToContent ();
},
accept: function ()
{
var text = document. getElementById ("texttb"). value;
var url = document. getElementById ("sitetb"). value;
window. arguments [0] (text, url);
}
};
]]>
</script>
<vbox flex="1">
<grid>
<columns>
<column/>
<column flex="1"/>
</columns>
<rows>
<row align="center">
<label value="Название ссылки"/>
<textbox id="texttb" flex="1"/>
</row>
<row align="center">
<label value="Сайт"/>
<textbox id="sitetb" flex="1"/>
</row>
</rows>
</grid>
</vbox>
</dialog>
</>;
window. openDialog ("data:application/vnd.mozilla.xul+xml," + dialog. toXMLString (), "", "chrome,dependent,minimizable,resizable=yes,centerscreen,dialog=yes", callback, url);
};
var focusedWindow = document. commandDispatcher. focusedWindow;
var text = focusedWindow. getSelection (). toString ();
this. showURLDialog (this. pasteText, text); | ||||||||
| Jarichek > 01-09-2009 01:48:20 | ||||||||
Anton
Все работает как надо, опять тебе спасибо Код:var theBox = document.commandDispatcher.focusedElement; Не получается сделать, чтобы или на странице или в форме выделение бралось Код:var focusedWindow = document. commandDispatcher. focusedWindow;
var text = focusedWindow. getSelection (). toString ();
if (!text)
{
var theBox1 = document.commandDispatcher.focusedElement;
var startPos1 = theBox1.selectionStart;
var endPos1 = theBox1.selectionEnd;
text= theBox1.value.substring(startPos1, endPos1);
}Остается не понятным первый вопрос | ||||||||
| Jarichek > 01-09-2009 11:47:50 | ||||||||
Anton Код:var nMItem = function(label,img,args) {
var m = document.createElement('menuitem');
m.setAttribute('label',label);
//m.f = obj.startProcess.bind(obj);
//m.setAttribute('oncommand','this.f("'+path+'","'+args+'")');
m.setAttribute('class','menuitem-iconic');
m.setAttribute('image',img);
m.tooltipText = label;
return m;
}Закомментировал старую запись в кнопке. args выше в коде кнопки указаны для каждого элемента меню, и являются цифрами. Как определить атрибут oncommand, если нужно выполнить функцию (она для всех элементов меню одинаковая), которая принимает один агрумент (args)? | ||||||||
| Anton > 01-09-2009 20:29:12 | ||||||||
Конечно. Просто форум "отрезает" кавычки.
Кнопка сделана только для forum.mozilla-russia.org
Код:m.setAttribute('oncommand','this.f('+args+')');ps.:
Спасибо за багрепорт. | ||||||||
| Jarichek > 01-09-2009 23:47:25 | ||||||||
Ладно, вот приведу что у меня получилось: Код:var apps = new Array;
Red='data:image/x-icon;base64, ...;
Green='data:image/png;base64, ...;
Blue='data:image/png;base64, ...;
// ------ Menu Items ------
apps.push(['Red', Red, '#FF0000']);
apps.push(['Green', Green, '#00FF00']);
apps.push(['Blue', Blue, '#0000FF']);
// ------------------------
var nMItem = function(label,img,args) {
var m = document.createElement('menuitem');
m.setAttribute('label',label);
//m.f = obj.startProcess.bind(obj);
//m.setAttribute('oncommand','this.f("'+path+'","'+args+'")');
m.setAttribute('oncommand','this.onCl("'+args+'")');
m.setAttribute('class','menuitem-iconic');
m.setAttribute('image',img);
m.tooltipText = label;
return m;
}
this.onCl=function(args)
{
var open="[color= + args + ]";
var close="[/color]";
var theBox = document.commandDispatcher.focusedElement;
var startPos = theBox.selectionStart;
var endPos = theBox.selectionEnd;
var pastetext= theBox.value.substring(startPos, endPos);
var oPosition = theBox.scrollTop;
var oHeight = theBox.scrollHeight;
var text=theBox.value.substring(0,startPos);
text +=open+pastetext+close;
text +=theBox.value.substring(endPos, theBox.value.length);
theBox.value = text;
theBox.selectionStart = startPos;
theBox.selectionEnd = startPos + open.length + pastetext.length + close.length;
var nHeight = theBox.scrollHeight - oHeight;
theBox.scrollTop = oPosition + nHeight;
}
var mP = document.createElement('menupopup');
for (var i=0; i<apps.length; i++) {
if (!apps[i] [3]) apps[i] [3]='';
mP.appendChild(nMItem(apps[i] [0], apps[i] [1], apps[i] [2], apps[i] [3], this));
}
this.appendChild(mP);
this.type = "menu";
this.orient = "vertical";А вот кнопка оригинальная, которую я переделывал: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%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%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*Code*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E Моя кнопка должна была заключать выделенный текст в форме ответа в теги цвета, соответственно выбираемого из меню кнопки. (Хочу себе полностью сделать панель ВВ-кодов
Ну да, так работает ... а нельзя ли это совместить? Или как-нибудь универсально написать, чтобы всем подходило? Нашел у себя такую кнопку для вставки цитаты, причем она работает и тут и на ру-борде: Код:this.onclickFunction=function(event){
switch (event.button){
case 0: loadURI("javascript:{ta = window.document.getElementsByTagName('textarea'); ta[ta.length-1].value += '[quote]'+document.getSelection()+'[/quote]
\n'; ta[ta.length-1].focus();}"); break;
case 1: loadURI("javascript:{ta = window.document.getElementsByTagName('textarea'); ta[ta.length-1].value += '[b]'+document.getSelection()+'[/b]\n'; ta[ta.length-1].focus();}"); break;
}
}
this.setAttribute('onclick','this.onclickFunction(event);');Попробовал прикрутить в кнопку var theBox = window.document.getElementsByTagName('textarea'); ничего не вышло | ||||||||
| Anton > 03-09-2009 21:01:06 | ||||||||
"Что-то другое" должно быть не только в тех строчках. Сравни: http://pastebin.mozilla-russia.org/past … iff=101174
Так не написать, чтобы всем абсолютно подходило.
Ну, тогда, наверное Код:var tbs = doc. getElementsByTagName ("textarea");
var theBox = tbs [tbs. length - 1];вместо Код:var theBox = doc. get... будет работать здесь и на ру-борде и ещё где-нибудь.
Замени Код:<textbox id="texttb" flex="1"/> на Код:<textbox id="texttb" flex="1" multiline="true"/>
Попробуй Код:m. style. fontSize = "xx-large"; | ||||||||
| Jarichek > 03-09-2009 23:08:51 | ||||||||
Anton | ||||||||
| Infocatcher > 03-09-2009 23:44:37 | ||||||||
userChrome.css: Код:menuitem:not([label]) > .menu-iconic-text,
menuitem:not([label]) > .menu-accel-container {
display: none !important;
} | ||||||||
| Jarichek > 04-09-2009 14:49:43 | ||||||||
Infocatcher | ||||||||
| Infocatcher > 04-09-2009 19:05:18 | ||||||||
Вообще говоря, некоторые вещи «прямее» делать расширениями, так что не нужно пытаться реализовывать все подряд кнопками. Но это так, к слову. Код:this.switchSelKeybLayout(); Инициализация: Код:this.noSelUseFullText = true;
this.convTableForward = {
"\"": "@",
":": "^",
";": "$",
"?": "&",
",": "?",
"/": "|",
".": "/",
"э": "'",
"б": ",",
"ю": ".",
"Ж": ":",
"ж": ";",
"Б": "<",
"Ю": ">",
"Э": "\"",
"х": "[",
"ъ": "]",
"ё": "`",
"Х": "{",
"Ъ": "}",
"Ё": "~",
"№": "#",
"Ф": "A",
"ф": "a",
"И": "B",
"и": "b",
"С": "C",
"с": "c",
"В": "D",
"в": "d",
"У": "E",
"у": "e",
"А": "F",
"а": "f",
"П": "G",
"п": "g",
"Р": "H",
"р": "h",
"Ш": "I",
"ш": "i",
"О": "J",
"о": "j",
"Л": "K",
"л": "k",
"Д": "L",
"д": "l",
"Ь": "M",
"ь": "m",
"Т": "N",
"т": "n",
"Щ": "O",
"щ": "o",
"З": "P",
"з": "p",
"Й": "Q",
"й": "q",
"К": "R",
"к": "r",
"Ы": "S",
"ы": "s",
"Е": "T",
"е": "t",
"Г": "U",
"г": "u",
"М": "V",
"м": "v",
"Ц": "W",
"ц": "w",
"Ч": "X",
"ч": "x",
"Н": "Y",
"н": "y",
"Я": "Z",
"я": "z",
__proto__: null
};
this.convTableBackward = { __proto__: null };
for(var c in this.convTableForward)
this.convTableBackward[this.convTableForward[c]] = c;
this.insertText = function(ta, text, noFocus) {
var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement)
.editor
.QueryInterface(Components.interfaces.nsIPlaintextEditor);
if(editor.flags & editor.eEditorReadonlyMask)
return;
var sTop = ta.scrollTop;
var sHeight = ta.scrollHeight;
var sLeft = ta.scrollLeft;
// var sWidth = ta.scrollWidth;
if(noFocus) {
var val = ta.value;
var ss = ta.selectionStart;
ta.value = val.substring(0, ss) + text + val.substring(ta.selectionEnd);
var se = ss + text.length;
ta.selectionStart = se;
ta.selectionEnd = se;
}
else {
if(text)
editor.insertText(text);
else
editor.deleteSelection(0);
}
ta.scrollTop = sTop + (ta.scrollHeight - sHeight);
ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth);
};
this.inPrimaryLayout = function(s) {
var c;
for(var i = 0, l = s.length; i < l; i++) {
c = s.charAt(i);
if(c in this.convTableForward)
return true;
if(c in this.convTableBackward)
return false;
}
return false;
};
this.switchKeybLayout = function(convTable, s) {
var r = "", c;
for(var i = 0, l = s.length; i < l; i++) {
c = s.charAt(i);
r += c in convTable ? convTable[c] : c;
}
return r;
};
this.switchSelKeybLayout = function(s) {
try {
var ta = document.commandDispatcher.focusedElement;
var val = ta.value;
var sel = val.substring(ta.selectionStart, ta.selectionEnd);
}
catch(e) {
return;
}
if(this.noSelUseFullText && !sel) {
ta.selectionStart = 0;
ta.selectionEnd = val.length;
sel = val;
}
if(!sel)
return;
sel = this.switchKeybLayout(
this.inPrimaryLayout(sel) ? this.convTableForward : this.convTableBackward,
sel
);
this.insertText(ta, sel);
}; | ||||||||
| Infocatcher > 04-09-2009 19:40:54 | ||||||||
Можно было вставлять текст в readonly-поля – исправил. Код:boolean canPaste(in long aSelectionType); А где брать aSelectionType, я не понял. Код: if(editor.flags & editor.eEditorReadonlyMask)
return; | ||||||||
| Anton > 04-09-2009 20:27:23 | ||||||||
http://pastebin.mozilla-russia.org/101198
Я предполагаю, что скорее всего из nsIClipboard Код:PRInt32 kSelectionClipboard = 0 PRInt32 kGlobalClipboard = 1 | ||||||||
| Infocatcher > 04-09-2009 20:38:08 | ||||||||
Да, похоже на то. Код: if(editor.flags & editor.eEditorReadonlyMask)
return; | ||||||||
| Jarichek > 04-09-2009 20:44:10 | ||||||||
Anton, Infocatcher | ||||||||
| Jarichek > 05-09-2009 19:51:56 | ||||||||
У меня есть только один маленький вопрос, там в коде скрипта есть такой фрагмент: Код: var n='';
var u='';
var c=navigator.lastClicked;
if(location.hostname=='forum.ru-board.com'){
while(c.className!='tpc' && c.parentNode){c=c.parentNode};
if(c.className!='tpc')return;
var tn=c.parentNode.parentNode.childNodes[1].childNodes[0].childNodes[1];
n='[b]'+c.parentNode.firstChild.innerText.replace(/\n.*/g,'')+'[/b] ';
u='[url=+tn.childNodes[5].href+][color=#007777][size=1][u]'+
tn.childNodes[7].innerText.replace(/^ +/,'').replace(/ +$/,'')+'[/u][/size][/color][/url] ';
};Тут, если выделять что-либо в ответе пользователя, то переменной "n" присваивается имя пользователя, а переменной "u" - ссылка на пост с временем этого поста. Как такой код правильно в кнопке сделать? | ||||||||
| Anton > 05-09-2009 23:11:08 | ||||||||
Jarichek Код:var THIS = this;
window. addEventListener
(
'mouseup',
function (e)
{
if (e. target == THIS)
return;
navigator ["lastClicked"] = e. target;
},
true
);то, скорее всего, будет работать указанный тобою код. Только надо заменить Код:location.hostname на Код:gBrowser. contentDocument. location. hostname | ||||||||
| Jarichek > 06-09-2009 00:03:22 | ||||||||
Эх, к сожалению не работает | ||||||||
| Anton > 06-09-2009 00:21:46 | ||||||||
Jarichek Код:var THIS = this;
window. addEventListener
(
'mouseup',
function (e)
{
if (e. originalTarget == THIS)
return;
navigator ["lastClicked"] = e. originalTarget;
},
true
);Код:var n='';
var u='';
var c=navigator.lastClicked;
if(gBrowser. contentDocument.location.hostname=='forum.ru-board.com'){
while(c.className!='tpc' && c.parentNode){c=c.parentNode};
if(c.className!='tpc')return;
var tn=c.parentNode.parentNode.childNodes[1].childNodes[0].childNodes[1];
n='[b]'+c.parentNode.firstChild.textContent.replace(/\n.*/g,'')+'[/b] ';
u='[url=+tn.childNodes[5].href+][color=#007777][size=1][u]'+
tn.childNodes[7].textContent.replace(/^ +/,'').replace(/ +$/,'')+'[/u][/size][/color][/url] ';
}; | ||||||||
| Jarichek > 06-09-2009 00:59:56 | ||||||||
Получилось вот что, но не работает, может я там ошибку допускаю какую | ||||||||
| Anton > 06-09-2009 01:18:49 | ||||||||
Jarichek | ||||||||
| Jarichek > 06-09-2009 18:27:51 | ||||||||
Да, спасибо, единственное что пришлось добавить:
чтобы лишнее не появлялось в имени пользователя и все заработало как надо. | ||||||||
| Jarichek > 07-09-2009 19:33:23 | ||||||||
Anton | ||||||||
| Anton > 08-09-2009 14:25:19 | ||||||||
Jarichek Код:<dialog xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
id="dlg02"
title="Custom Buttons"
onload="windowController.init()"
width="640" height="480"
ondialogaccept="return windowController.accept();">2. Код:if (переменная. indexOf ("www.") == 0)
{
...
}p.s. Исправил - забыл закрывающую скобку в if ... | ||||||||
| Jarichek > 09-09-2009 19:41:33 | ||||||||
Спасибо вам, друзья, за помощь и терпение | ||||||||
| vv07 > 11-09-2009 06:34:02 | ||||||||
Капец полный.Сегодня обновил все расширения и у меня полностью слетели все кнопки.Методом тыка выяснил,что причиной стало расширение Adblock Plus.Каким макаром оно повлияло непонятно,но факт что конопки просто исчезли,как будто их и не было.Помогло только отключение Adblock Plus. | ||||||||
| Jarichek > 11-09-2009 08:11:54 | ||||||||
vv07 | ||||||||
| Anton > 11-09-2009 18:59:41 | ||||||||
vv07 | ||||||||
| Sergeys > 11-09-2009 19:26:15 | ||||||||
или здесь: http://forum.mozilla-russia.org/viewtopic.php?id=10943 | ||||||||
| Jarichek > 12-09-2009 11:08:13 | ||||||||
Ну если только для запуска блокнота и без параметров то вроде так: Код:var path='C:\\windows\\notepad.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(path);
file.launch();
Нечто похожее на твои требования уже в этой теме делалось, правда здесь только запуск приложений, для выполнения других действий придется корректировать, вот попробуй посмотреть эту кнопку: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EFavorite%20Applications%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%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%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%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%0AGchrome%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABwAAAA5AAAARgAAAEEAAAA4AAAAJAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAU8dLhSTS2YrwmGEU9U8hoPMCXCHwAg/SqMCEBNtAAAALQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAGRUeD3dShTXYerNF/3nFov844ff/E9///xLY//8Vz/X/G6jG8RBIVqoAAABAAAAABQAAAAAAAAAAAAAAChsoEndjpzvzY6sr/3q7nf835f//Etz//xDZ//8P1vz/EdL3/yDJ7f8jwOP/D2d7wwECAjUAAAAAAAAAAAcNBD5enDjpUq4e/0CPFf91n5z/ZeP5/zbm//8h3f//Edn//w/X/f8U0PX/H8Hl/yC94f8NUWGhAAAADQAAAAY5WSWYYLYw/0CiHv9LskP/V6BZ/3iUkf973O7/XfD//zjl//8O2f//Ddf9/xLP9P8iweT/HKbF8wMSFTwOFAooZJxD11CuLf9MsEX/Vr1t/23Tm/+Zyqn/fYGB/4ajr/+Qzdv/bOv//xLb//8O1fr/Fsjt/yK94f8LS1l5KDYeTWyxTO5Lrz7/Vrxq/2jOmP+m2bz/ZHpc/01JMP9aQCD/TD8y/3iQmv9e5fz/Ctf+/xLQ9f8hxOn/GXOIoSk7IFNntVL0ULdX/13GiP+S4L7/epN2/2VWJP/Hghv/340n/7l7Iv9TRzT/ZbLI/yTi//8J1f3/H9H2/x17kak1Qi86d8Bv6la+bv9q0KH/ot69/2JuTf+8fiz/759M//K6g//yo1L/mXs+/1ubp/887///I9Tt/0Covf8fc4mRHyocC3u6fMpiyYn/c9Sq/6Tfwf9wcWH/wYg4//WtYv/2yJH/96te/7KNTP9ff5P/Voel/0NQkf9KWbL/Hl9xUwAAAABTelpzgd6q/5Hfu/+ZwKn/hYS//3RjY//Hk1//0o9Z/7J5Of+WhI3/UE/U/w8I3f8JA+7/P2Dz3RQnJhEAAAAAFyEaDKTiw8244sL/jY+5/zQy9/9kZdT/a2me/2dilf9naK//YmPt/xEQ8/8AAOr/EhL0/ytPj1IAAAAAAAAAAAAAAAA5SUMqpcip2nJ0sP8WFeb/AwPh/yor5f81NuX/ISHk/wAA2f8AANb/CAje/w0Nj3kAAAAAAAAAAAAAAAAAAAAAAAAAAB8kHRZAQ4OKXFzf7iUlzP8TE8v/EhLK/xoay/8tLc/+NTXD0h8fe1YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADY2cD98fOOadnbc03d33Nh/f+TAa2u9bx4eNBcAAAAAAAAAAAAAAAAAAAAA+A8AAOAHAADAAwAAgAEAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAEAAMADAADgBwAA+A8AAA%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%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%0AComputers%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABh0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjA4ZXKc4QAAAZRJREFUOE+NUz1Lw1AUtT/Hn9BVcDDgYDe7iTiFTsFJXCRjcAod5FmhkA6FdCikW7oE4lCIg5AMhdehwxscInTI4HC898XU2tqPwOF93XPeffee1AAcbfueX7K1w08den1Vry05LFBBdFJodBO43RTBMIbox3CHCcRE6vHk1EbzzCJKyVuSecFE5ynQweJVISyAhA7iL8BfAK7CHgG6TWQFnBkgPkpSQODRozXvGxfO7gzEpMBdVgYLurGCM4fev77xdwhQBuFYwnwHLAq2p79gsvlGuE+2C3Ad/H6CRkQ3TX4ITCLw2qD9ZlvuFnDbJDDIYYyhhSrw2hgdIGB3Yy1QHwB1IjDMqNBtNVvl+7e2seqt1ZM4HlLRohx+n2rSimGcBxvkDR9UAs5jgmAk4dGtPOfWrRvoXyNVm5xusSig5oqEUmqdpzOwH8osVt37x4najWRlJud5DjmTiCPOIkTj0j1QgOyslIKcKqSZJF+k8Hoh1cHTQnsz4CysWwF/ENPPlOhRdFhAHF5EFqnatT6uvp/n35Q1zXl/mKThAAAAAElFTkSuQmCC%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%0ANotepadPP%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAD//P8A//zwAP/3/wD/9/AA8P//APD98ADw9/8A8PTwAPD34ADw5+AA7///AO/08ADg8P8A4PDwAO//7wDv8O8A4PTvAO/o/wDg5/AA7+3vAO/n4ADg6O8A4OjgAODi4ADg3+AA4NzfAODY0ADf7+8A3+DgANDg7wDP+P8AwPD/ANDg0ADf3+AA393fAN/Y0ADQ2tAA0NDfANDU0ADQ0M8A0M/QAN/HwADP3N8Az9DfAM/Q0ADP1M8AwNDPAM/M0ADAyNAAz87PAM/HzwDPxcAAwM/PAMDEwADAx78A0LfQAM+3wADAv8AAsMjQAL/HwACwyMAAoMDAAJ/A4ACQx98Av8C/ALDAsACfr8AAn6DAAI+YwAC/v78Av7e/ALC4sACwt78AsLCwAL+orwC/r6AAv6egAK+/vwCvv7AAr7ewAK+vrwCvr6AAoKigAKCkoACgn7AAn6i/AJCosACfop8AkKCfAJ+foACPh68An5yfAJCYkACQl5AAj5CQAICQnwCPj48AgIeAAH/P3wBf3/AAT8jgAEDI3wB/sN8Af7/AAG+3wABgt8AAYKiwAH+QkABfoK8AT6+/AECgvwBAkK8AQICgAECAnwAw2OAAMNDvADDI7wAg0O8AIMjvACDH4AAvwNAAEMDgAC+43wAvl68AcGiPAHB4cABwd3AAb2xvAEBPXwAAAAAAf5CfAH+PkABwgJAAf4SPAHCAgABfmL8AUIe/AE+HvwA/zPAAP8fwADDP/wAwwvAAP8jvAC/A8AAwvPAAL77wAC+18AAguPAAH6//ABCH0AAfiM8AEIfPAA+A0AAgh78AH4i/AB+PsAAQgL8Af2/wAG93wABgWN8AYF/AAHB/gABveIAAYHeAAEB4vwBAf7AAQHigAEBwrwBfeJ8AUE+/AE9PrwBfUI8AT1+PABB/0AAQf88AD3/QAA9/zwA/YJAAP2CPADBojwA/X48AL1yPAC9YgAAvV4AAIF+PACBcgAAQfL8AEHiwABB3sAAPfL8AD3ewAABwsAB/fX8AcHh/AHB1cABgcH8Ab29wAG9qbwBgaG8AYGdvAGBiYABQZ3AAX2dvAF9gYABAYH8AUFhgAF9bXwBAT1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AYGF/f35hW0H+/v7+/v7+/lAHAAcTIjVQW2BhfX1+XP5TABMMAwgOBQAHAQADBS3+UwAWBwoACRkVAAAAAwBP/lsHJCAZgEIYBwQTAwcAYP5TAAsFAitobB0DEAsHB13+WwcxLyYzanJ7EQULBDEx/lcAMS8tGj14dW8wKhBd/v5TADUhNSYlPnpzcE0bXf7+WwtSNSY0ODdmd3lrKkj+/lcHJiImJCYzOmlldXES/v5bByIXFxABAgYfYnNkZ/7+WwdFRk8uNSlKWVZuY208/lwXRzlFTkFLTAMoQj8eXzJdFhcUIyRBNVEm/v7+VEN8UyYmMzE1QVhX/v7+/v5EWgD///8AAf//AAH//wAB//8AAf//AAH//wAB//8AA///AAP//wAD//8AA///AAP//wAB//8AAP//ADj//wB8//8%3D%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%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%0AOpera%3D%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAQVSURBVHjaYv7//z9DvprmEyYGBgaGKxuuywAAAAD//2K8HZ2k9+Pe/UuMK/ks/tvyCTAAAAAA//8AIgDd/wP///8AYvID/0Ll66SRYWXuAf///wDvJ2T/4/sJ6R768RcAAAD//wBEALv/AdVESwAVVVLI+eXmxu64u3IEEiww/8KPt6Xa4NRxTzYl6gNr2gCABmZQLwDm/wgZ3uVoBAkBF7H/lbz/RywnAOvm8AEAAAD//wCEAHv/Af///wDcWmJ6Ejk1hfHw9QDy09MAH0E8APv4+QDsuLsBAgAAAAAK9gWFzZvAAOjm9AEFOUABrqK8pQHE1wAE9AXfAgAAAAD5wuAAD93qABtMRAUF4v4ADeoIMPvA4wD+2POzAP///wAAAAAPXRAppuIza/nwOXP/tyRU4wUBAj0AAAACAAgB9/4B1ERLAAH+/gAPPTuNCSYlV/308+XwwcRn99vd0C7KwgAE/u/yABlfWv8FCwkA3bO5ABIhHRsTNjXP8AgJeQAAAIgCBAsRff/d5ACzebQA483TJbeTpaTw1d8ACQwQhwAAAAACBP0GXQDk7wACEgOhEzg/3E2mnF3PvcwA/+DtAAAAAAAE+9bmCvzh9QD9JBbiBBwdAOGjvwAH8gMA+8TZAAAAAAACAgALuQH4BQDx5ehPEfUGABlDNAYfBQ4AAAAKAAAAAAAB1BBNABsNEP/7DQkA3vH06REOFxcV+/EA+u7zpxftqloAAAAAAgcBAzu3JVTi8Dpz/+IyavlbDyioAAAAEf///wAs0DtMU1EAgOH/cO5tby+3LbWlQQbBGAUtgaAJupjgK9Goi5OLi4OjI4sxOhji6KATu0YT44iNMcHF+IxGLUIEfPCw1EJtbx/AueceBxz+9Rt+YYyhcOochBq3v+9GYnjouuW6UtoWwrIxGEwQoLcUQaOpq2/e3moWZm6KaISBqTzCGMP0odF9yZOj76Mxx5MJj1I9xsvbE9CaUS6h8aUX2X/+NAdGcgQbW2zW67W1p88PDhVezVsAdmf3vbZi1TOWz9zSD768W14YvHphuJSfrEVTCXoPH0lOTTz5qMp+78DeHtqUSri79twFzlgA6sP3QdXVRGZSFBfKtPdlH2gRqXUcO0trsUzz299qR7rzUfHX6ljOjqPXKgTF1REAC0AoZ1kv+VmzoghrJerd8U63K0vQ2MDzdiBdB39lM5OYmSX4/JvQaIRx5gDaACJ41whjKC0ZSe6m/dPilek7j8d1ftZ1FjdijWfz41k7erk/lUVv2YShgzTuGLA9sVd6HI/sTF9K5x4eTfWcEBGJjkq0EBgBMgyxGopQG15Ufk7eX/968bX6UysElW1ACAEQ/58UEE9ZTjpjuwlArKlWbT1orRvwAQ1UAd8Yw78BAM0usKyCrCPaAAAAAElFTkSuQmCC%27%3B%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%20%20%20%20CurrentPage%20%3D%20getBrowser%20%28%29.%20contentDocument.%20location.%20href%3B%0A%0A//%20------%20Menu%20Items%20------%0Aapps.push%28%5B%27Run%20in%20IE%27%2C%20%20%20IExplorer%2C%20%27C%3A/Program%20Files/Internet%20Explorer/IEXPLORE.EXE%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%5B%27Run%20in%20Google%20Chrome%27%2C%20%20%20%20%20%20%20%20Gchrome%2C%20%20%27C%3A/Documents%20and%20Settings/Admin/Local%20Settings/Application%20Data/Google/Chrome/Application/chrome.exe%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%5B%27Run%20in%20Opera%27%2C%20Opera%2C%20%27d%3A/Programs/Opera9/OperaAC.exe%27%2C%20CurrentPage%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0A%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%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%0A%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%27Notepad++%27%2C%20%20%20%20%20%20%20%20%20%20%20%20%20NotepadPP%2C%20%27F%3A/Run/Textutils/notepad++/notepad++.exe%27%5D%29%3B%0Aapps.push%28%27separator%27%29%3B%0A%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%0A%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%27path%27%2Cpath%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%27event.stopPropagation%28%29%3Bthis.f%28%22%27+path+%27%22%2C%22%27+args+%27%22%2Cthis%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%2Cmi%29%20%7B%0A%20%20this.currentCommand%3Dmi%3B%0A%20%20this.image%3Dmi.getAttribute%28%22image%22%29%3B%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.createInstance%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-button%22%3B%0A//this.orient%20%3D%20%22horizontal%22%3B%0Athis.image%3DmP.firstChild.getAttribute%20%28%22image%22%29%3B%0Athis.currentCommand%3DmP.firstChild%3B%0A%0AmP.%20firstChild.%20setAttribute%20%28%22oncommand%22%2C%20%27event.stopPropagation%28%29%3Bthis.f%28this.getAttribute%28%22path%22%29%2CgetBrowser%28%29.contentDocument.location.href%2Cthis%29%3B%27%29%3B%0AmP.%20firstChild.%20nextSibling.%20setAttribute%20%28%22oncommand%22%2C%20%27event.stopPropagation%28%29%3Bthis.f%28this.getAttribute%28%22path%22%29%2CgetBrowser%28%29.contentDocument.location.href%2Cthis%29%3B%27%29%3B%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0Athis.currentCommand.doCommand%28%29%0A%0A%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| Anton > 12-09-2009 22:00:20 | ||||||||
FFUser665
Это случается потому, что nsIProcess вызывается как сервис: Код:var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);раньше это работало, теперь надо создавать его как экземпляр (getService -> createInstance): Код:var process = Components.classes['@mozilla.org/process/util;1']
.createInstance(Components.interfaces.nsIProcess); | ||||||||
| Jarichek > 13-09-2009 23:22:32 | ||||||||
Возникла одна трудность, которую никак не получается решить. Имеется кнопка по открытию дополнений в боковой панели: Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u0414%u043E%u043F%u043E%u043B%u043D%u0435%u043D%u0438%u044F%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVKSURBVHja1JXLb1xXHcc/59znjO2ZO+O3nfgRx3XiJHVDIppGgJBoqkIEoqAuWqhAVdUNAokVSyQ2wBKhigVCFQsqkICipkWQikLSFpo2dnASQtqmiWIn8TgeZ1535s59nHNYpKnTFRJSFvz+gPM534d+P2GM4V6O5B7PPQfYACNP7wVHojwNxiCERU65GGNQqenpv7/0k4WjDzz9gJwTI1mRE0uLr77w3AtPRFF70xYWO6Z2gmOTRClCiI8ev/Tbt24rqF65yrpcpzpZpzpWY2OkSjpt6NldwL/Pm+/5TOGbYlyI1kCHoL/EVz75+SM9QX6nzjSWdv+7AnOHeidwI1jr3iQNU+xNKq0r4fn1qY2FFi3a+YjiYu7duJFeyWclbKz/IQNhIFJUp2s003C19uL6b5pJm4gYL3M4f/78aVv4Vhxqq9OMhsJuZzpN0ymdKaHSDJVm6ExtKbjza2wDBjDiCRxzEI1ldltFtcM61KSBTA1aKb509NGvLizsO9BpxRs56ZaCnp78GxfPnLpeufE127ZRBoQwd1nkGMQ1gzeZw53xAfO4WRCPxVZC4hhCP8VNQ2xp86a9yOpwxZ+YGNs1Ysq7CpnH/s5uLldunL2xWTHClswMbuPc6QsfVyCQqLMJ1qgHlmgHdj8ITWo0cTcmtCKEEEhtcT25Sagj1qyAwOql4BWoNZqNWqXJpz5xkD1Tu3jn9aW7MjAGHWd50zVO+/d1rLroLTpFHOPga5eAAn26l0gnhFlIy4SEuk1LtYizhFhkNDrNKG2lTIxs466mfmiRy2T5yPAvkqS7Hr5e/3MwWzowIMvUkESmjTHgYJMzPhERTdVCIhBCkNc+qW3oxJ0ujsnrRH3H+HjamOeAqg3g7A2efebxr38uShLee/jSk0OFQTpphBCGBpDoDCMMrrDICZeYhDYdLCQ1y6Wl2uw4OPWIM2PvKRwKjhxO7+fN2T0G+IEN4Pbly3NyFu1qJsbGuJU2qKabWEikgVC0iUkx2iCkhWd6UdqQSE1NNznJEsGne+fnvPn5m9ktus0606Njhz6yqH2p/sqrl157aqRn2PnDuVeW987um9k3Ple2lcQRLjYukeiibIWSGcYIbANCARjW5U0a15qdYrfJ1Px4ftG5yr8uXvzjVouq6uVf//RXX6BXFnnbHGt8Mfr54W/tf0YqkEbi2TYrnTVWN9cgE7pUKsv8kAtKICT02wGrL189tvyXUz+rHJ373t835dvVy9d+uQWwDfSJkyCx5yTuNjstZUU86ePJHG+s/SN97dyJH1pB7sU0WdP+P9uHd+49+qPRPaViqjKG1CBttxW+l/37xPLzS2/55UI8XA62WjS4NIS13WfDuU7WiMk/5BT6vX5yaYTnOFxcfv+U/mv3+0PDPVT7HLpnOLtuKo9Nzg89IrRFrLukMhG920qooo6NEhjX3gKMrwwiViTT9LG484IzGPSPDsiAJhLPOExNbJ9caa3sD/7UOpOkQzQeHfny6OGBh3zlIUwKUqA8y+5b71I+eYMk1viWgOc/BGg0oMnhibnL20f7pgZmxlSRQadAzYr49oPPbq853d91T5/+7Hit3rS/MfnjB+cP9LXaIYlSVKMmtdatUu5Y0woJFUhi7tpFFisYtEgou77FwPKxU+88dea7Fd/18mEQKZFZueZq9YPhjd5Ag6Vfqv/t+LvH6yHt1Eq41n/BOVs4bpYl5Xye2Zb52GI2hv3CBwwevtUh8MDzBSYX0XEESIHluAjl42hApCiTom15+xZEAt2ySUOPgnGZU7cdgZPmpduA/+uj/58BAIeKgACzIMTYAAAAAElFTkSuQmCC%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%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%20%0A%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%0A%0A%0A%0A%0Aconst%20Cb%20%3D%20custombuttons%3B%0Aconst%20EXTENSION%20%3D%20Ci.nsIUpdateItem.TYPE_EXTENSION%3B%0A%0Afunction%20prop%28%20aElement%2C%20aString%20%29%20%7B%0A%20%20var%20emRDF%20%3D%20%22http%3A//www.mozilla.org/2004/em-rdf%23%22%3B%0A%20%20var%20arc%20%3D%20RDFService.GetResource%28emRDF+%20aString%29%3B%0A%20%20var%20target%20%3D%20extensionDS.GetTarget%28aElement%2C%20arc%2C%20true%29%3B%0A%20%20if%28target%20instanceof%20Ci.nsIRDFLiteral%29%20return%20target.Value%3B%0A%20%20if%28target%20instanceof%20Ci.nsIRDFInt%29%20return%20target.Value%3B%0A%20%20return%20null%3B%0A%7D%0A%0A%0Avar%20cloneCBcontext%20%3D%20%7B%0A%20%20cloneItems%3A%20function%28aNode%2C%20aID%2C%20aSeparate%29%20%7B%0A%20%20%20%20var%20menupopup%20%3D%20document.getElementById%28aID%29.cloneNode%28true%29%3B%0A%20%20%20%20var%20menuitems%20%3D%20menupopup.childNodes.length%3B%0A%20%20%20%20for%28var%20i%20%3D%200%3B%20i%20%3C%20menuitems%3B%20i++%29%0A%20%20%20%20%20%20aNode.appendChild%28menupopup.firstChild%29%3B%0A%20%20%20%20if%28aSeparate%29%0A%20%20%20%20%20%20aNode.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0A%20%20%7D%2C%0A%20%20makeMenu%3A%20function%28aNode%29%20%7B%0A%20%20%20%20var%20m%20%3D%20aNode.appendChild%28document.createElement%28%22menu%22%29%29%3B%0A%20%20%20%20m.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0A%20%20%20%20m.setAttribute%28%22oncommand%22%2C%20%22event.stopPropagation%28%29%22%29%3B%0A%20%20%20%20var%20mp%20%3D%20m.appendChild%28document.createElement%28%22menupopup%22%29%29%3B%0A%20%20%20%20cloneCBcontext.cloneItems%28mp%2C%20%22custombuttons-contextpopup%22%29%3B%0A%20%20%20%20aNode.insertBefore%28document.createElement%28%22menuseparator%22%29%2C%20m%29%3B%0A%20%20%7D%0A%7D%0A%0A%0A%0A%0Aconst%20popupID%20%3D%20%22cbContext-extensionsButton%22%3B%0A%0Avar%20test%20%3D%20document.getElementById%28popupID%29%3B%0Aif%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20main%20%3D%20document.getElementById%28%22mainPopupSet%22%29%3B%0Avar%20cPopup%20%3D%20main.appendChild%28document.createElement%28%22popup%22%29%29%3B%0AcPopup.id%20%3D%20popupID%3B%0AcPopup.setAttribute%28%22oncommand%22%2C%0A%20%20%22event.stopPropagation%28%29%3B%20document.popupNode.openPrefs%28event%29%3B%22%29%0A%0A%0A%0Avar%20RDFService%20%20%3D%20Cc%5B%22@mozilla.org/rdf/rdf-service%3B1%22%5D.getService%28Ci.nsIRDFService%29%3B%0Avar%20Container%20%20%20%3D%20Cc%5B%22@mozilla.org/rdf/container%3B1%22%5D.getService%28Ci.nsIRDFContainer%29%3B%0Avar%20extensionDS%20%3D%20Cc%5B%22@mozilla.org/extensions/manager%3B1%22%5D.getService%28Ci.nsIExtensionManager%29.datasource%3B%0A%0Avar%20root%3B%0Atry%20%7B%0A%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aitem%3Aroot%22%29%3B%0A%7D%20catch%28err%29%20%7B%0A%20%20root%20%3D%20RDFService.GetResource%28%22urn%3Amozilla%3Aextension%3Aroot%22%29%3B%0A%7D%0A%0AContainer.Init%28extensionDS%2Croot%29%3B%0A%0Avar%20elements%20%3D%20Container.GetElements%28%29%3B%0Avar%20extensionArray%20%3D%20%5B%5D%3B%0Avar%20i%20%3D%20-1%3B%0Awhile%28elements.hasMoreElements%28%29%29%20%7B%0A%20%20i++%3B%0A%20%20var%20element%3Delements.getNext%28%29%3B%0A%20%20element.QueryInterface%28Components.interfaces.nsIRDFResource%29%3B%0A%20%20var%20prop_OptionsURL%20%3D%20prop%28element%2C%20%22optionsURL%22%29%3B%0A%20%20if%28prop%28element%2C%20%22type%22%29%20%3D%3D%20EXTENSION%20%26%26%20%20prop_OptionsURL%29%20%7B%0A%20%20%20%20var%20prop_name%20%3D%20prop%28element%2C%20%22name%22%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%3D%20%5B%5D%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B0%5D%20%3D%20prop_name.charAt%280%29.toUpperCase%28%29%20+%20prop_name.substr%281%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B1%5D%20%3D%20prop_OptionsURL%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B2%5D%20%3D%20prop%28element%2C%20%22userDisabled%22%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B3%5D%20%3D%20prop%28element%2C%20%22version%22%29%3B%0A%20%20%20%20extensionArray%5Bi%5D%20%5B4%5D%20%3D%20prop%28element%2C%20%22iconURL%22%29%3B%0A%20%20%20%20if%28%21extensionArray%5Bi%5D%20%5B4%5D%29%0A%20%20%20%20%20%20extensionArray%5Bi%5D%20%5B4%5D%20%3D%20%22chrome%3A//mozapps/skin/xpinstall/xpinstallItemGeneric.png%22%3B%0A%20%20%7D%0A%7D%0A%0AextensionArray.sort%28%29%3B%0A%0Avar%20features%20%3D%20%22chrome%2C%20dialog%20%3D%200%2C%20resizable%2C%20titlebar%2C%20toolbar%2C%20centerscreen%22%3B%0A%0Avar%20extCommand%20%3D%20%22window.openDialog%28%27ZZZ%27%2C%20%27%27%2C%20%27%22%20+%20features%20+%20%22%27%29%3B%22%3B%0A%0Afor%28var%20i%20%3D%200%3B%20i%20%3C%20extensionArray.length%3B%20i++%29%20%7B%0A%20%20var%20extArray%20%3D%20extensionArray%5Bi%5D%3B%0A%20%20try%20%7B%0A%20%20%20%20var%20mItem%20%3D%20document.createElement%28%22menuitem%22%29%3B%0A%20%20%20%20mItem.setAttribute%28%22label%22%2C%20extArray%5B0%5D%20+%20%22%20%22%20+%20extArray%5B3%5D%29%3B%0A%20%20%20%20if%28extArray%5B4%5D%29%20%7B%0A%20%20%20%20%20%20mItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%20bookmark-item%22%29%3B%0A%20%20%20%20%20%20mItem.setAttribute%28%22image%22%2C%20extArray%5B4%5D%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%28extArray%5B1%5D%29%0A%20%20%20%20%20%20mItem.setAttribute%28%22oncommand%22%2C%20extCommand.replace%28%22ZZZ%22%2C%20extArray%5B1%5D%29%29%3B%0A%20%20%20%20if%28extArray%5B2%5D%29%20mItem.setAttribute%28%22disabled%22%2C%20true%29%3B%0A%20%20%20%20cPopup.appendChild%28mItem%29%3B%0A%20%20%7D%20catch%28e%29%20%7B%0A%20%20%7D%0A%7D%0A%0AcloneCBcontext.makeMenu%28cPopup%29%3B%0Athis.setAttribute%28%22context%22%2C%20popupID%29%3B%0A%0Aif%28typeof%20Local_Install%20%21%3D%20%22object%22%29%20return%3B%0A%0Avar%20test%20%3D%20document.getElementById%28%22cbContext-extensions%22%29%3B%0Aif%28test%29%20test.parentNode.removeChild%28test%29%3B%0A%0Avar%20cbPopup%20%3D%20document.getElementById%28%22custombuttons-contextpopup-subCall%22%29.cloneNode%28true%29%3B%20//%20Cb%20context%0A%0A//%20var%20subPopup%20%3D%20document.createElement%28%22menupopup%22%29%3B%0A%0A//%20subPopup.appendChild%28cbPopup%29%3B%0A//%20subPopup.appendChild%28cbPopup.lastChild%29%3B%0A%0Avar%20subMenu%20%3D%20document.createElement%28%22menu%22%29%3B%0AsubMenu.setAttribute%28%22label%22%2C%20%22Custom%20Button%22%29%3B%0A//subMenu.setAttribute%28%22image%22%2C%20Cb.defaultImg%28%29%20%29%3B%0AsubMenu.appendChild%28cbPopup.lastChild%29%3B%0A%0Avar%20extensionsPopup%20%3D%20document.getElementById%28%22emb-context%22%29%3B%0Avar%20popup%20%3D%20extensionsPopup.cloneNode%28true%29%3B%0Apopup.id%20%3D%20%22cbContext-extensions%22%3B%0Apopup.appendChild%28document.createElement%28%22menuseparator%22%29%29%3B%0Apopup.appendChild%28subMenu%29%3B%0A//popup.appendChild%28subPopup%29%3B%0A%0AextensionsPopup.parentNode.appendChild%28popup%29%3B%0A%0Athis.setAttribute%28%22context%22%2C%20popup.id%29%3B%0A//this.onclick%20%3D%20function%28aEvent%29%20%7B%0A//%20%20if%28aEvent.button%20%3D%3D%3D%201%29%20gBrowser.selectedTab%20%3D%20gBrowser.addTab%28%27chrome%3A//mozapps/content/extensions/extensions.xul%3Ftype%3Dextensions%27%29%3B%0A//%7D%0A%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A/*%20-------------------------------------------------------------%0A%20%20%20Extensions%20Menu%0A%20%20%20Based%20on%20snippet%20by%20onemen%0A%20%20%20http%3A//forums.mozillazine.org/viewtopic.php%3Fp%3D1774082%231774082%0A%20%20%20Modified%20by%20LouCypher%20%28aka%20Zoolcar9%29%0A%20%20%20-------------------------------------------------------------%0A%20%20%20MiddleClick%20%26%20Rightclick%20menu%20Mod%20by%203Jlou%20%5Baka%20DeeP%20%28%20*_%3E*%29%5D%3A%20%0A%20%20%20http%3A//torrents.ru/forum/profile.php%3Fmode%3Dviewprofile%26u%3D512593%0A%20%20%20-------------------------------------------------------------%20*/%5D%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E В firefox отключены Праверка совместимости расширений и Проверка безопасности обновлений: Код:extensions.checkCompatibility - false, extensions.checkUpdateSecurity - false Как заставить работать вот такой код и в боковой панели тоже: Код:@-moz-document url("chrome://mozapps/content/extensions/extensions.xul"){
notification[type="warning"][label^="Проверка совместимости"],
notification[label^="Было установлено"],
notification[type="warning"][label^="Проверка безопасности обновлений"],
#getMore
{display: none !important;}} | ||||||||
| Infocatcher > 13-09-2009 23:58:16 | ||||||||
Странно, вроде, должно работать. | ||||||||
| Anton > 14-09-2009 00:17:57 | ||||||||
Jarichek
Там browser в сайдбаре, из userContent.css по-моему должно работать. | ||||||||
| Infocatcher > 14-09-2009 02:13:36 | ||||||||
А, ну, возможно – я только через Stylish проверил. | ||||||||
| Jarichek > 14-09-2009 08:24:46 | ||||||||
Да, точно, все работает. А то я как только не извращался с userChrome.css ничего не выходило | ||||||||
| Jarichek > 15-09-2009 21:17:34 | ||||||||
Anton Код:BrowserOffline.toggleOfflineStatus(); Инициализация: Код:this.pref = 'browser.offline';
this.setState = function () {
var state = this.PS.getBoolPref(this.pref);
if (state == true) {
this.image = 'data:image/png;base64,...
this.checked = true;
} else {
this.image = 'data:image/png;base64,...
this.checked = false;
}
}
this.PS = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
this.ob = {};
this.ob.observe = this.setState.bind(this);
this.PS.addObserver(this.pref, this.ob, false);
this.setState();Добавлено: | ||||||||
| 150pi > 17-09-2009 15:52:34 | ||||||||
Что то на макОС не работает. Кнопка создается, но не нажимается на панели...FF 3.5.3 | ||||||||
| mshubin > 17-09-2009 15:59:13 | ||||||||
Друзья, помогите плиз с кодом. Надо чтобы кнопка была добавлена на панели инструмента при создании нового письма, при этом при нажатии на кнопку осуществлялись следующие действия: | ||||||||
| Anton > 17-09-2009 18:28:32 | ||||||||
Jarichek
Не знаю. Попробуй Код:this.setState = function (state) {
var ios = Components. classes ["@mozilla.org/network/io-service;1"]. getService (Components. interfaces. nsIIOService);
state = state || (ios. offline? "offline": "online");
if (state == "online") {
this.image = 'file:///m:/redicon.png';
this.checked = true;
} else {
this.image = 'file:///m:/greenicon.png';
this.checked = false;
}
}
this. observer =
{
THIS: null,
QueryInterface: function (iid)
{
if (iid. equals (Components. interfaces. nsISupports) ||
iid. equals (Components. interfaces. nsIObserver))
return this;
throw Components. results. NS_ERROR_NO_INTERFACE;
},
observe: function (subject, topic, data)
{
if (topic == "network:offline-status-changed")
this. THIS. setState (data);
}
};
this. observer. THIS = this;
var os = Components. classes ["@mozilla.org/observer-service;1"]. getService (Components. interfaces. nsIObserverService);
os. addObserver (this. observer, "network:offline-status-changed", false);
this.setState();в раздел "Инициализация".
В поле "Сочетание клавиш" нажать клавишу ESC.
Пока нет.
А поподробней ? | ||||||||
| 150pi > 17-09-2009 18:32:29 | ||||||||
Куда уж подробней то ) Создал кнопку, поместил код в нее, засунул на панель инструментов, но кнопка не нажимается, скрипт не выполняется, соответственно, тоже | ||||||||
| Anton > 17-09-2009 18:36:23 | ||||||||
150pi | ||||||||
| 150pi > 17-09-2009 18:42:01 | ||||||||
Код:javascript:var%20s=document.createElement('script');s.src='http://videosaver.ru/vs.js?nc='+Math.random();document.body.appendChild(s);void(0); | ||||||||
| Anton > 17-09-2009 18:45:04 | ||||||||
150pi Код:loadURI ("javascript:var%20s=document.createElement('script');s.src='http://videosaver.ru/vs.js?nc='+Math.random();document.body.appendChild(s);void(0);");? | ||||||||
| 150pi > 17-09-2009 18:47:46 | ||||||||
не, само собой с лоадюрл. я просто не подумал написать ) сорри | ||||||||
| Anton > 17-09-2009 18:50:34 | ||||||||
150pi | ||||||||
| 150pi > 17-09-2009 19:00:29 | ||||||||
А давайте попробуем с каким нить кодом типа msgbox ("Hello world"); ? | ||||||||
| Anton > 17-09-2009 19:10:05 | ||||||||
150pi
Код:alert(0) Должно появиться предупреждение Код:[Приложение Javascript]
0 | ||||||||
| 150pi > 17-09-2009 19:18:37 | ||||||||
РАботает....попробовал другой код Код:javascript:(function(){function%20getPhotoInfo(){if(res%20=%20/([0-9\-]+)_(\d+)/.exec(location.href))return%20{"mid":%20res[1],%20"pid":%20res[2]};else%20return%20{"mid":%200,%20"pid":%200};}p_mark%20=%20function(i){if(i%20>=%20window.friends.length){ge('rotating').innerHTML%20=%20"<h4>%20All%20friends%20have%20been%20marked%20on%20this%20photo!</h4>";clearTimeout(timerID);return;}request_uri%20=%20"/photos.php?act=put&pid="+mid+"_"+pid+"&id=%20"+mid+"&oid=0&subject="+window.friends[i].id+"&name=%20"+encodeURI(window.friends[i].name)+"&add=1&x=0&y=0&x2=100&y2=100%20";img%20=%20new%20Image();img.src%20=%20request_uri;ge('commentArea').innerHTML%20=%20(i+1)%20+%20"%20of%20"%20+%20window.friends.length%20+%20"%20friends%20have%20been%20marked!";timerID%20=%20setTimeout("p_mark("%20+%20(i+1)%20+%20")",%20500);};p_markall%20=%20function(){if(!confirm("Are%20you%20sure%20want%20to%20mark%20all%20friends?\r\n\r\n\r\%D0%97%D0%B0%D1%85%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%20%D0%BD%D0%B0%204vkontakte.ru"))%20return;ge('rotating').innerHTML%20=%20"<h4>%20Processing%20<img%20src=\"http://vkontakte.ru/images/upload.gif\"><br%20/>%20Please%20wait...</h4>";ajax%20=%20new%20Ajax(function(a,r){eval(r);window.friends%20=%20fr;%20p_mark(0);},%20function(a,r){alert("Request%20problem.%20Try%20again");});ajax.get("/photos.php?act=get");};if(!(location.%20href.match(/vkontakte.ru/)%20&&%20location.href.match(/photo/))){alert("Open%20page%20with%20photo");%20return;}var%20info%20=%20getPhotoInfo();var%20pid%20=%20info["pid"],%20mid%20=%20info["mid"],%20friends;p_markall();})();то же не пашет.... | ||||||||
| Anton > 17-09-2009 19:32:09 | ||||||||
150pi
Если это работает, уже хорошо. Спасибо за проверку.
Там двойные кавычки вперемешку с одинарными, просто так в loadURI не поместить. Надо переписывать текст букмарклета.
loadURI, не loadurl | ||||||||
| 150pi > 17-09-2009 19:44:24 | ||||||||
Странно...у меня из закладок оба эти скрипта работают. Ладно, будем ждать пока вы до маководов доберетесь ) | ||||||||
| Anton > 17-09-2009 20:20:17 | ||||||||
mshubin Код:var msgTo = "a@b.c,b@c.d"; // кому
var msgCc = "c@d.e,d@e.f"; // копия
var msgBcc = "e@f.g,f@g.h"; // скрытая копия
var msgReply = "g@h.i,h@i.j"; // обратный адрес
function add (compFields, fieldName, addr)
{
var addr1 = addr. split (",");
var field = compFields [fieldName];
var values = field. split (",");
for (var i = 0; i < addr1. length; i++)
{
if (values. indexOf (addr1 [i]) == -1)
field += "," + addr1 [i];
}
compFields [fieldName] = field;
}
var cf = Components. classes ["@mozilla.org/messengercompose/composefields;1"].
createInstance (Components. interfaces. nsIMsgCompFields);
Recipients2CompFields (cf);
add (cf, "to", msgTo);
add (cf, "cc", msgCc);
add (cf, "bcc", msgBcc);
add (cf, "replyTo", msgReply);
CompFields2Recipients (cf);В версии 0.0.4.4 есть ошибка, из-за которой кнопки не работают в окнах просмотра и составления сообщений Thunderbird. Код:overlay chrome://messenger/content/messenger.xul chrome://custombuttons/content/tcbbutton.xul и Код:overlay chrome://messenger/content/messenger.xul chrome://custombuttons/content/tcbbutton.xul на Код:overlay chrome://messenger/content/messageWindow.xul chrome://custombuttons/content/tcbbutton.xul и Код:overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://custombuttons/content/tcbbutton.xul соответственно. | ||||||||
| Jarichek > 17-09-2009 20:20:59 | ||||||||
Как удивительно сочетаются фразы
Ну что ж, ждем с нетерпением в будущих версиях, очень нужная вещь. | ||||||||
| Jarichek > 18-09-2009 19:47:11 | ||||||||
хм, иногда глючит кнопка Закладок. при ее нажатии и выборе какой-нибудь папки в закладках появляется точно такой же список в левом верхнем угле браузера. Если передвигаться по папкам, то вточности такой же список и слева появляется. Даже не знаю с чем может быть связано, в консоли ошибок пусто, перезапуск браузера помогает, но на некоторое время, даже не знаю как добраться до источника проблемы. | ||||||||
| 4ira > 21-09-2009 09:05:19 | ||||||||
Спасибо! Отличный плагин, недавно начал им пользоваться | ||||||||
| Jarichek > 21-09-2009 09:28:24 | ||||||||
4ira Код:getBrowser (). addTab ("http://forum.mozilla-russia.org"); | ||||||||
| 3Jlou > 21-09-2009 10:10:40 | ||||||||
помнится у меня подобный глюк возникал из-за того, что я накосячил с комментированием строки в userChrome.css, т.е. символы "/*" прописал, а "*/" забыл | ||||||||
| Jarichek > 21-09-2009 12:30:57 | ||||||||
Кстати, правильным ли будет код для кнопки "Меню", учитывая что имеются вот эти кнопки закладок и истории? Код:var mp = document. createElement ("menupopup");
this. appendChild (mp);
var mc = document. getElementById ("main-menubar");
while (mc. hasChildNodes ())
mp. appendChild (mc. firstChild);
this. type = "menu";
this. orient = "vertical";
this. tooltipText = '';Никто никого "убивать" не будет?
хм, ну посмотрим, подчистил userChrome.css и привел в порядок | ||||||||
| Anton > 21-09-2009 19:08:21 | ||||||||
Jarichek
Закладки ? Нет, увольте : )
Код:loadURI ("http://www.google.com");
Вот тут:
Если работает - значит правильный. | ||||||||
| mshubin > 22-09-2009 10:52:49 | ||||||||
TO ANTON: | ||||||||
| vurdalak > 24-09-2009 22:25:02 | ||||||||
Возможно ли создать кнопку-меню, чтобы заходить на gmail под разными аккаунтами ? | ||||||||
| Лия > 27-09-2009 20:49:19 | ||||||||
Можно ли такую кнопочку сделать, которая бы добавляла сайт из активной вкладки в исключения (сохранения кукис)? Желательно верхний домен с *, типа, с этой страницы добавилось бы *mozilla-russia.org*, ну или после третьего слеша отсекать, если это проще http://forum.mozilla-russia.org/* | ||||||||
| Jarichek > 27-09-2009 21:50:48 | ||||||||
Есть уже такая кнопка, вот тут, в самом низу кнопка "Site cookies". Все кнопки хранятся в <папка_профиля>\custombuttons\buttonsoverlay.xul. После перетаскивания кнопки с панели кнопка сохраняется, а вот если выбрать в контекстном меню кнопки удалить, то естественно удаляется (ну что б не страшно было там рядом сохраняется бэкап) | ||||||||
| mshubin > 28-09-2009 08:23:06 | ||||||||
Всем привет! | ||||||||
| Лия > 28-09-2009 10:53:44 | ||||||||
Спасибо. Не очень хорошо там сделано, интуитивно не понять, что это не просто какие-то иконки, а установка кнопок, хоть бы подписали. | ||||||||
| Al_H > 28-09-2009 12:42:15 | ||||||||
Привет, Лия. А https://addons.mozilla.org/en-US/firefo … h?q=cookie не? | ||||||||
| Jarichek > 28-09-2009 13:17:51 | ||||||||
эмм.. а каких тонких настройках речь? То, что ты предлагала вставлять звездочки так они ни к чему. куки принимаются с домена, а не с адресов страниц, которые ты пытаешь перекрыть звездочкой, или что-то еще имеется ввиду? Скажи, исправим | ||||||||
| Лия > 28-09-2009 14:53:04 | ||||||||
Я не правильно поняла и добавляются в исключения и сохраняются куки не со всех открытых в данный момент сайтов? | ||||||||
| Anton > 28-09-2009 21:20:15 | ||||||||
vurdalak
Возможно. Правда, следом встаёт вопрос "Кто делать ?"
Вот, вроде работает: Код:var folderName = "test1";
function searchFolder (folderName)
{
var res;
var accountManager = Components. classes ["@mozilla.org/messenger/account-manager;1"].
getService (Components. interfaces. nsIMsgAccountManager);
var allServers = accountManager. allServers;
var numServers = allServers. Count ();
for (var index = 0; index < numServers; index++)
{
var rootFolder = allServers. GetElementAt (index). QueryInterface (Components. interfaces. nsIMsgIncomingServer). rootFolder;
if (rootFolder)
{
var allFolders = Components. classes ["@mozilla.org/supports-array;1"]. createInstance (Components. interfaces. nsISupportsArray);
rootFolder. ListDescendents (allFolders);
var numFolders = allFolders. Count ();
for (var folderIndex = 0; folderIndex < numFolders; folderIndex++)
{
var cf = allFolders. GetElementAt (folderIndex). QueryInterface (Components. interfaces. nsIMsgFolder);
if (cf. name. indexOf (folderName) != -1)
{
res = cf;
break;
}
}
}
}
return res;
}
var filterService = Components. classes ["@mozilla.org/messenger/services/filters;1"].
getService (Components. interfaces. nsIMsgFilterService);
var folder = searchFolder (folderName);
var selectedFolders = Components. classes ["@mozilla.org/supports-array;1"].
createInstance (Components. interfaces. nsISupportsArray);
selectedFolders. AppendElement (folder);
var curFilterList = folder. getFilterList (msgWindow);
var tempFilterList = filterService. getTempFilterList (folder);
var numFilters = curFilterList. filterCount;
tempFilterList. logStream = curFilterList. logStream;
tempFilterList. loggingEnabled = curFilterList. loggingEnabled;
var newFilterIndex = 0;
for (var i = 0; i < numFilters; i++)
{
var curFilter = curFilterList. getFilterAt (i);
if (curFilter. enabled && !curFilter. temporary)
{
tempFilterList. insertFilterAt (newFilterIndex, curFilter);
newFilterIndex++;
}
}
filterService. applyFiltersToFolders (tempFilterList, selectedFolders, msgWindow);Лия
Из активной вкладки. | ||||||||
| Лия > 29-09-2009 11:11:33 | ||||||||
Спасибо. | ||||||||
| Xvost > 30-09-2009 12:09:22 | ||||||||
Нужно, что бы при нажати на кнопку выполнялся код Код:javascript:(function(){window.open('http://savefrom.net/?url='+escape(location.href));})()Как правильно сделать? | ||||||||
| Jarichek > 30-09-2009 12:23:38 | ||||||||
Код:loadURI ("javascript:(function(){window.open('http://savefrom.net/?url='+escape(location.href));})()"); | ||||||||
| Xvost > 30-09-2009 13:44:43 | ||||||||
Благодарю! | ||||||||
| colonel > 30-09-2009 18:36:06 | ||||||||
2 Yan: | ||||||||
| AKtor > 04-10-2009 10:56:01 | ||||||||
Классное расширение, создателю большой респект! | ||||||||
| Jarichek > 04-10-2009 11:37:44 | ||||||||
Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3E%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bthis.pref%3D%27permissions.default.image%27%3B%0Athis.setState%3Dfunction%28%29%7B%0A%09switch%28this.PS.getIntPref%28this.pref%29%29%0A%09%7B%0A%09case%201%3A%0A%09%09this.image%3D%20%27data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAEZ0FNQQAAsY58+1GTAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAHWSURBVHjaxJO9a1RBFMV/d+a+N+/tW3c3ia5CoogBwUIRLOzT5b/yL7K1tRTBLqhVYPELYWM2Mdn3MW9mLHZZothICg+c4hT3cDj3XkkpcR0Yrgl9+eIgdfWCGP9tUARG4x0UEU6mh1FuPzU3hhViM1RzrFpyC5kBNZCZRGaE3K707P2b2M1eGRXAu5vmSzOl7weErAI3QsoRlRpGhWFSCOPCMHaGSSlUhWFrMTenM1CAi8uavd2COlo6gaCBaHuMzYkJGp9wdsWmB9cnZF2fAix+XvDj65znj/e5DJY6gjc9IXMYgcxCStCGROMFZxNhvTwFSDHw+t1HumQ4ePaQqcu4DNBKpBdFRDZdhJToAkTkikHo8c2St0fHHH1a8ODeXe7vTplMICuHDDJBDThdpRGBRPo9Qdcu0bbANwWfv59wUicGI081jlRVxaQ0jJ1wZ2i5NRRErnRA6PFNjc9X7Iq1WVvQtQPUldRecBZOm0gEijphNwlSoGtaMrca8k2Jz8uVoVviXUGjw80GXJ8wUSgBTcDhI7t4sjeIYiNGzzC6RO03jM0Rq9ig2GWebAvZOagkzucfxIhsq5ZbZ838ON/5y5n/ofsItGv6AhlU22fy37/x1wDJV8sSGTe+YwAAAABJRU5ErkJggg%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u0417%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u0432%u0441%u0435%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u044F%27%3B%0A%09%20%09break%3B%0A%09case%202%3A%0A%09%09this.image%3D%0A%27data%3Aimage/png%3Bbase64%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%3D%3D%27%3B%0A%09%09this.tooltipText%3D%20%27%u041D%u0435%20%u0437%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u043A%u0430%u0440%u0442%u0438%u043D%u043A%u0438%27%3B%0A%09%09break%3B%0A%09case%203%3A%20%0A%09%09this.image%3D%0A%27data%3Aimage/png%3Bbase64%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%27%3B%0A%09%09this.tooltipText%3D%20%27%u0417%u0430%u0433%u0440%u0443%u0436%u0430%u0442%u044C%20%u043A%u0430%u0440%u0442%u0438%u043D%u043A%u0438%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u0441%20%u0442%u0435%u043A%u0443%u0449%u0435%u0433%u043E%20%u0434%u043E%u043C%u0435%u043D%u0430%27%3B%0A%09%09break%3B%0A%09%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%5D%5D%3E%3C/initcode%3E%0D%0A%20%20%3Ccode%3E%3C%21%5BCDATA%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%5D%3E%3C/code%3E%0D%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0D%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0D%0A%20%20%3Cattributes/%3E%0D%0A%3C/custombutton%3E | ||||||||
| AKtor > 04-10-2009 16:17:18 | ||||||||
Jarichek | ||||||||
| sipajlov > 04-10-2009 18:39:44 | ||||||||
Извините, если пишу не там. Мне нужны кнопки, которые позволяли бы перелистывать страницы например в Яндексе. Это как в Opere кнопка полный вперед и назад. Устанавливал расширение Rewind/Fastforward Buttons , но это не помогло (или не смог настроить). Он не перелистывает страницы. Для Яндекса перелиствать можно нажав клавишу Ctrl со стрелкой. Как можно это реализовать. Заранее спасибо | ||||||||
| Anton > 05-10-2009 20:30:28 | ||||||||
sipajlov Код:var webNavigation = getWebNavigation ();
if (webNavigation. canGoForward)
{
BrowserForward ();
}
else
{
var doc = gBrowser. contentDocument;
var links = doc. documentElement. getElementsByTagName ("link");
var linkrel = "";
for (var i = 0; i < links. length; i++)
{
if (links [i]. rel == "next")
{
linkrel = links [i]. href;
break;
}
}
var np = doc. getElementById ("next_page");
np = np && np. href || linkrel;
if (np)
doc. location. href = np;
}Назад: Код:var webNavigation = getWebNavigation ();
if (webNavigation. canGoBack)
{
BrowserBack ();
}
else
{
var doc = gBrowser. contentDocument;
var links = doc. documentElement. getElementsByTagName ("link");
var linkrel = "";
for (var i = 0; i < links. length; i++)
{
if (links [i]. rel == "previous")
{
linkrel = links [i]. href;
break;
}
}
var np = doc. getElementById ("previous_page");
np = np && np. href || linkrel;
if (np)
doc. location. href = np;
}Кнопки слегка "заточены" под яндекс, раз уж он был упомянут. | ||||||||
| sipajlov > 06-10-2009 18:33:17 | ||||||||
Спасибо, именно то что нужно. Сейчас ищу рисунки кнопок по стилю, и все О.К. | ||||||||
| Infocatcher > 09-10-2009 23:09:35 | ||||||||
memini Код:content.location.pathname = "mypage.cgi"; Вообще, тут и обычной закладки на «адрес» Код:javascript: location.pathname = "mypage.cgi"; хватит. | ||||||||
| Jarichek > 10-10-2009 17:19:56 | ||||||||
Если ты делал обычную закладку, то можно в файл userChrome.css поместить следующий код: Код:.bookmark-item[label="Name"] {
list-style-image: url( 'data:image/x-icon;base64,...') !important;}где Name - имя твоей закладки, а data:image/x-icon;base64,... картинка в base64(можешь найти подходящий фавикон и в том же CustomButtons преобразовать картинку и вставить туда получившийся код). Есть конечно и разные расширения для этого дела | ||||||||
| Jarichek > 10-10-2009 17:49:07 | ||||||||
Исправил - забыл в конце скобку закрывающую. И если закладка будет с русскими буквами то файл должен быть сохранен в кодировки UTF-8 | ||||||||
| ikerosin > 12-10-2009 21:08:53 | ||||||||
Плагин супер, осталось разобраться с JAVA и XUL ) Помогите разобраться с объектами, или подскажите в какую сторону копать: | ||||||||
| Chelodoi Molovek > 14-10-2009 03:23:27 | ||||||||
а есть где-нибудь большой список готовых кнопок (на сайте мало очень)? | ||||||||
| Dadi > 14-10-2009 14:35:26 | ||||||||
Возможно вопрос уже поднимался, но все же: под Ubuntu работать должен или нет? :-) | ||||||||
| Крошка Ру > 14-10-2009 16:10:19 | ||||||||
Chelodoi Molovek | ||||||||
| COPA > 14-10-2009 16:29:30 | ||||||||
У меня такой вопрос, можно ли сделать кнопку, как для панели закладок (открытие - скрытие панели), только для панели меню? В 3.7 ее вынесли в контекстное меню (может и раньше вынесли), но хотелось бы кнопку... | ||||||||
| Anton > 14-10-2009 19:24:52 | ||||||||
ikerosin
Если письма хранятся не локально, это будет слишком сложно, я думаю.
По идее должен. Но проверить не могу.
Вот код: Код:var tBar = document. getElementById ("toolbar-menubar");
tBar. collapsed = !tBar. collapsed;
document. persist ("toolbar-menubar", "collapsed"); | ||||||||
| Dadi > 14-10-2009 19:54:10 | ||||||||
Кнопки Offline и BlockSite не работают, а вот fit to width работает. Просто я дома работаю в Убунте, на работе в Винде, профиль firefox один. В винде кнопки работают нормально, под линем не активны. | ||||||||
| Anton > 14-10-2009 20:00:26 | ||||||||
Dadi
Вообще для всех кнопок ? | ||||||||
| COPA > 14-10-2009 20:08:17 | ||||||||
Anton | ||||||||
| Dadi > 14-10-2009 23:34:57 | ||||||||
Да, для всех, даже добавить ни одной кнопки не могу, только из винды добавляются. | ||||||||
| Chelodoi Molovek > 15-10-2009 05:16:09 | ||||||||
Крошка Ру | ||||||||
| mshubin > 15-10-2009 15:15:11 | ||||||||
Всем привет! | ||||||||
| Anton > 15-10-2009 22:19:29 | ||||||||
mshubin Код:goDoCommand ("cmd_sendButton"); | ||||||||
| mshubin > 16-10-2009 10:11:59 | ||||||||
Спасибо! | ||||||||
| vurdalak > 18-10-2009 04:52:02 | ||||||||
Есть код кнопки - меню. Код:custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0D%0A%20%20%3Cname%3EForum%20Links%3C/name%3E%0D%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%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%3D%5D%5D%3E%3C/image%3E%0D%0A%20%20%3Cmode%3E0%3C/mode%3E%0D%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//------/images-------%0Amozpic%3D%27data%3Aimage/x-icon%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHWSURBVHjaYvz//z8DJQAggJiQOe/fv2fv7Oz8rays/N+VkfG/iYnJfyD/1+rVq7ffu3dPFpsBAAHEAHIBCJ85c8bN2Nj4vwsDw/8zQLwKiO8CcRoQu0DxqlWrdsHUwzBAAIGJmTNnPgYa9j8UqhFElwPxf2MIDeIrKSn9FwSJoRkAEEAM0DD4DzMAyPi/G+QKY4hh5WAXGf8PDQ0FGwJ22d27CjADAAIIrLmjo+MXA9R2kAHvGBA2wwx6B8W7od6CeQcggKCmCEL8bgwxYCbUIGTDVkHDBia+CuotgACCueD3TDQN75D4xmAvCoK9ARMHBzAw0AECiBHkAlC0Mdy7x9ABNA3obAZXIAa6iKEcGlMVQHwWyjYuL2d4v2cPg8vZswx7gHyAAAK7AOif7SAbOqCmn4Ha3AHFsIDtgPq/vLz8P4MSkJ2W9h8ggBjevXvHDo4FQUQg/kdypqCg4H8lUIACnQ/SOBMYI8bAsAJFPcj1AAEEjwVQqLpAbXmH5BJjqI0gi9DTAAgDBBCcAVLkgmQ7yKCZxpCQxqUZhAECCJ4XgMl493ug21ZD+aDAXH0WLM4A9MZPXJkJIIAwTAR5pQMalaCABQUULttBGCCAGCnNzgABBgAMJ5THwGvJLAAAAABJRU5ErkJggg%3D%3D%27%3B%0Aoszpic%3D%27data%3Aimage/x-icon%3Bbase64%2CAAABAAMAEBAQAAEABAAoAQAANgAAABAQAAABAAgAaAUAAF4BAAAQEAAAAQAgAGgEAADGBgAAKAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAhs54AAAAAIbObGzgAAAIzmzn5sYAAAl2gAAI6XAAubAAAAAJtwCbgAAAAAibCLkAjgCOgLmLmwgAgOdwubi5DgCAeOC7i5sAAAAAAJuAu4AAAAALuQC5sAAAAAubAAt3gAAI57AACH7m5+bHAAAABuzm5uAAAAAAiOeAAAAPgfAADgDwAAwAcAAMPDAACP8QAAj/EAABmIAAAWiAAAFogAAB/4AACP8QAAj/EAAMPDAADABwAA8A8AAPg/AAAoAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAANRtAQDUcQIA1XEHANlyAADccgAA0XELAMVwGwDWdhMA13oTANR9FgDYeRsA2H0aANh6HQDDeSQA3qEJANahEQDXphAA2KYSANinFADRpB8A2aYdANmBJADbhykA3o48AMylIQDMpicAxaUpANmsIwDcsSsA3bItAN2yNADesTkA35RG |