Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№445125-07-2012 22:09:47

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

SendAbuse пишет

или это реально чем-то опасно ? :whistle:

Нууу... если только что-то случится с id кнопки, и в cbIdNumber окажется не то, что ожидалось.
А так просто чуть медленнее работать будет.
И еще одно время на AMO очень боролись с eval'ом:
http://adblockplus.org/blog/five-wrong- … -extension
http://piro.sakura.ne.jp/latest/blosxom … t-children
http://piro.sakura.ne.jp/latest/blosxom … t-children
Хотя вот Tab Mix Plus, тем не менее, продолжают аппрувить. :)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№445226-07-2012 02:40:32

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher, спасобо за ответ, рад что всё не так критично.

Тем не менее положу вариант без eval'ов, чтобы другие не сильно
смеялись над кодом,      и      в надежде вот ещё на что:

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

Выделить код

Код:

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%0A%20%20%3Cname%3EorPaste%20for%20Stylish%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAN0DABop/8f//5zj/////+D//xpP/4rQ/xxk/xo8/0KH/3vA/xpH/1Ka/xpb/3W8/5DZ/6Lp/xow/1lo/yZr/0yU/zN6/zB1/2uz/z+IzDyEx+Hh4TJB/4bM8B9m/4/W/4jO/5be/+j//670/y50/1ed/3G1/6rM/7bF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUsASgAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAGlUCAcEgsCgNIJORhAAiezyPyAFgcDoUIgBMFICeFB2FA1jAOXSTgQQYZIIMLWiBFkBmFBADRUHSFCGMGWVVQdE4CCx5kAwQGegZdTx8IDmNkBBCIQk8GEhURDQyXBZICEiYnBwkICQMhHRgZnAIbAwECDhMCjQVqm4yMASUkv08WDRQKyw4VFEm0dBcJIxZeSQFG2kRBACH5BAkZACgALAAAAAAQABAAAAY5QJRwSCwKBUgkMcBkHpVGoRMFjaKm1ShWYJUGusPm9zq2TqfmMVPUPZfBZDAUHZ2/i0nvnZrkwotBADs%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B%0A%20%20%20%20theSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0A%0Avar%20items%20%3D%20this.Help.split%28theSeparator%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%20%3D%20%22data%3Aimage/gif%3Bbase64%2CR0lGODlhEAAQAN0DABop/8f//5zj/////+D//xpP/4rQ/xxk/xo8/0KH/3vA/xpH/1Ka/xpb/3W8/5DZ/6Lp/xow/1lo/yZr/0yU/zN6/zB1/2uz/z+IzDyEx+Hh4TJB/4bM8B9m/4/W/4jO/5be/+j//670/y50/1ed/3G1/6rM/7bF/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAUsASgAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAAGlUCAcEgsCgNIJORhAAiezyPyAFgcDoUIgBMFICeFB2FA1jAOXSTgQQYZIIMLWiBFkBmFBADRUHSFCGMGWVVQdE4CCx5kAwQGegZdTx8IDmNkBBCIQk8GEhURDQyXBZICEiYnBwkICQMhHRgZnAIbAwECDhMCjQVqm4yMASUkv08WDRQKyw4VFEm0dBcJIxZeSQFG2kRBACH5BAkZACgALAAAAAAQABAAAAY5QJRwSCwKBUgkMcBkHpVGoRMFjaKm1ShWYJUGusPm9zq2TqfmMVPUPZfBZDAUHZ2/i0nvnZrkwotBADs%3D%22%3B%0A%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACjo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/9nZ2f/Z2dn/2dnZ/6Ojo//Hx8f/srKy/62trf+tra3/o6Oj/+vr6//r6+v/6+vr/+vr6//r6+v/o6Oj/6Ojo//Z2dn/2dnZ/62trf+jo6P/uLi4/8zMzP/MzMz/zMzM/8nJyf+tra3/uLi4/+vr6//r6+v/6+vr/6Ojo/+jo6P/2dnZ/9nZ2f+jo6P/////////////////////////////////6+vr/8fHx/+9vb3/6+vr/+vr6/+jo6P/o6Oj/9nZ2f/Z2dn/ra2t///////r6+v/2dnZ/8fHx/+oqKj/2dnZ///////19fX/o6Oj/+vr6//r6+v/o6Oj/6Ojo//Z2dn/2dnZ/729vf/e3t7/4+Pj/6Ojo/+1tbX/o6Oj/7W1tf//////9/f3/6ampv+Hh4f/gICA/6Ojo/+jo6P/2dnZ/9nZ2f/R0dH/vb29/62trf+jo6P/o6Oj/729vf/19fX///////////+jo6P/2dnZ/9nZ2f+jo6P/o6Oj/9nZ2f/Z2dn/0dHR/6Ojo//Jycn/9fX1//////////////////X19f/b29v/o6Oj/9nZ2f/Z2dn/o6Oj/6Ojo//Z2dn/2dnZ/6Ojo//U1NT/////////////////9fX1/9HR0f+1tbX/o6Oj/9TU1P/Z2dn/2dnZ/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/9fX1///////R0dH/o6Oj/6Ojo/+jo6P/o6Oj/9nZ2f/Z2dn/2dnZ/9nZ2f+jo6P/o6Oj/+vr6//r6+v/o6Oj////////////urq6/6Ojo/+1tbX/o6Oj/6Ojo/+jo6P/zMzM/9nZ2f/Z2dn/o6Oj/6Ojo//r6+v/6+vr/6Ojo//W1tb////////////W1tb/0dHR/9vb2///////xMTE/6ampv/Z2dn/2dnZ/6Ojo/+jo6P/6+vr/+vr6/+oqKj/o6Oj/9bW1v/19fX/////////////////4ODg/7q6uv+mpqb/2dnZ/9nZ2f+jo6P/o6Oj/+vr6//r6+v/6+vr/6ampv+jo6P/o6Oj/6ampv+mpqb/o6Oj/6Ojo/+jo6P/xMTE/9nZ2f/Z2dn/o6Oj/6Ojo//r6+v/6+vr/+vr6//r6+v/6+vr/9vb2//U1NT/0dHR/6Ojo//Z2dn/2dnZ/9nZ2f/Z2dn/2dnZ/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.image%20%3D%20this.imageOn%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22or-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.orPasteForStylish.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0Afunction%20createButton%28aWindow%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22button%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22label%22%2C%20%22%u0438%u043B%u0438%20%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%22%29%3B%0A%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%20%20%20%20%20%0A%20%20%20%20%20aWindow%5B%22textStorage%22%20+%20cbIdNumber%5D%20%3D%20%5B%5D%3B%20%20//%20%3AD%0A%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%0A%20%20var%20%20%20%20%20%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20%20%20%20%20%20aWindow%5B%22textStorage%22%20+%20cbIdNumber%5D.push%28insertText%29%0A%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%0A%0A%20%20var%20%20Arg%20%3D%20%22this.ownerDocument.defaultView%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%22.textStorage%22%20+%20cbIdNumber%20+%20%22%5B%22%20+%20i%20+%20%22%5D%22%3B%0A%20%20var%20%20commandString%20%3D%20%22insertCodeAtCaret%28%22%20+%20Arg%20+%20%22%29%22%3B%0A%20%20%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%20%7D%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%20var%20doc%20%3D%20e.target%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%20%20%20%20var%20win%20%3D%20doc.defaultView%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%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%28doc.location.href%20%21%3D%20%22chrome%3A//stylish/content/edit.xul%22%29%20return%3B%0A%0A%20%20%20%20var%20hbox%20%3D%20doc.getElementById%28%22editor-tools%22%29%3B%0A%20%20%20%20var%20btn%20%3D%20hbox.firstChild%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20hbox.insertBefore%28createButton%28win%29%2C%20btn.nextElementSibling%29%3B%20%7D%7D%7D%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.run%20%3D%20function%28%29%20%7B%20%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%20%20%20%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28doc.location.href%20%21%3D%20%22chrome%3A//stylish/content/edit.xul%22%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28%20isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%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%20var%20hbox%20%3D%20doc.getElementById%28%22editor-tools%22%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%20%20var%20btn%20%3D%20hbox.firstChild%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%20%20hbox.insertBefore%28createButton%28win%29%2C%20btn.nextElementSibling%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%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%20%20%20%20%20%20%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%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentElement.removeChild%28b%29%3B%20%7D%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%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20//%20thanks%20for%20Infocatcher%2C%20again%0A%20%20%20%20var%20on%20%3D%20%21this.off%3B%0A%20%20%20%20if%28on%29%20this.off%20%3D%20true%3B%0A%20%20%20%20this.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20this.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%28%21this.off%29%20this.image%20%3D%20this.imageOn%3B%0A%0Aif%20%20%28this.off%29%20this.image%20%3D%20this.imageOff%3B%0A%0Athis.run%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%21important%3B%0A%21important%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Adisplay%3A%20none%20%21important%3B%0Adisplay%3A%20none%20%21important%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Awidth%3A%20%0Awidth%3A%20%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Afont-weight%3A%20%0Afont-weight%3A%20%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Abla%0ABLA-BLA%0ABLA-BLA-BLA%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aenters%0A%0A%0A%0A%0A%22ENTERS%22%0A%0A%0A%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u0438.%u0442.%u0434%0A%0A%u0438%20%u0442%u0430%u043A%20%u0434%u0430%u043B%u0435%u0435%2C%0A%u0438%20%u0442%u043E%u043C%u0443%20%u043F%u043E%u0434%u043E%u0431%u043D%u043E%u0435%20...%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№445326-07-2012 03:31:50

Alfina
Участник
 
Группа: Members
Зарегистрирован: 23-05-2010
Сообщений: 87
UA: Firefox 16.0

Re: Custom Buttons

SendAbuse пишет

Alfina, может быть не сочтёшь за труд, ещё раз всё проверишь

Теперь всё работает, как надо. Спасибо за кнопку!

SendAbuse пишет

...и опубликуешь в Готовых

Ох, я не готова взять на себя такую ответственность! :blush: Тем более, вы же автор, вам и публиковать! :)

Отсутствует

 

№445426-07-2012 10:19:31

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 17.0

Re: Custom Buttons

Alfina пишет

Ох, я не готова взять на себя такую ответственность! :blush: Тем более, вы же автор, вам и публиковать! :)

Не отказывайтесь, если автор просит надо публиковать,  просто в теме укажите автора кнопки. ИМХО :)

Отсутствует

 

№445526-07-2012 15:34:49

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Alfina пишет

Ох, я не готова взять на себя такую ответственность!

Понимаю тебя как никто другой, извини за беспокойство.

voqabuhe пишет

просто в теме укажите автора кнопки.

Авторство ?
1.  Лично меня не особо интересует, главное чтобы людям нравилось.
     ( вот что люблю, так это читать отзывы )
2.  А как же соавторы ?
     Infocatcher подсказал принципиально важный кусок кода
     и много чего ещё.
     okkamas_knife, без твоих одобрительных, оптимистичных
     постов было бы совсем тяжело.
     Да много кто ещё ...

okkamas_knife пишет

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

Сам я в Готовых ничего публиковать не буду по ряду
весьма субъективных причин.
Но если кто-то, кому нравится, кто способен оценить степень
законченности и безопасности, опубликует - это будет очень хорошо.
Если нет, пусть лежит здесь.

Да, про "нашу" кнопку я не забыл, пытаюсь улучшить :)

Отсутствует

 

№445627-07-2012 04:54:45

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife, вот немного доделал. Изменения:

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

- Если кнопка сама на себе, надпись на ней меняет цвет,
  и в меню появляется пункт "Сепаратор"
- Дизайн сепаратора и надписей кнопки вынесены в начало кода.
- Переписан внутренний алгоритм вставки, теперь - через буфер обмена
  ( лиса всяко вставит лучше, чем когда-либо смогу написать я,
    правда если там, в буфере, был не текст, то пропадёт
    но в данном случае, наверное, это не так уж важно )

Выделить код

Код:

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%0A%20%20%3Cname%3ECustomPaste%20for%20CustomButtons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B%0A%0Aconst%20insertButtonLabel%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043A%u043E%u0434%22%3B%0Aconst%20insertButtonLabelFontWeight%20%20%20%20%3D%20%20%20%22bold%22%3B%0Aconst%20insertButtonLabelColor%20%20%20%20%20%20%20%20%20%3D%20%20%20%22rgb%280%2C0%2C255%29%22%3B%0Aconst%20insertButtonLabelColorOnSelf%20%20%20%3D%20%20%20%22rgb%28183%2C53%2C47%29%22%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0AtheSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0A%0Avar%20items%20%3D%20this.Help.split%28theSeparator%29%3B%0A%0Avar%20thisCB%20%3D%20this%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////8nJ8P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D////////////o6Pr/5ub6////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P///////////+jo+v/m5vr///////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D////////////////////////////JyfD/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.image%20%3D%20this.imageOn%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22custom-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomPasteForCuctomButtons.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20var%20place%20%3D%20null%3B%0A%20%20var%20focusedElement%20%3D%20null%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20createButton%28aDoc%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22button%22%29%3B%0A%20%20%20%20%20button.style.fontWeight%3D%20insertButtonLabelFontWeight%3B%0A%20%20%20%20%20button.style.color%3D%20insertButtonLabelColor%3B%0A%20%20%20%20%20button.style.maxHeight%3D%20%2220px%22%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22label%22%2C%20insertButtonLabel%29%3B%0A//-------------------------------------------------------------%0A%20%20%20%20%20button.onmouseover%20%3D%20function%28%29%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20focusedElement%20%3D%20aDoc.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28focusedElement.nodeName%20%21%3D%20%22html%3Atextarea%22%29%20return%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20place%20%3D%20focusedElement%3B%20%7D%0A//--------------------------------------------------------------%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20currentCBid%20%3D%20aDoc.location.href.split%28%22custombuttons-button%22%29%5B1%5D%3B%0A%20%20var%20onSelf%20%3D%20false%3B%0A%20%20%0A%20%20if%20%28currentCBid%20%3D%3D%20cbIdNumber%29%20onSelf%20%3D%20true%3B%0A%0A%20%20if%20%28onSelf%29%20%7B%20button.style.color%20%3D%20insertButtonLabelColorOnSelf%3B%20%7D%0A%0A%20%20%20if%20%28items%5B0%5D%20%21%3D%20%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%20%26%26%20onSelf%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20items.unshift%28%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onSelf%20%3D%20true%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%0A%20%20var%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20%20%20%20%20menuitem.insertText%20%3D%20insertText%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20if%20%28insertText%20%3D%3D%20theSeparator.substring%281%2C%20theSeparator.length%29%29%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%20%20%20%20%20%20%20%20%20menuitem.style.fontWeight%3D%20%22bold%22%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%20%20%20%20%20%20%20%20%20menuitem.style.color%20%3D%20insertButtonLabelColorOnSelf%3B%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20%20%20%20%20%20menuitem.inserter%20%3D%20function%20inserter%28aText%29%20%7B%20%0A%0A%20%20var%20oldClipboardContent%20%3D%20readFromClipboard%28%29%3B%0A%0Aconst%20gClipboardHelper%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%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIClipboardHelper%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%20%20%0A%20%20%20%20%20%20%20gClipboardHelper.copyString%28aText%29%3B%0A%0A%20%20%20%20%20%20%20const%20command%20%3D%20%22cmd_paste%22%3B%0A%20%0A%20%20%20%20%20%20%20place.onfocus%20%3D%20function%28%29%20%7B%20var%20controller%20%3D%20aDoc.commandDispatcher%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%20%20.getControllerForCommand%28command%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28controller%20%26%26%20controller.isCommandEnabled%28command%29%29%20%7B%0A%20%20%20%20%20%20%20%20%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%20controller.doCommand%28command%29%3B%20%7D%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%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%20place.onfocus%20%3D%20null%3B%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%20gClipboardHelper.copyString%28oldClipboardContent%29%3B%20%7D%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%20%20%20%20%0A%20%20%20%20%20%20%20place.focus%28%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20var%20%20commandString%20%3D%20%22inserter%28event.target.insertText%29%22%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%0A%20%7D%0A%20%0A%20if%20%28onSelf%29%20items%20%3D%20thisCB.Help.split%28theSeparator%29%3B%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20pattern%20%3D%20/chrome%3A%5C/%5C/custombuttons%5C/content%5C/editor.xul/%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%20%20%20%20%20%20%7D%7D%7D%3B%0A%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.run%20%3D%20function%28%29%20%7B%20%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%20%20%20%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%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%20var%20tbs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%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%20tbs%5B0%5D.appendChild%28createButton%28doc%29%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%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%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%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentElement.removeChild%28b%29%3B%20%7D%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%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20//%20thanks%20for%20Infocatcher%2C%20again%0A%20%20%20%20var%20on%20%3D%20%21this.off%3B%0A%20%20%20%20if%28on%29%20this.off%20%3D%20true%3B%0A%20%20%20%20this.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20this.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%20%28this.off%29%20this.image%20%3D%20this.imageOff%3B%0Aif%20%28%21this.off%29%20this.image%20%3D%20this.imageOn%3B%0A%0Athis.run%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.addEventListener%28%22%0A.addEventListener%28%22%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AkXULNS%0Aconst%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AnsIObserverService%0A%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Aenters%0A%0A%0A%0A%0AE%20N%20T%20E%20R%20S%0A%0A%0A%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u0438.%u0442.%u0434%0A%0A%u0438%20%u0442%u0430%u043A%20%u0434%u0430%u043B%u0435%u0435%2C%0A%u0438%20%u0442%u043E%u043C%u0443%20%u043F%u043E%u0434%u043E%u0431%u043D%u043E%u0435%20...%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№445727-07-2012 16:41:10

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

SendAbuse пишет

правда если там, в буфере, был не текст, то пропадёт

http://forum.mozilla-russia.org/viewtop … 36#p450336


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№445827-07-2012 20:52:44

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

Infocatcher, Yes !!! :beer: Вот оно - совершенство !
Огромное спасибо !

Да, вот вдруг любопытно стало, ты ведь наверняка знаешь,
здесь, на форуме, будет работать такое:
vZXcxbw
Если будет, то разрешается ли ?
Если разрешается, то почему используется не часто, есть недостатки ?

okkamas_knife, не пропусти, версия с техлогией вставки
от Infocatcher'а. Если вдруг в твоей коллекции сниппетов
нет этого - обязательно добавь, классная штука !

Выделить код

Код:

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%0A%20%20%3Cname%3ECustomPaste%20for%20CustomButtons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B%0A%0Aconst%20insertButtonLabel%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043A%u043E%u0434%22%3B%0Aconst%20insertButtonLabelFontWeight%20%20%20%20%3D%20%20%20%22bold%22%3B%0Aconst%20insertButtonLabelColor%20%20%20%20%20%20%20%20%20%3D%20%20%20%22rgb%280%2C0%2C255%29%22%3B%0Aconst%20insertButtonLabelColorOnSelf%20%20%20%3D%20%20%20%22rgb%28183%2C53%2C47%29%22%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0AtheSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0A%0Avar%20items%20%3D%20this.Help.split%28theSeparator%29%3B%0A%0Avar%20thisCB%20%3D%20this%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////8nJ8P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D////////////o6Pr/5ub6////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P///////////+jo+v/m5vr///////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D////////////////////////////JyfD/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.image%20%3D%20this.imageOn%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22custom-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomPasteForCuctomButtons.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20var%20place%20%3D%20null%3B%0A%20%20var%20focusedElement%20%3D%20null%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20createButton%28aDoc%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22button%22%29%3B%0A%20%20%20%20%20button.style.fontWeight%3D%20insertButtonLabelFontWeight%3B%0A%20%20%20%20%20button.style.color%3D%20insertButtonLabelColor%3B%0A%20%20%20%20%20button.style.maxHeight%3D%20%2220px%22%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22label%22%2C%20insertButtonLabel%29%3B%0A//-------------------------------------------------------------%0A%20%20%20%20%20button.onmouseover%20%3D%20function%28%29%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20focusedElement%20%3D%20aDoc.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28focusedElement.nodeName%20%21%3D%20%22html%3Atextarea%22%29%20return%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20place%20%3D%20focusedElement%3B%20%7D%0A//--------------------------------------------------------------%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20currentCBid%20%3D%20aDoc.location.href.split%28%22custombuttons-button%22%29%5B1%5D%3B%0A%20%20var%20onSelf%20%3D%20false%3B%0A%20%20%0A%20%20if%20%28currentCBid%20%3D%3D%20cbIdNumber%29%20onSelf%20%3D%20true%3B%0A%0A%20%20if%20%28onSelf%29%20%7B%20button.style.color%20%3D%20insertButtonLabelColorOnSelf%3B%20%7D%0A%0A%20%20if%20%28items%5B0%5D%20%21%3D%20%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%20%26%26%20onSelf%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20items.unshift%28%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onSelf%20%3D%20true%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%0A%20%20var%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20%20%20%20%20menuitem.insertText%20%3D%20insertText%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20if%20%28insertText%20%3D%3D%20theSeparator.substring%281%2C%20theSeparator.length%29%29%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%20%20%20%20%20%20%20%20%20menuitem.style.fontWeight%3D%20%22bold%22%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%20%20%20%20%20%20%20%20%20menuitem.style.color%20%3D%20insertButtonLabelColorOnSelf%3B%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20%20%20%20%20%20menuitem.inserter%20%3D%20function%20inserter%28aText%29%20%7B%0A%0A%20%20place.onfocus%20%3D%20function%28%29%20%7B%20//http%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D450336%23p450336%0A%0A%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20var%20controller%20%3D%20aDoc.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%0A%20if%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20aText%29%3B%0A%20%20%20%20%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%7D%0A%20%20%20%20%0A%20%20%20%20place.onfocus%20%3D%20null%3B%20%7D%0A%0A%20%20place.focus%28%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20var%20%20commandString%20%3D%20%22inserter%28event.target.insertText%29%22%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%0A%20%7D%0A%20%0A%20if%20%28onSelf%29%20items%20%3D%20thisCB.Help.split%28theSeparator%29%3B%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20pattern%20%3D%20/chrome%3A%5C/%5C/custombuttons%5C/content%5C/editor.xul/%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%20%20%20%20%20%20%7D%7D%7D%3B%0A%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.run%20%3D%20function%28%29%20%7B%20%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%20%20%20%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%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%20var%20tbs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%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%20tbs%5B0%5D.appendChild%28createButton%28doc%29%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%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%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%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentElement.removeChild%28b%29%3B%20%7D%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%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20//%20thanks%20for%20Infocatcher%2C%20again%0A%20%20%20%20var%20on%20%3D%20%21this.off%3B%0A%20%20%20%20if%28on%29%20this.off%20%3D%20true%3B%0A%20%20%20%20this.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20this.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%20%28this.off%29%20this.image%20%3D%20this.imageOff%3B%0Aif%20%28%21this.off%29%20this.image%20%3D%20this.imageOn%3B%0A%0Athis.run%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.addEventListener%28%22%0A.addEventListener%28%22%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AkXULNS%0Aconst%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AnsIObserverService%0A%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Asnippet%0A%0Avar%20text%20%3D%20%22...%22%3B%0A%0Avar%20cmd%20%3D%20%22cmd_insertText%22%3B%0Avar%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28cmd%29%3B%0Aif%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%7D%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u0438.%u0442.%u0434%0A%0A%u0438%20%u0442%u0430%u043A%20%u0434%u0430%u043B%u0435%u0435%2C%0A%u0438%20%u0442%u043E%u043C%u0443%20%u043F%u043E%u0434%u043E%u0431%u043D%u043E%u0435%20...%0A%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отредактировано SendAbuse (27-07-2012 20:56:32)

Отсутствует

 

№445928-07-2012 00:55:13

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  не - не, я не тороплю. Удачи тебе в твоих начинаниях.
Придёт время - обсудим кнопку. :)

Отсутствует

 

№446029-07-2012 20:48:59

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife
спасибо, просьба снимается.
Infocatcher предоставил такой код:

скрытый текст

Выделить код

Код:

function parseLinks(win) {
    var doc = win.document;
    Array.slice(doc.getElementsByTagName("a")).forEach(function(a) {
        var h = a.href;
        if(
            !h
            || !/^[^?&#]*\.(?:jpe?g|png|gif|ico)$/.test(h)
            || a.getElementsByTagName("img").length
        )
            return;
        var img = doc.createElementNS("http://www.w3.org/1999/xhtml", "img");
        img.src = img.alt = img.title = h;
        //a.parentNode.replaceChild(img, a);
        while(a.hasChildNodes())
            a.removeChild(a.lastChild);
        a.appendChild(img);
    });
}
function parseWin(win) {
    parseLinks(win);
    Array.forEach(win.frames, parseWin);
}
parseWin(content);


За что ему - большое спасибо.


mzfx

Отсутствует

 

№446129-07-2012 22:57:55

iDev.Pi
баг-репортёр
 
Группа: Extensions
Зарегистрирован: 31-01-2010
Сообщений: 2718
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife
спасибо и тебе)


mzfx

Отсутствует

 

№446230-07-2012 12:57:05

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

Infocatcher пишет

И еще одно время на AMO очень боролись с eval'ом:
http://adblockplus.org/blog/five-wrong- … -extension
http://piro.sakura.ne.jp/latest/blosxom … t-children
http://piro.sakura.ne.jp/latest/blosxom … t-children
Хотя вот Tab Mix Plus, тем не менее, продолжают аппрувить. :)

А вот и продолжение истории:
https://github.com/piroor/treestyletab/ … nt-7352255
=> https://bugzilla.mozilla.org/show_bug.cgi?id=776290
То есть теперь и toString(), и toSource() будут выдавать одно и то же – исходный код как есть, со всеми отступами и комментариями.
Соответственно, накладывание «патчей» на сторонние функции станет еще более опасным.
И сломается часть старого кода.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№446330-07-2012 15:15:39

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher
У меня на nightly уже перестали работать несколько полезных CB кодов с eval'ом. Сволочи, они убили eval! :(

Кстати вдруг пропали закладки из Session Bookmarks button version 0.2.0pre28 - 2012-03-01 на FF 14.0.1. Вчера были а сегодня их уже нет, и вроде не удалял их.

Отсутствует

 

№446430-07-2012 15:31:07

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

bunda1 пишет

Кстати вдруг пропали закладки из Session Bookmarks button version 0.2.0pre28 - 2012-03-01 на FF 14.0.1. Вчера были а сегодня их уже нет, и вроде не удалял их.

Странно. У меня на месте все.
А соответствующий файл %профиль%\custombuttons\bookmarks-%номер_кнопки%.txt пустой?


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№446530-07-2012 15:42:33

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

Infocatcher пишет

Странно. У меня на месте все.
А соответствующий файл %профиль%\custombuttons\bookmarks-%номер_кнопки%.txt пустой?

Нету файла, похоже что вчера удалил, извыни что зря поднял шум.

Добавлено 30-07-2012 15:44:44

okkamas_knife пишет

а реально сделать патчилку кнопок с eval-ом?
например чтоб брал код всех кнопок по очереди парсил его на наличие евала и заменял его соответствующей функцией например?(или сразу весь файл с кнопками. как вариант чтоб код

Думаю это невозможно, нужен индивидуальный подход.

Отредактировано bunda1 (30-07-2012 15:44:44)

Отсутствует

 

№446631-07-2012 00:18:02

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife, очередная версия кнопки "Вставить код".  :)  Изменения:

-  Своя preference-запись для каждого клона.

-  "Указатель курсора":  Если в тексте вставки поставить определённый символ
   (или несколько, задается опять же в первых строчках кода Инициализации),
   то после вставки курсор будет перемещён в эту позицию.

Выделить код

Код:

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%0A%20%20%3Cname%3ECustomPaste%20for%20CustomButtons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B%0A%0Aconst%20cursorIndex%20%3D%20%22%60%22%3B%0A%0Aconst%20insertButtonLabel%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22%u0412%u0441%u0442%u0430%u0432%u0438%u0442%u044C%20%u043A%u043E%u0434%22%3B%0Aconst%20insertButtonLabelFontWeight%20%20%20%20%3D%20%20%20%22bold%22%3B%0Aconst%20insertButtonLabelColor%20%20%20%20%20%20%20%20%20%3D%20%20%20%22rgb%280%2C0%2C255%29%22%3B%0Aconst%20insertButtonLabelColorOnSelf%20%20%20%3D%20%20%20%22rgb%28183%2C53%2C47%29%22%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0AtheSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0A%0Avar%20items%20%3D%20this.Help.split%28theSeparator%29%3B%0A%0Avar%20thisCB%20%3D%20this%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////8nJ8P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D////////////o6Pr/5ub6////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P///////////+jo+v/m5vr///////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D////////////////////////////JyfD/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.image%20%3D%20this.imageOn%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22custom-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomPasteForCuctomButtons%5B%22%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbIdNumber%20+%20%22%5D.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20var%20place%20%3D%20null%3B%0A%20%20var%20focusedElement%20%3D%20null%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20createButton%28aDoc%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22button%22%29%3B%0A%20%20%20%20%20button.style.fontWeight%3D%20insertButtonLabelFontWeight%3B%0A%20%20%20%20%20button.style.color%3D%20insertButtonLabelColor%3B%0A%20%20%20%20%20button.style.maxHeight%3D%20%2220px%22%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22label%22%2C%20insertButtonLabel%29%3B%0A//-------------------------------------------------------------%0A%20%20%20%20%20button.onmouseover%20%3D%20function%28%29%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20focusedElement%20%3D%20aDoc.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28focusedElement.nodeName%20%21%3D%20%22html%3Atextarea%22%29%20return%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20place%20%3D%20focusedElement%3B%20%7D%0A//--------------------------------------------------------------%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20currentCBid%20%3D%20aDoc.location.href.split%28%22custombuttons-button%22%29%5B1%5D%3B%0A%20%20var%20onSelf%20%3D%20false%3B%0A%20%20%0A%20%20if%20%28currentCBid%20%3D%3D%20cbIdNumber%29%20onSelf%20%3D%20true%3B%0A%0A%20%20if%20%28onSelf%29%20%7B%20button.style.color%20%3D%20insertButtonLabelColorOnSelf%3B%20%0A%0A%20%20%20%20%20%20if%20%28items%5B0%5D%20%21%3D%20%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%20%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20items.unshift%28%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%2C%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%22%u0423%u043A%u0430%u0437%u0430%u0442%u0435%u043B%u044C%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%22%20+%20%22%5Cn%22%20+%20cursorIndex%20+%20cursorIndex%29%3B%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%0A%20%20var%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20%20%20%20%20menuitem.insertText%20%3D%20insertText%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20if%20%28insertText%20%3D%3D%20theSeparator.substring%281%2C%20theSeparator.length%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20insertText%20%3D%3D%20cursorIndex%20+%20cursorIndex%29%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%20%20menuitem.style.fontWeight%3D%20%22bold%22%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%20%20menuitem.style.color%20%3D%20insertButtonLabelColorOnSelf%3B%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20%20menuitem.inserter%20%3D%20function%20inserter%28aText%29%20%7B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20var%20cursorPosition%20%3D%20place.selectionStart%20+%20aText.split%28cursorIndex%29%5B0%5D.length%3B%0A%20%20%20%20%20aText%20%3D%20aText.replace%28cursorIndex%2C%20%22%22%29%3B%0A%20%20%20%20%20if%20%28aText%20%3D%3D%20cursorIndex%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursorPosition%20%3D%20place.selectionStart%20+%20cursorIndex.length%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%20%20%0A%20%20place.onfocus%20%3D%20function%28%29%20%7B%20//http%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D450336%23p450336%0A%0A%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20var%20controller%20%3D%20aDoc.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%0A%20if%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20aText%29%3B%0A%20%20%20%20%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%7D%0A%20%20%20%20%0A%20%20%20%20place.onfocus%20%3D%20null%3B%20%7D%0A%0A%20%20place.focus%28%29%3B%0A%0A%20%20place.selectionStart%20%3D%20place.selectionEnd%20%3D%20cursorPosition%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20var%20%20commandString%20%3D%20%22inserter%28event.target.insertText%29%22%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%0A%20%7D%0A%20%0A%20if%20%28onSelf%29%20items%20%3D%20thisCB.Help.split%28theSeparator%29%3B%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20pattern%20%3D%20/chrome%3A%5C/%5C/custombuttons%5C/content%5C/editor.xul/%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%20%20%20%20%20%20%7D%7D%7D%3B%0A%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.run%20%3D%20function%28%29%20%7B%20%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%20%20%20%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%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%20var%20tbs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%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%20tbs%5B0%5D.appendChild%28createButton%28doc%29%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%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%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%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentElement.removeChild%28b%29%3B%20%7D%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%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20//%20thanks%20for%20Infocatcher%2C%20again%0A%20%20%20%20var%20on%20%3D%20%21this.off%3B%0A%20%20%20%20if%28on%29%20this.off%20%3D%20true%3B%0A%20%20%20%20this.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20this.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%20%28this.off%29%20this.image%20%3D%20this.imageOff%3B%0Aif%20%28%21this.off%29%20this.image%20%3D%20this.imageOn%3B%0A%0Athis.run%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%5Balert%0Aalert%28%22%60%22%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Atabshifted%0AopenUILinkIn%28%22http%3A//%60%22%2C%20%22tabshifted%22%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AkXULNS%0Aconst%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AnsIObserverService%0A%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Asnippet%0A%0Avar%20text%20%3D%20%22...%22%3B%0A%0Avar%20cmd%20%3D%20%22cmd_insertText%22%3B%0Avar%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28cmd%29%3B%0Aif%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%20%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%7D%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u0438.%u0442.%u0434%0A%0A%u0438%20%u0442%u0430%u043A%20%u0434%u0430%u043B%u0435%u0435%2C%0A%u0438%20%u0442%u043E%u043C%u0443%20%u043F%u043E%u0434%u043E%u0431%u043D%u043E%u0435%20...%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№446731-07-2012 00:48:46

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife пишет

а реально сделать патчилку кнопок с eval-ом?

Дело не в самом eval(), а в том, что изменилось приведение функции к строке. И теперь вместо нормализованного кода там форматирование и комментарии автора.
Сколько нибудь гарантированный результат будет только если переопределить Function.prototype.toString и Function.prototype.toSource, только вот по сложности это почти как полноценный парсер синтаксиса – и сделать тяжело, и работать медленно будет.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№446831-07-2012 03:21:59

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Firefox 14.0

Re: Custom Buttons

Подскажите пожалуйста, а нет ли кнопки заменяющей аддон BBCode . Или просто с кодами для вставки в текст на форумах и сайтах?
Все имеющиеся панели и прочее меня не интересуют. Нужна именно кнопочка с выпадающим меню для выбора кода. Желательно максимальное количество кодов заложить или с возможностью добавления новых кодов.
Но с понятным обьяснением как это делать, а то я не силен в таких вопросах. Буду признателен. В настоящее время FF14

Отсутствует

 

№446931-07-2012 10:36:08

klaus65
Участник
 
Группа: Members
Зарегистрирован: 19-02-2012
Сообщений: 50
UA: Firefox 14.0

Re: Custom Buttons

vv07 пишет

Подскажите пожалуйста, а нет ли кнопки заменяющей аддон BBCode .

Есть: BBCode - скопируйте и добавьте в Инициализацию

Иконка

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACS0lEQVR4XpWTS4iSURTHj2/F8oFP1JIWQyZmBm3STavZjIuhTdHKaVMMzMZNLWtRFNGmgWJaTJS0qoEpJEgMA8FVCydRfBvoQgJzhoFCEW//e8fvcyaYRQd+fF7O+6GC/k+UgOVypLqiIxNp6b7yGMMTkKDVar2s1WrP4q0BxuWrN96+e7X2eeGPYnOsp7uko/0jXkaj8XwikdhIp9PdarU6LpfLk+3t7VE8Hv/u9/uzS/FlVsi9YR/fr/+8uUQhuMw7iEQiq/l8fn88HrN+v8+KxSJKzTEEY6lUikHPePkGg4md9i985VWSFCEYDK5sbW1tmkwm6na7NBwOaXd3V2Y0GlEmk6FCoSDlWwUvAKnBmWQy+Wg6ndLOzs4Rx729PZlOp0OH5DZ4DX4rA4HAda/X6+TO7XabG0rIb7RDaIsUCoUAEgaLgJSQRW7YarUEzWaTf2UqlQo1Gg1ijNE/EhMBoDyVzWbljEA41Ot1Qa/Xo8lkQhARRK1Wk8FgIIgPCPmm0WiYx+NhPp+P2Ww2ptfrGUrlKWVUKhXDmpnL5RJ20G9IW3gG1ugYQYuk0+kIzgKz2Sy2UqvVbkH9kl/iB8DAfEhzR+GAqgQOh0N8sZVfMMlKt/0FrANZcL7Eb8Jut5PT6RSOKJ3QJg0GA76RJzBrSwG43AOfZn8CbizjdrsJayaLxSI2VCqVnsPsMZDFAELgEniIKf/gAw2HwywajbJYLMZCodAUrVShvwMuAAeQRQFOAg/wgotgBbN4AJ7OqrsGzgEnsAG15PwXcMcNgug5BPIAAAAASUVORK5CYII=

Отсутствует

 

№447031-07-2012 11:21:38

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Firefox 14.0

Re: Custom Buttons

klaus65
Это действительно то что нужно, но к сожалению великому, очень многих кодов не хватает. А как их самому вставить я не знаю увы.
К примеру $CUT$, hide, more, email, #, hr

Отредактировано vv07 (31-07-2012 11:33:01)

Отсутствует

 

№447131-07-2012 13:53:48

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 689
UA: Firefox 14.0

Re: Custom Buttons

okkamas_knife
Благодарю за подробности. Буду пробовать :blush:
PS Замена на ваш код

Выделить код

Код:

var doc = gBrowser.contentDocument.activeElement;//active tab doc
var text = doc.value;//active input element
var selStart = doc.selectionStart;//start of selected text (index #)
var selEnd = doc.selectionEnd;//end of it
//split the text up into chunks
var textBefore = text.substring(0,selStart);
var textMid = text.substring(selStart,selEnd);
var textAfter = text.substring(selEnd,text.length);
if (event.button == 0){//toggle ""
//see if it has quotes
var boldB = text.substring(selStart,selStart+1);
var boldA = text.substring(selEnd,selEnd-1);
if (boldB == "\[u]" && boldA == "\[/u]"){//remove them
textMid = text.substring(selStart+1,selEnd-1);
doc.value = textBefore + textMid + textAfter;
} else {//add them
doc.value = textBefore + "\[u]" + textMid + "\[/u]" + textAfter;

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

Отредактировано vv07 (31-07-2012 14:26:26)

Отсутствует

 

№447231-07-2012 17:36:36

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

vv07, да кнопка хороша - красава, но:
Infocatcher пишет здесь
и, более доходчиво здесь
что у таких кнопок кончается срок жизни
(если конечно обновлять Firefox).

Или я что-то не так понял ?

Отсутствует

 

№447331-07-2012 19:57:31

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 3.6

Re: Custom Buttons

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

Выделить код

Код:

// BB .....................................                   
this.BB = function(value) {
// создаем массив из данных в 'value' ...... 
var array = value.split(",");
// .....
var open = array[0];
var close = array[1];
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;
};

В эту обшую функцию передаются нужные аргументы которые указаны для каждого пункта меню в value:

Выделить код

Код:

<menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY/zP8P8/A6kApIlUzECqBrDLRjVBQno0IKBJDgDvo9U6ZXukigAAAABJRU5ErkJggg=="
       label="Pink"
       value = "[color=#ffcc00],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>

Вот пример:

BB: Color Menu

Выделить код

Код:

var menu = <menupopup xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
              xmlns:cb="http://xsms.nm.ru/custombuttons/">
              
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2RgYPgPxCQDkCZSMckawC4j1ZZRTUiBNuxCDwDYNZxl4jAoIwAAAABJRU5ErkJggg=="
       label="Black"
       value = "[color=#000000],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2xoaPjPQCoAaSIVM5CqAeyyUU2QkB4NCGiSAwARDYf0VrC2pAAAAABJRU5ErkJggg=="
       label="Gray"
       value = "[color=#555555],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
              
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAiSURBVChTY2RgaPjPQDoAaSIVk6wB7DJSbRnVhBQ1wy/0APHz6uW3kCqQAAAAAElFTkSuQmCC"
       label="D-Blue"
       value = "[color=#000066],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
    <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2Rg+P+fgXQA0kQqJlkD2GWk2jKqCSlqhl/oAQBHiTjXkScs1gAAAABJRU5ErkJggg=="
       label="M-Blue"
       value = "[color=#3366ff],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2Ro+P+fgWQA0kQqJlkD2GWk2jKqCSlqhmHoAQCvx4dXOyeIIwAAAABJRU5ErkJggg=="
       label="L-Blue"
       value = "[color=#33ccff],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
              
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAhSURBVChTY/zPwABEJAKQJlIxyJpRTaDQHg0ISEIgKyAAgF4417koG3YAAAAASUVORK5CYII="
       label="Red"
       value = "[color=#ff0000],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAiSURBVChTY2RwcPjPQDIAaSIVk6wB7DJSbRnVhBQ1wzD0ABlC6uWFotxVAAAAAElFTkSuQmCC"
       label="D-Green"
       value = "[color=#006600],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
              
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAiSURBVChTY2RoYPjPQDIAaSIVk6wB7DJSbRnVhBQ1wzD0AECC6uVsWqU7AAAAAElFTkSuQmCC"
       label="M-Green"
       value = "[color=#33cc00],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAhSURBVChTY2T4D4QkA5AmUiHJGsAuI9WWUU1IQTYMQw8A4+w41+ZsTRMAAAAASUVORK5CYII="
       label="L-Green"
       value = "[color=#99FF99],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAiSURBVChTY/z/n+E/A6kApIlUDNQxqgkc2qMBAUkIZAUEAIwV1Tp+Fd+aAAAAAElFTkSuQmCC"
       label="Yellow"
       value = "[color=#ffff00],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY2xwYPjPQCoAaSIVM5CqAeyyUU2QkB4NCGiSAwDDIRI03d8RRAAAAABJRU5ErkJggg=="
       label="Brown"
       value = "[color=#663300],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
              
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY/zf4PCfgVQA0kQqZiBVA9hlo5ogIT0aENAkBwD1e66X4yzbFwAAAABJRU5ErkJggg=="
       label="Orange"
       value = "[color=#ff9900],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAjSURBVChTY/zP8P8/A6kApIlUzECqBrDLRjVBQno0IKBJDgDvo9U6ZXukigAAAABJRU5ErkJggg=="
       label="Pink"
       value = "[color=#ffcc00],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value)"}/>
       
       <menuitem
       class="menuitem-iconic"
       image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAABGdBTUEAALGPC/xhBQAAAB90RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgOLVo0ngAAAAhSURBVChTY/wPBAykApAmUgEDqRrALhvVBAmB0YCApgQA+1pxrOcOFPgAAAAASUVORK5CYII="
       label="White"
       value = "[color=#ffffff],[/color]"
       onclick={"document.getElementById('" + this.id + "').BB (value )"}/>

       
</menupopup>;
var bool = XML.prettyPrinting;
XML.prettyPrinting = false;
var el = new DOMParser().parseFromString(menu.toXMLString(), "application/xml").documentElement;
XML.prettyPrinting = bool;
this.appendChild(el);
this.type = "menu";
this.orient = "horizontal";
this.menuClick = function(event) {
  event.preventDefault();
  event.stopPropagation();
  this.open = false;
}
    
       
                             
// BB .....................................                   
this.BB = function(value) {
// создаем массив из данных в 'value' ...... 
var array = value.split(",");
// .....
var open = array[0];
var close = array[1];
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;
};

Отредактировано bunda1 (31-07-2012 20:06:07)

Отсутствует

 

№447431-07-2012 22:52:49

SendAbuse
Участник
 
Группа: Members
Зарегистрирован: 08-03-2012
Сообщений: 113
UA: Firefox 11.0

Re: Custom Buttons

okkamas_knife,  это было круто ! :D
Чего я только не пробовал ! Оказалось (!):
"toolbarbutton" работает если перед place.focus();
поставить place.blur(); (так и не понял почему :dumb:)

Вот переписал. Ты так хотел ?
Я в бижайшее время недоступен, но всё равно напиши отзыв.

Выделить код

Код:

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%0A%20%20%3Cname%3ECustomPaste%20for%20CustomButtons%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20theSeparator%20%3D%20%22%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%22%3B%0A%0Aconst%20cursorIndex%20%3D%20%22%60%22%3B%0A%0Aconst%20insertButtonImage%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfV1dX/wAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAA/////////////////////wAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAAr//////////////////////////8AAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAK///////////AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACv//////////wAAAAAAAAAAAAAAAAAAAAD//////////////////////////wAAAAAAAAArV1dX/1dXV/8AAAAr//////////8AAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAP//////////AAAAK1dXV/9XV1f/AAAAK///////////AAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAD//////////wAAACtXV1f/V1dX/wAAACv//////////////////////////wAAAAD//////////wAAAAAAAAAA//////////8AAAArV1dX/1dXV/8AAAArAAAAAP////////////////////8AAAAA//////////////////////////8AAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAK1dXV/8AAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfAACsQQAArEE//KxBP/ysQSE8rEEBPKxBDzysQQ8ErEEPMKxBDzCsQQEwrEEhBKxBP/ysQT/8rEEAAKxBAACsQQ%3D%3D%22%3B%0Aconst%20insertButtonImageOnSelf%20%20%20%20%20%20%20%20%3D%20%20%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfV1dX/wAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAA//////////////////////////////////////////8AAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAP///////////////////////////////////////////////wAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAD/////////////////////////////////////AAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAAAAAAD/////////////////////////////////////AAAAAAAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAP//////////////////////////////////////////AAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAAAAAAAAAAAAA/////////////////////////////////////wAAAAAAAAAAAAAAK1dXV/9XV1f/AAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtXV1f/V1dX/wAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArV1dX/1dXV/8AAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAKwAAACsAAAArAAAAK1dXV/8AAABfV1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/9XV1f/V1dX/1dXV/8AAABfAACsQQAArEE//KxBP/ysQSAcrEEgDKxBP8ysQTgMrEEwHKxBM/ysQTAMrEE4DKxBP/ysQT/8rEEAAKxBAACsQQ%3D%3D%22%3B%0Aconst%20insertButtonBackgroundColor%20%20%20%20%3D%20%20%20%22rgb%280%2C200%2C0%29%22%3B%0Aconst%20insertButtonTooltip%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%22%u041C%u0430%u043B%u0435%u043D%u044C%u043A%u0430%u044F%20%u0446%u0432%u0435%u0442%u043D%u0430%u044F%20%u043A%u043D%u043E%u043F%u043E%u0447%u043A%u0430%22%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0AtheSeparator%20%3D%20%22%5Cn%22%20+%20theSeparator%20+%20%22%5Cn%22%3B%0A%0Avar%20items%20%3D%20this.Help.split%28theSeparator%29%3B%0A%0Avar%20thisCB%20%3D%20this%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Athis.imageOn%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//rq7///////////////////////9eXv////////////9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/////////////////////////////Xl7/////////////Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////+urv//Xl7//15e//9eXv//Xl7/////////////Xl7//15e//9eXv//Xl7/////////////3Nz//9jY/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv//Xl7//15e/////////////15e//9eXv////////////9eXv//Xl7//15e//9eXv////////////////////////////9eXv/////////////c3P//2Nj/////////////Xl7//15e//9eXv//Xl7//66u////////////////////////Xl7/////////////////////////////rq7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7//15e//9eXv//Xl7/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.imageOff%20%3D%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACbm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P/JyfD//////////////////////5ub4P///////////5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D///////////////////////////+bm+D///////////+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////8nJ8P+bm+D/m5vg/5ub4P+bm+D///////////+bm+D/m5vg/5ub4P+bm+D////////////o6Pr/5ub6////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P+bm+D/m5vg////////////m5vg/5ub4P///////////5ub4P+bm+D/m5vg/5ub4P///////////////////////////5ub4P///////////+jo+v/m5vr///////////+bm+D/m5vg/5ub4P+bm+D/ycnw//////////////////////+bm+D////////////////////////////JyfD/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/m5vg/5ub4P+bm+D/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%22%3B%0A%0Athis.image%20%3D%20this.imageOn%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20cbIdNumber%20%3D%20this.id.replace%28%22custombuttons-button%22%2C%20%22%22%29%3B%0Avar%20insertButtonId%20%3D%20%22custom-paste-by-cb%22%20+%20cbIdNumber%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.CustomPasteForCuctomButtons%5B%22%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%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cbIdNumber%20+%20%22%5D.%22%29%3B%0Atry%20%20%20%20%20%20%7B%20var%20pref%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%3B%0A%0Athis.off%20%3D%20prefs.getBoolPref%28%22off%22%29%3B%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20setButtonDesign%28aDoc%29%20%7B%0A%0A%20%20var%20button%20%3D%20aDoc.getElementById%28%22custom-paste-by-cb%22%20+%20cbIdNumber%29%3B%0A%20%20%20%20%20%20button.tooltipText%20%3D%20insertButtonTooltip%3B%0A%20%20%20%20%0A%20%20var%20image%20%3D%20aDoc.getAnonymousNodes%28button%29%5B1%5D%3B%0A%20%20%20%20%20%20image.style.backgroundColor%20%3D%20insertButtonBackgroundColor%3B%0A%20%20%20%20%20%20image.style.MozMarginEnd%20%3D%20%220px%22%3B%0A%20%20%20%20%0A%20%20var%20dropmarker%20%3D%20aDoc.getAnonymousNodes%28button%29%5B3%5D%3B%0A%20%20%20%20%20%20dropmarker.hidden%20%3D%20true%3B%20%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aconst%20%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%0A%20%20var%20place%20%3D%20null%3B%0A%20%20var%20focusedElement%20%3D%20null%3B%0A%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20createButton%28aDoc%29%20%7B%0A%0Avar%20%20button%20%3D%20document.createElementNS%28kXULNS%2C%20%22toolbarbutton%22%29%3B%0A%20%20%20%20%20button.setAttribute%28%22image%22%2C%20insertButtonImage%29%3B%0A%20%20%20%20%20button.setAttribute%28%22id%22%2C%20insertButtonId%29%3B%0A%20%20%20%20%20button.setAttribute%28%22type%22%2C%20%22menu%22%29%3B%0A//-------------------------------------------------------------%0A%20%20%20%20%20button.onmouseover%20%3D%20function%28%29%7B%20%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20focusedElement%20%3D%20aDoc.commandDispatcher.focusedElement%3B%0A%20%20%20%20%20%20%20%20%20%20if%20%28focusedElement.nodeName%20%21%3D%20%22html%3Atextarea%22%29%20return%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20place%20%3D%20focusedElement%3B%20%7D%0A//--------------------------------------------------------------%0Avar%20%20menupopup%20%3D%20document.createElementNS%28kXULNS%2C%20%22menupopup%22%29%3B%0A%20%20%20%20%20button.appendChild%28menupopup%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20onSelf%20%3D%20false%3B%0A%0Aif%20%28aDoc.location.href.split%28%22custombuttons-button%22%29%5B1%5D%20%3D%3D%20cbIdNumber%29%20%7B%0A%0A%20%20%20%20onSelf%20%3D%20true%3B%0A%20%20%20%20button.setAttribute%28%22image%22%2C%20insertButtonImageOnSelf%29%3B%0A%0A%20%20%20%20%20%20if%20%28items%5B0%5D%20%21%3D%20%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%20%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20items.unshift%28%22%u0421%u0435%u043F%u0430%u0440%u0430%u0442%u043E%u0440%22%20+%20theSeparator%2C%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%22%u0423%u043A%u0430%u0437%u0430%u0442%u0435%u043B%u044C%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%22%20+%20%22%5Cn%22%20+%20cursorIndex%20+%20cursorIndex%29%3B%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Afor%20%28var%20i%20%3D%200%3B%20i%20%3C%20items.length%3B%20i++%29%20%7B%0A%20%20%20%20%20%0A%20%20var%20label%20%3D%20items%5Bi%5D.split%28%22%5Cn%22%2C1%29%3B%0A%20%20var%20insertText%20%3D%20items%5Bi%5D.replace%28label%20+%20%22%5Cn%22%2C%20%22%22%29%3B%0A%20%20%0A%20%20var%20%20menuitem%20%3D%20document.createElementNS%28kXULNS%2C%20%22menuitem%22%29%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22label%22%2C%20label%29%3B%0A%20%20%20%20%20%20%20menuitem.insertText%20%3D%20insertText%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20if%20%28insertText%20%3D%3D%20theSeparator.substring%281%2C%20theSeparator.length%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20insertText%20%3D%3D%20cursorIndex%20+%20cursorIndex%29%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%20%20menuitem.style.fontWeight%20%3D%20%20%20%22bold%22%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%20%20menuitem.style.color%20%20%20%20%20%20%3D%20%20%20%22rgb%28183%2C53%2C47%29%22%3B%20%20%7D%0A%20%20%20%20%20%20%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20%20menuitem.inserter%20%3D%20function%20inserter%28aText%29%20%7B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20var%20cursorPosition%20%3D%20place.selectionStart%20+%20aText.split%28cursorIndex%29%5B0%5D.length%3B%0A%20%20%20%20%20aText%20%3D%20aText.replace%28cursorIndex%2C%20%22%22%29%3B%0A%20%20%20%20%20if%20%28aText%20%3D%3D%20cursorIndex%29%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursorPosition%20%3D%20place.selectionStart%20+%20cursorIndex.length%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%20%20%0A%20%20place.onfocus%20%3D%20function%28%29%20%7B%20//http%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D450336%23p450336%0A%0A%20%20var%20cmd%20%3D%20%22cmd_insertText%22%3B%0A%20%20var%20controller%20%3D%20aDoc.commandDispatcher.getControllerForCommand%28cmd%29%3B%0A%20%20%0A%20if%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%0A%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20aText%29%3B%0A%20%20%20%20%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%20%7D%0A%20%20%20%20%0A%20%20%20%20place.onfocus%20%3D%20null%3B%20%7D%0A%0A%20%20place.blur%28%29%3B%0A%20%20place.focus%28%29%3B%0A%0A%20%20place.selectionStart%20%3D%20place.selectionEnd%20%3D%20cursorPosition%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%20%20var%20%20commandString%20%3D%20%22inserter%28event.target.insertText%29%22%3B%0A%20%20%20%20%20%20%20menuitem.setAttribute%28%22oncommand%22%2C%20commandString%29%3B%0A%20%20%20%20%20%20%20menupopup.appendChild%28menuitem%29%3B%0A%20%7D%0A%20%0A%20if%20%28onSelf%29%20items%20%3D%20thisCB.Help.split%28theSeparator%29%3B%0A%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20button%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A//%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%u263C%0A%0Afunction%20isButtonAlredyPresent%28aDoc%29%20%7B%20//%20advice%20by%20Inforcatcher%0A%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21aDoc.getElementById%28insertButtonId%29%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0Avar%20pattern%20%3D%20/chrome%3A%5C/%5C/custombuttons%5C/content%5C/editor.xul/%0A%0Avar%20observer%20%3D%20%7B%20//%20thanks%20for%20Infocatcher%0A%0Aobserve%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20subject.addEventListener%28%22load%22%2C%20this%2C%20false%29%3B%20%7D%2C%0A%20%20%20%20%20%20%0AhandleEvent%3A%20function%28e%29%20%7B%0A%20%20%20%20var%20doc%20%3D%20e.target%3B%0A%20%20%20%20var%20win%20%3D%20doc.defaultView%3B%0A%20%20%20%20%20%20%20%20win.removeEventListener%28%22load%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20return%3B%0A%0A%20%20%20%20if%20%28%21isButtonAlredyPresent%28doc%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tabs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tabs%5B0%5D.appendChild%28createButton%28doc%29%29%3B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setButtonDesign%28doc%29%20%20%20%20%20%20%7D%7D%7D%3B%0A%20%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Avar%20ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%0Avar%20activeWin%20%3D%20null%3B%20%20%20%20%20%20%20%20%20%0Athis.onmouseover%20%3D%20function%28%29%20%7B%20activeWin%20%3D%20ww.activeWindow%3B%20%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.run%20%3D%20function%28%29%20%7B%20%0A%0A%20%20if%20%28%21this.off%29%20%20%7B%20oSvc.addObserver%28observer%2C%20%22domwindowopened%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20if%20%28this.off%20%29%20%20%7B%20oSvc.removeObserver%28observer%2C%20%22domwindowopened%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20prefs.setBoolPref%28%22off%22%2C%20true%29%3B%20%7D%0A%20%20%20%0A%20%20var%20enumerator%20%3D%20ww.getWindowEnumerator%28%29%3B%0A%20%20var%20win%20%3D%20true%3B%0A%20%20while%20%28win%29%20%7B%20win%20%3D%20enumerator.getNext%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21win%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20doc%20%3D%20win.document%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21RegExp%28pattern%29.test%28doc.location.href%29%29%20continue%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28%21this.off%29%20%7B%20if%20%28isButtonAlredyPresent%28doc%29%29%20%20continue%3B%20%0A%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%20var%20tbs%20%3D%20doc.getElementsByTagName%28%22tabs%22%29%3B%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%20tbs%5B0%5D.appendChild%28createButton%28doc%29%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%20%20%20%20%20%20setButtonDesign%28doc%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%20%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28this.off%29%20%7B%20var%20b%20%3D%20doc.getElementById%28insertButtonId%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28b%29%20%7B%20b%20%3D%20doc.getElementById%28insertButtonId%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%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28b%29%20%7B%20b.parentElement.removeChild%28b%29%3B%20%7D%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%20if%20%28win%20%3D%3D%20activeWin%29%20win.focus%28%29%3B%20%20%7D%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%7D%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Aif%20%28this.off%29%20%7B%20this.image%20%3D%20this.imageOff%3B%20return%3B%20%7D%0A%0Athis.run%28%29%3B%0A%0A//%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%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%0Athis.onDestroy%20%3D%20function%28%29%20%7B%20//%20thanks%20for%20Infocatcher%2C%20again%0A%20%20%20%20var%20on%20%3D%20%21this.off%3B%0A%20%20%20%20if%28on%29%20this.off%20%3D%20true%3B%0A%20%20%20%20this.run%28%29%3B%0A%20%20%20%20if%28on%29%20%7B%20this.off%20%3D%20false%3B%20prefs.setBoolPref%28%22off%22%2C%20false%29%3B%20%7D%7D%3B%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bthis.off%20%3D%20%21this.off%3B%0A%0Aif%20%20%28this.off%29%20this.image%20%3D%20this.imageOff%3B%0Aif%20%28%21this.off%29%20this.image%20%3D%20this.imageOn%3B%0A%0Athis.run%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%5Balert%0Aalert%28%22%60%22%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Atabshifted%0AopenUILinkIn%28%22http%3A//%60%22%2C%20%22tabshifted%22%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AkXULNS%0Aconst%20kXULNS%20%3D%20%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%3B%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0AnsIObserverService%0A%0Avar%20oSvc%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.getService%28Components.interfaces.nsIObserverService%29%3B%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0Asnippet%0A%0Avar%20text%20%3D%20%22...%22%3B%0A%0Avar%20cmd%20%3D%20%22cmd_insertText%22%3B%0Avar%20controller%20%3D%20document.commandDispatcher.getControllerForCommand%28cmd%29%3B%0Aif%28controller%20%26%26%20controller.isCommandEnabled%28cmd%29%29%20%7B%20%0A%20%20%20%20controller%20%3D%20controller.QueryInterface%28Components.interfaces.nsICommandController%29%3B%0A%20%20%20%20var%20params%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/command-params%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.createInstance%28Components.interfaces.nsICommandParams%29%3B%0A%20%20%20%20params.setStringValue%28%22state_data%22%2C%20text%29%3B%0A%20%20%20%20controller.doCommandWithParams%28cmd%2C%20params%29%3B%0A%7D%0A%0A%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%u25BA%0A%u0438.%u0442.%u0434%0A%0A%u0438%20%u0442%u0430%u043A%20%u0434%u0430%u043B%u0435%u0435%2C%0A%u0438%20%u0442%u043E%u043C%u0443%20%u043F%u043E%u0434%u043E%u0431%u043D%u043E%u0435%20...%0A%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№447501-08-2012 00:22:25

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 14.0

Re: Custom Buttons

SendAbuse пишет

Чего я только не пробовал ! Оказалось (!):
"toolbarbutton" работает если перед place.focus();
поставить place.blur(); (так и не понял почему :dumb:)

button получает фокус, а toolbarbutton – нет.
То есть при использовании button фокус сначала переходил на кнопку. А с toolbarbutton фокус и так будет на текстовом поле.

chrome://global/content/xul.css

* {
  -moz-user-focus: ignore;
  -moz-user-select: -moz-none;
  display: -moz-box;
  -moz-box-sizing: border-box;
}

...

button,
checkbox,
colorpicker[type="button"],
datepicker[type="grid"],
menulist,
radiogroup,
tree,
browser,
editor,
iframe {
  -moz-user-focus: normal;
}


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]