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

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

№187624-12-2017 08:19:23

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Привет,
Можно ли поправить несколько кнопок?

Кнопка для переключения стиля из справки. Нужно чтобы при запуске ФФ стиль был включен. Или в идеале, чтобы у юзера был выбор режима.

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

Выделить код

Код:

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%3E%u0426%u0432%u0435%u0442%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/ico%3Bbase64%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%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bif%20%28%20this.hasAttribute%28%22initialized%22%29%20%29%20return%3B%0A%0A//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20................................%0Athis.onclick%20%3D%20function%28e%29%20%7B%20%20%20%20%20%0A%20%20%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%20setStyleForPages%28%29%3B%20//%20%u041B%u041A%u041C%0A%7D%3B%0A%0Avar%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28%20self.Help%20%29%29%3B%0Aconst%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%0Avar%20icon%20%3D%20self.ownerDocument.getAnonymousElementByAttribute%28%20self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29%3B%0Avar%20styleImage%20%3D%20%22data%3Aimage/ico%3Bbase64%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%3D%22%3B%0A%0Afunction%20setStyleForPages%28%20reason%20%29%20%7B%20%0A%20%20%20%20%20%20var%20style%20%3D%20sss.sheetRegistered%28uri%2C%20sss.AGENT_SHEET%29%3B%20%20%0A%20%20%20if%20%28%20style%20%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20%20sss.unregisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20self.image%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20if%20%28%20%28%21style%20%26%26%20reason%20%21%3D%3D%20%27update%27%29%20%7C%7C%20%28style%20%26%26%20reason%20%3D%3D%20%27update%27%29%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20sss.loadAndRegisterSheet%28uri%2C%20sss.AGENT_SHEET%29%3B%0A%20%20%20%20%20%20%20%20icon.src%20%3D%20styleImage%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0AaddDestructor%28function%28reason%29%20%7B%20if%20%28/update%7Cdelete/.test%28%20reason%20%29%20%29%20setStyleForPages%28reason%29%20%7D%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B/*AGENT_SHEET*/%0A%0A%20%20a%2C%20a%20span%20%0A%7B%0A%20%20text-decoration%3A%20none%20%21important%3B%20%0A%20%20color%3A%20%23BABAFF%20%21important%3B%0A%7D%0Aa%3Avisited%2C%20a%3Avisited%20span%20%7Bcolor%3A%20%23FFBABA%20%21important%3B%7D%0A%0Aa%3Ahover%2C%20a%3Ahover%20span%20%0A%7B%0A%20%20text-shadow%3A%200px%200px%208px%20green%20%21important%3B%20%0A%20%20transition%3A%20text-shadow%20.2s%20%20linear%20%21important%3B%0A%7D%0Aa%3Aactive%2C%20a%3Aactive%20span%20%20%7Bcolor%3A%20Silver%20%21important%3B%7D%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E


Уменьшить яркость на всех страницах. Кнопка глючит при прокрутке колесика - яркость мигает и устанавливается рандомно
скрытый текст

Выделить код

Код:

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%3E%u0423%u043C%u0435%u043D%u044C%u0448%u0438%u0442%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u043D%u0430%20%u0432%u0441%u0435%u0445%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%u0445%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/Eykp/xgyMv8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDEx/xgxMf8YMTH/GDIy/xMpKf8AAAD/AAAA/1Cop/9Nrqv/SKKf/0mkof9JpKH/SaSh/0mkof9JpKH/SaSh/0mkof9JpKH/SKKf/02uq/9QqKf/AAAA/wAAAP9OoqH/PpSQ/zWFgf83iIT/N4iE/zeIhP83iIT/N4iE/zeIhP83iIT/N4iE/zWFgf8+lJD/TqKh/wAAAP8AAAD/U6in/0WgnP88ko3/PpWQ/z6VkP8+lZD/PpWQ/z6VkP8+lZD/PpWQ/z6VkP88ko3/RaCc/1Oop/8AAAD/AAAA/1asrP9HpKD/PpaR/0CZlP9AmZT/QJmU/0CZlP9AmZT/QJmU/0CZlP9AmZT/PpaR/0ekoP9WrKz/AAAA/wAAAP9ZsLH/SKmj/0Calf9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0KdmP9CnZj/Qp2Y/0Calf9IqaP/WbCx/wAAAP8AAAD/XLW1/0uuqP9Cn5n/RKKc/0SinP9Eopz/RKKc/0SinP9Eopz/RKKc/0SinP9Cn5n/S66o/1y1tf8AAAD/AwMD/2C4uv9OtK//RKWf/0aoov9GqKL/Rqii/0aoov9GqKL/Rqii/0aoov9GqKL/RKWf/060r/9guLr/AwMD/1NSUv9qw8T/V8XE/1O+u/9Uv73/VL+9/1S/vf9Uv73/VL+9/1S/vf9Uv73/VL+9/1O+u/9XxcT/asPE/1NSUv9XVlb/bcfI/1vLyv9XxML/WMXE/1jFxP9YxcT/WMXE/1jFxP9YxcT/WMXE/1jFxP9XxML/W8vK/23HyP9XVlb/VlVU/3DMzf9f0ND/WsnH/1vKyf9bysn/W8rJ/1vKyf9bysn/W8rJ/1vKyf9bysn/WsnH/1/Q0P9wzM3/VlVU/1ZUVP9zz9H/YtfV/13Qzf9e0c7/XtHO/17Rzv9e0c7/XtHO/17Rzv9e0c7/XtHO/13Qzf9i19X/c8/R/1ZUVP9WVFT/d9PW/2Xc2/9f1dP/YdbU/2HW1P9h1tT/YdbU/2HW1P9h1tT/YdbU/2HW1P9f1dP/Zdzb/3fT1v9WVFT/VlRU/3nV2P9j39z/XdjU/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/X9nV/1/Z1f9f2dX/XdjU/2Pf3P951dj/VlRU/1ZUVP9/4+f/ePX2/3Xu7/927/D/du/w/3bv8P927/D/du/w/3bv8P927/D/du/w/3Xu7/949fb/f+Pn/1ZUVP9XVlb/YXt8/2aBg/9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoCC/2aAgv9mgIL/ZoGD/2F7fP9XVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041B%u041A%u041C%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20%u0441%u0442%u0438%u043B%u044C%20..........%0Athis._handleClick%20%3D%28%29%3D%3E%20setStyleForPages%28%20cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%20%29%3B%0A%0A%0A//%20%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u0432%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%u0445%20%u0438%20%u0441%u0442%u0438%u043B%u0435%20..........%0Athis.onwheel%20%3De%3D%3E%7B%0A%20%20%20var%20i%20%3D%20cbu.getPrefs%28l%29%2C%0A%20%20%20%20%20%20%20i%20%3D%20e.deltaY%20%3C%200%20%3F%20i%20+%20step%20%3A%20i%20-%20step%3B%0A%20%20%20if%20%28%200%20%3C%3D%20i%20%26%26%20i%20%3C%3D%2099%20%29%20cbu.setPrefs%28l%2C%20i%29%3B%0A%0A%20%20%20setStyleForPages%28%20cbu.setPrefs%28s%2C%20true%29%20%29%3B%0A%7D%3B%0A%0A%0A//%20%u0418%u0441%u043F%u0440%u0430%u0432%u0438%u0442%u044C%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%u0443%20%u0441%20position%20%u0434%u043B%u044F%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0439%20..........%0AaddEventListener%28%22mouseover%22%2C%20e%3D%3E%7B%0A%20%20%20if%20%28%20e.button%20%7C%7C%20e.target.localName%20%21%3D%3D%20%27img%27%20%29%20return%3B%20%20%0A%20%20%20%0A%20%20%20var%20img%20%3D%20e.target%2C%20node%20%3D%20img%3B%0A%20%20%20if%20%28%20getPosition%28img%29%20%3D%3D%20%27absolute%27%29%20%7B%20img.setAttribute%28%27currentPosition%27%2C%20%27true%27%29%3B%20return%3B%20%7D%3B%20%20%0A%0A%20%20%20while%28%20node%20%3D%20node.parentNode%20%29%20%7B%0A%20%20%20%20%20%20if%20%28%20getPosition%28node%29%20%3D%3D%20%27relative%27%20%29%20break%3B%0A%20%20%20%20%20%20if%20%28%20getPosition%28node%29%20%3D%3D%20%27absolute%27%29%20%7B%20img.setAttribute%28%27parentPosition%27%2C%20%27true%27%29%3B%20break%3B%20%7D%3B%20%20%20%0A%20%20%20%7D%3B%0A%20%20%20%20function%20getPosition%28node%29%20%7B%20return%20getComputedStyle%28node%2C%20%27%27%29.position%20%7D%3B%20%20%0A%20%20%20%3B%0A%7D%2C%20false%2C%20gBrowser%29%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0438%20css%20%u043A%u043E%u0434%20%u0438%u0437%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0421%u043F%u0440%u0430%u0432%u043A%u0430%20..........%0Avar%20step%20%3D%202%2C%0A%20%20%20%20s%20%3D%20%22CB.darken%22%2C%0A%20%20%20%20help%20%3D%20self.Help%2C%0A%20%20%20%20l%20%3D%20%22CB.darken.level%22%3B%0A%0A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u0432%20about%3Aconfig%20%u0435%u0441%u043B%u0438%20%u043E%u043D%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%20..........%0Acbu.isPref%28l%2C%2028%29%3B%0Acbu.isPref%28s%2C%20false%29%3B%0A%0A%0A//%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0441%u0442%u0430%u0440%u0442%u0435%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0438%u043B%u0438%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u0445%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20%u043A%u043D%u043E%u043F%u043A%u0438%20..........%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.%0A%20%20%20src%20%3D%20%21cbu.getPrefs%28s%29%20%3F%20self.image%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAD/NTU1/z8/P/89PT3/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv8+Pj7/Pj4+/z4+Pv89PT3/Pz8//zU1Nf8AAAD/AAAA/6Ghof+YmJj/ioqK/42Njf+NjY3/jY2N/42Njf+NjY3/jY2N/42Njf+NjY3/ioqK/5iYmP+hoaH/AAAA/wAAAP+dnZ3/hISE/3R0dP94eHj/eHh4/3h4eP94eHj/eHh4/3h4eP94eHj/eHh4/3R0dP+EhIT/nZ2d/wAAAP8AAAD/qKio/5OTk/+CgoL/hoaG/4aGhv+Ghob/hoaG/4aGhv+Ghob/hoaG/4aGhv+CgoL/k5OT/6ioqP8AAAD/AAAA/6+vr/+ampr/iYmJ/42Njf+NjY3/jY2N/42Njf+NjY3/jY2N/42Njf+NjY3/iYmJ/5qamv+vr6//AAAA/wAAAP+1tbX/oqKi/5GRkf+VlZX/lZWV/5WVlf+VlZX/lZWV/5WVlf+VlZX/lZWV/5GRkf+ioqL/tbW1/wAAAP8CAgL/vb29/6mpqf+Xl5f/m5ub/5ubm/+bm5v/m5ub/5ubm/+bm5v/m5ub/5ubm/+Xl5f/qamp/729vf8CAgL/AAAA/8PDw/+xsbH/n5+f/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/n5+f/7Gxsf/Dw8P/AAAA/zo6Ov/Pz8//xMTE/7a2tv+5ubn/ubm5/7m5uf+5ubn/ubm5/7m5uf+5ubn/ubm5/7a2tv/ExMT/z8/P/zo6Ov9aWlr/2dnZ/9PT0//Jycn/ysrK/8rKyv/Kysr/ysrK/8rKyv/Kysr/ysrK/8rKyv/Jycn/09PT/9nZ2f9aWlr/U1NT/9/f3//a2tr/z8/P/9HR0f/R0dH/0dHR/9HR0f/R0dH/0dHR/9HR0f/R0dH/z8/P/9ra2v/f39//U1NT/1RUVP/m5ub/4+Pj/9jY2P/a2tr/2tra/9ra2v/a2tr/2tra/9ra2v/a2tr/2tra/9jY2P/j4+P/5ubm/1RUVP9UVFT/7u7u/+3t7f/i4uL/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/k5OT/5OTk/+Tk5P/i4uL/7e3t/+7u7v9UVFT/VFRU/+/v7//y8vL/5+fn/+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f/p6en/5+fn//Ly8v/v7+//VFRU/1RUVP/8/Pz//////////////////////////////////////////////////////////////////Pz8/1RUVP9WVlb/kJCQ/5WVlf+VlZX/lpaW/5aWlv+Wlpb/lpaW/5aWlv+Wlpb/lpaW/5aWlv+VlZX/lZWV/5CQkP9WVlb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%3D%22%3B%20%0A%7D%3B%0AtoggleImage%28%29%3B%0AgPrefService.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28s%2C%20toggleImage%29%29%3B%0A%0A%0A//%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20css%20%u0441%u0442%u0438%u043B%u044C%20%u0434%u043B%u044F%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20..........%0Afunction%20setStyleForPages%28%29%20%7B%0A%20%20%20var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20var%20css%20%3D%20help.replace%28/value/g%2C%20cbu.getPrefs%28l%29/100%20%29%3B%20%20%20%20%20%20%0A%20%20%20var%20uri%20%3D%20makeURI%28%22data%3Atext/css%2C%22%20+%20encodeURIComponent%28css%29%29%3B%20%0A%20%20%20%0A%20%20%20try%20%7B%20sss.unregisterSheet%28Services.previousUri%20%7C%7C%20uri%2C%200%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20Services.previousUri%20%3D%20uri%3B%0A%20%20%20%0A%20%20%20cbu.getPrefs%28s%29%20%26%26%20sss.loadAndRegisterSheet%28uri%2C%200%29%3B%0A%7D%3B%0Acbu.getPrefs%28s%29%20%26%26%20setStyleForPages%28%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..........%20%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%5Cn%u041A%u043E%u043B%u0451%u0441%u0438%u043A%u043E%u043C%20%u043C%u044B%u0448%u0438%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20%u043C%u043E%u0436%u043D%u043E%20%u043C%u0435%u043D%u044F%u0442%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%22%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%0A%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B@-moz-document%20url-prefix%28http%3A//%29%2C%20url-prefix%28https%3A//%29%2C%20url-prefix%28ftp%3A//%29%2C%20url-prefix%28file%3A//%29%2C%0Aurl-prefix%28chrome%3A//%29%2C%20url-prefix%28about%29%20%7B%0A%20%20%20browser%7B%20background%3A%20LightGray%20%21important%3B%20%7D%20%20%20%0A%20%20%20%0A%20%20%20/*%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043D%u0430%u0434%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%u0439%20%u0438%20%u0434%u0440%u0443%u0433%u0438%u043C%u0438%20%u044D%u043B%u0435%u043C%u0435%u043D%u0442%u0430%u043C%u0438%20%u043F%u0441%u0435%u0432%u0434%u043E%u044D%u043B%u0435%u043C%u0435%u043D%u0442%20%u0441%20%u0443%u0441%u0442%u0430%u043D%u043E%u0432%u043B%u0435%u043D%u043D%u043E%u0439%20%u043F%u0440%u043E%u0437%u0440%u0430%u0447%u043D%u043E%u0441%u0442%u044C%u044E%20*/%0A%20%20%20html%3Aafter%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20/*%20%u0432%u0435%u0431%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%20%u043D%u0435%u043A%u043E%u0442%u043E%u0440%u044B%u0435%20about%3A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%2C%20%u0438%u043D%u0441%u043F%u0435%u043A%u0442%u043E%u0440%20DOM%20%u0438%20%u0441%u0442%u0438%u043B%u0435%u0439%20*/%0A%20%20%20%23appbar-content%3Aafter%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20/*%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u0441%u0432%u0435%u0440%u0445%u0443%20%u043D%u0430%20youtube%20*/%0A%20%20%20%23txbTextNodeValue%3Aafter%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20/*%20%u0440%u0430%u0448%u0438%u0440%u0435%u043D%u0438%u0435%20DOM%20%u0438%u043D%u0441%u043F%u0435%u043A%u0442%u043E%u0440%20*/%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%5Bclass%3D%22theme-light%22%5D%20%23editor%3Aafter%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20/*%20%u0438%u043D%u0441%u043F%u0435%u043A%u0442%u043E%u0440%20DOM%20%u0438%20%u0441%u0442%u0438%u043B%u0435%u0439%20*/%20%0A%20%20%20%5Bclass%3D%22theme-light%22%5D%20%23profiles-list%3Aafter%2C%20%0A%20%20%20%5Bclass%3D%22theme-light%22%5D%20%23options-panel%3Aafter%2C%0A%20%20%20window%3Anot%28%5Bclass%3D%22theme-dark%22%5D%29%20%23editor%3Aafter%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%5Bclass%3D%22theme-light%22%5D%20%23style-editor-chrome%3Aafter%2C%0A%20%20%20%5Bclass%3D%22theme-light%22%5D%20%23network-inspector-view%3Aafter%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20.cbeditor-textbox%3Aafter%2C%20%23newtab-window%3Aafter%2C%20%20%20%20%20%20%20%20%20%20/*%20%u0440%u0435%u0434%u0430%u043A%u0442%u043E%u0440%20%u0421%u0412%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u043D%u043E%u0432%u0430%u044F%20%u0432%u043A%u043B%u0430%u0434%u043A%u0430%20*/%0A%20%20%20treecols%3Anot%28%5Bid%3D%22placeContentColumns%22%5D%29%3Aafter%2C%20%20%20%20%20%20%20%20%20/*%20%u0437%u0430%u043A%u043B%u0430%u0434%u043A%u0438%2C%20%u0438%u0441%u0442%u043E%u0440%u0438%u044F%2C%20%u0431%u0438%u0431%u043B%u0438%u043E%u0442%u0435%u043A%u0430%2C%20about%3Aconfig%20*/%0A%20%20%20%23devtools-webconsole%3Aafter%2C%20%23ConsoleBox%3Aafter%2C%20%20%20%20%20%20%20%20%20%20/*%20%u043A%u043E%u043D%u0441%u043E%u043B%u044C%20%u043E%u0448%u0438%u0431%u043E%u043A%2C%20%u0432%u0435%u0431%20%u043A%u043E%u043D%u0441%u043E%u043B%u044C%20%u043E%u0448%u0438%u0431%u043E%u043A%20*/%0A%20%20%20%5Btitle%3D%22%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0438%22%5D%5BhasBrowserHandlers%3D%22true%22%5D%3Aafter%2C%20%20%20/*%20%u0440%u0430%u0437%u043D%u044B%u0435%20about%3A%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20*/%0A%20%20%20%5Bid%3D%22permissions-page%22%5D%3Aafter%2C%20%5Bid%20%3D%22tabsList%22%5D%3Aafter%2C%0A%20%20%20%5Bid%3D%22contentAreaDownloadsView%22%5D%3Aafter%2C%20%5Bid%3D%22addons-page%22%5D%3Aafter%20%20%20%0A%20%20%20%7B%0A%20%20%20%20%20content%3A%20%22%22%20%21important%3B%0A%20%20%20%20%20position%3A%20fixed%20%21important%3B%0A%20%20%20%20%20top%3A%200%3B%20bottom%3A%200%3B%20left%3A%200%3B%20right%3A%200%3B%0A%20%20%20%20%20background%3A%20%23000%20%21important%3B%0A%20%20%20%20%20z-index%3A%2099999999%20%21important%3B%0A%20%20%20%20%20pointer-events%3A%20none%20%21important%3B%0A%20%20%20%20%20opacity%3A%20value%20%21important%3B%0A%20%20%20%7D%0A%20%20%20%0A%20%20%20/*%20%u043E%u0442%u043A%u043B%u044E%u0447%u0430%u0442%u044C%20%u0443%u043C%u0435%u043D%u044C%u0448%u0435%u043D%u0438%u0435%20%u044F%u0440%u043A%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0431%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u043A%u0438%20%u0434%u0432%u043E%u0439%u043D%u043E%u0433%u043E%20%u0437%u0430%u0442%u0435%u043C%u043D%u0435%u043D%u0438%u044F%20%20*/%0A%20%20%20%23comments-test-iframe%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20/*%20%u043A%u043E%u043C%u0435%u043D%u0442%u0430%u0440%u0438%u0438%20%u043D%u0430%20youtube%20*/%0A%20%20%20%0A%20%20%20/*%20%u043E%u0442%u043A%u043B%u044E%u0447%u0430%u0442%u044C%20%u0443%u043C%u0435%u043D%u044C%u0448%u0435%u043D%u0438%u0435%20%u044F%u0440%u043A%u043E%u0441%u0442%u0438%20%u0434%u043B%u044F%20%u0438%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0439%20%u043F%u0440%u0438%20%u043D%u0430%u0432%u0435%u0434%u0435%u043D%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20*/%0A%20%20%20svg%3Ahover%2C%0A%20%20%20DIV%5Bclass%3D%22img%22%5D%3Ahover%2C%0A%20%20%20DIV%5Bclass%3D%22rel%22%5D%3Ahover%2C%0A%20%20%20DIV%5Bclass%3D%22ytp-thumbnail%22%5D%3Ahover%2C%0A%20%20%20DIV%5Bid%3D%22watch7-sidebar-modules%22%5D%3Ahover%2C%0A%20%20%20DIV%5Bclass%3D%22right_block%20video_right%20video_today%22%5D%3Ahover%2C%0A%20%20%20DIV%5Bclass%3D%22photo%22%5D%3Ahover%2C%0A%20%20%20img%3Ahover%3Anot%28%5Bparentposition%5D%29%3Anot%28%5Bcurrentposition%5D%29%3Anot%28%5Bid%3D%22keyboard_picture%22%5D%29%3Anot%28%5Bid%3D%22mpiv-preview%22%5D%29%3Anot%28%5Bid%3D%22splashoverlay%22%5D%29%3Anot%28%5Bclass%3D%22prew%22%5D%29%3Anot%28%5Bclass%3D%22rel%22%5D%29%0A%20%20%20%7B%20%0A%20%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%20position%3A%20relative%20%21important%3B%20z-index%3A%20999999999%20%21important%3B%0A%20%20%20%7D%0A%20%20%20img%5Bparentposition%5D%3Ahover%20%7B%20%0A%20%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%20position%3A%20relative%20%21important%3B%20z-index%3A%20999999999%20%21important%3B%20left%3A%200px%3B%20bottom%3A%200px%3B%0A%20%20%20%7D%0A%20%20%20img%5Bcurrentposition%5D%3Ahover%20%7B%20%0A%20%20%20%20%20z-index%3A%20999999999%20%21important%3B%0A%20%20%20%7D%0A%0A%20%20%20/*%20%u043F%u043E%u043B%u043E%u0441%u0430%20%u043F%u043E%u0438%u0441%u043A%u0430%20%u043D%u0430%20youtube%20*/%0A%20%20%20%23yt-masthead-container%20%7B%20background%3A%20LightGray%20%21important%3B%20%7D%0A%0A%20%20%20/*%20%u0438%u0441%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0432%u0438%u0434%u0435%u043E%20*/%0A%20%20%20embed%5Bflashvars%5D%2C%20%20%0A%20%20%20div%5Bclass%3D%22html5-video-container%22%5D%2C%0A%20%20%20*%5Btype*%3D%22application/x-silverlight%22%5D%2C%0A%20%20%20*%5Btype*%3D%22application/x-shockwave-flash%22%5D%20%7B%20%0A%20%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%20z-index%3A%20999999999%20%21important%3B%0A%20%20%20%7D%0A%7D%0A%0A/*%20%u0438%u0441%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u043D%u0435%u043A%u043E%u0442%u043E%u0440%u044B%u0435%20%u044D%u043B%u0435%u043C%u0435%u043D%u0442%u044B%20%u043D%u0430%20%u043F%u0440%u043E%u0431%u043B%u0435%u043C%u043D%u044B%u0445%20%u0441%u0430%u0439%u0442%u0430%u0445%20%u0434%u043B%u044F%20%u0431%u043B%u043E%u043A%u0438%u0440%u043E%u0432%u043A%u0438%20%u0434%u0432%u043E%u0439%u043D%u043E%u0433%u043E%20%u0437%u0430%u0442%u0435%u043C%u043D%u0435%u043D%u0438%u044F%20*/%20%0A@-moz-document%20domain%28politobzor.net%29%20%7B%20%0A%20%20%20html%5Bxmlns%3D%22http%3A//www.w3.org/1999/xhtml%22%5D%3Aafter%20%7B%20content%3A%20none%20%21important%3B%20%7D%0A%20%20%20.item%20%7B%20background%3A%20LightGray%20%21important%3B%20%7D%0A%7D%0A@-moz-document%20url-prefix%28http%3A//translate.google.com/translate%29%20%7B%20%0A%20%20%20html%3Aafter%20%7B%20content%3A%20none%20%21important%3B%20%7D%0A%7D%0A@-moz-document%20url%28about%3Ahealthreport%29%2C%20url%28about%3Asessionrestore%29%2C%20url%28about%3Awelcomeback%29%20%7B%20%0A%20%20%20html%3Aafter%20%7B%20content%3A%20none%20%21important%3B%20%7D%0A%7D%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отредактировано Ultima2m (24-12-2017 08:31:28)

Отсутствует

 

№187724-12-2017 09:48:16

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: Обсуждение кнопок CB

Ultima2m пишет

Кнопка для переключения стиля из справки. Нужно чтобы при запуске ФФ стиль был включен.

Добавьте: setStyleForPages(); предпоследней строкой (перед "addDestructor(function(reason) { if (/update|delete/.test( reason ) ) setStyleForPages(reason) });")


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№187824-12-2017 10:48:27

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

difabor пишет

Добавьте: setStyleForPages();

Спасибо, работает.
И еще одну кнопку нашел
Findbar Persist. СКМ не работает. Хотелось бы переместить панель вправо, а текстовые кнопки заменить иконками.

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

Выделить код

Код:

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%3EFindbar%20Persist%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACaElEQVR42pWTbUhTURjH7znnnnu91yhMhSidI67T2OaI+tCalFBUBpUSYm/YNqPsbTEpK3phEEEg+WVR0Yf6ZAmDoPJT+bm+RBBjLsqK0FZIZG3a3O495/ZsrgiaZgcOXHjO//f8z/85FwlzLM2+5pQgoNRI7NnN2c6gOcRWSaKXCCEsGOi66+/Y9fi/ADan56yqlqhIQGlNW14Z6b8VnDeg1uG2yrLcLctSHCEhrRvMGjp38kXr9uaHswLAsoIQsggI1VJKnbJEM6IojuUAjPGF1VXLtG/J1MtE4nPMNPnYm+jTdB6gOdyrMEYnqChyjEkSvicIweMEky+Y4CRAp01TIIyxMoOxJZzxcs55GeNcNXTjGgK7miRLIZnSOAjGQTAJewp2GiGcgSZGwaQInWXTNBVm8Iqsbqy+HDr9PH+FrS17towlPm2mIh0mGCAYA0DIAECHMisACAAoY+Yi3TAcxw759QO+3Vd/Z9C29+DO1yPvnFQkUVEkX0E8DS5y3c1feUEWatbgdn9He+nxLm/vX1NoafPt/zD6UZYk8S1G6Ac4yQF4oYyzWWPpjm3NtgtnAr1Fx2hzNW5QS0pWyjKNzWSRd5EHwN1xRjc07772qsBhX3FAXYPHqyhKJTh4BRNJgThbyCB3DZLJMkvTOveKvisXQ8UBLk+PqigMMhjlpoBBUzpzyJzABCVhlIvr62wN/bfD54sC6l2NffD6vufaOe12KXC0873JOQrfuGOJxuK5NzJVWVGuPRkc6C4KqHWsDdfUVKOe4JHhTRvXX/+zdi/yoDVy/1FTMjW5YGhwoPOfP9N810+kr+NMRAKE6QAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B%22use%20strict%22%3B%0A%0Aconst%20css%20%3D%20encodeURIComponent%28this.getAttribute%28%22Help%22%29%29%2C%0A%20%20%20%20%20%20fp%20%3D%20Cc%5B%22@mozilla.org/filepicker%3B1%22%5D.createInstance%28Ci.nsIFilePicker%29%2C%0A%20%20%20%20%20%20ios%20%3D%20Cc%5B%22@mozilla.org/network/io-service%3B1%22%5D.getService%28Ci.nsIIOService%29%2C%0A%20%20%20%20%20%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%20%20%20%20%20%20%0Apref.root%20%3D%20%22extensions.custombuttons.FindbarPersist.%22%3B%0Apref.defaults%20%3D%20%7B%0A//***%20Editable%20text%20in%20quotes%20below%0A%20%20textAdd%3A%20%22Add%22%2C%0A%20%20textAlert%3A%20%22Alert%22%2C%0A%20%20textAlert1%3A%20%22%20Protocol%20not%20listed.%22%2C%0A%20%20textAlert2%3A%20%22Add%20to%20list%20by%20clicking%20Add%20or%20click%20Settings%20to%20add/delete%20manually.%22%2C%0A%20%20textAlert3%3A%20%22Current%20List%3A%20%22%2C%0A%20%20textAlertDialog%3A%20%22Protocol%20Unlisted%20Alert%22%2C%0A%20%20textCancel%3A%20%22Cancel%22%2C%0A%20%20textClose%3A%20%22Close%22%2C%0A%20%20textEditable%3A%20%22Editable%20List%20Below%20%28No%20spaces%20and%20comma%20separate%29%22%2C%0A%20%20textHelp%3A%20%22Help%20Tab%20CSS%22%2C%0A%20%20textImages%3A%20%22Dialog%20Images%22%2C%0A%20%20textList%3A%20%22Protocol%20List%22%2C%0A%20%20textName%3A%20%22Button%20Name%22%2C%0A%20%20textOff%3A%20%22Off%22%2C%0A%20%20textOn%3A%20%22On%22%2C%0A%20%20textSettings%3A%20%22Settings%22%2C%0A%20%20textSettingsDialog%3A%20%22Findbar%20Persist%20Settings%22%2C%0A%20%20textStates%3A%20%22Button%20States%22%2C%0A%20%20textTooltip%3A%20%22Tooltip%20Text%22%2C%0A//***%20End%20of%20editable%20text%0A%20%20buttonName%3A%20%22Findbar%20Persist%22%2C%0A%20%20cssEnabled%3A%20true%2C%0A%20%20enableFindbar%3A%20false%2C%0A%20%20iconOff%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACaElEQVR42pWTbUhTURjH7znnnnu91yhMhSidI67T2OaI+tCalFBUBpUSYm/YNqPsbTEpK3phEE%5C%0AEg+WVR0Yf6ZAmDoPJT+bm+RBBjLsqK0FZIZG3a3O495/ZsrgiaZgcOXHjO//f8z/85FwlzLM2+5pQgoNRI7NnN2c6gOcRWSaKXCCEsGOi66+/Y9fi/ADan56yqlqhIQGlNW14Z6b8VnDeg1uG2yrLcLctSHC%5C%0AEhrRvMGjp38kXr9uaHswLAsoIQsggI1VJKnbJEM6IojuUAjPGF1VXLtG/J1MtE4nPMNPnYm+jTdB6gOdyrMEYnqChyjEkSvicIweMEky+Y4CRAp01TIIyxMoOxJZzxcs55GeNcNXTjGgK7miRLIZnSOAjGQT%5C%0AAJewp2GiGcgSZGwaQInWXTNBVm8Iqsbqy+HDr9PH+FrS17towlPm2mIh0mGCAYA0DIAECHMisACAAoY+Yi3TAcxw759QO+3Vd/Z9C29+DO1yPvnFQkUVEkX0E8DS5y3c1feUEWatbgdn9He+nxLm/vX1Noaf%5C%0APt/zD6UZYk8S1G6Ac4yQF4oYyzWWPpjm3NtgtnAr1Fx2hzNW5QS0pWyjKNzWSRd5EHwN1xRjc07772qsBhX3FAXYPHqyhKJTh4BRNJgThbyCB3DZLJMkvTOveKvisXQ8UBLk+PqigMMhjlpoBBUzpzyJzABC%5C%0AVhlIvr62wN/bfD54sC6l2NffD6vufaOe12KXC0873JOQrfuGOJxuK5NzJVWVGuPRkc6C4KqHWsDdfUVKOe4JHhTRvXX/+zdi/yoDVy/1FTMjW5YGhwoPOfP9N810+kr+NMRAKE6QAAAABJRU5ErkJggg%3D%3D%22%2C%0A%20%20iconOn%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACiUlEQVR42pWTa0iTURjHn/fddHu3F6UWKKLGdF4YrYYmSo4uqw+GEBmB4jKFhIgyCyNZ0ZdSBlI%5C%0AgK2LQihoiShO6fOnyKWLQoJsm6YarJdN08zJ3v7zveTvvpAjayg48H845z//3PP/zcAj4yxo2aW8nE+G19rN2faYcItOF9d4hpUIemGASawQr0jXV7r3w5L8ALx4eHtm5w9uM2BWwvy+yNepeajYMeDTUolS%5C%0AW+SfkhV4BoBWYciLEUPrWql2nRjMCxu430QJBdgUQRHVxQbittHhJk0MvA3BBWF1lwemWT7nclCkRD9gQYh0nesZDKcADY61WJqPM8q0COUURIBGzIKXCQImDICDWMCAKLMtBOJIFgVA2hMIIgsEkOJyEezU%5C%0Ag6CDM17epK0o5e5WayZZQfEMsFiVSQuBieJ/EgdaDS0IEHy/6SHjzjmZKthu6UxYsxjqdqsJtqSxLkGIxn8gLmPXgGEAIQSwOuAOA714SJj+LEJ3XNXCkdUD/6w2GbmlOq8o/GcsVcVIs+glhsZhLiYNYPO8%5C%0Al4OOkCAnpDuPxk6bzf0zBeremX1M9fSlvSxQ4XJnBbhjcRBw7CgQBHC4hzPoaLZ3dj9vTjtFkULQ1aJcsxQX+lFdeyGJIEkPCEYDpmSzwJ/jqd7rTAswDZX0NWs9lWhoFPx4AD8EOUkl8N555IXxZ2D/W1fv%5C%0A8aFrA8M38kfoaX3MogmB2jsSvLUQkCbB5E0PSEgShCAEzsyrbuSvjmrSAocHcD0WFEbXrGwkLy5W2fQf1IwTOePXM0JIrna6npSzMLeZ/7e33lKQFXOuRvRZJZKK6PRdHdx/ovPH73VPr1WPjb61nYrFYTt+%5C%0AgU/nPz7TR9QMbEh0SkoyVAwAAAABJRU5ErkJggg%3D%3D%22%2C%0A%20%20imageAdd%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACF0lEQVR42o1Tz2sTQRR+s7tJG2OwSctaGxWxWJCkFgXrPQUP4sGTIKIUvErBo2fpqYLQqwjeB%5C%0AA8KCr210pN/QDcq9VKxF6P5UbSbNDPznm8m3W2SpuKD3dlZ5vve9973RkBfXPt4uoQtXNZNnCIFHmoCJFIiAZvkwsLGjcpa93nRvZldzweqgQVCAkIA5BWl+ebVEPE/J03lz7erxUMEs2v5mvqN2X+BUfGLv%5C%0A2EY6l/n67mY4H8yR2Cz14pBx6G89aBRFKZmWdGrg8DB3YpVN/k0B84wADkdsCXlVWRxTlz9MLGf/XDmT/d/WoL8wwwkJ1zOKmKwVcT9EFdWxtvYhMQg2V/mOwT+nTQkz3vgjokYjIrPeCTF5XfjqPdI9Ms+K%5C%0Ak49zgAkuB3C2IskZt6eRN0k0S/7qMjdOwaOz71PckIgEtNv/DaGlIhky18aWlsSZBWh8mrXgk5cTwEPEoBruw/uqAAa4oaaEi699wNZw0JkFbUIeB5AhQTfn+xYgpGbKXBN1jQ/LJ1cBhvFbKWYXvFL7R+42%5C%0Au+zWb89anQIbqXAO+uYrttGa9k5Q8ZGc+Di69FAGRW612dV07C3re0+lh2B01gOl2QxHuULL7M1ucOcXT4jlyP/cFnyQLYFD2E9fCYPRjmKcy9GAlWlQuSzNl63sVf2fuaBt9HEmeeZkg5pWe3SFF9pz2RXf%5C%0AJ3RhU0UuBAuyp7r/Be32NAthDcPUAAAAABJRU5ErkJggg%3D%3D%22%2C%0A%20%20imageAlert%3A%20%22chrome%3A//global/skin/icons/question-64.png%22%2C%0A%20%20imageCancel%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACJklEQVR42p2TQYjTQBSGX5qWNJrZtGJ7sGtsmwXtgmVZFxT04kVREM+CeBH02JO3vehB8e%5C%0AhRwYt48rigXkXQ7VIPQmkV3WhRl26bapImOpHttr7JTkq27nrwwTCZf97/zbzJjEAIgWhUdT2N3RVsl7Ed5XId22Nsj04YhhXNF6IANFewu+5TWto/OwtJSQIYjcAfDKDXbLLxO5y/j5B7fwHQ/LDvOJcOzs%5C%0A/LA9ME2TAgRikIPHGgKPBL06DTbntThDxByNUxgK1s2/YdrVyW49UqLHW7cCGd3lqBA5YsCy4yTRTho6J4+1KpRbYToTE3xzJfyfl8KbG8DM86HbiG234gCHCOQ56jOdTOo7aJ/U9NY+WcZICK1e/fzWQy0o%5C%0AuVlSAxDGZgMamdQchqPO4dyOUWGaC2oaoLcqMBQzysl7a9zRANZj6dSgXf3zFnqlB4wwD+iBBpWK+Pa369A4SZT3EzCx/nk4XC7wCAY8lvtcYHVtsFcJwDWB4dDoEUiwGgZrnuQqLXCybfOs4/S2BxDEEmAr%5C%0ARiMSih0lpfv6lSqjYmzDsdYpXvoi2KPw5r2q3xb/xiGKVkLAYfOISZj6hqkPw+opVQ83D1Q7q+9RvDi/TNNG+MXDcnYtInNOjcHNa8itoMahsI2lSUbj6bvR1cpOhV/mqaZz3Hye3FnUTNYbholgnpFLLZp9%5C%0Auu8uRjaq6tJfqUzshcp2jcI8ufy9PT/q6P6X+f8x86rQqGIF3bbQAAAABJRU5ErkJggg%3D%3D%22%2C%0A%20%20imageClose%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACAklEQVR42qWT309SYRzGP+fE8aCOwdBwFZlASQQjwRajcdWvtf6Ati76B10XXTWW1RWD0RK%5C%0AU4RziD5boxCmTocKRdug9JzFoNWt+r973nO/7vM/3ed5Hoq8OoSuBZgcrf6gGtLugOkDqfTtfLEMpA9MK6I+hcBMi/Ye3IP8Zwh2Q47AaBH9Xkq6YAAWo1Gy2W9r4OPLQEEq1ivv4OB+AqPF/BXLV0dFIx+1%5C%0AGPz1F3d/H1Wxu3YdJyaD9VjRd83h4OTODbreTXFjg+/o6D05OzNu/joxg8fl4MTuL3GjwfnGR7c1N3hgjGHO9A+Wq3y8/j8eRJyZo1+ss53Kk8nkTIBGJEIxGsY6Noe/u8iGToVYq6a+hY45QERKs2Wz3tKk%5C%0ApnsViKKLxcG+PqmBhlNvrxSEYdjSN+WQStVzG12yWPHBXEkIMS91uaxWyK6r68HoohDccxul0CvzOTwUtFuqtFhsCcCedJnB09GUaYucuCBAECNtiOSfLPE0kCAk9EEzMEqIVl5b4mErxSte58buNFwIcHFA%5C%0AUepgAom8A4J9GUBTqQtiNQoGdYpGApg2OcKGIwkKHy0VHMJnPZlErlV8i/peNgpVeqw3aeOmHdOmn3FOzCOU03DbC9ERoMimC0x+mb+KeTxA0wvQI1kJwp+eCJFzoGpvWWZytf4lz+yzOw332/wA3xhvxRw2%5C%0ABzwAAAABJRU5ErkJggg%3D%3D%22%2C%0A%20%20imageSettings%3A%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAC0UlEQVR42mOcOnnyThZmZuf0rCwOBgaGPwzYAVtsTMxqby8fv+8/vzN8/f61LScrpxok%5C%0AwcjKwtJ+4+bVijUrVr8or66RxKa7pqbmWFZWluXTp08ZsrOyNxka6IXOnD3nF9gAMMHIWFZWVNTp7e68ws7NKxJZs4yMjOOuXbv2cXBwMMyYMYNBTkEObHtdXd2pvXv3LmSEKeRkZZVKTIh76u/nM9XdNzAH%5C%0AJm5oaJiwdOnS+T9//mS4f/8hw+Onzxmeg1ySnc7g5eWVxohsGzcbK3tcXMyPAG+fFvfA4FqwwVxc1rt37Tpy/PhxBmdnZ4a/f/8ycHNzM9y6detHQECAOSO6f0GGxMRE/Wg3MCgQyiucmGkX8L9hfi/Dsk2b%5C%0AwJpdXV0ZXr16xVBRUTHx7NmzBRgGwAy5HhH14/fRwwzLPnxkyDhwlME/tWDz0+ePHqioSEqePHly15cvX2bDAxEbWCkh+d8pO41hUv9khne//55YIBL88Ov9eRHo6rAawCIX8l/n+SaGMjFBBre8fIaZnb2g%5C%0ABLKx/t3bAIIGsMoH/xd0y2N4deY6g5up0Q+3NZ4csenJDF9Wr2Poe/OGQYKDmbn2xdt/WA0AaRZyy2F4deEOg5C1KcPHVTV/HN7v/WvPxcWev2Auw5uKGoamx48YFnz6xIhhAKtc8H8BrxKGN6evMAhZGTN8%5C%0AXNfw68/TTewgORdOzh8OQENyFy1leN/UyNB84xrD3I8fGeEGsAA1C/qWMbw+ep5B2N6c4eOa+j9AzazIrnPj4vofKiLCEDZ9OsP7xmaG6bdvMnS+f8/IyCIT8Js/qJ7l/bHTDIKWQGevb/j758lGFmyB6w40%5C%0AJF5cnMF70hSGt5UVDJn37v5hZGQXTWCRsJ/PF9LI8HFF+f8/T7cwMeABzpycH6dLSvIVvn7N8PznTzFYGKSxSLpP/PN8JycDEcCBg+PHgR8/7IDMUwAJ9h3/3XPKfAAAAABJRU5ErkJggg%3D%3D%22%2C%0A%20%20protocolList%3A%20%22http%3A%2Chttps%3A%2Cfile%3A%2Cftp%3A%2Cchrome%3A%22%2C%0A%20%20toolTip%3A%20%22Middle-click%20or%20Ctrl%20+%20Left-click%20%20%3E%20%20Settings%22%0A%7D%0A%0Afor%20%28let%20key%20in%20pref.defaults%29%20%7B%0A%20%20if%20%28pref.defaults.hasOwnProperty%28key%29%29%20%7B%0A%20%20%20%20let%20val%20%3D%20pref.defaults%5Bkey%5D%3B%0A%20%20%20%20switch%20%28typeof%20val%29%20%7B%0A%20%20%20%20%20%20case%20%22boolean%22%3A%0A%20%20%20%20%20%20%20%20Services.prefs.getDefaultBranch%28pref.root%29.setBoolPref%28key%2C%20val%29%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22number%22%3A%0A%20%20%20%20%20%20%20%20Services.prefs.getDefaultBranch%28pref.root%29.setIntPref%28key%2C%20val%29%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20case%20%22string%22%3A%0A%20%20%20%20%20%20%20%20let%20str%20%3D%20Cc%5B%22@mozilla.org/supports-string%3B1%22%5D.createInstance%28Ci.nsISupportsString%29%3B%0A%20%20%20%20%20%20%20%20str.data%20%3D%20val%3B%0A%20%20%20%20%20%20%20%20Services.prefs.getDefaultBranch%28pref.root%29.setComplexValue%28%28key%29%2C%20Ci.nsISupportsString%2C%20str%29%3B%0A%20%20%20%20%20%20%20%20break%3B%0A%7D%20%7D%20%7D%0A%0Afunction%20pref%28key%29%20%7B%0A%20%20let%20%7Bbranch%2C%20defaults%7D%20%3D%20pref%3B%0A%20%20if%20%28branch%20%3D%3D%20null%29%20branch%20%3D%20Services.prefs.getBranch%28pref.root%29%3B%0A%20%20switch%20%28typeof%20defaults%5Bkey%5D%29%20%7B%0A%20%20%20%20case%20%22boolean%22%3A%20%0A%20%20%20%20%20%20return%20branch.getBoolPref%28key%29%3B%0A%20%20%20%20case%20%22number%22%3A%20%0A%20%20%20%20%20%20return%20branch.getIntPref%28key%29%3B%0A%20%20%20%20case%20%22string%22%3A%20%0A%20%20%20%20%20%20//return%20branch.getCharPref%28key%29%3B%0A%20%20%20%20%20%20return%20branch.getComplexValue%28key%2C%20Ci.nsISupportsString%29.data%3B%0A%20%20%7D%0A%20%20return%20null%3B%0A%7D%0A%0Apref.observe%20%3D%20function%28prefs%2C%20callback%29%20%7B%0A%20%20let%20%7Broot%7D%20%3D%20pref%3B%0A%20%20function%20observe%28subject%2C%20topic%2C%20data%29%20%7B%0A%20%20%20%20if%20%28topic%20%21%3D%3D%20%22nsPref%3Achanged%22%29%20return%3B%0A%20%20%20%20let%20pref%20%3D%20data.slice%28root.length%29%3B%0A%20%20%20%20if%20%28prefs.indexOf%28pref%29%20%3D%3D%3D%20-1%29%20return%3B%0A%20%20%20%20callback%28pref%29%3B%0A%20%20%7D%0A%20%20Services.prefs.addObserver%28root%2C%20observe%2C%20false%29%3B%0A%20%20unload%20%3D%3E%20Services.prefs.removeObserver%28root%2C%20observe%29%3B%0A%7D%0A%0Afunction%20getSS%28filepath%29%20%7B%20%0A%20%20return%20ios.newURI%28%22data%3Atext/css%2C%22%20+%20filepath%2C%20null%2C%20null%29%3B%0A%7D%0A%0Afunction%20loadSheet%28filepath%29%20%7B%20%0A%20%20sss.loadAndRegisterSheet%28getSS%28filepath%29%2C%20sss.USER_SHEET%29%3B%0A%7D%0A%0Afunction%20unloadSheet%28filepath%29%20%7B%0A%20%20let%20uri%20%3D%20getSS%28filepath%29%3B%0A%20%20if%20%28sss.sheetRegistered%28uri%2C%20sss.USER_SHEET%29%29%20sss.unregisterSheet%28uri%2C%20sss.USER_SHEET%29%3B%0A%7D%0A%0Afunction%20loadAndObserve%28prefName%2C%20filepath%29%20%7B%0A%20%20if%20%28pref%28prefName%29%29%20loadSheet%28filepath%29%3B%0A%20%20pref.observe%28%5BprefName%5D%2C%20function%28%29%20%7Bpref%28prefName%29%20%3F%20loadSheet%28filepath%29%20%3A%20unloadSheet%28filepath%29%3B%7D%29%3B%0A%20%20unload%20%3D%3E%20unloadSheet%28filepath%29%3B%0A%7D%0A%0Afunction%20unload%28callback%2C%20container%29%20%7B%0A%20%20let%20unloaders%20%3D%20unload.unloaders%3B%0A%20%20if%20%28unloaders%20%3D%3D%20null%29%20unloaders%20%3D%20unload.unloaders%20%3D%20%5B%5D%3B%0A%20%20if%20%28callback%20%3D%3D%20null%29%20%7B%0A%20%20%20%20unloaders.slice%28%29.forEach%28unloader%20%3D%3E%20unloader%28%29%29%3B%0A%20%20%20%20unloaders.length%20%3D%200%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20if%20%28container%20%21%3D%20null%29%20%7B%0A%20%20%20%20container.addEventListener%28%22unload%22%2C%20removeUnloader%2C%20false%29%3B%0A%20%20%20%20let%20origCallback%20%3D%20callback%3B%0A%20%20%20%20callback%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20container.removeEventListener%28%22unload%22%2C%20removeUnloader%2C%20false%29%3B%0A%20%20%20%20%20%20origCallback%28%29%3B%0A%20%20%7D%20%7D%0A%20%20function%20unloader%28%29%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20callback%28%29%3B%0A%20%20%20%20%7D%20catch%28ex%29%20%7B%7D%0A%20%20%7D%0A%20%20unloaders.push%28unloader%29%3B%0A%20%20function%20removeUnloader%28%29%20%7B%0A%20%20%20%20let%20index%20%3D%20unloaders.indexOf%28unloader%29%3B%0A%20%20%20%20if%20%28index%20%21%3D%3D%20-1%29%20unloaders.splice%28index%2C%201%29%3B%0A%20%20%7D%0A%20%20return%20removeUnloader%3B%0A%7D%0A%0Afunction%20gCV%28aKey%2C%20aBranch%29%20%7B%0A%20%20return%20Services.prefs.getComplexValue%28%28%28%21aBranch%29%20%3F%20pref.root%20+%20aKey%20%3A%20aKey%29%2C%20Ci.nsISupportsString%29.data%3B%0A%7D%0A%0Afunction%20sCV%28aKey%2C%20aVal%2C%20aBranch%29%20%7B%0A%20%20var%20str%20%3D%20Cc%5B%22@mozilla.org/supports-string%3B1%22%5D.createInstance%28Ci.nsISupportsString%29%3B%0A%20%20str.data%20%3D%20aVal%3B%0A%20%20Services.prefs.setComplexValue%28%28%28%21aBranch%29%20%3F%20pref.root%20+%20aKey%20%3A%20aKey%29%2C%20Ci.nsISupportsString%2C%20str%29%3B%0A%7D%0A%0Afunction%20getProtocol%28%29%20%7B%0A%20%20var%20uri%20%3D%20gBrowser.contentDocument.documentURIObject.spec.split%28%22//%22%29%5B0%5D%2C%20list%20%3D%20pref%28%22protocolList%22%29.split%28%22%2C%22%29%3B%0A%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20list.length%3B%20i++%29%20if%20%28list%5Bi%5D%20%3D%3D%3D%20uri%29%20return%20list%5Bi%5D%3B%0A%7D%0A%0Afunction%20toggleFindbar%28%29%20%7B%0A%20%20removeEventListener%28%22mouseover%22%2C%20toggleFindbar%2C%20false%29%3B%0A%20%20if%20%28pref%28%22enableFindbar%22%29%20%26%26%20getProtocol%28%29%29%20%7B%0A%20%20%20%20gFindBar.hidden%20%3D%20false%3B%0A%20%20%20%20this.image%20%3D%20pref%28%22iconOn%22%29%3B%0A%20%20%7D%20else%20%7B%0A%20%20%20%20gFindBar.hidden%20%3D%20true%3B%0A%20%20%20%20this.image%20%3D%20pref%28%22iconOff%22%29%3B%0A%7D%20%7D%0A%0Avar%20gRoot%20%3D%20Services.prefs.getBranch%28pref.root%29%2C%0A%20%20%20%20css2%20%3D%20%27%5C%0A%20%20%20%20%20%20%23settingsDialog%20%23textEditable%20%7B%5C%0A%20%20%20%20%20%20%20%20margin-left%3A%2081px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23settingsDialog%20%23hbox1%20%7B%5C%0A%20%20%20%20%20%20%20%20height%3A%2047px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23settingsDialog%20%23hbox5%20%7B%5C%0A%20%20%20%20%20%20%20%20margin-top%3A%2017px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23settingsDialog%20.button%20%7B%5C%0A%20%20%20%20%20%20%20%20min-width%3A%2032px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23settingsDialog%20.icon%20.button-icon%20%7B%5C%0A%20%20%20%20%20%20%20%20max-height%3A%2032px%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20max-width%3A%2032px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23settingsDialog%20.image%20.button-icon%20%7B%5C%0A%20%20%20%20%20%20%20%20height%3A%2016px%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20width%3A%2016px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23settingsDialog%20.button-text%20%7B%5C%0A%20%20%20%20%20%20%20%20margin%3A%200%202px%200%206px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23alertDialog%20%7B%5C%0A%20%20%20%20%20%20%20%20padding%3A%202px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23alertDialog%20%23image1%20%7B%5C%0A%20%20%20%20%20%20%20%20max-height%3A%2064px%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20max-width%3A%2064px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23alertDialog%20.button%20%7B%5C%0A%20%20%20%20%20%20%20%20min-width%3A%2032px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23alertDialog%20%23protocol%20%7B%5C%0A%20%20%20%20%20%20%20%20border-bottom%3A%201px%20solid%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20font-weight%3A%20bold%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23alertDialog%20.image%20.button-icon%20%7B%5C%0A%20%20%20%20%20%20%20%20height%3A%2016px%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20margin-right%3A%204px%20%21important%3B%5C%0A%20%20%20%20%20%20%20%20width%3A%2016px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%20%20%23alertDialog%20.button-text%20%7B%5C%0A%20%20%20%20%20%20%20%20margin%3A%200%202px%200%202px%20%21important%3B%5C%0A%20%20%20%20%20%20%7D%5C%0A%20%20%20%20%27.replace%28/%23/g%2C%20%22%2523%22%29%3B%0A%0Athis.onclick%20%3D%20function%28e%29%20%7B%0A%20%20if%20%28e.ctrlKey%20%26%26%20e.button%20%3D%3D%3D%200%20%7C%7C%20e.button%20%3D%3D%3D%201%29%20this.settingsDialog%28%29%3B%0A%20%20if%20%28%21e.ctrlKey%20%26%26%20e.button%20%3D%3D%3D%200%20%26%26%20%21getProtocol%28%29%29%20this.alertDialog%28%29%3B%0A%20%20if%20%28%21e.ctrlKey%20%26%26%20e.button%20%3D%3D%3D%200%20%26%26%20getProtocol%28%29%29%20%7B%0A%20%20%20%20var%20bool%20%3D%20pref%28%22enableFindbar%22%29%20%21%3D%3D%20true%20%3F%20true%20%3A%20false%3B%0A%20%20%20%20gRoot.setBoolPref%28%22enableFindbar%22%2C%20bool%29%3B%0A%7D%20%7D%0A%0Athis.settingsDialog%20%3D%20function%28%29%20%7B%0A%20%20var%20data%20%3D%20%27%3C%3Fxml%20version%3D%221.0%22%3F%3E%3C%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%20type%3D%22text/css%22%3F%3E%5C%0A%20%20%20%20%3Cwindow%20xmlns%3D%22%27%20+%20xulns%20+%20%27%22%20id%3D%22settingsDialog%22%20windowtype%3D%22settings%3Adialog%22%20minheight%3D%22202%22%20minwidth%3D%22484%22%20%5C%0A%20%20%20%20%20%20title%3D%22%27%20+%20pref%28%22textSettingsDialog%22%29%20+%20%27%22%20persist%3D%22screenX%20screenY%20width%20height%22%3E%5C%0A%20%20%20%20%20%20%3Chbox%20id%3D%22hbox1%22%20class%3D%22hbox%22%20align%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textName%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textName%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Ctextbox%20id%3D%22buttonName%22%20class%3D%22textbox%22%20value%3D%22%27%20+%20pref%28%22buttonName%22%29%20+%20%27%22%20flex%3D%221%22%20oninput%3D%22self.onTextbox%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textStates%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textStates%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22iconOn%22%20class%3D%22button%20icon%22%20label%3D%22%27%20+%20pref%28%22textOn%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22iconOn%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22iconOff%22%20class%3D%22button%20icon%22%20label%3D%22%27%20+%20pref%28%22textOff%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22iconOff%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%20%20%3Chbox%20id%3D%22hbox2%22%20class%3D%22hbox%22%20align%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textTooltip%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textTooltip%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Ctextbox%20id%3D%22toolTip%22%20class%3D%22textbox%22%20value%3D%22%27%20+%20pref%28%22toolTip%22%29%20+%20%27%22%20flex%3D%221%22%20oninput%3D%22self.onTextbox%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%20%20%3Chbox%20id%3D%22hbox3%22%20class%3D%22hbox%22%20align%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textImages%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textImages%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22imageAlert%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textAlert%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageAlert%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22imageAdd%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textAdd%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageAdd%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22imageSettings%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textSettings%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageSettings%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22imageCancel%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textCancel%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageCancel%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22imageClose%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textClose%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageClose%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%20%20%3Clabel%20id%3D%22textEditable%22%20value%3D%22%27%20+%20pref%28%22textEditable%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%3Chbox%20id%3D%22hbox4%22%20class%3D%22hbox%22%20align%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textList%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textList%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Ctextbox%20id%3D%22protocolList%22%20class%3D%22textbox%22%20value%3D%22%27%20+%20pref%28%22protocolList%22%29%20+%20%27%22%20flex%3D%221%22%20oninput%3D%22self.onTextbox%28this%29%22%20onblur%3D%22self.onBlur%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%20%20%3Chbox%20id%3D%22hbox5%22%20class%3D%22hbox%22%20align%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%3Ccheckbox%20id%3D%22cssEnabled%22%20label%3D%22%27%20+%20pref%28%22textHelp%22%29%20+%20%27%22%20checked%3D%22%27%20+%20pref%28%22cssEnabled%22%29%20+%20%27%22%20oncommand%3D%22self.onCheckbox%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cspacer%20id%3D%22spacer1%22%20flex%3D%221%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22btnClose%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textClose%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageClose%22%29%20+%20%27%22%20oncommand%3D%22close%28%29%22/%3E%5C%0A%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%3C/window%3E%27%3B%0A%20%20data%20%3D%20data.replace%28/self/g%2C%20%22opener.document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29%22%29%3B%0A%20%20var%20url%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%3Btext/plain%2C%22%20+%20encodeURIComponent%28data%29%3B%0A%20%20window.openDialog%28url%2C%20%22%22%2C%20%22chrome%2Ccenterscreen%2Cdialog%2Cresizable%2CalwaysRaised%22%29%3B%0A%7D%0A%0Athis.alertDialog%20%3D%20function%28%29%20%7B%0A%20%20var%20uri%20%3D%20gBrowser.contentDocument.documentURIObject.spec.split%28%22//%22%29%5B0%5D%3B%0A%20%20var%20data%20%3D%20%27%3C%3Fxml%20version%3D%221.0%22%3F%3E%3C%3Fxml-stylesheet%20href%3D%22chrome%3A//global/skin/%22%20type%3D%22text/css%22%3F%3E%5C%0A%20%20%20%20%3Cwindow%20xmlns%3D%22%27%20+%20xulns%20+%20%27%22%20id%3D%22alertDialog%22%20windowtype%3D%22alert%3Adialog%22%20onblur%3D%22close%28%29%22%20%5C%0A%20%20%20%20%20%20title%3D%22%27%20+%20pref%28%22textAlertDialog%22%29%20+%20%27%22%20persist%3D%22screenX%20screenY%20width%20height%22%3E%5C%0A%20%20%20%20%20%20%3Chbox%20id%3D%22hbox1%22%20class%3D%22hbox%22%3E%5C%0A%20%20%20%20%20%20%20%20%3Cvbox%20id%3D%22vbox1%22%20class%3D%22vbox%22%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3Cimage%20id%3D%22image1%22%20src%3D%22%27%20+%20pref%28%22imageAlert%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%3C/vbox%3E%5C%0A%20%20%20%20%20%20%20%20%3Cvbox%20id%3D%22vbox2%22%20class%3D%22vbox%22%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3Chbox%20id%3D%22hbox2%22%20class%3D%22hbox%22%20align%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22protocol%22%20class%3D%22label%22%20value%3D%22%27%20+%20uri%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textAlert%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textAlert1%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textAlert2%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textAlert2%22%29%20+%20%27%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3Clabel%20id%3D%22textAlert3%22%20class%3D%22label%22%20value%3D%22%27%20+%20pref%28%22textAlert3%22%29%20+%20%27%26quot%3B%27%20+%20pref%28%22protocolList%22%29%20+%20%27%26quot%3B%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3Chbox%20id%3D%22hbox3%22%20class%3D%22hbox%22%20align%3D%22center%22%20pack%3D%22center%22%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22btnAdd%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textAdd%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageAdd%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22btnSettings%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textSettings%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageSettings%22%29%20+%20%27%22%20oncommand%3D%22self.onButton%28this%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20id%3D%22btnCancel%22%20class%3D%22button%20image%22%20label%3D%22%27%20+%20pref%28%22textCancel%22%29%20+%20%27%22%20image%3D%22%27%20+%20pref%28%22imageCancel%22%29%20+%20%27%22%20oncommand%3D%22close%28%29%22/%3E%5C%0A%20%20%20%20%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%20%20%20%20%3C/vbox%3E%5C%0A%20%20%20%20%20%20%3C/hbox%3E%5C%0A%20%20%20%20%3C/window%3E%27%3B%0A%20%20data%20%3D%20data.replace%28/self/g%2C%20%22opener.document.getElementById%28%27%22%20+%20self.id%20+%20%22%27%29%22%29%3B%0A%20%20var%20url%20%3D%20%22data%3Aapplication/vnd.mozilla.xul+xml%3Btext/plain%2C%22%20+%20encodeURIComponent%28data%29%3B%0A%20%20window.openDialog%28url%2C%20%22%22%2C%20%22chrome%2Ccenterscreen%2Cdialog%2Cresizable%22%29%3B%0A%7D%0A%0Athis.onTextbox%20%3D%20function%28e%29%20%7B%0A%20%20//gRoot.setCharPref%28e.id%2C%20e.value%29%3B%0A%20%20sCV%28e.id%2C%20e.value%29%3B%0A%20%20if%20%28e.id%20%3D%3D%3D%20%22buttonName%22%29%20this.label%20%3D%20pref%28e.id%29%3B%0A%20%20if%20%28e.id%20%3D%3D%3D%20%22toolTip%22%29%20this.tooltipText%20%3D%20pref%28e.id%29%0A%20%20this.label%20%3D%20pref%28%22buttonName%22%29%3B%0A%20%20this.tooltipText%20%3D%20this.label%20+%20%22%5Cn%5Cu2022%20%22%20+%20pref%28%22toolTip%22%29%3B%0A%7D%0A%20%20%0A%0Athis.onButton%20%3D%20function%28e%29%20%7B%0A%20%20addEventListener%28%22mouseover%22%2C%20toggleFindbar%2C%20false%29%3B%0A%20%20if%20%28e.id%20%3D%3D%3D%20%22btnAdd%22%29%20%7B%0A%20%20%20%20var%20mrw%20%3D%20Services.wm.getMostRecentWindow%28%22alert%3Adialog%22%29%2C%20uri%20%3D%20gBrowser.contentDocument.documentURIObject.spec.split%28%22//%22%29%5B0%5D%3B%0A%20%20%20%20//gRoot.setCharPref%28%22protocolList%22%2C%20pref%28%22protocolList%22%29%20+%20%22%2C%22%20+%20uri%29%3B%0A%20%20%20%20sCV%28%22protocolList%22%2C%20pref%28%22protocolList%22%29%20+%20%22%2C%22%20+%20uri%29%3B%0A%20%20%20%20mrw.close%28%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20if%20%28e.id%20%3D%3D%3D%20%22btnSettings%22%29%20%7B%0A%20%20%20%20var%20mrw%20%3D%20Services.wm.getMostRecentWindow%28%22alert%3Adialog%22%29%3B%0A%20%20%20%20this.settingsDialog%28%29%3B%0A%20%20%20%20mrw.close%28%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%20%20fp.init%28window%2C%20null%2C%20fp.modeOpen%29%3B%0A%20%20fp.appendFilters%28fp.filterImages%29%3B%0A%20%20if%20%28fp.show%28%29%20%21%3D%20fp.returnCancel%29%20%7B%0A%20%20%20%20//gRoot.setCharPref%28e.id%2C%20fp.fileURL.spec%29%3B%0A%20%20%20%20sCV%28e.id%2C%20fp.fileURL.spec%29%3B%0A%20%20%20%20e.image%20%3D%20fp.fileURL.spec%3B%0A%20%20%7D%0A%20%20if%20%28e.id%20%3D%3D%3D%20%22imageClose%22%29%20%7B%0A%20%20%20%20var%20mrw%20%3D%20Services.wm.getMostRecentWindow%28%22settings%3Adialog%22%29%3B%0A%20%20%20%20mrw.document.getElementById%28%22btnClose%22%29.image%20%3D%20pref%28%22imageClose%22%29%3B%0A%7D%20%7D%0A%0Athis.onCheckbox%20%3D%20function%28e%29%20%7B%0A%20%20var%20bol%20%3D%20pref%28e.id%29%20%21%3D%3D%20false%20%3F%20false%20%3A%20true%3B%0A%20%20gRoot.setBoolPref%28e.id%2C%20bol%29%3B%0A%7D%0A%0Athis.onBlur%20%3D%20function%28e%29%20%7B%0A%20%20e.value%20%3D%20e.value.replace%28/%2C%2C+/g%2C%20%22%2C%22%29.replace%28/%5E%2C/%2C%20%22%22%29.replace%28/%2C%24/%2C%20%22%22%29.replace%28/%5Cs+/g%2C%20%22%22%29%3B%0A%20%20//gRoot.setCharPref%28e.id%2C%20e.value%29%3B%0A%20%20sCV%28e.id%2C%20e.value%29%3B%0A%7D%0A%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%0A%20%20if%20%28reason%20%3D%3D%3D%20%22delete%22%29%20%7B%0A%20%20%20%20removeEventListener%28%22click%22%2C%20toggleFindbar%2C%20false%29%3B%0A%20%20%20%20removeEventListener%28%22mouseover%22%2C%20toggleFindbar%2C%20false%29%3B%0A%20%20%20%20removeEventListener%28%22DOMContentLoaded%22%2C%20toggleFindbar%2C%20false%29%3B%0A%20%20%20%20unloadSheet%28css%29%3B%0A%20%20%20%20unloadSheet%28css2%29%3B%0A%20%20%20%20//Services.prefs.deleteBranch%28pref.root%29%3B%0A%7D%20%7D%0A%0Athis.label%20%3D%20pref%28%22buttonName%22%29%3B%0Athis.tooltipText%20%3D%20pref%28%22buttonName%22%29%20+%20%22%5Cn%5Cu2022%20%22%20+%20pref%28%22toolTip%22%29%3B%0A%0Aif%20%28pref%28%22enableFindbar%22%29%20%26%26%20getProtocol%28%29%29%20this.image%20%3D%20pref%28%22iconOn%22%29%3B%0Aif%20%28pref%28%22enableFindbar%22%29%20%26%26%20%21getProtocol%28%29%20%7C%7C%20%21pref%28%22enableFindbar%22%29%29%20this.image%20%3D%20pref%28%22iconOff%22%29%3B%0A%0AloadSheet%28css2%29%3B%0AloadAndObserve%28%22cssEnabled%22%2C%20css%29%3B%0A%0AaddEventListener%28%22click%22%2C%20toggleFindbar%2C%20false%29%3B%0AaddEventListener%28%22DOMContentLoaded%22%2C%20toggleFindbar%2C%20false%29%3B%0A%0A//%20Name%3A%20Findbar%20Persist%0A//%20Author%3A%20Sonny%20Razzano%20a.k.a.%20srazzano%0A//%20Created%3A%20Jul.%201%2C%202016%0A//%20Updated%3A%20Sep.%208%2C%202016%20%28Added%20protocol%20ftp%3A/chrome%3A%20and%20settings%20dialog%29%0A//%20Homepage%3A%20http%3A//custombuttons.sourceforge.net/forum/viewtopic.php%3Ff%3D4%26t%3D3776%0A//%20Description%3A%20Toggles%20Findbar%20and%20persist%20on%20all%20page%20protocols%20http%3A%2C%20https%3A%2C%20file%3A%2C%20ftp%3A%20and%20chrome%3A%20%28editable%20in%20settings%20dialog%29%2C%20while%20initiated%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%23settingsDialog%20%7B%0A%20%20padding%3A%202px%204px%204px%200%20%21important%3B%0A%7D%0A%20%20%20%20%20%20%0A%23settingsDialog%20.hbox%2C%0A%23alertDialog%20%23hbox3%20%7B%0A%20%20margin%3A%202px%200%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20%23hbox3%20.button%20%7B%0A%20%20margin-left%3A%204px%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20%23hbox5%20%7B%0A%20%20margin-top%3A%202px%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20.label%20%7B%0A%20%20margin-top%3A%204px%20%21important%3B%0A%20%20text-align%3A%20right%20%21important%3B%0A%20%20width%3A%2078px%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20.textbox%2C%0A%23settingsDialog%20.button%2C%0A%23alertDialog%20.button%20%7B%0A%20%20-moz-appearance%3A%20none%20%21important%3B%0A%20%20background%3A%20linear-gradient%28%23EEE%2C%20%23BBB%29%20%21important%3B%0A%20%20border%3A%201px%20solid%20%23FFF%20%21important%3B%0A%20%20border-radius%3A%203px%20%21important%3B%20%0A%20%20box-shadow%3A%200px%201px%202px%20rgba%280%2C%200%2C%200%2C%200.3%29%20inset%2C%202px%202px%202px%20%23222%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20.textbox%20%7B%0A%20%20padding%3A%203px%204px%202px%204px%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20.button%2C%0A%23alertDialog%20.button%20%7B%0A%20%20padding%3A%203px%200%200%203px%20%21important%3B%0A%7D%0A%0A%23alertDialog%20.image%20.button-icon%20%7B%0A%20%20margin-right%3A%200%20%21important%3B%0A%7D%0A%0A%23settingstDialog%20.image%20.button-text%20%7B%0A%20%20margin%3A%200%202px%200%204px%20%21important%3B%0A%7D%0A%0A%23alertDialog%20.image%20.button-text%20%7B%0A%20%20margin%3A%200%202px%200%206px%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20.textbox%3Ahover%2C%0A%23settingsDialog%20.textbox%5Bfocused%5D%2C%0A%23settingsDialog%20.button%3Ahover%2C%0A%23alertDialog%20.button%3Ahover%20%7B%0A%20%20background%3A%20%23FFF%20%21important%3B%0A%7D%0A%0A%23settingsDialog%20%23textEditable%20%7B%0A%20%20margin%3A%202px%204px%20-4px%2093px%20%21important%3B%0A%20%20font-style%3A%20italic%20%21important%3B%0A%7D%0A%0A@-moz-document%20url%28chrome%3A//browser/content/browser.xul%29%20%7B%0A%20%20%23main-window%20findbar%20%7B%0A%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%0A%20%20%20%20background%3A%20linear-gradient%28%23EEE%2C%20%23AAA%29%20%21important%3B%0A%20%20%20%20border%3A%201px%20solid%20%23CCC%20%21important%3B%0A%20%20%20%20border-radius%3A%205px%20%21important%3B%0A%20%20%20%20box-shadow%3A%20none%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-closebutton%20%7B%0A%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%0A%20%20%20%20-moz-image-region%3A%20auto%20%21important%3B%0A%20%20%20%20border%3A%201px%20solid%20%23FFF%20%21important%3B%0A%20%20%20%20border-radius%3A%203px%20%21important%3B%0A%20%20%20%20box-shadow%3A%200%201px%202px%20rgba%280%2C%200%2C%200%2C%20.5%29%20inset%20%21important%3B%0A%20%20%20%20height%3A%2024px%20%21important%3B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAgUlEQVR42mNkoBAwUt2AhoaGeijdSIw4I7oiIIax4YpxiaMYAFO0cOFCBl5eXoagoCAGZE3r1q1j+Pz5M0N8fDyKIRgGgBQKCQkxvHv3DmwICKCLYTUAlyEgAGKDgIODA24v4DIEBLDZTBsD8HkBlyHUC0SKo5HihESVpEwOoNgAAE1frxFe2fGiAAAAAElFTkSuQmCC%29%20%21important%3B%0A%20%20%20%20margin-right%3A%2048px%20%21important%3B%0A%20%20%20%20min-width%3A%2024px%20%21important%3B%0A%20%20%20%20padding%3A%202px%204px%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-closebutton%3Ahover%20%7B%0A%20%20%20%20background-color%3A%20%23FFF%20%21important%3B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoUlEQVR42q2TvRWAIAyELzY6g7WbOIez8JjFOdzE2hm0MZqozyg+CuEqOI4Pwg8hUZQVwMtCqKpVO/NcPJLGp7LkAHBN9nyMOSIQs44zEVvfQm7AGXJtC9Q1fN8f4V3qdx0wTfDD8ICHAAk2DTCOCtFVX943wJRgJ6ikLTtxLlLCDhAz2InotfKVzQ+IlmAg8Vv4fYjJ15j6kJKfcpbP9EcblnvEEeDffrAAAAAASUVORK5CYII%3D%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-closebutton%20.toolbarbutton-text%20%7B%0A%20%20%20%20margin-left%3A%20-4px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-clear%20%7B%0A%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%0A%20%20%20%20-moz-image-region%3A%20auto%20%21important%3B%0A%20%20%20%20border%3A%201px%20solid%20%23FFF%20%21important%3B%0A%20%20%20%20border-radius%3A%203px%20%21important%3B%0A%20%20%20%20box-shadow%3A%200%201px%202px%20rgba%280%2C%200%2C%200%2C%20.5%29%20inset%20%21important%3B%0A%20%20%20%20height%3A%2024px%20%21important%3B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACLklEQVR42qVTW4tSURReRyMdr01qjooonBQTOiD0qIR4eVAjLxCCL4L14O8ZEOZtHicSBcMbmg8hKFQqFg3l7cUHEbyAgoPX1hGNsAZhWvCxzj5nrW9/59trE/CfQdylyWazUev12r9ara6OEuj1eg3CvNlsAPFxNBrdp5udTicZj8dbxwgeIahcLveGJohEIp/6/f5Dk8lE5vP5FhL9W4HX6z3B9DwWi62azebrTCYDYrEY+Hw+XFxcfG40Gqfz+fyq1WrVCZ/Px0B2DjbwMZ9ifszlckmKotQkSUq63S7TarUCTSISiYDD4cDl5eUXrH2fTqevCdztFY/HI/EDWyAQsJVK5QOpVMq/ublhzmYzwDXU63XaOEilUiCRSIDJZEI0Gi1ms9lzwu1265DthcfjebZYLABNgul0ut1NLpfDcDjcNtVqNbDb7ZBMJkEoFAJ6UEScEzunKUx+o9FIqlQqkMlkgAYBygeNRgPL5XK7rlQqYDAYIBQKFc1m84dCofD9t4kOh+MJKnnpcrkM7XYbGAwGaLVaQLO2BPhbMB6PIRwOl7E8ibU//xqkvZJAIEDSKmgiFosFCoUC8PggkUhco5JouVz+duskWiwWPRZ5n2LQsnU63fZXcBZ+4PpdtVr9enSU1Wo1hafiDwaDJJ41lEql5mQyedvpdOq33QU24mSXWfT7s7MzNQ6PjZ7AwWCQ7vV6tOzlATZ7gnsH2MeaLkKsds+HuNtt/DN+AXlHCgCxWmnnAAAAAElFTkSuQmCC%29%20%21important%3B%0A%20%20%20%20margin-right%3A%205px%20%21important%3B%0A%20%20%20%20min-width%3A%2024px%20%21important%3B%0A%20%20%20%20padding%3A%202px%204px%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-clear%3Ahover%20%7B%0A%20%20%20%20background%3A%20%23FFF%20%21important%3B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACc0lEQVR42qWTX0hTYRjGn685p87p/LPM2fyTS6HEtFOCiZpbFystJQqhSEJv9KKrLiIRqRzVRV1YKF6USReWaWKptJXMPwlSKgiFWE0RlJDMzMTU7Zzz9U5WCCWCffDjPbyc9/me853nY/jPxbYydCcLFkmG1e1GxaYCeQJLP7YfJZwDxMPlUR4gSbDm5J8UOptahzcTMBLm8aGbdZ7pjprytvkRbkgzZQuOzt5hUdrAwd1ipqVy7kI9F53O8Vqb7QVMsU4otVo8r7vaPurg+qVVVDyeg43VlDAluQumDcKJSBpM81MHH4jdl5ESFZ0c1zW2Q2E2W2C3dyAn5hN8AwPR3nC7k8u4Vf6E9zDarcpPHXJQpQ5S+2vCNDrD7oiQiJ3h7kWXj7iwgtA9BrT2KmEy5ZJIG8xx41AoFLC31DdWPuVnWfV5liXLuHiooOyE6BKx+OU7lr8tQRsRirBdevycnofGoENTv4JECkikGaZgJ14PtDy69oyfWTuD03thoWI1ZwpClNEAXUwkZFHG3IfPiEo1gq9IYC4ZD94yJCVlorS0sPFyLu5f7+COP4d4o5Blk5NLGXlFR6fGJuHDFYhONkJadq8JaGO2wzW9gLSyey30ejXnvP+vIP12UlScL3hcTL+fhErlB128HosTs2i3N/fRr6uq7UPXhkmsOM5yKGXlCQnpR2SyFJ+SiFn6FFv3qwHqX2kYxMtNo3w4DhZdAKzFZaeEqXeT6HkzNDjzA5WOCdj+dRe2EWoiiNAQ/p5eih6piWEo9UT441dUj8ygm/ouYpVwe58l5hXxJVTeqvT2aBSyF4kQvXU9fEu3cf36BSQ89XDedE3mAAAAAElFTkSuQmCC%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-textbox%20%7B%0A%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%0A%20%20%20%20border%3A%201px%20solid%20%23FFF%20%21important%3B%0A%20%20%20%20border-radius%3A%203px%20%21important%3B%0A%20%20%20%20box-shadow%3A%200%201px%202px%20rgba%280%2C%200%2C%200%2C%20.5%29%20inset%20%21important%3B%0A%20%20%20%20height%3A%2024px%20%21important%3B%0A%20%20%20%20margin-right%3A%205px%20%21important%3B%0A%20%20%20%20min-width%3A%20200px%20%21important%3B%0A%20%20%20%20padding%3A%202px%204px%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-textbox%5Bstatus%3D%27notfound%27%5D%20%7B%0A%20%20%20%20background%3A%20%23F00%20%21important%3B%0A%20%20%20%20color%3A%20%23FFF%20%21important%3B%0A%20%20%20%20text-shadow%3A%201px%201px%202px%20%23000%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.tabbable%20%7B%0A%20%20%20%20-moz-appearance%3A%20none%20%21important%3B%0A%20%20%20%20border%3A%201px%20solid%20%23FFF%20%21important%3B%0A%20%20%20%20border-radius%3A%203px%20%21important%3B%0A%20%20%20%20box-shadow%3A%200%201px%202px%20rgba%280%2C%200%2C%200%2C%20.5%29%20inset%20%21important%3B%0A%20%20%20%20min-width%3A%2024px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-next%2C%0A%20%20%23main-window%20findbar%20.findbar-find-previous%20%7B%0A%20%20%20%20height%3A%2024px%20%21important%3B%0A%20%20%20%20padding%3A%202px%204px%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-next%20%7B%0A%20%20%20%20-moz-image-region%3A%20auto%20%21important%3B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABSklEQVR42qXQv0sCYRzH8c+lEZWcUOed9MPQJSihoUHaWluCgohqaelPqNVrbWhu6b9oqaGWEKJoac8uMX8l/sjT8/H0mxfpIXn6QJ/lHg7eL3geAf+c0O+ntHlD4cUp1IoMeqWOqsGQ1FKoPx8KXMD68RNF1hRoWYbcp4F8juHtJY7i7TYfEDmKUXBV6caFQh2ZVw3G/S4fEN67I2VZ7salWgPl9wRaD/t8QGjrmsSA3I0rholm+gP0eMAH+DeuaMwn2XGLgGyKH5DagOnx2rG1Qh4U2xkArFyST54Gud1go+Oo0ogdW2MM0L9ARhXIZwDtROgFli6iUmBObUxMQm+gN+6saQLlEigZV9vA6d8rhM6jrpmA2vKIgMs9NO7/BgtnUWE2qEL02ohD7PiIPYg1h9gZ6CD+edU6UjrRNx4M/CI/X4d4OMCxb7reuhENyrkyAAAAAElFTkSuQmCC%29%20%21important%3B%0A%20%20%20%20margin-right%3A%205px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-next%5Bdisabled%3Dtrue%5D%20%7B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABJElEQVR42qWRvYqDQBRGrxKsEosUol0a8VksQwqxySsItrbWllpZRIQpLfdprExnEVHxF3UdwWHD6mZgPxiuOJzDzDcM/DPM1k/TNJEsy1DXNVRVtcwkSSAIAp1K4HkeUhQFsiyD1+u1zDiOwXVdOoHjOOhyuRA4z3N4Pp/g+z6dwLZtJEkSgcuyhDRN6a9gWRY6n88Exj0URQFhGNIJcImn04nAwzAsk1pgGAY6HA4ExmnbFh6Px75A13UkCALZ6LqOwDjjOELf98vCzxpFkf4m0DTtLoqiyrIsNE3zBq+ZpmkRz918zYLg1xVut9ud53kVH59hmI/wZgfX63WRcBxHJHvwbok/JWsfW/CuYJUcj0cVf8/PuQn/KVgleO7BHwU0+QaQocoRLKElSwAAAABJRU5ErkJggg%3D%3D%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-next%3Anot%28%5Bdisabled%3Dtrue%5D%29%3Ahover%20%7B%0A%20%20%20%20background-color%3A%20%23FFF%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-previous%20%7B%0A%20%20%20%20-moz-image-region%3A%20auto%20%21important%3B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHElEQVR42tXQvUoDQRSG4W+UEAt/CCQhglqJvYUoEisrL8AipLQWbLR15g68CRUbK69BBEEURDBEggHRJAzjqrPubmY97lbrkh93sfLANGd4n+Iw/HHY0M+10310XdBFRaQGwri8OMO15eLqusZxsyUSA2G8vjrHJ0sTkNJB47aF5t09R21b/Ar8jC1tIDte8GzIlzbshzrH464YCPSLlXJhfXbxoV34rwr01AiQPdEDDI0dA/+LAN8Ab1YMiYCVY1qYLWA0kwGyWWgf8djzAP0OcmxAthAAbOAR8xtnZManojgcJUHnm7036weMlU/I5IpRHE77GXRZTQaMLB8R5UvxZRqALR0SitP/GcD8AbFcIbYi1QHqOwmBFPMNG5KzEWHCSEoAAAAASUVORK5CYII%3D%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-previous%5Bdisabled%3Dtrue%5D%20%7B%0A%20%20%20%20list-style-image%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA/ElEQVR42tWRO4qEQBCGa/CBGHgH72DkDSY3GRARPIBnshU6UDT0GF7AxNhAEd+i7paBrMzOrLLR/FBBdfN9dFfd4J+5vbs0TdOY5xlc1yWXBQgrinJv2xaSJIkppeS0AGFVVe+SJEFZlpBlGaRpGvu+T/4U/ISbptkERVFAnudYcRiG5KXgN7iqKqjreuu7rsM+jqKIPAnewTgHHOa6rjCO40GyCwzDoLIsA8dxwDAM9H1/gJdlgWmatsKXfAseL4do2zZlWXaHMcMwgOM4j1NbsCyL8jy/wxiUeZ53ToDfEQThcHZJoOs6FUXxkwWapj3NANcaBME5wZV8AeRHxBGt/ThhAAAAAElFTkSuQmCC%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-previous%3Anot%28%5Bdisabled%3Dtrue%5D%29%3Ahover%20%7B%0A%20%20%20%20background-color%3A%20%23FFF%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-find-next%5Bchecked%5D%3Ahover%2C%0A%20%20%23main-window%20findbar%20.findbar-find-previous%5Bchecked%5D%3Ahover%20%7B%0A%20%20%20%20background-color%3A%20%23FFF%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-highlight%2C%0A%20%20%23main-window%20findbar%20.findbar-case-sensitive%20%7B%0A%20%20%20%20height%3A%2024px%20%21important%3B%0A%20%20%20%20padding%3A%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-highlight%20%7B%0A%20%20%20%20background%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAACRElEQVR42qWTS6hSURSGl2/FIpRwEuQkEB2Y3CAHDZwEotwLiRg4CQpMJ81FnDhQQQwkxEkiCEo0EPLSQNKJJGYgPuI6CSVNUQLfen0fbW97jHxcvQs253DY5/v//a+1SXBECQQCtlgsftHpdHKxWOzzrr2kQ+Fer/cei8U6DQaDtyaTCaD1rVAonPd6PeLaAiqVim2z2V4tFgtGJpMBv98P/X4fyGRytVarva/X65fXEnA6nU94PN59Pp8Pq9UKWq0WPhEg90Cj0Tr5fP5Nt9s9TsBsNj/kcrkK5B44HA6gHgCbzYbRaAQejweKxeLXRCIROeoEOp3urkgkejafzylMJhOWyyUwGAyQSCSA+gHT6XSODLyORqPTgwXkcvlNpVL5EjXzBobhaAiCACqVisF4oohGo/FBr9dfbPp/p4BQKKQYDIbnCH4HOyaRSP/hfyeIKJfLAZ/PV97G2CngcDjOEPQEAykUCuD88RNFhbNftdvtjy6XK7OLsVXAZDI9QE09xe90On3tHI3jWgQ3Frn/YrVaP+2LeKOAVqu9rdFoDKVSad1UDMeF88dwJPIdxfKuUqns428WMBqNQrVa/RSNHjSbzbVrnD+Gown6FQqFfNlsdraXvk3AYrGcKBSKM3yBqtUqDAYDGI/HMJvNLpPJ5NtIJNK7CnyrgN1ufySVSh8Ph8M/m5B7FNcinU77A4FA7arwrQKoRHiFw2ERamwbnaSSSqUu3G73j0PgWwXQDTXmcrlzmUz289+3eDw+PBSO6zdwHx8gUmei8gAAAABJRU5ErkJggg%3D%3D%29%20no-repeat%200%204px%2C%20linear-gradient%28%23EEE%2C%20%23AAA%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-highlight%3Ahover%2C%0A%20%20%23main-window%20findbar%20.findbar-highlight%5Bchecked%5D%20%7B%0A%20%20%20%20background%3A%20%23FFF%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAACgElEQVR42qWSXUhTYRjH/zvneI5s1RylJtgHBBGCSCF6UUmghd0IohZEiJE4uwgzEM1AzCZ2YfhBn2wFXqRGkDCLCAxrihkYSxph0oeGupwf286287mz0zHorqmbf3hvXh5+v+d53leHOFJmMu02m0wjP3i+p8rttqxXq4sVbrPZTmdx3IPZtra9QVnGiqI8sbJs5ZSiCFsWnD+Tn3q95e50WJZ3/HY48NViARsIQEcQ719LUvFbQVjckmDZTvdwdGH5L/0VKCoBcWEBruYbUD0eJFLUzy6f78C0LKtxCSYfM5cPJovdskhA2JYJ964OkIkpCGsTOBsbsexyddctLdXENUF/M5NXnCMOiUEiwZCkNag1ySn7MZfeBZHYB1kU+ZaGhrTB4WF/zIK6c3R6a3l4gmfVVL1RB0KJQBV1UBkK/gCD2aRWaWIm8YLZbO6N+ZELsinmhQUOKRDOYQwkKEKBykOD0xA4CZyPkAZdaYWVnfPD0RjrChYHaJshIl0kaRIMrSCyBqdoSLKE0CrUT/Mp5lNNHut6jKiCj1am+lCyeF9VSegNGvzvL0+AhLAGVzHn3dlxuHbl6kYr/q+gpiIvo7lij5Na7qcNRm0tGlxVKISpCELeCPxB48uSdqnI+Z2PxCWw1NeUVpcce4bVXuild6AVPxQG4LwKeM7wufoRedQ+zgY2gkcVdDbVVZ09eeIh510FHRpAqnEQPCuDC9Ce9lfbc28/X5nZDDyqwHrzWn3BkcxbQoBFAimAYYIgfH2CfdyTf+ne0thm4VEFWsrWztTTO6UUpXzzhnyOUedIX23H0JtY4FEFuVkZ/g+TXyqLjmeP/ruzj0y4Y4Wv5Q8F6iIgX85TdgAAAABJRU5ErkJggg%3D%3D%29%20no-repeat%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-case-sensitive%20%7B%0A%20%20%20%20background%3A%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAABvklEQVR42rWUOYsqURCFT6u4ICouiAtiYqTirzExFMHERAQjg0uHgoobGKiIgfh73HEJDUQQxDURnVcFT2aCx2udmYKGey/d56tz6tISfrmkdz+sVCrifr/j8Xjw4/F4EIvF5B8B5PN5YTKZYLVaWZxA2+0WmUzmZwC5XE4EAgHodDr8dTEYDFAoFL4PkGVZGAwGuFwu7HY7OByOJ6BYLL4HqNVq4vOeOt9sNvD5fFCpVAwYDocolUqvA0h8uVzymuKw2+0wm82w2WyIx+Nyp9NhODkol8uvA/4MTlAcRqORARTL6XTC7XaDJEmIRCJ8ToBqtfoagLofj8cIBoMcBQktFgvo9XpeU4XDYV6PRqPXAYlEQni9Xo5lv9/DYrGAgK1Wi4XS6bQIhULPGdTrdeWAaDQq3G43nE4n7y+XC9+Y2Wz2BUDuyMFkMiHHygHUvd/v5+6ortcrO5nP509Av98Xq9WK3zkcDjifz2g0GvJ/AclkUtBQaZAkrNVqecjkYDqdotvtylBY/wRQ9uv1Gs1mk8Wy2aygq0kdt9vt9wEkTrdErVbjeDw+40ilUkKj0XAM5KrX6ymCvP03VVoflz3vEVRW3O4AAAAASUVORK5CYII%3D%29%20no-repeat%200%204px%2C%20linear-gradient%28%23EEE%2C%20%23AAA%29%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-case-sensitive%3Ahover%2C%0A%20%20%23main-window%20findbar%20.findbar-case-sensitive%5Bchecked%5D%20%7B%0A%20%20%20%20background%3A%20%23FFF%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAACMUlEQVR42rXUS2hTQRQG4P/m5qWJ0aZpb0IxJJG22IAxiSXFokXBgsWCFMWFqAtdaEEQuhQ34kJwoRioIFWIgiiuBME3orQ2L9O86KJtrIqU1FeiMX1Ec483EyiKXSRRh7mLAzPnO5yZuRz+8+Bq3djjHSciEdKEKH2ta1fCu9f2R76agC3nEiSsUsBUr2TJRZHwemYB9wbs/wZwnAyQu1WPFSqeJS8h/tAbxC5s/3ug89RL0muLMDbV492HBZgb1ZB6hUDwLWIXawRS/QP0azzYtgcjH9WwW7WQyTgGhELTiHm7qwdKyefGQhAhY6d5y70fEVsnmhpUuHKomTvsmyzlRyQwheilndUDia3dpLZYwOtWSzdGhI9rxh1FC6hQAMfJ4G63snOI+iXgck91QKn6zOgI6to7ADkPFEWcyZoQEVzluylN5yYLA+L+FKJDVQLDGzykl6pXGU04KByAL30NDydm0f/sJtvnOPaAHG4Ls5L+SUSv7qocmIFA7z3roTKbWZzLL6LOaMCj1KclwHn0Ptld5RaNh6UWDVUBPN/ooYZ1LTjSdoLF58NnsUYw4PF0Zgk4fvsVxeNf2NnkM1+xmMsjef13ZFngqXsb6TUKFL//QLpICApO9M5PQWsyYiKRRG/0RcXvZ9mFftdm0lltSMxmsW/4LlsT3LGbdI0G3EgrcfrJYO1AyNFBvEYDnpcj+y2HrrFytWFPF3FyJXLzc/hcENGXHK0IqflvWun4CYr06hFCjHr8AAAAAElFTkSuQmCC%29%20no-repeat%200%204px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-entire-word%20%7B%0A%20%20%20%20background%3A%20%23CCC%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAACM0lEQVR42q2US4hSYRTHz0Wvr8wXiG+FXI3bFuOuhQUu2rQIWtdCdCM+yJAJRuMi1WJAzRdK4Lo2FUQQgqFIuBB1EYGIlJM0tskX13vVOncoiCHIO3k23+V7/c75/+/5COARgUDgkkwmM1MU9W7bM8S2GyORCGk2m6nBYLCZz+eHuVyO3ikgHo9fdblc1/v9PtRqtTf5fP71zgDhcFiC0lBut1tAkiSUy2V6tVrdz2az7H8DvF6vRCqVBoxGo9TpdCq4uV6vB41G4xVW8fbcgFAoZNLr9Vfw8svtdjusUql0SqXyntVqhWazWVgul98KhcIJb0AwGBQRBBHVarUqm80GAoEA6vV6ar1ef9bpdI/sdjt0u927iUSC8Xg8t3D9eSaTYbcGcBGNRp2Y4U2RSCTAKsBisQACAMGnwEqlcozbhg6HYx+rO95sNlmsZsZLIjR2D4fbKA2J4xe8WItGkygTmEwmmEwmIJFIYDabQbVa/cowzJNisTjhZbLf77dg5jfS6XQSm4xA2Y7QE5hOp98RJMNvUqFQwGKxAKyEoWn6AI1ntgb8GQi4iIAHGo0GWq3WAWa/lMvljzFzFiU6YVn2RTKZ/Mirgt+Bv+ohGnwBPSF/Ad6LxeJn2AsBXH6JJn/gZfLZ8Pl8DrzwDspxajrnA9cHqVTq/H3wF4k8arV6jwMMh8NP4/H4CDv5x84A3HMhFAopg8EAnU7nYalU+meT8QJwEYvFro1GIzO+pE+3PfMT2B/gEZMDjLUAAAAASUVORK5CYII%3D%29%20no-repeat%20left%20center%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-entire-word%5Bchecked%5D%20%7B%0A%20%20%20%20background%3A%20%23FFF%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAACa0lEQVR42q3TS0wTURQG4DNzp5127LulU0uBABpIQ1iA2jbEINFEYqIL48YVWxYoLrBalQCJISYGE6FG3WhCjAtZuNGoCw0mPpo2KKU1EWnlUSpvdNCWTmfu1HbhQl3YQf7lzT35cu85hwAZ0XrDLRaGaJjurR8otoYo9iJ1KanxOHKLkZn13PfUZiUecq1uK1BxZaan65ChNziVhvuvZ/ux33Nx2wDqwgxbxmwmu47YEUMS0D4c38CiUC4O7uP+G1CcDlpUavWr3aX6kjaPzlQ4ezuZgpFAohv73Ze3DCh9sb01NnWnlRZPjobnGLWJdbI65Tt3uQJGQssnMJ+O4RtNYdkAdT5mZCATLbFa7K5qEgxYgntvkq0ZTIYcNuNac5USHkc3jMt9td9QR+AuIOoMvr6HKxooxNwTaxd43p+hzchpR+AuQyBhASQqP6oSwO3n81EM5NhBp6ntWXhpAiThcP41i7K+iPFNHqNAHCkxaJQiUB8RhSp1GpIuMwI05tEVTgSGIYH7iuHOy/lYLptqxTeb47KarOj60AQ4ezVHqfYDiRBrMfGsWoS1H/yS1ag0aXcgRak+BzzHw5PxlVQ6k63Ij+9a0cBvvTn3yZEHErVGDKPj03ZCpU2ZNTSXyQpZkMTJlEB4xYG6p7Je8CvoVGhhp81iBlqrqDEUgM/DBK3pIEQ+KOWIs3iw8ZGsJv8FdI4dV9PUA1JvR/VWBLv0IjwMxLu5a56t78Gf0XgjL8wmXUsVq4Mvibn38VXeld9kYdsAyjfNmql0ss6mgtFIohHfOvDPJZMFFFLdP9U3u7DeIA65jhZb8xNNSOwRvU1bqQAAAABJRU5ErkJggg%3D%3D%29%20no-repeat%20left%20center%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.findbar-highlight%20.toolbarbutton-text%2C%0A%20%20%23main-window%20findbar%20.findbar-case-sensitive%20.toolbarbutton-text%20%7B%0A%20%20%20%20background%3A%20none%20%21important%3B%0A%20%20%20%20border%3A%20none%20%21important%3B%0A%20%20%20%20box-shadow%3A%20none%20%21important%3B%0A%20%20%20%20margin-left%3A%2018px%20%21important%3B%0A%20%20%20%20padding-top%3A%202px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.find-status-icon%5Bstatus%3D%27notfound%27%5D%20+%20.findbar-find-status%2C%0A%20%20%23main-window%20findbar%20.find-status-icon%5Bstatus%3D%27wrapped%27%5D%20+%20.findbar-find-status%20%7B%0A%20%20%20%20border%3A%201px%20solid%20%23FFF%20%21important%3B%0A%20%20%20%20border-radius%3A%203px%20%21important%3B%0A%20%20%20%20box-shadow%3A%200%201px%202px%20rgba%280%2C%200%2C%200%2C%20.5%29%20inset%20%21important%3B%0A%20%20%20%20color%3A%20%23000%20%21important%3B%0A%20%20%20%20font-weight%3A%20bold%20%21important%3B%0A%20%20%20%20height%3A%2024px%20%21important%3B%0A%20%20%20%20margin-left%3A%205px%20%21important%3B%0A%20%20%20%20min-width%3A%2024px%20%21important%3B%0A%20%20%20%20padding%3A%204px%206px%200%2024px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.find-status-icon%5Bstatus%3D%27notfound%27%5D%20+%20.findbar-find-status%20%7B%0A%20%20%20%20background%3A%20%23FFF%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAACqklEQVR42pWUXUgUURTHz8ydGQVpmIwk19U2t2ILVosi+sL2JVkfgkxIg+yDEKFekqKiF333oR4ysc3o40Uf8otAezKQiAqSgtXaJJVg/didTTfd2Z3ZO9uZdbXF1t3tD8M9s/ee/++ee/YOA1noBiFSPss6NnPcPmAY8GvayIyuj7ZTGsiUy6SbvInGe0Xx3m6T6VJxfj7wHAcQi4GGz89AADyy3PZ2bq65k1L5vwF3cbdHi4p67SUlFs3ng4gsg65pawlEEIBIEnh03d05NXWyNxqdyRpwHXdeUVg4ut9stixOTMSNUyUYMUMIjAmCu9/nc3RR6s8K8EAUWyrt9uagxwNSdTVYOzrAU1cHi0ND8XnJ6YRdXV0w2dgIcnc3UOzLa1VtbQ6FbmUF6C8t/bWd56Wl2Vk4trCw9vtXhBiyofmq3uExGSZjquq9oig7MVTSAq4ScuJCWdkbdXoaaDQKW6qqwJ5kmCw3AgODg/E4oOvwQlEqXlI6khZwh+cdZ2y24QUErC7YipDydZDPaC4nzA2F8Z/1OBSq6aW0Jy2gyQBYrcNBr3dtsgABB9YBPiHAlwAY6xSs4Kmi1PRlAlwkZMdps/kHG1i5Q9vQ/BA2MpU+ImQ+AZmnFFpDIdt4LPYtY5PvS9KkmVKLEdcEg38bWlsbH48kAftEceXIVPV7SyRSnrHJhq7x/OWDgvAkl2XBgqaHXS4YwXEmsVsTVnUcIR8aGmAaxyU8nlfhcGMPpY/We214k2/n5Dzfw/P1hGH+WZgcG5+N95HIQLumncXXSNYAFNskCM+sHHc+DytJlfAbzb+oap9L0+rxdSmVSdqPnaFzHFdZTEjTJpZ15iWqWcYj8ev6sIfStkFKB4xCNsrPCEhal3tKEAqKWVZ8GA4bl2QZH5op8Q/uPxcgcP8LuQAAAABJRU5ErkJggg%3D%3D%29%20no-repeat%200%205px%20%21important%3B%0A%20%20%7D%0A%20%20%0A%20%20%23main-window%20findbar%20.find-status-icon%5Bstatus%3D%27wrapped%27%5D%20+%20.findbar-find-status%20%7B%0A%20%20%20%20background%3A%20%23FFF%20url%28data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABgAAAAQCAYAAAAMJL+VAAAB+UlEQVR42mNkoDFgJFUDd9Du/zA2KyMjw4e1LnjNYCTGsK/rXBnRxWAAWY4oCxYtWgQ3YNYNbTCdpnEVQ2PmBkkwPT3gOYp4XFwcI0ELgsOiGViZGRmc6s+DxXbWGTD8/cfA8OcvEP/7D8QMDGqZhxn+f/nBcHaWM1D8P8MvoNyVQyuJt+DD138M4b2XwGJba2AWIEJHKf0ww5dfjAzXJluB+V9+/me4cYRMCzZV6YNd3T7nKkP/6rsMPLICDF85OSEa3n5m+H/vJUNhih6DochF0i14+uo7w8leC4bffyE+mLD4GsOEQ28YGIR5oBZ8YUgxEWSIDdFkeHBqNWELVq9e/d/LNwhsQUDrWYb3H38ybGsxY2BnZWb4+ec/AzMwafbPv8ow9chrsPoUCxGGxHAtoNwfhsen15FmgX3lSYa3H34yHO+3ZuBgYwZH8DegV77/+M8wf+UNBlCUJIRpMfwHxv7Pf8wMT8+tIsWCvwyOVacY3gAtONaHsOAf0NQvvxgYOFghWt8DHfIbKP73LyPD07NEWACLg59/GBhk4/YxfPvHxPBgth3YEHAyBeJfQEv+Avm/ofy///+D4+f5uTXEWQBj48pM+ABBC1AkPXf8ZxDjZ2D4+I2B4edvsNj/lx8YGM5FEF2G4VdotOI/o7gAihB1LaACAABKph8gxHqCawAAAABJRU5ErkJggg%3D%3D%29%20no-repeat%200%205px%20%21important%3B%0A%20%20%7D%0A%7D%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№187924-12-2017 17:14:23

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: Обсуждение кнопок CB

Ultima2m пишет

Findbar Persist. СКМ не работает

У меня - работает... Окно диалога вызывается.
Чтобы его поместить не в центр, а в другое место, надо в функции this.settingsDialog = function() {... заменить строку:
вместо window.openDialog(url, "", "chrome,centerscreen,dialog,resizable,alwaysRaised"); надо:
window.openDialog(url, "", "chrome,left=1000,top=400,dialog,resizable,alwaysRaised");
Здесь, конечно - 1000 и 400 я взял "с потолка" - Вы должны подобрать по своему вкусу - расстояние в пикселях от левого края и от верха.
Но будьте осторожны - если зададите большое значение для left, окно диалога может "вылезти" из экрана и Вы сможете закрыть его только через Таскбар винды.
Так что надо "поиграться".
В принципе их можно вычислить, зная высоту и длину диалогового окна и получив значения высоты и ширины экрана.
Если Вам это важно, я постараюсь это Вам подготовить.
Но дайте мне сначала знать - открывается ли у Вас диалоговое окно вообще и удалось ли "поиграться" с перемещением его?


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№188024-12-2017 17:36:40

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

У меня при клике СКМ вылетает окошко. ФФ-57

скрытый текст
gSpoiSV.png

Отсутствует

 

№188124-12-2017 18:09:35

lokiju
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 208
UA: Firefox 42.0

Re: Обсуждение кнопок CB

Ultima2m пишет

У меня при клике СКМ вылетает окошко. ФФ-57скрытый текст

А если в about:config
параметр security.data_uri.unique_opaque_origin поставить в false и перезапустить?

Отредактировано lokiju (24-12-2017 18:10:24)

Отсутствует

 

№188224-12-2017 18:10:42

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: Обсуждение кнопок CB

Ultima2m пишет

У меня при клике СКМ вылетает окошко. ФФ-57

Я не понял, у Вас ФФ57 или 52?
У меня - 52.
А в 57 очень многое не будет работать имхо. Здесь я уже ничем помочь не могу...


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№188324-12-2017 19:15:16

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

difabor пишет

Я не понял, у Вас ФФ57 или 52?

Сижу на FF-52 ESR и допиливаю под себя FF-57

Отсутствует

 

№188425-12-2017 01:04:53

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: Обсуждение кнопок CB

Ultima2m пишет
difabor пишет

Я не понял, у Вас ФФ57 или 52?

Сижу на FF-52 ESR и допиливаю под себя FF-57

Так на 52-й у Вас СКМ работает?
Как переместить диалоговое окно я Вам показал. Попробуйте на 52-й


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№188525-12-2017 05:36:53

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

difabor пишет

Попробуйте на 52-й

На 52 у меня дополнение FindBar Tweak стоит.
Очень нравится

Отсутствует

 

№188625-12-2017 09:52:27

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: Обсуждение кнопок CB

Ultima2m пишет

На 52 у меня дополнение FindBar Tweak стоит.
Очень нравится

У меня оно тоже стоит.
Но я эту кнопку специально поставил, пытаясь Вам помочь. Теперь отключил за ненадобностью.
Для ФФ57 ничем помочь не могу.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№188725-12-2017 16:47:12

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Dumby спасибо за ответ с профилями.
Еще один вопрос, в FF57 убрали и теперь не работает if (fp.show() == fp.returnCancel || !fp.file) return;
Смотрел здесь https://developer.mozilla.org/en-US/doc … FilePicker
и если с массивами данных понятно, например

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

Выделить код

Код:

var uc = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    uc.charset = 'utf-8';
    fileContent = uc.ConvertFromUnicode(fileContent);

    var nsIFilePicker = Components.interfaces.nsIFilePicker;
    var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    fp.init(window, '', fp.modeSave);
    fp.defaultString = fileName;
    fp.appendFilters(fp.filterHTML);
    fp.appendFilters(fp.filterAll);

       fp.open(function (rv) {
    if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
    var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(fp.file, 0x02|0x20|0x08, 0666, 0);
    stream.write(fileContent, fileContent.length);
    stream.close();
  }
});


А вот допустим в кнопке   Save+-  fileContent явно не задан и как заменить? (особенно интересует последняя строчка)
скрытый текст

Выделить код

Код:

var fp = window.makeFilePicker();
      fp.init(window, "Сохранить как…", fp.modeSave);
      fp.appendFilter("", "*.png");
      fp.defaultString = getTabLabel() + "  " + (new Date().toLocaleFormat("%d.%m.%Y. %H:%M:%S")) + ".png";
      if (fp.show() == fp.returnCancel || !fp.file) return;


Если у Вас есть время, посмотрите пожалуйста.

Отсутствует

 

№188825-12-2017 18:14:29

Viatcheslav
Участник
 
Группа: Members
Откуда: г. Бобруйск, Беларусь
Зарегистрирован: 23-11-2016
Сообщений: 323
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Прошу меня простить за дублирование просьбы - думаю, что просто не заметили

Viatcheslav пишет

Есть кнопка, добавляющая прогресс-бар в адресной строке (код от Andrey_Krropotkin):

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

Выделить код

Код:

//Полоса загрузки в адресной строке
 
(function(){
//Location Bar Enhancer5.1;Loading Bar0.3.0
    var cssStr = (function(){/*
            #urlbar {
                background-image: -moz-repeating-linear-gradient(top -45deg, rgba(255,255,255,0), rgba(255,255,255,0) 6px, rgba(255,255,255,0) 6px, rgba(255,255,255,0) 12px), -moz-linear-gradient(left, #33FF66 0%, #33FF66 100%);
                background-size:0 0;
             background-repeat:repeat-x, no-repeat;
           //  transition: background-size 350ms ease 0s !important;
            }
            #urlbar:not([connecting])::after {
                        display:none;
                    }
            @-moz-keyframes progress-bar-stripes {
                from {
                    background-position: 0, 0;
                }
                to {
                    background-position: 51px 0, 0;
                }
            }
    */}).toString().replace(/^.+\s|.+$/,"");
    
    var style = document.createProcessingInstruction("xml-stylesheet", "type=\"text/css\"" + " href=\"data:text/css;base64," + btoa(cssStr) + "\"");
    var mainW = document.getElementById("main-window");
    document.insertBefore(style, mainW);

    function main(window) {
      var {document, gBrowser} = window;
      function $(id) document.getElementById(id);
      var urlbar = $("urlbar");
      let pageProgress = 0;
      let async = makeWindowHelpers(window).async;
      var LoadingBar = {
        listener: {
          onChangeTab: function(e) {
            urlbar.style.backgroundSize = '0% 100%';
            pageProgress = 0;
          },
          
          onProgressChange: function(aBrowser,webProgress,request,curSelfProgress,maxSelfProgress,curTotalProgress,maxTotalProgress) {
            if (gBrowser.contentDocument === aBrowser.contentDocument) {
                var val = (curTotalProgress-1)/(maxTotalProgress-1);
                pageProgress = val;
                urlbar.style.backgroundSize = (100*val) + '% 100%';
                if (val > 0.9)
                  async(function() {
                    if (pageProgress > 0.95)
                        urlbar.style.backgroundSize = '100% 100%';
                }, 1000);
            }
          },
          
          onStateChange: function() {
            if (pageProgress > 0.95){
                async(function() {
                    urlbar.style.backgroundSize = '0% 100%';
                    pageProgress = 0;
                }, 1000);
            }else{
                urlbar.style.backgroundSize = '0% 100%';
            }
          }
        }
      };

      gBrowser.tabContainer.addEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);
      gBrowser.addTabsProgressListener(LoadingBar.listener);

      unload(function() {
        gBrowser.tabContainer.removeEventListener('TabSelect',LoadingBar.listener.onChangeTab,false);

        gBrowser.removeTabsProgressListener(LoadingBar.listener);
      }, window);
    }

    watchWindows(main, "navigator:browser");

    function runOnLoad(window, callback, winType) {
      window.addEventListener("load", function() {
        window.removeEventListener("load", arguments.callee, false);

        if (window.document.documentElement.getAttribute("windowtype") == winType)
          callback(window);
      }, false);
    }

    function runOnWindows(callback, winType) {
      function watcher(window) {
        try {
          callback(window);
        }
        catch(ex) {}
      }

      let browserWindows = Services.wm.getEnumerator(winType);
      while (browserWindows.hasMoreElements()) {
        let browserWindow = browserWindows.getNext();
        if (browserWindow.document.readyState == "complete")
          watcher(browserWindow);
        else
          runOnLoad(browserWindow, watcher, winType);
      }
    }

    function watchWindows(callback, winType) {
      function watcher(window) {
        try {
          callback(window);
        }
        catch(ex) {}
      }

      runOnWindows(callback, winType);

      function windowWatcher(subject, topic) {
        if (topic == "domwindowopened")
          runOnLoad(subject, watcher, winType);
      }
      Services.ww.registerNotification(windowWatcher);

      unload(function() Services.ww.unregisterNotification(windowWatcher));
    }

    function unload(callback, container) {
      let unloaders = unload.unloaders;
      if (unloaders == null)
        unloaders = unload.unloaders = [];

      if (callback == null) {
        unloaders.slice().forEach(function(unloader) unloader());
        unloaders.length = 0;
        return null;
      }

      if (container != null) {
        container.addEventListener("unload", removeUnloader, false);

        let origCallback = callback;
        callback = function() {
          container.removeEventListener("unload", removeUnloader, false);
          origCallback();
        }
      }

      function unloader() {
        try {
          callback();
        }
        catch(ex) {}
      }
      unloaders.push(unloader);


    function removeUnloader() {
        let index = unloaders.indexOf(unloader);
        if (index != -1)
          unloaders.splice(index, 1);
      }
      return removeUnloader;
    }
    
    function makeWindowHelpers(window) {
      let {clearTimeout, setTimeout} = window;

      function async(callback, delay) {
        delay = delay || 0;
        let timer = setTimeout(function() {
          stopTimer();
          callback();
        }, delay);

        function stopTimer() {
          if (timer == null)
            return;
          clearTimeout(timer);
          timer = null;
        }
      }

      return {
        async: async,
      };
    }

})();


Для полного счастья не хватает отображения степени загрузки страницы в %, как здесь - https://www.w3schools.com/howto/tryit.a … r_label_js. Для удобства метка должна пропадать по окончании загрузки страницы вместе с прогресс-баром. Если такое возможно - сделайте, пожалуйста :blush: Спасибо

Отсутствует

 

№188925-12-2017 20:45:14

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Andrey_Krropotkin пишет

в кнопке   Save+-  fileContent явно не задан

Не готов согласиться. fileContent задан явно в переменной url,
только в виде адреса, представленного интерфейсом nsIURI.
Так что здесь всё аналогично.

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

Выделить код

Код:

var fp = window.makeFilePicker();
      fp.init(window, "Сохранить как…", fp.modeSave);
      fp.appendFilter("", "*.png");
      fp.defaultString = getTabLabel() + "  " + (new Date().toLocaleFormat("%d.%m.%Y. %H:%M:%S")) + ".png";
/*
      if (fp.show() == fp.returnCancel || !fp.file) return;
      
      var wbp = window.makeWebBrowserPersist();
      parseInt(Services.appinfo.version) < 36
      ? wbp.saveURI(url, null, null, null, null, fp.file, null)
      : wbp.saveURI(url, null, null, null, null, null, fp.file, null); // если FF36+
*/
      fp.open(res => {
         if (res == fp.returnCancel || !fp.file) return;

         var save = window.makeWebBrowserPersist().saveURI;
         save.length < 8
            ? save(url, null, null, null, null, fp.file, null)
            : save(url, null, null, null, null, null, fp.file, null);
      });


P.S. Позволю себе напомнить про будущее toLocaleFormat.

Отсутствует

 

№189026-12-2017 12:05:59

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Dumby спасибо. Да в 58 не только toLocaleFormat заменят, но и многое другое - Firefox Site Compatibility. Опять придется все править.

Отредактировано Andrey_Krropotkin (26-12-2017 12:11:06)

Отсутствует

 

№189126-12-2017 21:51:44

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Благодаря Dumby подgравил кнопку для FF57 - Создает пункт в контекстном меню закладок "Экспорт в HTML файл"  (сохраняет выборочно папки или любой пункт из контекстного меню закладок в HTML)

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

Выделить код

Код:

//-------------------- Экспорт в HTML файл в контекстном меню закладок
//Источник - https://github.com/ardiman/userChrome.js/blob/master/exporthtmlfolder/ExportHTMLFolder.uc.xul
 (function () { 

 function ImageConverter(imageURL) {
       this.imageURL = imageURL;
       this.channel = Services.io.newChannel(imageURL, null, null);
       this.channel.asyncOpen(this, null);
}
 ImageConverter.prototype = {
       imageURL : "",
       channel : null,
       bytes : [],
       stream : null,
       Database64 : null,
       iscompleted : false,
       QueryInterface : function (iid) {
              if (!iid.equals(Components.interfaces.nsISupports) &&
                  !iid.equals(Components.interfaces.nsIRequestObserver) &&
                  !iid.equals(Components.interfaces.nsIStreamListener)) {
                  throw Components.results.NS_ERROR_NO_INTERFACE;
               }
               return this;
        },

        onStartRequest : function (aRequest, aContext) {
             this.stream = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
             this.iscompleted = false;
         },

       onStopRequest : function (aRequest, aContext, aStatusCode) {
             this.Database64 = 'data:' + this.channel.contentType + ';base64,' + btoa(String.fromCharCode.apply(null, this.bytes));
             this.iscompleted = true;
         },

             onDataAvailable : function (aRequest, aContext, aInputStream, aOffset, aCount) {
             this.stream.setInputStream(aInputStream);
             var chunk = this.stream.readByteArray(aCount);
             this.bytes = this.bytes.concat(chunk);
          }
};
 var ExportHTMLFolder = {
      
        escapeHTML: function(str) {
             return str.replace(/[&"<>]/g, function (m) ({ "&": "&amp;", '"': "&quot", "<": "&lt;", ">": "&gt;" })[m]);
          },
          
        onMenuItemCommand: function(event) {
             var bookmarkService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
             var historyService = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
             var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
             var MPMenu = PlacesUtils.getString("BookmarksMenuFolderTitle");
             var NodeID = document.popupNode._placesNode || document.popupNode.parentNode.selectedNode;
             fp.init(window, PlacesUIUtils.getString("EnterExport"),Ci.nsIFilePicker.modeSave);
             fp.appendFilters(Ci.nsIFilePicker.filterHTML);
             fp.defaultString = NodeID.title+".html";

             fp.open(res => {
                   if (res == fp.returnCancel || !fp.file) return;
                   var file = fp.file;
                   var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
                                 .createInstance(Components.interfaces.nsIFileOutputStream);
                   var charset = "UTF-8";
                   foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0);
                   var os = Components.classes["@mozilla.org/intl/converter-output-stream;1"]
                                   .createInstance(Components.interfaces.nsIConverterOutputStream);
                   os.init(foStream, charset, 0, 0x0000);
                   var nbTab = 5;
                   var data = '<!DOCTYPE NETSCAPE-Bookmark-file-1>\n';
                       data = data + '<!-- This is an automatically generated file.\n';
                       data = data + '\tIt will be read and overwritten.\n';
                       data = data + '\tDO NOT EDIT! -->\n';
                       data = data + '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">\n';
                       data = data + '<TITLE>Bookmarks</TITLE>\n';
                       data = data + '<H1>'+ExportHTMLFolder.escapeHTML(MPMenu)+'</H1>\n';
                       data = data + '\n';
                       data = data + '<DL><p>\n';
                   os.writeString(data);
                   var options = historyService.getNewQueryOptions();
                   var query = historyService.getNewQuery();
                   if( NodeID.type != 0 )
                      {
                        query.setFolders([NodeID.itemId], 1);
                        var result = historyService.executeQuery(query, options);
                        node = result.root;
                       }
                   else
                       {
                        query.setFolders([NodeID.parent.itemId], 1);
                        var result = historyService.executeQuery(query, options);
                        var rootNode = result.root;
                        rootNode.containerOpen = true;
                        inc = 0;
                        var node = rootNode.getChild(inc);
                        while(( inc < rootNode.childCount )&&( node.itemId != NodeID.itemId )) {
                            inc++;
                            var node = rootNode.getChild(inc);
                              }
                        rootNode.containerOpen = false;
                         }
                        this.ecrireUnMP( os, node, nbTab );
                        data = '</DL></p>\n';
                        os.writeString(data);
                        os.close();
                 });
          },
          
          ecrireUnMP: function( flux, elem, nbTab ) {
             var resultTypes = Ci.nsINavHistoryResultNode;
             if( elem.type == resultTypes.RESULT_TYPE_SEPARATOR ) {
                 var chaine = new Array(nbTab).join(' ') + "<HR>\n";
                 flux.writeString(chaine);
             }
             else if( elem.type == resultTypes.RESULT_TYPE_URI ) {
                 var Description= PlacesUIUtils.getItemDescription(elem.itemId);
                 var chaine = new Array(nbTab).join(' ') + '<DT><A HREF="' + this.escapeHTML(elem.uri);
                 if ( elem.icon.indexOf('moz-anno:favicon:http') >= 0 )
                 {
                       if ( elem.icon.indexOf('http://www.mozilla.org/2005/made-up-favicon/') < 0 ){
                                  chaine = chaine + '" ICON_URI="' + elem.icon.slice(elem.icon.indexOf('moz-anno:favicon:http') + 'moz-anno:favicon:'.length);
                        }
                       var Image = new ImageConverter( elem.icon.slice(elem.icon.indexOf('moz-anno:favicon:http')) );
                       var thread = Cc['@mozilla.org/thread-manager;1'].getService().mainThread;
                       while ( !Image.iscompleted ) {
                       thread.processNextEvent(true);
                       }
                        chaine = chaine + '" ICON="' + Image.Database64;
                  }
                  else if ( elem.icon.indexOf('moz-anno:favicon:data:image') >= 0 )
                        {
                        chaine = chaine + '" ICON="' +elem.icon.slice(elem.icon.indexOf('data:image'));
                        }
                        var chaine = chaine + '">' + this.escapeHTML(elem.title) + '</A>\n' + new Array(nbTab).join(' ') + '<DD>' + this.escapeHTML(Description) + '\n';
                        flux.writeString(chaine);
                         }
                  else if(( elem.type == resultTypes.RESULT_TYPE_FOLDER )||( elem.type == resultTypes.RESULT_TYPE_FOLDER_SHORTCUT )) {
                        var bookmarkService = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].getService(Ci.nsINavBookmarksService);
                        var historyService = Cc["@mozilla.org/browser/nav-history-service;1"].getService(Ci.nsINavHistoryService);
                        var Description= PlacesUIUtils.getItemDescription(elem.itemId);
                        this.escapeHTML(elem.title) + '</H3>\n';
                        var chaine = new Array(nbTab).join(' ') + '<DT><H3>' + this.escapeHTML(elem.title) + '</H3>\n';
                        var chaine = chaine + new Array(nbTab).join(' ') + '<DD>' + this.escapeHTML(Description) + '\n';
                        chaine = chaine + new Array(nbTab).join(' ') + '<DL><p>\n';
                        flux.writeString(chaine);
                        nbTab = nbTab + 4;
                        var options = historyService.getNewQueryOptions();
                        var query = historyService.getNewQuery();
                        query.setFolders([elem.itemId], 1);
                        var result = historyService.executeQuery(query, options);
                        var rootNode = result.root;
                        rootNode.containerOpen = true;
                        for (var inc = 0; inc < rootNode.childCount; inc ++) {
                              var node = rootNode.getChild(inc);
                              this.ecrireUnMP( flux, node, nbTab );
                         }
                         rootNode.containerOpen = false;
                         nbTab = nbTab - 4;
                         chaine = new Array(nbTab).join(' ') + '</DL></p>\n';
                         flux.writeString(chaine);
                   }
          },

          init: function()
           {
              var contextMenu = document.getElementById("placesContext");
              if (contextMenu) contextMenu.addEventListener("popupshowing", this.ExportHTMLFolderShowHideItem, false);
           },
          ExportHTMLFolderShowHideItem: function(event)
            {
              var show = document.getElementById("placesContext_ExportHTMLFolder");
              show.hidden = (document.popupNode.localName == "menuseparator")||( document.popupNode.className == "openintabs-menuitem");
              document.getElementById("placesContext_ExportHTMLFolderSep").hidden = show.hidden;
            },
};

       window.addEventListener("load", function load(event) {
       window.removeEventListener("load", load, false); //remove listener, no longer needed
       ExportHTMLFolder.init();
}, false);


  if ( document.getElementById("placesContext_ExportHTMLFolder") ) return; 

   
    var contextMenu = document.getElementById("placesContext");
    var copyBothMenuItem = document.createElement("menuitem"); 
    copyBothMenuItem.id = "placesContext_ExportHTMLFolder";
    copyBothMenuItem.setAttribute("label", "Экспорт в HTML");
    copyBothMenuItem.setAttribute("selection", "any");
    copyBothMenuItem.setAttribute("closemenu", "single");
    copyBothMenuItem.addEventListener("command", function () { ExportHTMLFolder.onMenuItemCommand(event); });
    contextMenu.insertBefore(copyBothMenuItem, document.getElementById("placesContext_newSeparator") );
    var SMenuItem = document.createElement("menuseparator"); 
    SMenuItem.id = "placesContext_ExportHTMLFolderSep";
    contextMenu.insertBefore(SMenuItem, document.getElementById("placesContext_ExportHTMLFolder") );
})();


Если есть желающие найти и устранить недостатки - буду очень рад.

Отредактировано Andrey_Krropotkin (26-12-2017 21:52:43)

Отсутствует

 

№189226-12-2017 22:43:16

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 57.0

Re: Обсуждение кнопок CB

На стадии переделки,  (все нет времени довести до ума), но вполне работает для FF57 кнопка - дополняет контекстное меню кнопок дополнительными пунктами:
Показать Id кнопки,
Копировать изображение кнопки в формате base64,
Копировать код кнопки как текст,
Копировать код кнопки как HTML ссылку,
Копировать код кнопки как BBcode сылку,
Сохранить изображение кнопки,
Сохранить код кнопки в HTML файл,
Сохранить все кнопки в HTML файл,
Сохранить код кнопки в XML файл,
Добавить кнопку из XML файла,
Переместить кнопку.
+ Дополняет иконками пукнты меню

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

Выделить код

Код:

/*Дополнительные пункты в контекстном меню кнопки*/

const topicURL = "http://forum.mozilla-russia.org/viewforum.php?id=34"
const cbNamespace = "http://xsms.nm.ru/custombuttons/";
const nsIFilePicker = Ci.nsIFilePicker;
const nsIFile = Ci.nsIFile;

function $(aId) {
  return document.getElementById(aId);
};


/////////////////////////////////////////////////////////////////////////////
/////////////////////////////// Context menus ///////////////////////////////
/////////////////////////////////////////////////////////////////////////////

function addMenuItem(aNewIDs, aNodeIDs, aLabel, aIcon, aCommand) {
  for (var i = 0; i < aNewIDs.length; i++) {
    // Remove previously created menuitems if any
    if ($(aNewIDs[i])) $(aNewIDs[i]).parentNode.removeChild($(aNewIDs[i]));

 let mi = e4xConv_parseXULFromString(
                  '<menuitem xmlns="' + e4xConv_encodeHTML(xulns, true) + '"\n\
                  id="' + e4xConv_encodeHTML(aNewIDs[i], true) + '" class="menuitem-iconic"\n\
                  image="' + e4xConv_encodeHTML(aIcon, true) + '" label="' + e4xConv_encodeHTML(aLabel, true) + '"\n\
                  oncommand="' + e4xConv_encodeHTML(aCommand, true) + '"/>');  


    if (i == 0)
      mi.setAttribute("observes", "custombuttons-contextbroadcaster-primary");

    if ($(aNodeIDs[i])) {
      if ($(aNodeIDs[i]).nextSibling) {
        $(aNodeIDs[i]).parentNode.insertBefore(mi, $(aNodeIDs[i]).nextSibling);
      } else {
        $(aNodeIDs[i]).parentNode.appendChild(mi);
      }
    }
  }
};


var saveImg1 = "data:application/file;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAD///8A////AESqAABHpgAASKAAAEukAQxMpQMYR6MAAEepAQ9MpgOLRKgACUenAABHpgAARKoAAP///wD///8A////AP///wBEqgAARaIAAFS2FVBj0jS3Y9AzyVG0EUROrwt8TKcDs0ikAANInwAAR6YAAESqAAD///8A////AP///wD///8ARKQAAVvJKJtj0jX/SaAJ/0abCv9UtSH/U7QX8lW5IMddwyfQW8Iii0mqBQ1DqQAA////AP///wD///8A////AEWlAAFYwB6YXsYc5F7GFt9bwA+vVbgWvU6rAKBRrgf0RZgA/02oDP9ezCzJR6UBA////wD///8A////AP///wBFrAAASKIAADiGNQAeYIIpF1iJHVa4GKEve0tFLHl1Pla7J51exRnUWL8VjEetAAP///8A////AP///wD///8AC0WuAAk/tAAANdpIAFD6/wA+7f8gd6jqBlPX+QBE9PIGS8uDLnZLADqNJwAzjDMA////AP///wD///8A////AAAw0QAALc0AAEPdegBI4f8AK8P/ADHX/wAwzf8AL8b/AEno/gAz2zYALtEQAC3VAP///wD///8A////AP///wAAMssAADjSMwBA2pIATen/ADG9/wBe1v8ATcz/ADHK/wBN5/4ASeH/AEvl6wA10DP///8A////AP///wD///8AADnTSQBO5/8ANc7/ADnR/xC+9/8C0f//AMj//wCP8P8ALcX/ACrC/wBE3f8ASeOf////AP///wD///8A////AABI4Z4ARN3/ACvG/wJAxP8Z5v//AMT//wDE//8Axv7/AETM/wA51P8AUervADjSPP///wD///8A////AP///wAAOdRiAFry+QBS6/QATOP/H+P8/xDe//8J1///E9H4/wFE2f8AReC6ADTOEwAyywD///8A////AP///wD///8AADDNAAAyzCcARN7WACvG/wVfzf8d0vf/HM30/whf0/8AI7n/ADzV+AA40kUAMswA////AP///wD///8A////AAAwywAAPNdTAEfg/wAsw/8AOdb/ADLP/wAswv8AReP/AC7H/wA40f8AR+GfADDKAP///wD///8A////AP///wAAMswAADfRQgBY8f8AT+j/AE7o7AA+1/8AK8T/AE7o/wBN5f8AVe7/AD/ZbAAwywD///8A////AP///wD///8AADPMAAAyywAANM4vADjSUQA0zikAU+z3AEff/wBJ4sMAN9EtADjROQAyywAAM8wA////AP///wD///8A////AAAzzAAAM8wAADHLAAAwywAAMcsAAD/YXQBK4pYAN9AxAC/KAAAwygAAM8wAADPMAP///wD///8A+R8AAPAfAADABwAAwAMAAPgDAADwHwAA8AcAAOADAADAAwAAwAMAAMAHAADgBwAA4AcAAOAHAADwDwAA/j8AAA==";
var saveImg2 = "data:application/file;base64,AAABAAEAEBACAAEAAQCwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAADbAAADpcAAA//AAANVwAAD/8AAAKsAAAD/AAAP//AAAP8AAAD/AAAD/8AAAwDAAAP/wAAA/wAAAP8AAA";
var saveImg3 = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAAAAAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQf//rEH4j6xB8IesQeHDrEHD4axBh/CsQYf4rEGH8KxBw+GsQeHDrEHwh6xB+I+sQf//rEH//6xB//+sQQ==";
var saveImg4 = "data:application/file;base64,AAABAAEAEBACAAEAAQCwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAA/wAAAP8AAA";
var saveImg = "data:application/file;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8BAAAAFwAAAGkAAABzAAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAADkAAAAP////AQAAAIdgZmj/YWlt/2FobP9haGz/YGhr/2Boa/9fZ2v/X2dr/15mav9dZWn/XGRo/0ZNUP8AAACdAAAAFf///wEAAACr2tzc/9ve4P/a3t//1dnZ/7S2tf+foJz/m5ya/6apqP/O0tP/09fZ/9DV1v+hqq//AAAAuQAAABX///8BAAAAq+3u7//e4eL/ub29/2hnXv9oVUX/U0As/zgxGf83Lx3/YWBX/7a5uv/S1tj/o6yx/wAAALkAAAAV////AQAAAKv29/f/19na/1dUQf9jXDv/dmtJ/4FoSP9VQiL/V0Ek/008Iv9HQTP/yc3P/6Wus/8AAAC5AAAAFf///wEAAACr+Pj4/5uamP9tY0L/g31b/6GLa/+McVH/eFY5/4xwUv9yXkD/RTki/4uMiv+nsLT/AAAAuQAAABX///8BAAAAq/n6+v+FfXL/waSM/8qznf/DrZP/ooFi/7WfhP+qh2//blk9/1A+Iv9aWlH/pK2x/wAAALkAAAAV////AQAAAKv6+/v/d3Rr/9zCsP/RxbH/z8Wu/9fJt//Qvab/qItv/5iOb/9tYUH/VVJK/6Wtsf8AAAC5AAAAFf///wEAAACr+/z8/4mHff+3pI//3NK//+HXxf/m3Mz/5trJ/9rMuf+bgWT/d14//2hnYP+osbX/AAAAuQAAABX///8BAAAAq/z9/f/FxL7/j4l+//Xw5f/29ez/8/Dl/+DMuv/VuaP/poZn/2dFKv+srav/oamt/wAAALkAAAAV////AQAAAKv+/v7/+/z8/5iZjf+5uqr/6+PW/+3i1P/kzL3/vZR+/4NhSf+Qh3z/z9HS/4qQkv8AAAC1AAAAFf///wEAAACr/v7+//7+/v/u7u3/tbiv/5WSgP+DfGj/e25Z/29gTv+sppz/vr6+/5aYmP90eHr/AAAApwAAABP///8BAAAAq/////////////////7+/v/9/f3//f39//v8/P/5+fn/1dXV/2pqav9TU1P/QUFB/wEBAYkAAAAJ////AQAAAKv7+/v//////////////////v7+//7+/v/+/v7/+vr6/9fY2P/V1tb/7Ozs/4KCgv8EBAQrAAAAA////wEAAACFlJSU/6ioqP+qqqr/qqqq/6qqqv+qqqr/qKio/6anp/2kpaX9o6Oj/4qKitUZGRk9////Af///wH///8BAAAAFQAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABTBAQEUx8fH1dfX18z////Af///wH///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w==";
var saveImg6 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABKklEQVR42mNkQAMNDAxCQMoTiB2BWAEq/ACI9wPxdqD8O2T1jGiao4HUEgb8IAaobimGAUDBGiDVzEAcqAWqb4EbQKTNWF3CCPXzW5ho/f//YDqHkZFhCpQNA7lAMV4gzY4QEmZEtx1mgCtQ8W4o2xLIPg5lJwDZUghDYkAGzAEyktENMAQqPA9l6wDZEkB6D6Yhc0EG7AGynfEZYAxkawHpxVC+A5CvC6RFGBj2Em2AIZCeg8Q3BtLSUAMIegGkwQBIz8U0YC7OQEQ2wAjIPoekGRQTUC/E4IxGkMKzaNEI8jso4chDbGdgA0UjekJ6A8S3gRikFWQyKOF/higGR50UFLPBEhLM9AZoUv4F1cAA1QTi/2SAJFkQnxdCoyZlJEPIz0xIhpCUnQFx83abgfUZOQAAAABJRU5ErkJggg==";
var saveImg7 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAASUlEQVR42mNkoBAw0s6ABob/aHxGkg1I8zEGM2dtOTskDED3MxCgGIBpASOGATANhACyi6hrAGVeoDgQB6UB2PxMvAFEAooNAAC7izYR2pQ0nAAAAABJRU5ErkJggg==";
var loadImg = "data:image/x-icon;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////AQAAAB+yg2l71ZRt+daTa//Wk2v/1pNr/9aTa//Wk2v/v4NlywYEAycAAAAX////Af///wH///8B////Af///wHdo4M53Zx3/+Sgef/innb/4p52/+Kedv/lo3r/5aR6/+mqgfvPj27N////Af///wH///8B////Af///wH///8B4KSD8+mmff/opH3/56N6/+Whef/no3r/66qB/8KBXf/Fg1//0Y5s78+Pbqn///8B////Af///wH///8B////AeGlg//trIX/7ayE/+6thP/urIX/9bWL/8eFYf/GhF//yYZh/9SPa/nkn3j/////Af///wH///8B////Af///wHkn3j/76+G/+6uh//vrob/76+G//W3jP/GhF//y4di/9ONZ//XkWr/5J94/////wH///8B////Af///wH///8B5J94/++wif/wsIj/8LGJ//CxiP/0toz/y4di/8+KZf/vroP/766D/+SfeP////8B////Af///wH///8B////AeSfeP/xs4v/8bOL//Cziv/ws4v/87WL/9CNa+3QjWvt3p96/96fev/en3r/////Af///wH///8B////Af///wHkn3j/8rWN//K2jf/ytY3/8rWN//O2jvfdo4Lj0I5sJdCObCXQjmwl0I5sJf///wH///8B////Af///wH///8B5J94//O3j//zuI//87iP//O4j//zuZDx3aOD7////wH///8B////Af///wHdo4M/5J94/+SfeP/kn3j/5J94/++2j//zupH/9LqR//O6kv/0upL/87qR/+SfeP/kn3j/5J94/+SfeP////8B////Af///wHkoXr/9cCY//W8k//0vJT/9L2T//S8lP/0vZT/9LyU//S8lP/1vJT/9cCY/+Shev////8B////Af///wH///8B9b+WC+SjfP/2yqP/9b+W//a/lf/2v5X/9b6V//W+lv/1vpX/9sqj/+SjfP////8B////Af///wH///8B////Af///wH2wZgX5aZ+//fTrP/2wJj/9sCY//bAmP/2wZj/99Os/+Smf/////8B////Af///wH///8B////Af///wH///8B////Af///wHkqYH/99ax//fCmv/3wpn/99aw/+Sogf////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AeWrhP/317L/99ey/+WrhP////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B5a2F/+Wthf////8B////Af///wH///8B////Af///wH///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w==";
var saveImg5 = "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU1FQr1FRT7BRUU+wUVFPsFFRT7BRUU+wUVFPsFFRT7BRUU+wUVFPsFFRT7BRUU+wU1FQrwAAAAAAAAAAAAAAAHd0cpz//////////////////////////////////////////////////////////3d0cpwAAAAAAAAAAAAAAAB4d3Sc/////+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg//////94d3ScAAAAAAAAAAAAAAAAenh3nP/////i4uL/4uLi/5yiz/9HYcT/PWrR/1qQ3P+nuNr/4uLi/+Li4v//////enh3nAAAAAAAAAAAAAAAAH18eJz/////5OTk/2FluP8IJ6r/D1TU/wli4v8FZeb/D3He/4y+5f/k5OT/+/v7/318eJwAAAAAAAAAAAAAAACBfXyc/////5Wc0v8JKq//E2Pd/yFTrv9EKTn/LjVZ/xaF2/8OdNP/zNnm//z8/P+BfXycAAAAAAAAAAAAAAAAhIGBnP////89Xc7/Dk7N/wpQ0/8zVp//TGCK/4U2Cf9DW2b/Eqj7/5C+5//8/Pz/hIGBnAAAAAAAAAAAAAAAAIaEgZz/////Kmnf/wlFzf8gPZ7/uXcl/8OAK/+UTBL/b1Az/zfG9f9srdX/+fn5/4aEgZwAAAAAAAAAAAAAAACJhoac/////0iN6P8HQtH/EVzd/2mCqf/dqkz/0pY6/6FnKv9Nvt7/kMfs//X19f+JhoacAAAAAAAAAAAAAAAAiomJnP////+Mr+r/FFnU/xVRyv+LorL/8Oqh//nXbP+5omH/Urvf/8bj7v/s7Oz/iomJnAAAAAAAAAAAAAAAAI6Kipz/////2+n3/5aSm/+hcEn/4uXC////2P/25KD/rqSD/7HR5//o6Oj/4eHh/46KipwAAAAAAAAAAAAAAACPjo6c//////j4+P/4+Pj/3s/F/9i/n//p27n/5NG0/+7r6f/r6+v/3t7e/9LS0v+Pjo6cAAAAAAAAAAAAAAAAk4+PnP/////6+vr/+vr6//r6+v/6+vr/+vr6//j4+P/19fX/r66t/62sq/ObmprrkI2NpgAAAAAAAAAAAAAAAJOTk5z//////Pz8//z8/P/8/Pz/+/v7//r6+v/4+Pj/9fX1/66trfHs7Ozrp6emp4aGhhMAAAAAAAAAAAAAAACWlpOc/////////////////v7+//39/f/6+vr/9/f3//Pz8/+bmprrp6enp3NzcxYAAAAAAAAAAAAAAAAAAAAAmJiWnJiYlpyYmJacmJiWnJeTk52SkZGemJiWnJeTk52SkZGej4+LpIaGhhMAAAAAAAAAAAAAAAAAAAAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACABwAAgA8AAA==";
var moveToMenu = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABKElEQVR42o3TMUvDQBQH8P+7tLlEwaW4ugl+iU6CCA4i0tbdqavgZ/ErCE79DsVBkYpKLR2kuApOatG297zLJWkqXnIPwrsk937cveQIJXHZBZt8cgFyzaEqYGuTvl7feM2FVAIHR8Bj341UAu1T4PPdjXgBJgzyPKDFy4SDIkJZo1yRASZ+FDB5Itzfct7YBGjuBBBh6oT6ed2OazGjsV3wQ2Cu64bXUKM7FgZJgPaufinTSVFhrDPFheVIe01nwLgfq9HNVCRAaw8Q6USWS4B05mgVIH2/qG+ABh+46im7heP9EELOLRDZpVqAQev8ZwUS/DBLivMtlDWxc7Ycs6yBhyov9vqMGcBBDB5/rxT7/Qfntjn/FXsDrmIvoHUonMVegMllx/kXlvSRMQ0GPE4AAAAASUVORK5CYII=";
var removeFromToolbar = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACMElEQVR42p3Sz2/SUBwA8G9pgQJd6QYZQQkOjUFdXMCLMn9B4l3myRgXhydPZgcTY2KyLfGiF/wT9GTmhfIXjMQ4NP5YD5qZTGdVdEx+9FVKSwttrTV4QD3AN3mH9837fr7v+/Kww1e4ic2HiSYMRGxufcHjxs87nQ5GN0zodnXQNLVomvCAL6ZR/xxmAS9VsX1umz1pJ/dfKGeD4+58OERNYQQO7Y4BWs8E3XCAqvRAEkWkdpTcNptm+4DpMVUOtboZl4tY2reXWmTGvbDTVKFnALicTrvYsFqbpgEOBw6tpgiigOb4Yoa1gTMzY1B+XUexKM1gLid8a3QgQHtBklQQBJm3RuAxDBiPl0z4aMq+eu1rFYmiFLOBowd8QJEEiLIBlbpV7PdArdZCApJX3j9O3e/Pe/Di0zTpJgvB8CSjSG1o7O7mbCA04QIHjoGsGuAfI6FRk0D8ISe3VlPc4OPGL61nab+/QDE0VD9/+T1CKOCCtqoDQRBAe0n4yH/nZUVLVtjTCP4R8cvPN8LRSKL6qVKygUjIC0rXAAMw6+EI6GkmoGaDM0DP8KuzfyHx+WfLe6KRpdpOlbMB+E9oWof78OhEcjB/5OqLbHAyUEB1oYTBCDFz7VWaYZg11BTYkYBj17lFyu3Lo5aYGwk4fuNNHgd8QVHk2EjA7K3NDVM3iuV708tDA2dXtqb0rr5mrWT57jQaGjh1+13eKio+uXOo9Gs/NJC6+TZhdf7zQ38Ceg0HgF1MCP0AAAAASUVORK5CYII=";
var iconADD = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACDUlEQVR42nWT30sUURTHz91Zd9FkVBRrX0oScTMI8weSIYSU/QMFbb5oGAn+AQo9B/UH9BAF+lIr+OLrSETQQ4GhEVRrUFkP/SLRNcvUnXv8nrmz7XVcB86cy7nn+5kz556ryHrueKxIYcFkPMmbxXHgzA6NDyguatQewBzHkKMMQDnWPgDsIwYh8/hATP8HQCRJEFIc5iA1DpljZIGogJU/9WXp39DR1pj99QBwe45dZb6UhCXE2Hx6m4xtQZQ/8SDni+DdSNopVYtysUiFpVbDqp4vPL4uCWc6zt+H+wvbAOBrCBCRFgh0AtIA6BboBVADc6eeZLMCGOq/kkF8Hcs8AO8tgDwav5M0AI/bw87Xw9dml+bvSUamtfsGYmuIrQDwKgIoQirkF3pR9uCbz28vx+tTMWo6VRdsL79eLax80yePtc3MTlwYKwMIT8HTvYufFkc+bq4NOjWN9Kf6cIVsHNr4sePnf9LxytqH06Od1w6oICGA9uZGOnvEpb7tgkrefLl8UXZvdTV5CYe3vv9Wzy6dVnfL9KAKfkcALeihaSKT+yj3Imji1XRPBvFyTTSn4LHMi5Y5SCnrGFc3c5MCqKtMD5c5RnsOisfILlmD1NxA5yThwy96GhkkRtlxrP3oIO0d5ZKXfSSbUYaJ1/tGef9lovAyUeQyAaKCO4nLpPRBABWJlwCWt6vYBccZ9A793wmLAAAAAElFTkSuQmCC";
var customBtn = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAjVJREFUeNqcUkuIUmEUPl4fML6bBsFRacRF2EaCcRO48bFLEIJcBIJLxb2b2UWLkIEgQQjauVFaKmgYuclUTMUHKoaKE4GPxnxh5r3ezh0QHJFmmA/OPZfDfx7fdw7AfojQ7qGx4QawdgMymeyRyWR6IZVKucFg8N10Ov0Ot4VGozmNRCLx5XL5F/HHbrefYZh7m1yWWq0+TafTn2kEdqXr9TrtcDje3JR4xRHH1QYCgXOz2Wzs9/sQj8dBIpEATtGrVqu9yWSywmdLNGq3AAeNsFgsz202mxk7QzKZBK1WCzqdjtHjKUmSx41Go4L+slQqpYvF4keKoibXpnA6nWfY+VehUKBSqRTJ0Oh2u3Qul6MHgwE9Ho9pLMD4H16v95zD4RxuU6BbrdYlPh5g8tfFYvET9XiIiRylUsnQgPl8DtgVhsOheL1eS6LRaGy1Wg02FAA5VmKxWB1/yUQioWOxWHKXy2XEYsDQEggEgKJCJpOBcrnMbOliW4MNSOaDCbVKpVISCoVGHBnQQygUgnK1AkeH9z+Ew+HX2xoQezZDjUaj3ygDiMViaLfbV8kK+TGw2WysJzzafry3QK1W+9Lr9RpIDbLZLEhE4vedTsdvMBieuN3ulwRBPLh2B7uYzWYXzWZzjBoc5PP5MJ70K1xfEsVc4cpNeDcnuLFvzM3978gILpcrRy/w+XybGE+v1z/z+/2frFarG9d5AHeBSqUyeDyetwqF4jHcFXw+/4TH44n+CTAA3Ccog288LRAAAAAASUVORK5CYII=";
var saveAll = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACOElEQVR42mNkwAJ+7xf7//3tKwZeIUELRqf3JxnwAEZkzrtlwnv/MzE6/WfkWCwS/iTu7RLO/wzMPAwc/z4Lc0f/eIfTgP/7BM0PXDY5ofB9N8M/EB8k+BcoyQw1mEWd4SurLIO97lkUFzX9b/oPNmBznc7/////MbAzfIdoBoI/P77Abfnzn4XhH9A0kOLA7icQV88HKn0EdcH6Ss3/yM76/f0jg2vTXYZ/f39j9fdUgQkMdTp1DNFXoiEGrCzFNMCj6SrD/79/MDQzsbAzCEfyMTBwADkbGBjBBiwrRDXgF9AAz6ZLWF1QIlHCsFRnKdj2pYxLIQYsytPAMMC75SLYBVMkpzDkPM+By0lFSTEwCDAwvJ79eouoqKgv2IB5WWgGfPvI4N95kUEyQQwcJVXbq8CGeEp6MlzUuQi2fcKbCQgDZqWhG/CJIaDrLIPMf0kGBjeggAoDw5YNWxh8rHwYGMQZGB5PfszAysq6RUJCAmLAtCR1DAMCu08zzJSZxtDm0cbA8AQoyAxJGyDbWx+2MrCwsGyRkZGBGDApDpsBx8FhME95HkObfhtYM4MqA8OdnjtgNSAXyMvLQwzoi8JmwGF4NGoc12Bg6IHYXnuzFm6AsrIyxIAJ+UHXfj27oomIhc9AA/ajpAOdPToMV1yuwPnMzMxbNDU14QaEAqnGH28fqYGywt/fP5i8q5czYUtIMABygY6ODsSAJUuWOKMrUFHT2PPvzy90YZhX/79//36dt7d3KACPfPJHOU7GxAAAAABJRU5ErkJggg==";

let cIDs = ["custombuttons-contextpopup-exportXML",
            "custombuttons-contextpopup-exportXML-sub"];
let bIDs = ["custombuttons-contextpopup-bookmarkButton",
            "custombuttons-contextpopup-bookmarkButton-sub"];
addMenuItem(cIDs, bIDs, "Сохранить код кнопки в XML файл", saveImg,
            "document.getElementById('" + this.id
          + "').saveXML(('triggerNode' in this.parentNode) "
          + "? this.parentNode.triggerNode.URI "
          + ": document.popupNode.URI);", "X");
let xIDs = ["custombuttons-contextpopup-importnewbutton",
            "custombuttons-contextpopup-importnewbutton-sub"];
let aIDs = ["custombuttons-contextpopup-addnewbutton",
            "custombuttons-contextpopup-addnewbutton-sub"];
addMenuItem(xIDs, aIDs, "Добавить кнопку из XML файла\u2026", loadImg,
            "document.getElementById('" + this.id +
            "').checkDocumentForCBXML(content.document);");          
let fIDs = ["custombuttons-contextpopup-copyImageURI",
            "custombuttons-contextpopup-copyImageURI-sub"];
let b2IDs = ["custombuttons-contextpopup-copyURI",
            "custombuttons-contextpopup-copyURI-sub"];            
addMenuItem(fIDs, b2IDs, "Копировать изображение кнопки в формате base64", saveImg1,
            "document.getElementById('" + this.id
          + "').copyImageURI();");
let f1IDs = ["custombuttons-contextpopup-saveButtonImage",
            "custombuttons-contextpopup-saveButtonImage-sub"];
addMenuItem(f1IDs, cIDs, "Сохранить изображение кнопки", saveImg1,
            "document.getElementById('" + this.id
          + "').saveImageURI();");  
let f2IDs = ["custombuttons-contextpopup-copyButtonsCodeText",
            "custombuttons-contextpopup-copyButtonsCodeText-sub"];
addMenuItem(f2IDs, b2IDs, "Копировать код кнопки как текст", saveImg2,
            "document.getElementById('" + this.id
          + "').copyButtonsCodeText();");                    
let f3IDs = ["custombuttons-contextpopup-copyAsHTML",
            "custombuttons-contextpopup-copyAsHTML-sub"];
addMenuItem(f3IDs, b2IDs, "Копировать код кнопки как HTML ссылку", saveImg3,
            "document.getElementById('" + this.id
          + "').copyToHTMLCode();");
let f4Ds = ["custombuttons-contextpopup-copyToBBCode",
            "custombuttons-contextpopup-copyToBBCode-sub"];
addMenuItem(f4Ds, b2IDs, "Копировать код кнопки как BBcode сылку", saveImg4,
            "document.getElementById('" + this.id
          + "').copyToBBCode();");          
let f5Ds = ["custombuttons-contextpopup-saveAsHTML",
            "custombuttons-contextpopup-saveAsHTML-sub"];
addMenuItem(f5Ds, bIDs, "Сохранить код кнопки в HTML файл", saveImg5,
            "document.getElementById('" + this.id
          + "').saveToHTMLCode();");
let f8Ds = ["custombuttons-contextpopup-saveAsHTMLAll",
            "custombuttons-contextpopup-AsHTMLAll-sub"];
addMenuItem(f8Ds, f5Ds, "Сохранить все кнопки в HTML файл", saveAll,
            "document.getElementById('" + this.id
          + "').saveToHTMLALLCode();");          
let f6Ds = ["custombuttons-contextpopup-getButtonId",
            "custombuttons-contextpopup-getButtonId-sub"];
let b1IDs = ["custombuttons-contextpopup-remove",
            "custombuttons-contextpopup-remove-sub"];            
addMenuItem(f6Ds, b1IDs, "Показать Id кнопки", saveImg6,
            "document.getElementById('" + this.id
          + "').idMIonclick(content.document);");
let f7Ds = ["custombuttons-contextpopup-addNextButton",
             "custombuttons-contextpopup-addNextButton-sub"];
                                        
var addMI = document.getElementById('custombuttons-contextpopup-addnewbutton');
addMI.setAttribute('image', iconADD);
var addMI1 = document.getElementById('custombuttons-contextpopup-addnewbutton-sub');
addMI1.setAttribute('image', iconADD);
var addMI2 = document.getElementById('custombuttons-contextpopup-move-moveToPanel');
addMI2.setAttribute('image', moveToMenu);
var addMI3 = document.getElementById('custombuttons-contextpopup-move-removeFromToolbar');
addMI3.setAttribute('image', removeFromToolbar);
var addMI4 = document.getElementById('custombuttons-contextpopup-customize');
addMI4.setAttribute('image', customBtn);

var saveToFile = function (fileContent, fileName) {
    var uc = Components.classes['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    uc.charset = 'utf-8';
    fileContent = uc.ConvertFromUnicode(fileContent);

    var nsIFilePicker = Components.interfaces.nsIFilePicker;
    var fp = Components.classes['@mozilla.org/filepicker;1'].createInstance(nsIFilePicker);
    fp.init(window, '', fp.modeSave);
    fp.defaultString = fileName;
    fp.appendFilters(fp.filterHTML);
    fp.appendFilters(fp.filterAll);
    fp.open(function (rv) {
  if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
    var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(fp.file, 0x02|0x20|0x08, 0666, 0);
    stream.write(fileContent, fileContent.length);
    stream.close();
  }
});
};


function readFile(aFile) {
  var data = "";
  var fstream = Cc["@mozilla.org/network/file-input-stream;1"].
                createInstance(Ci.nsIFileInputStream);
  fstream.init(aFile, -1, 0, 0);
  var charset = "UTF-8";
  const replacementChar = Ci.nsIConverterInputStream
                            .DEFAULT_REPLACEMENT_CHARACTER;
  var is = Cc["@mozilla.org/intl/converter-input-stream;1"].
           createInstance(Ci.nsIConverterInputStream);
  is.init(fstream, charset, 1024, replacementChar);
  var str = {};
  while (is.readString(4096, str) != 0) {
    data += str.value;
  }
  is.close();
  return data;
};

function stringToDOM(aString) {
  var parser = new DOMParser();
  var dom = parser.parseFromString(aString, "text/xml");
  if (dom.documentElement.nodeName == "parsererror") {
    return null;
  } else {
    return dom;
  }
};

function importXMLtoButton(aStrXMLData) {
  loadURI("custombutton://" + escape(aStrXMLData));
};

function getCBOverlay() {
  var dirsvc = Cc["@mozilla.org/file/directory_service;1"].
               getService(Ci.nsIProperties);
  var file = dirsvc.get("ProfD", Ci.nsIFile);
  file.append("custombuttons");
  file.append("buttonsoverlay.xul");
  return file;
};

this.checkDocumentForCBXML = function checkDocumentForCBXML(aDocument) {
  if (((aDocument.contentType == "text/xml") ||
       (aDocument.contentType == "application/xml"))&&
      (aDocument.documentElement.localName == "custombutton")) {
    var serializer = new XMLSerializer();
    var xml = serializer.serializeToString(aDocument);
    importXMLtoButton(xml);
  } else {
    this.loadXML();
  }
};



this.loadXML = function loadXML() {
  var fp = window.makeFilePicker();
  fp.init(window, "Установить кнопку из XML файла",
          nsIFilePicker.modeOpen);
  fp.appendFilters(fp.filterXML);
  fp.appendFilter("Все файлы", "*.*");
  fp.displayDirectory = FileUtils.File( getPathToHtmlFileFolder() );
  
  fp.open(re=> { 
      if ( re == fp.returnOK ) gBrowser.selectedTab = gBrowser.addTab(fp.file.path);
   })

  var xmlData = readFile(fp.file);
  var xmlDOM = stringToDOM(xmlData).documentElement;
  if (!xmlDOM) {
    custombuttons.alertBox("Импорт не удался", "Это не XML файл!");
    return;
  }

  if ((xmlDOM.localName == "custombutton") &&
      ((xmlDOM.getAttribute("xmlns:cb") == cbNamespace) ||
       (xmlDOM.getAttribute("xmlns") == cbNamespace))) {
    importXMLtoButton(xmlData);
  } else {
    custombuttons.alertBox("Импорт не удался", "XML файл не содержит кнопок!");
  }
}


this.copyImageURI = function copyImageURI() {
    var btn = document.popupNode;
    if (!btn) return;
    cbu.gClipboard.write(btn.image);
  var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
  as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "Изображение кнопки скопировано в буфер", false, "", null);
}

this.copyToHTMLCode = function copyToHTMLCode() {
  var btn = document.popupNode;
  if (!btn) return;
  var code = "<p><div id=\"install\" style=\"background: transparent -moz-linear-gradient(center top , rgb(224, 102, 255) 30%, rgb(125, 38, 205) 55%); text-shadow: 0pt -1px 0pt rgb(122, 55, 139); border: 1px outset rgb(85, 26, 139); border-radius: 1em; padding: 0; width: 240px; text-align: center;\"><a href=\"" + btn.URI + "\" style=\"display: block; padding: 1em; color: #ffffff; text-decoration: none;\" title=\"Click here to install " + btn.name + "\" rel=\"nofollow\"><img src=\"" + btn.image + "\" alt=\"" + btn.name + "\" style=\"vertical-align: middle; float: left;\"/>" + btn.name + "</a></div></p>";
  cbu.gClipboard.write(code);
  var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
  as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "HTML кнопки скопирован в буфер", false, "", null);

}

this.copyToBBCode = function copyToBBCode() {
  var btn = document.popupNode;
  if (!btn) return;
  var code = "[url=" + btn.URI + "][B]" + btn.name + "[/B][/url]";
  cbu.gClipboard.write(code); //.toXMLString());
  var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
  as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "BBCode кнопки скопирован в буфер", false, "", null);
}

this.saveImageURI = function saveImageURI() {
  var btn = document.popupNode, br = gBrowser;
  if (!btn) return;
  if(btn.image != "") {
      var tab = br.mCurrentTab;    br.selectedTab = br.addTab(btn.image);
        setTimeout( function() {    window.content.document.title = btn.name;
                        saveDocument(window.content.document);
                        //br.removeCurrentTab();    
                        //br.selectedTab = tab;
        }, 200); 
  } else custombuttons.alertBox("Эта кнопка не имееет изображения!");
}

 
this.copyButtonsCodeText = function copyButtonsCodeText() {
  var btn = document.popupNode;
  if (!btn) return;
  var code = ((btn.cbCommand == "") || (btn.Command == "/*CODE*/"))
              ? ""
              : ("\n/*CODE*/\n" + btn.cbCommand + "\n");
    var init = ((btn.cbInitCode == "") || (btn.cbInitCode == "/*Initialization Code*/"))
              ? ""
              : ("\n/*Initialization Code*/\n" + btn.cbInitCode);
    cbu.gClipboard.write(code + init);
    //custombuttons.alertSlide(btn.name, "Код скопирван в буфер");
    var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
        as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "Код скопирван в буфер", false, "", null);

}



this.createNextButton = function(aButton) {
  custombuttons.cloneButton(aButton, true);
  
    window.setTimeout(function(){
      if(!aButton.nextSibling.hasAttribute('initialized')) {
        custombuttons.editButton(aButton.nextSibling);
      }
    })
  
}

this.saveXML = function saveXML(aStrURI) {
  var cbURI = (aStrURI != undefined) ? aStrURI : readFromClipboard();
  if (!cbURI || !/^custombutton\:\/\//.test(cbURI)) {
    custombuttons.uChelpButton(this);
    return;
  }

  var cbXML = cbURI.replace(/^custombutton\:\/\//, "");
  var decodeXML = unescape(cbXML);
  var btnName = decodeXML.match(/\<name\/?.+/).toString();
  var name = "untitled";
  if (!/\<name\/\>/.test(btnName)) {
    name = btnName.replace(/\<\/?\w+\>/g, "").toString();
  }
  var image = decodeXML.match(/\<image\/?.+/).toString();
  var icon = "";
  if (!/\<\image.*\[\].*\>$/.test(image)) {
    icon = image.match(/[^\[\]]+/g)[2].toString()
                .replace(/custombuttons\-stdicon\-\d/, "").toString();
  }

  function htmlEntities(str) {
      return str.replace(/&/g, "&amp;").replace(/</g, "&lt;")
                .replace(/>/g, "&gt;").replace(/"/g, "&quot;");
  }

  var xmlTemplate = "custombuttons/\"\n\
              xmlns:html=\"http://www.w3.org/1999/xhtml\">\n\
  <html:head>\n\
    <html:title><![CDATA[" + name + "]]></html:title>\n\
    <html:link rel=\"shortcut icon\" href=\"" + icon + "\"/>\n\
    <html:style type=\"text/css\"><![CDATA[\n\
body { font-size: medium; margin: 0; }\n\
body, code:before, help:before, initcode:before {\n\
  font-family: \"Verdana\", sans-serif;\n\
}\n\
#wrapper { position: fixed; top: 1em; right: 1em; text-align: center; }\n\
p { font-size: small; text-align: center; }\n\
#button {\n\
  background-color: rgb(85, 168, 2);\n\
  background-image: linear-gradient(to bottom, rgb(147, 200, 94),\
 rgb(85, 168, 2));\n\
  background-image: -moz-linear-gradient(top, rgb(147, 200, 94),\
 rgb(85, 168, 2));\n\
  background-image: -o-linear-gradient(top, rgb(147, 200, 94),\
 rgb(85, 168, 2));\n\
  background-image: -webkit-linear-gradient(top, rgb(147, 200, 94),\
 rgb(85, 168, 2));\n\
  border: 1px solid rgb(58, 116, 4);\n\
  border-radius: .5em;\n\
  -moz-border-radius: .5em;\n\
  -webkit-border-radius: .5em;\n\
  padding: 0;\n\
  margin-bottom: 1em;\n\
  box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
  -moz-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
  -o-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
  -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
}\n\
#button a {\n\
  color: #000;\n\
  text-shadow: -1pt -1px 0pt rgba(255, 255, 255, .5);\n\
  padding: 1em;\n\
  text-decoration: none;\n\
}\n\
:-moz-any-link:focus {\n\
  color: white;\n\
  outline-color: transparent;\n\
  text-decoration: none;\n\
}\n\
#button a, code, code:before, initcode, initcode:before, help, help:before {\
\n  display: block;\n\
}\n\
#credits { position: fixed; bottom: 1em; right: 1em; font-size: small; }\n\
custombutton { background-color: rgb(171, 171, 171); margin: 1em; }\n\
date, image, mode, accelkey { display: none; }\n\
name { font-weight: bold; font-size: x-large; }\n\
code:before, help:before, initcode:before {\n\
  font-weight: bold;\n\
  font-size: large;\n\
  margin: 0 0 1em;\n\
  padding: .5em;\n\
}\n\
code:before { content: \"Код\"; }\n\
help:before { content: \"Справка\"; }\n\
initcode:before { content: \"Инициализация\"; }\n\
code, initcode, help {\n\
  background-color: rgb(255, 255, 255);\n\
  border: 1px inset rgb(170, 170, 170);\n\
  font: medium monospace;\n\
  margin: 1em 1em 2em 0;\n\
  padding: 1em;\n\
  text-align: left;\n\
  width: 840px;\n\
  white-space: pre-wrap;\n\
  word-wrap: break-word;\n\
}\n\
.clear { clear: both; }\n\
]]></html:style>\n\
  </html:head>\n\
  <html:body>\n\
    <html:div id=\"wrapper\">\n\
      <html:div id=\"button\">\n\
        <html:a href=\"" + cbURI + "\" rel=\"nofollow\" title=\"Установить " +
        htmlEntities(name, "ENT_COMPAT") +"\">\n\
        <![CDATA[Установить кнопку]]>\n\
        </html:a>\n\
      </html:div>\n\
      <html:div id=\"credits\">\n\
        <html:a href=\"" + topicURL +"\">\n\
          <![CDATA[Другие кнопки]]><html:br/>\
<![CDATA[на форуме Mozilla Россия]]>\n\
        </html:a>\n\
      </html:div>\n\
    </html:div>\n\
  </html:body>";

  decodeXML = decodeXML.replace(/custombuttons\/\"\>/, xmlTemplate);

  name += ".xml";
  saveToFile(decodeXML, name);
 var btn = document.popupNode;
 var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
 as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "сохранена в XML файл", false, "", null);
}
var mrw = mostRecentWindow('navigator:browser');
var css = '@-moz-document url("chrome://browser/content/browser.xul"){' + this.Help + '}';
var uri = makeURI('data:text/css,' + encodeURIComponent(css));
var sss = Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService);
if (!sss.sheetRegistered(uri, sss.USER_SHEET)) sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
this.idMIonclick = function idMIonclick() {
  var btn = document.popupNode.id;
  var box = custombuttons.confirmBox("Копировать в буфер", btn, "Да", "Нет");
  if (box) {
    custombuttons.cbService.writeToClipboard(btn);
    custombuttons.alertSlide(btn, "Скопирована в буфер");
} }
function  mostRecentWindow(windowType) {
  return Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow(windowType);
}

this.saveToHTMLALLCode = function saveToHTMLALLCode() {
 var fp = window.makeFilePicker();
   fp.init(window, "Укажите папку для экспорта CB кнопок!", fp.modeGetFolder);
   fp.open(re=> { 
      if ( re != fp.returnOK ) return;
      cbu.setPrefs("CB.exportsButtonsToHtmlFile.path", convertFromUnicode("UTF-8", fp.file.path));
      
      exportsButtonsToHtmlFile();
   })
};


this.saveToHTMLCode = function saveToHTMLCode() {

  

 var btn = document.popupNode;
  var xml = '<html xmlns="' + e4xConv_encodeHTML(xhtmlns, true) + '">\n\
    <head>\n\
    <meta http-equiv=\'Content-Type\' content=\'text/html; charset=utf-8\'/>\n\
      <title>' + e4xConv_encodeHTML(btn.name + ' for Custom Buttons') + '</title>\n\
      <link rel=\'icon\' type=\'image/vnd.microsoft.icon\' href="' + e4xConv_encodeHTML(btn.image, true) + '"/>\n\
             <style type="text/css">\n\
.button a{\n\
  background-color: rgb(85, 168, 2);\n\
  background-image: linear-gradient(to bottom, rgb(147, 200, 94), rgb(85, 168, 2));\n\
  background-image: -moz-linear-gradient(top, rgb(147, 200, 94), rgb(85, 168, 2));\n\
  border: 1px solid rgb(58, 116, 4);\n\
  border-radius: .5em;\n\
  -webkit-border-radius: .5em;\n\
  padding: 0;\n\
  margin-bottom: 1em;\n\
  box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
  -o-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
  -webkit-box-shadow: 1px 2px 3px rgba(0, 0, 0, .25);\n\
    color: #000;\n\
  text-shadow: -1pt -1px 0pt rgba(255, 255, 255, .5);\n\
  padding: 0.5em;\n\
  text-decoration: none;\n\
}\n\
pre { border: 1px inset rgb(170, 170, 170); \n\
     background-color: rgb(255, 255, 255);}\n\
body { background-color: rgb(245, 245, 220);} \n\
</style> \n\
    </head>\n\
    <body>\n\
     <section id=\'install\'><h1>' + e4xConv_encodeHTML(btn.name) + '</h1>\n\
      </section>\n\
      <div class="button"><a href="' + e4xConv_encodeHTML(btn.URI, true) + '">Установить кнопку</a></div>\n\
      <section id=\'init\'><h2>Инициализация</h2><pre>' + e4xConv_encodeHTML(btn.cbInitCode) + '</pre></section>\n\
      <section id=\'code\'><h2>Код</h2><pre>' + e4xConv_encodeHTML(btn.cbCommand) + '</pre></section>\n\
      <section id=\'help\'><h2>Справка</h2><pre>' + e4xConv_encodeHTML(btn.Help) + '</pre></section>\n\
    </body>\n\
  </html>';
  var html = '<!DOCTYPE html>\n' + xml;
  
  var name = btn.name + ".HTML";
  saveToFile(html, name);
 
  var as = Cc['@mozilla.org/alerts-service;1'].getService(Ci.nsIAlertsService);
  as.showAlertNotification(btn.image, "Кнопка: " + btn.name, "сохранена в HTML файл", false, "", null);
}




function e4xConv_parseXULFromString(xul) {
    xul = xul.replace(/>\s+</g, "><");
    return new DOMParser().parseFromString(xul, "application/xml").documentElement;
}
function e4xConv_encodeHTML(s, isAttr) {
    s = String(s)
        .replace(/&/g, "&amp;")
        .replace(/</g, "&lt;")
        .replace(/>/g, "&gt;")
        .replace(/"/g, "&quot;");
    if(isAttr) {
        s = s
            .replace(/\t/g, "&#x9;")
            .replace(/\n/g, "&#xA;")
            .replace(/\r/g, "&#xD;");
    }
    return s;
};



function exportsButtonsToHtmlFile() {
   var visibleCBbuttons = [...document.querySelectorAll('[cb-mode]')];
   var paletteCBbuttons = [...custombuttons.palette.querySelectorAll('[cb-mode]')];
   var allCBbuttons = visibleCBbuttons.concat(paletteCBbuttons);

   var array = [];
   allCBbuttons.forEach(but=> {
      if ( !but.URI ) return;
   
      var name = but.getAttribute("label") || "Без названия";
      if ( but.URI.endsWith("custombutton%3E") ) var uri = but.URI;
      var image = but.getAttribute("image") || "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAACNFBMVEXDRgDweQDnbwC0NgDCRQC7PQDtpTu+QQD78q3PUwDCRAD//8vbYQDLTgDocAD0iQX1jQbGSgD7iAD4gwDVaw7vdwDyegD+igDweQDlawDyhAXveADmZwDzmBbtcwDwkhHveADmhBTkgxbweADkfRH+igD7hADXZQX0gADyjA/tfgvveQDiawDQVADRXgfnbwD1jAb9iQD9z0PVZAbxpinykRHtdgD5mRbERQDDRgDOYArCRAD9iQD3ewDxegD3dwDFRgDAQAD+hgD4fQDucgDtgQftfwTISQDCRQDvdgD5lxb1kRb2qh7wnynkagD766LDRQDDRwDDRQDspjbtpzbuqDbvqzv//8DUZAbCRQD//83pjhvveQbvggW+QQDfcxLlmUb//8veYADMTwDHSADVVwC8PgDwixb78q3oZgDUWADRVADCRQD9iQDERwDBQQDYVQC+PgC0NgDbYQDWWgDUWADSVQDFSAC+QAC7PAC0NgD+wRL+/kD+/zb+7i3+8Cv+/DX+wBL/+DD/rwz+qgz+rwz/tAz+sQzfbAT+3iP/+jD//Dz1jwP+nwf5iwf7pBz2tRr4lwb/ogfsdQT+2R7/9ET+2iT8yyLmgBL5iQL2egLokhP7zzT60zv1zUr0gAL1ewP50yn9+UL++EXooyngaAH41EPzowzyySj+xxzlhhHvvyruwjXxvTnUag3+zxrwigP+swz86U/ZXwD75lHqegD6xzb//kn+uhPTXAG3OAD/+UC2vFeJAAAAe3RSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAACfnwAIaelpAAA2+wD7UQAAa3oArKzRzMysnwgAvPQA/gAAw3prw0oALr16vS4AACnF6bspAAAA/mIAADQAAAAAAI8AAEwA0vv7kd2yAuuvr+vKABL23U+8Sk/d9vUDIIAQAAAQgCAfvupHAAABB0lEQVR4Xi3IU3fDABgA0C+u26FdZ9u2bdu2vZSzbds2/tyac3IfLxjpGyA6MimqY6gHTNgiiNwkwRM1E7EhTrYyTfMzzsh0ZEPiH+D6+u5mV1jEhpe5haVCYW1T4suEvUOkk7PLpVJ5WFnl7hEUDN5LPvsHJ6cazdn13f3DYxu0B35+/Y2qVSr17NzGeUgohIVHLK/PMDa39qKieRATGxd/9cS4uU1MwnmQktqY/qGlaVr7/ZOVDTmQm5df8PwyNj4xOTVdjOM4kCRZOr+wWFa+srpWQVEU8PnV2zu7NbV19UfHDQRBAIfTdNHc0soVdnR2dfdgGAgEvW99/QNc4eDQ8O8Ihv0D77NPgbVLZ6kAAAAASUVORK5CYII=";

      array.push("<img src=" + image + ">&nbsp<a href=" + uri + ">" + name +"</a><br>\n");
   });
   
   var before = "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n</head>\n<body>\n";
   var after = "\n</body>\n</html>";
   var text = before + array.join("") + after;
   var text = convertFromUnicode("UTF-8", text); 

   var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
   file.initWithPath( getPathToHtmlFileFolder() );
   file.append("CB buttons " + new Date().toLocaleFormat("%d.%m.%Y. %H·%M·%S") + ".html");
   custombuttonsUtils.writeFile(file.path, text);

   var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
   alertsService.showAlertNotification(saveImg5, "Экспорт в HTML", "Экспортировал все CB кнопки как HTML в " + file.path);
   setTimeout(()=> alertsService.closeAlert(), 4000);
};



function getPathToHtmlFileFolder() {     
   try { return Services.prefs.getComplexValue("CB.exportsButtonsToHtmlFile.path", Ci.nsISupportsString).data } 
   catch(e) { return "C:" };
};


function convertFromUnicode(charset, str) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = charset;
   str = converter.ConvertFromUnicode(str);
   return str + converter.Finish();
};

this.MoveToolbarButtons = MTB = {
    // Start editable preferences
    MoveButtonMICBContext: true, // Add "Move button" menu item to Custom Buttons context menu?
    MoveButtonMITBarContext: false, // Add "Move button" menu item to toolbars context menu?
    ShowMoveAlert: false, // Show the alert with instructions when moving buttons?
    MoveBtnImage: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAYklEQVQ4" +
        "jWNgGJTgaAXHf2LEcGrGZQBBQ45WcPz/fZ0XpwG45FAUEDIAqzyyJLIiZIxNHqdmYvHRCo7/DLhsIEYziivQDcHn" +
        "BawxgqyQUCzgjQlC6YCotEB2QkJWTIzY4AAAezv/caeCLKcAAAAASUVORK5CYII=",
    // End editable preferences

    _UID: "__cb_move_toolbar_buttons_" + custombuttons.getNumber(self.id),
    WindowIDs: ["main-window", "messengerWindow", "msgcomposeWindow"],
    ToolbarContexIDs: ["toolbar-context-menu", "aios-toolbar-contextmenu", "aios-sbhtoolbar-contextmenu"],
    Pref: "extensions.custombuttons.MoveToolbarButtons.Id" + custombuttons.getNumber(self.id) + ".MoveButtonID",
    SP: Services.prefs,

    Init: function() {
        if (!(MTB._UID in window)) {
            window[MTB._UID] = {
                Initialized: false
            };
        }

        if (!window[MTB._UID]["Initialized"]) {
            window[MTB._UID]["Initialized"] = true;
            custombuttons.isPref(MTB.Pref, "");

            if ("CustomizableUI" in window) {
                var originalFunction = custombuttons.persistCurrentSets.toString();
                eval("custombuttons.persistCurrentSets=" + originalFunction
                    .replace(", newButtonId)", ", newButtonId, aToRight)")
                    .replace("pos + 1", "aToRight ? pos : pos + 1"));
            }

            if (MTB.MoveButtonMICBContext) {
                var contextPops = document.getElementsByTagName("menupopup");
                let p = 0,
                    pLen = contextPops.length;
                for (; p < pLen; p++) {
                    var cPopID = contextPops[p].id;
                    if (cPopID.substr(0, 26) === "custombuttons-contextpopup") {
                        var cPopEl = document.getElementById(cPopID);
                        var moveMIID = "custombuttons-contextpopup-moveButton" + cPopID.slice(26);
                        var moveMIEl = document.getElementById(moveMIID);
                        if (!moveMIEl)
                            MTB.CreateMoveMI(moveMIID, cPopEl);
                    }
                }
            }

            if (MTB.MoveButtonMITBarContext) {
                Array.prototype.slice.call(MTB.ToolbarContexIDs).forEach(function(aTBCtxID, aIndex) {
                    let Ctx = document.getElementById(aTBCtxID);
                    let tBarCtxMIID = MTB._UID + "moveButton" + aIndex;
                    if (!document.getElementById(tBarCtxMIID)) {
                        if (Ctx) {
                            MTB.CreateMoveMI(tBarCtxMIID, Ctx);
                            Ctx.addEventListener("popupshowing", function(aE) {
                                document.getElementById(tBarCtxMIID).hidden = (document.popupNode.tagName !== "toolbarbutton");
                            }, false);
                        }
                    }
                });
            }

            addDestructor(function(aReason) {
                if (aReason === "delete") {
                    SP.resetUserPrefs(MTB.Pref);
                    delete window[_UID];
                }
                if (aReason === "delete" || aReason === "update") {
                    window[MTB._UID]["Initialized"] = false;
                }
            });
        }
    },

    getPopupNode: function(aEl) {
        if (custombuttons.popupNode)
            return custombuttons.popupNode;
        var popupNode = aEl;
        while (popupNode.tagName.toLowerCase() !== "toolbarbutton") {
            popupNode = popupNode.parentNode;
        }
        return popupNode;
    },

    CreateMoveMI: function(aMItemID, aPopupEl) {
        let moveMIEl = aPopupEl.appendChild(document.createElementNS(xulns, "menuitem"));
        moveMIEl.setAttribute("id", aMItemID);
        moveMIEl.setAttribute("label", "Переместить кнопку...");
        moveMIEl.setAttribute("image", MTB.MoveBtnImage);
        moveMIEl.setAttribute("tooltip", MTB._UID + "moveButtonMI_tooltip");
        moveMIEl.setAttribute("onclick", "document.getElementById(\"" +
            self.id + "\").MoveToolbarButtons.MoveOnClick(event);");
    },

    MoveOnClick: function(aE) {
        var popupNode = MTB.getPopupNode(aE.target);
        if (!popupNode)
            return;
        aE.stopPropagation();
        aE.preventDefault();
        if (aE.button === 0 && !aE.shiftKey && !aE.ctrlKey && !aE.altKey) {
            MTB.SP.setCharPref(MTB.Pref, popupNode.id);
            window.addEventListener('click', MTB.MoveListener, true);
            window.addEventListener('mouseup', MTB.DefaultPrevention, true);
            window.addEventListener('mousedown', MTB.DefaultPrevention, true);
            window.addEventListener('contextmenu', MTB.DefaultPrevention, true);
            MTB.HidePopup(aE.target);
            MTB.ShowMoveAlert && Services.prompt.alert(null, self.name,
                "Now click ANY toolbarbutton element inside ANY toolbar.\n" +
                "Left click will position the button to the left of the target.\n" +
                "Right click will position the button to the right of the target.\n\n" +
                "To cancel the movement, just click ANY element inside the browser that IS NOT a toolbarbutton.\n");
        }
    },

    MoveListener: function(aE) {
        MTB.DefaultPrevention(aE);
        window.removeEventListener('click', MTB.MoveListener, true);
        window.removeEventListener('mouseup', MTB.DefaultPrevention, true);
        window.removeEventListener('mousedown', MTB.DefaultPrevention, true);
        window.removeEventListener('contextmenu', MTB.DefaultPrevention, true);
        var anchor = aE.target;
        if (anchor.tagName !== "toolbarbutton")
            return;
        var toolbar = anchor.parentNode;
        var BtnToMove = document.getElementById(MTB.SP.getCharPref(MTB.Pref));
        if (aE.button === 0 && !aE.shiftKey && !aE.ctrlKey && !aE.altKey)
            toolbar.insertBefore(BtnToMove, anchor);
        else if (aE.button === 2 && !aE.shiftKey && !aE.ctrlKey && !aE.altKey)
            toolbar.insertBefore(BtnToMove, anchor.nextSibling);
        if ("CustomizableUI" in window)
            custombuttons.persistCurrentSets(toolbar.id, anchor.id,
                BtnToMove.id || BtnToMove.getAttribute("id"), !(aE.button === 2));
        else {
            toolbar.setAttribute("currentset", toolbar.currentSet);
            document.persist(toolbar.id, "currentset");
        }
        MTB.SP.setCharPref(MTB.Pref, "");
    },

    DefaultPrevention: function(aE) {
        aE.preventDefault();
        aE.stopImmediatePropagation && aE.stopImmediatePropagation();
        aE.stopPropagation();
    },

    Tooltips: function(aRem) {
        var popSetID = MTB._UID + "popupset";
        var popSetEl = document.getElementById(popSetID);
        if (popSetEl)
            popSetEl.parentNode.removeChild(popSetEl);

        if (aRem)
            return;

        if (!popSetEl) {
            popSetEl = document.createElementNS(xulns, "popupset");
            popSetEl.setAttribute("id", popSetID);
        }

        popSetEl.appendChild(MTB.parseXML("<tooltip xmlns=\"" + xulns + "\" xmlns:html=\"" + xhtmlns +
            "\" id=\"" + MTB._UID + "moveButtonMI_tooltip" + "\">" +
            "<description><html:b>Instructions</html:b> : After clicking this menu item, you can " +
            "click ANY toolbarbutton element inside the application to place the currently " +
            "selected button to the left (with Left click) or to the right (with Right click) " +
            "of the targeted toolbarbutton.</description>" +
            "<separator/>" +
            "<description><html:b>Note</html:b> : It can be ANY toolbarbutton, not just " +
            "other Custom Buttons.</description>" +
            "</tooltip>"));

        setTimeout(function() {
            Array.prototype.slice.call(MTB.WindowIDs).forEach(function(aWinID) {
                let win = document.getElementById(aWinID);
                if (win)
                    !document.getElementById(popSetID) && win.appendChild(popSetEl);
            });
        }, 100);
    },

    parseXML: function(aXML) { // Return parsed XML
        aXML = aXML.replace(/>\s+</g, "><"); // Linearize XML
        return (new DOMParser).parseFromString(aXML, "application/xml").documentElement;
    },

    HidePopup: function(aEl) {
        try {
            aEl.hidePopup();
        } catch (aError) {
            try {
                aEl.parentNode.hidePopup();
            } catch (aError) {
                try {
                    aEl.parentNode.parentNode.hidePopup();
                } catch (aError) {
                    try {
                        aEl.parentNode.parentNode.parentNode.hidePopup();
                    } catch (aError) {}
                }
            }
        }
    }
};

this.MoveToolbarButtons.Init();

Отсутствует

 

№189328-12-2017 18:22:27

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 57.0

Re: Обсуждение кнопок CB

difabor
Кнопка FindBar Tweak работает в FF57

Отсутствует

 

№189428-12-2017 19:16:38

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Garalf пишет

difaborКнопка FindBar Tweak работает в FF57

Это дополнение. Не работает.
Автор еще год назад сообщил, что функционал FindBar Tweak
невозможно реализовать через web extensions.

Отсутствует

 

№189528-12-2017 23:30:18

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 52.0
Веб-сайт

Re: Обсуждение кнопок CB

Garalf пишет

difabor
Кнопка FindBar Tweak работает в FF57

Так я не спорю на этот счёт. Просто я пока не собираюсь ставить ФФ57 и выше и поэтому не смогу с этим помочь.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№189629-12-2017 17:40:57

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

Привет. Не знаю, где спросить, поэтому тут пишу. :)
В предыдущих версиях ФФ у меня была такая фишка:
если кликнуть ПКМ по фавиконке в адресной строке,
значок мигал красным, а адрес копировался в буфер.
То ли в CTR была настройка, то ли кнопка какая...
Может, кто вспомнит, где взять или код подскажет?

Отсутствует

 

№189729-12-2017 17:45:55

sonyas75
Участник
 
Группа: Members
Откуда: Ставрополь
Зарегистрирован: 22-03-2011
Сообщений: 557
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Ultima2m
я не помню с какой кнопки выдрал этот код, но он работает

Выделить код

Код:

// ... Дополнительные возможности для значка идентификации сайта в строке адреса ...............
addEventListener("click", e=> {
   e.preventDefault();
   e.stopPropagation();
   
   // ЛКМ без запроса открывает информацию о странице в вкладке 'Разрешения' ....
   if ( e.button == 0 )
        BrowserPageInfo(content.document, (gURLBar.value.startsWith("http") ? "permTab" : "generalTab"));
        
   // ПКМ копирует текущий адрес ....     
   if ( e.button == 2 ) { 
        gClipboard.write( content.location );
                 
        // значок идентификации сайта мигает синим ....
        document.getElementById("identity-box").style.background = "blue";
        setTimeout(()=> document.getElementById("identity-box").style.background = "", 1000);
        }
}, true, document.getElementById("identity-icon") );

ну я еще цвет себе на синий поменял

Отредактировано sonyas75 (29-12-2017 17:46:44)

Отсутствует

 

№189830-12-2017 06:47:39

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 570
UA: Firefox 55.0

Re: Обсуждение кнопок CB

Ultima2m пишет

Привет. Не знаю, где спросить, поэтому тут пишу. :)
В предыдущих версиях ФФ у меня была такая фишка:
если кликнуть ПКМ по фавиконке в адресной строке,

А у меня вообще нет фавиконки в адресной строке ни на одном сайте, только на вкладке. FF-55
Как сделать, чтоб появилась иконка сайта?

Отсутствует

 

№189930-12-2017 08:50:54

Ultima2m
Участник
 
Группа: Members
Откуда: Россия
Зарегистрирован: 28-11-2013
Сообщений: 608
UA: Firefox 52.0

Re: Обсуждение кнопок CB

sonyas75
Спасибо код работает, только не мигает. И менюшка вылезает, не нужная совсем.
.
ПС. Разобрался. Конфликтует с identitybox_colors.css из CTR.

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

Отредактировано Ultima2m (30-12-2017 09:02:19)

Отсутствует

 

№190030-12-2017 09:01:55

oleg.sgh
Участник
 
Группа: Members
Зарегистрирован: 19-04-2014
Сообщений: 3157
UA: Firefox 57.0

Re: Обсуждение кнопок CB

Ultima2mrubel
Вернуть иконки сайтов в адресной строке от 04.02.2016

Отредактировано oleg.sgh (30-12-2017 09:02:40)

Отсутствует

 

Board footer

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