Поверх редактора можно даже повесить неразвернутое окно браузера.
Ого ! Так сделать я не догадался , панель задач скрыта и ничто на эту мысль не навело.
Ещё и отслеживать какое окно сверху и принудительно переключать обратно
конечно не стоит, ты прав - пусть будет opacity
Отсутствует
не понимаю а каков функциональный смысл в вашем копошении с окном редактора на весь экран?
Наверно никакого, но мне вот было интересно
Подсветка синтаксиса - ну первое, что приходит в голову - прицепить туда Orion,
но мне и за год не справиться, да и тебе не подойдёт - нужен Firefox гораздо новее 3.6.28
Могу только попробовать скрытие строк ввода урл, названия, и иконки, ну и, может быть, поиск...
Отсутствует
1 подсветка синтаксиса.(ясен пень это слишком большой гимор потому даже не спрашиваю.)
В новых версиях есть готовый модуль для подсветки синтаксиса, но с ним надо или забыть о всех возможностях текущего редактора, или их все переписать.
Переход к строке с ошибкой из ссылок в консоли точно придется переписать.
2 поиск и замена.
Внезапно Ctrl+/, Ctrl+F и Ctrl+H.
Добавлено 15-08-2012 13:22:22
Собственно,
chrome://custombuttons/content/cbeditor.xml#custombuttons-codeeditor
<handlers> <handler event="keypress" keycode="VK_TAB" action="this.handleTabs(event)"/> <handler event="keypress" keycode="VK_TAB" action="this.handleTabs(event)" modifiers="shift"/> <handler event="keypress" keycode="VK_F3" action="this.findNext(event.shiftKey)"/> ...
Отредактировано Infocatcher (15-08-2012 13:22:53)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
В новых версиях есть готовый модуль для подсветки синтаксиса, но с ним надо или забыть о всех возможностях текущего редактора, или их все переписать.
Переход к строке с ошибкой из ссылок в консоли точно придется переписать.
А еще отслеживание изменений.
И там для контекстного меню нужно
<?xul-overlay href="chrome://global/content/editMenuOverlay.xul"?> <!DOCTYPE dialog [ <!ENTITY % internaledit SYSTEM "chrome://global/locale/editMenuOverlay.dtd"> %internaledit; ]>
Вроде, такое программно не воткнуть.
Так что это надо в расширение встраивать.
Но посмотреть все-таки можно: cbOrionEditor.js
Только саморедактирование ведет себя очень странно. И может понадобиться отключение инициализации кнопок, если совсем странно.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
на 3.6 и СМ не работает..
И не будет. Хотя в SM, возможно, и портируют когда-нибудь.
В любом случае надо много чего изнутри менять и разбираться с API. Чтобы хотя бы встроенные возможности хоткеями вызывались.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Насчет подсветки синтаксиса, есть код JSCSS_Highlight.uc.js который может вам пригодится:
(function(){
var JS = {};
var CSS = {};
var XML = {};
var BASE = {};
JS.keyword = [
"abstract","boolean","break","byte","case","catch","char","class","const",
"continue","debugger","default","delete","do","double","else","enum","export",
"extends","false","final","finally","float","for","function","goto","if",
"implements","import","in","instanceof","int","interface","long","native","new",
"null","package","private","protected","public","return","short","static",
"super","switch","synchronized","this","throw","throws","transient","true","try",
"typeof","var","void","volatile","while","with",
"let","yield","infinity","NaN","undefined"
];
JS.object = [
"Array","Boolean","Date","Error","EvalError","Function","Number","Object",
"RangeError","ReferenceError","RegExp","String","SyntaxError","TypeError",
"URIError","eval","decodeURI","decodeURIComponent","encodeURI",
"encodeURIComponent","escape","unescape","isFinite","isNaN","parseFloat",
"parseInt"
];
JS.method = [
"addEventListener","removeEventListener","handleEvent","alert","prompt",
"confirm","setTimeout","setInterval","clearTimeout","clearInterval","toString",
"toSource"
];
JS.property = [
"window","document","prototype","callee","caller","event","arguments"
];
JS.hougen = [
"$","jQuery", "opera","chrome", "gBrowser","Components",
"GM_log","GM_addStyle","GM_xmlhttpRequest","GM_openInTab",
"GM_registerMenuCommand","GM_unregisterMenuCommand","GM_enableMenuCommand",
"GM_disableMenuCommand","GM_getResourceText","GM_getResourceURL",
"GM_setValue","GM_getValue","GM_listValues","GM_deleteValue",
"GM_getMetadata","GM_setClipboard","GM_safeHTMLParser","GM_generateUUID"
];
JS.keyword.sort(function(a,b) b.length - a.length);
JS.object.sort(function(a,b) b.length - a.length);
JS.method.sort(function(a,b) b.length - a.length);
JS.property.sort(function(a,b) b.length - a.length);
JS.hougen.sort(function(a,b) b.length - a.length);
CSS.keyword = [
"@import","@charset","@media","@font-face","@page","@namespace","@keyframes",
"(?:\\!important)\\;",
"@-moz-document",
":root",":not","::?before","::?after","::?first-letter","::?first-line",
":link",":visited",":active",":focus",":hover",
":target",":enabled",":disabled",":checked",":default",":empty",
":nth-(?:last-)child",":nth-(?:last-)of-type","?:first|last|only)-child",
"?:first|last|only)-of-type"
];
CSS.property = ['padding','margin','border','background'];
CSS.hougen = [];
var s = getComputedStyle(document.documentElement, null);
for(var i = 0, p; p = s[i]; i++) {
p[0] === "-" ? CSS.hougen.push(p) : CSS.property.push(p);
}
CSS.colors = [
'aliceblue','antiquewhite','aqua','aquamarine','azure','beige','bisque','black',
'blanchedalmond','blue','blueviolet','brass','brown','burlywood','cadetblue',
'chartreuse','chocolate','coolcopper','copper','coral','cornflower',
'cornflowerblue','cornsilk','crimson','cyan','darkblue','darkbrown','darkcyan',
'darkgoldenrod','darkgray','darkgreen','darkkhaki','darkmagenta',
'darkolivegreen','darkorange','darkorchid','darkred','darksalmon','darkseagreen',
'darkslateblue','darkslategray','darkturquoise','darkviolet','deeppink',
'deepskyblue','dimgray','dodgerblue','feldsper','firebrick','floralwhite',
'forestgreen','fuchsia','gainsboro','ghostwhite','gold','goldenrod','gray',
'green','greenyellow','honeydew','hotpink','indianred','indigo','ivory','khaki',
'lavender','lavenderblush','lawngreen','lemonchiffon','lightblue','lightcoral',
'lightcyan','lightgoldenrodyellow','yellowgreen',
'ActiveBorder','ActiveCaption','AppWorkspace','Background','ButtonFace',
'ButtonHighlight','ButtonShadow','ButtonText','CaptionText','GrayText',
'Highlight','HighlightText','InactiveBorder','InactiveCaption',
'InactiveCaptionText','InfoBackground','InfoText','Menu','MenuText',
'Scrollbar','ThreeDDarkShadow','ThreeDFace','ThreeDHighlight',
'ThreeDLightShadow','ThreeDShadow','Window','WindowFrame','WindowText'
];
CSS.property.sort(function(a,b) b.length - a.length);
CSS.hougen.sort(function(a,b) b.length - a.length);
CSS.colors.sort(function(a,b) b.length - a.length);
JS.keyword_r = '\\b(?:' + JS.keyword.join('|') + ')\\b';
JS.object_r = '\\b(?:' + JS.object.join('|') + ')\\b';
JS.method_r = '\\b(?:' + JS.method.join('|') + ')\\b';
JS.property_r = '\\b(?:' + JS.property.join('|') + ')\\b';
JS.hougen_r = '\\b(?:' + JS.hougen.join('|') + ')\\b';
JS.regexp_r = "\\\/\(\(\?\:\\\\\.\|\\\[\(\?\:\\\\\.\|\[\^\\\]\]\)\*\\\]\|\[\^\\\/\\n\]\)\{0\,100\}\)\\\/\(\[gimy\]\*\)";
JS.CDATA_r = "<\\;\\!\\\[CDATA\\\[\[\\s\\S\]\*\?\\\]\\\]>\\;";
CSS.keyword_r = '(?:' + CSS.keyword.join('|') + ')';
CSS.property_r = '\\b(?:' + CSS.property.join('|') + ')\\b';
CSS.colors_r = '\\b(?:' + CSS.colors.join('|') + ')\\b';
CSS.hougen_r = '(?:' + CSS.hougen.join('|') + ')\\b';
CSS.url_r = 'url\\([^)]+\\)';
XML.MComment_r = '<\\;!--[\\s\\S]+?-->\\;';
BASE.URL_r = '(?:https?|ftp|file|chrome|data):\\/\\/\\/?[a-z0-9](?:[\\w#$%()=~^@:;?_.,\\/+-]|&)+(?:[\\w#$%=:;?_,\\/+-]|&)';
BASE.BASE64_r = "data:image/[a-zA-Z-]+\;base64\,[a-zA-Z0-9/+]+={0,2}";
BASE.MComment_r = "\\\/\\\*\[\\s\\S\]\*\?\\\*\\\/";
BASE.SComment_r = "\\\/\\\/\.\*";
BASE.string_r = '"(?:[^\n\"]|\\.|\\\\n)*\"' + '|' +
"'(?:[^\n\']|\\.|\\\\n)*\'"
JS.keyword_s = 'color:#a09;';
JS.object_s = 'color:#c15;';
JS.method_s = 'color:#027;';
JS.property_s = 'color:#06a;';
JS.hougen_s = 'color:#06a;';
JS.regexp_s = 'color:#c11;';
JS.CDATA_s = 'color:#c11;';
CSS.keyword_s = 'color:#a09;';
CSS.property_s = 'color:#06a;';
CSS.hougen_s = 'color:#06a;';
XML.MComment_s = 'color:#080;';
BASE.MComment_s = 'color:#080;';
BASE.SComment_s = 'color:#080;';
BASE.string_s = 'color:#c11;';
BASE.URL_s = '';
BASE.BASE64_s = 'color:green;';
JS.R_keyword = new RegExp(JS.keyword_r);
JS.R_object = new RegExp(JS.object_r);
JS.R_method = new RegExp(JS.method_r);
JS.R_property = new RegExp(JS.property_r);
JS.R_hougen = new RegExp(JS.hougen_r);
CSS.R_keyword = new RegExp(CSS.keyword_r);
CSS.R_property = new RegExp(CSS.property_r);
CSS.R_colors = new RegExp(CSS.colors_r);
CSS.R_hougen = new RegExp(CSS.hougen_r);
CSS.R_url = new RegExp(CSS.url_r);
BASE.R_URL = new RegExp(BASE.URL_r, "g");
BASE.R_BASE64 = new RegExp(BASE.BASE64_r, "g");
JS.R_ALL = new RegExp([
BASE.MComment_r
,BASE.SComment_r
,BASE.string_r
,JS.CDATA_r
,JS.keyword_r
,JS.object_r
,JS.method_r
,JS.property_r
,JS.hougen_r
// ,JS.regexp_r
].join('|'), "g");
CSS.R_ALL = new RegExp([
BASE.MComment_r
,BASE.string_r
,CSS.keyword_r
,CSS.property_r
,CSS.colors_r
,CSS.hougen_r
].join('|'), "g");
XML.R_ALL = new RegExp([
XML.MComment_r
,JS.CDATA_r
,BASE.string_r
].join('|'), "g");
BASE.R_ALL = new RegExp([
BASE.MComment_r
,XML.MComment_r
,BASE.string_r
,CSS.colors_r
].join('|'), 'g');
function parse(aText, type) {
aText = aText.replace(/\&/g, '&').replace(/\</g, '<').replace(/\>/g, '>');
if (type == "CSS") aText = CSSParser(aText);
else if (type == "JS") aText = JSParser(aText);
else if (type == "XML") aText = XMLParser(aText);
else aText = EXParset(aText);
aText = aText.replace(BASE.R_BASE64, '<img src="$&" alt="$&">');
aText = aText.replace(BASE.R_URL, '<a href="$&" style="'+ BASE.URL_s +'">$&</a>');
return aText;
}
function JSParser(aText) {
return aText.replace(JS.R_ALL, function(str, offset, s) {
if (str.indexOf("//") === 0)
{
return '<span style="'+ BASE.SComment_s +'">' + str + '</span>';
}
else if (str.indexOf("/*") === 0) {
return '<span style="'+ BASE.MComment_s +'">' + str + '</span>';
}
else if (str.indexOf("'") === 0 || str.indexOf('"') === 0) {
return '<span style="'+ BASE.string_s +'">' + str + '</span>';
}
else if (str.indexOf("/") === 0) {
return '<span style="'+ JS.regexp_s +'">' + str + '</span>';
}
else if (str.indexOf("<![CDATA[") === 0) {
if (CSS.R_keyword.test(str)) return CSSParser(str);
return '<span style="'+ JS.CDATA_s +'">' + str + '</span>';
}
else if (JS.R_keyword.test(str)) {
return '<span style="'+ JS.keyword_s +'">' + str + '</span>';
}
else if (JS.R_object.test(str)) {
return '<span style="'+ JS.object_s +'">' + str + '</span>';
}
else if (JS.R_method.test(str)) {
return '<span style="'+ JS.method_s +'">' + str + '</span>';
}
else if (JS.R_property.test(str)) {
return '<span style="'+ JS.property_s +'">' + str + '</span>';
}
else if (JS.R_hougen.test(str)) {
return '<span style="'+ JS.hougen_s +'">' + str + '</span>';
}
else {
return str;
}
});
}
function XMLParser(aText) {
return aText.replace(XML.R_ALL, function(str, offset, s) {
if (str.indexOf("<!--") === 0) {
return '<span style="'+ BASE.MComment_s +'">' + str + '</span>';
}
else if (str.indexOf("'") === 0 || str.indexOf('"') === 0) {
return '<span style="'+ BASE.string_s +'">' + str + '</span>';
}
else if (str.indexOf("<![CDATA[") === 0) {
let res = JSParser(str.replace("<![CDATA[", "").replace("]]>", ""));
return "<![CDATA[" + res + "]]>";
}
else {
return str;
}
});
}
function CSSParser(aText) {
return aText.replace(CSS.R_ALL, function(str, offset, s) {
if (str.indexOf("/*") === 0) {
return '<span style="'+ BASE.MComment_s +'">' + str + '</span>';
}
else if (str.indexOf("'") === 0 || str.indexOf('"') === 0) {
return '<span style="'+ BASE.string_s +'">' + str.replace(/\"/g, """).replace(/\'/g, "'") + '</span>';
}
else if (CSS.R_hougen.test(str)) {
return '<span style="'+ CSS.hougen_s +'">' + str + '</span>';
}
else if (CSS.R_colors.test(str)) {
return '<span style="color:'+ str +';">' + str + '</span>';
}
else if (CSS.R_keyword.test(str)) {
return '<span style="'+ CSS.keyword_s +'">' + str + '</span>';
}
else if (CSS.R_property.test(str)) {
return '<span style="'+ CSS.property_s +'">' + str + '</span>';
}
else {
return str;
}
});
}
function EXParset(aText) {
return aText.replace(BASE.R_ALL, function(str, offset, s) {
if (str.indexOf("/*") === 0) {
return '<span style="'+ BASE.MComment_s +'">' + str + '</span>';
}
else if (str.indexOf("<!--") === 0) {
return '<span style="'+ BASE.MComment_s +'">' + str + '</span>';
}
else if (str.indexOf("'") === 0 || str.indexOf('"') === 0) {
return '<span style="'+ BASE.string_s +'">' + str.replace(/\"/g, """).replace(/\'/g, "'") + '</span>';
}
else if (CSS.R_colors.test(str)) {
return '<span style="color:'+ str +';">' + str + '</span>';
}
return str;
});
}
if (window.JSCSS) {
window.JSCSS.destroy();
delete window.JSCSS;
}
var _disabled = true;
window.JSCSS = {
get disabled () _disabled,
set disabled (bool) {
if (_disabled != bool) {
if (bool) {
gBrowser.mPanelContainer.removeEventListener("DOMContentLoaded", this, false);
} else {
gBrowser.mPanelContainer.addEventListener("DOMContentLoaded", this, false);
}
}
document.getElementById("JSCSS-menuitem").setAttribute("checked", !bool);
return _disabled = !!bool;
},
init: function() {
var menuitem = document.createElement("menuitem");
menuitem.setAttribute("id", "JSCSS-menuitem");
menuitem.setAttribute("label", "JSCSS Highlight");
menuitem.setAttribute("type", "checkbox");
menuitem.setAttribute("checked", "true");
menuitem.setAttribute("autoCheck", "false");
menuitem.setAttribute("oncommand", "JSCSS.disabled = !JSCSS.disabled;");
var ins = document.getElementById("devToolsSeparator");
ins.parentNode.insertBefore(menuitem, ins);
this.disabled = false;
window.addEventListener("unload", this, false);
},
uninit: function() {
this.disabled = true;
},
destroy: function() {
this.disabled = true;
var i = document.getElementById("JSCSS-menuitem");
if (i) i.parentNode.removeChild(i);
},
handleEvent: function(event) {
switch(event.type){
case "DOMContentLoaded":
var doc = event.target;
if (!/css|javascript|plain/.test(doc.contentType) ||
doc.location.protocol === "view-source:"
) return;
this.run(doc, 100000);
break;
case "unload":
this.uninit();
break;
}
},
write: function(pre) {
var doc = pre.ownerDocument;
var { contentType, URL } = doc;
var type = contentType.indexOf('javascript') >= 0 ? 'JS' :
contentType.indexOf('css') >= 0 ? 'CSS' :
contentType === 'text/plain' && /\.(?:xul|xml)$/.test(URL) ? 'XML' :
/\.(?:js|jsm|jsee)$/i.test(URL) ? 'JS' :
/\.(?:css)$/i.test(URL) ? 'CSS' :
'TXT';
var html = parse(pre.textContent, type);
var preRange = doc.createRange();
preRange.selectNodeContents(pre);
preRange.deleteContents();
var range = doc.createRange();
range.selectNodeContents(doc.body);
var df = range.createContextualFragment(html);
range.detach();
preRange.insertNode(df);
preRange.detach();
},
run: function(doc, maxLength) {
var self = this;
doc || (doc = content.document);
var pre = doc.getElementsByTagName('pre')[0];
if (pre.textContent.length > maxLength) {
var browser = gBrowser.getBrowserForDocument(doc);
var notificationBox = gBrowser.getNotificationBox(browser);
var message = "テキストが長すぎます。強調しますか?(フリーズする危険があります)"
var buttons = [{
label: "はい",
accessKey: "Y",
callback: function (aNotification, aButton) {
self.write(pre);
}
}];
notificationBox.appendNotification(
message, "JSCSS",
"chrome://browser/skin/Info.png",
notificationBox.PRIORITY_INFO_MEDIUM,
buttons);
return;
}
self.write(pre);
},
};
JSCSS.init();
})();
Отсутствует
bunda1
Для подсветки синтаксиса в любом случае придется отказаться от используемого сейчас textbox'а, так что проблемы при любом способе раскраски будут принципиально одними и теми же – текущий код, работающий с текстовыми полями, придется переписать.
А раз все равно много чего переделывать, лучше цеплять встроенный модуль, по-моему. Его хоть развивают. И возни поменьше.
Вдобавок этот JSCSS_Highlight.uc.js, кажется, не предусматривает подсветку «на лету».
Добавлено 15-08-2012 19:50:02
на 1.5 тоже не работает!!!1
Шутки шутками, но если сделать замену let на var и заменить Application.storage на использование
Components.classes["@mozilla.org/appshell/appShellService;1"] .getService(Components.interfaces.nsIAppShellService) .hiddenDOMWindow
, cbEditorToggleOnTop.js заработает в 1.5. И, наверное, в 2.0 тоже (там только Application нету).
Так что некоторыми местами у нас очень стабильные API.
Отредактировано Infocatcher (15-08-2012 19:50:02)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Да, понятно.
Помоги пожалуйста с кодом, проблема в том что сохранят вместо русского текста непонято что: Пример текста > @8<5@ B5:AB0
Я так понимаю что тут проблема с кодировкой. Текст на английском сохранят без проблем.
function textToEditor(text) { // путь к файлу .... var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties). get("ProfD", Components.interfaces.nsIFile); //Profile Directory file.append("custombuttons"); file.append("Save.txt");// // .... var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]. createInstance(Components.interfaces.nsIFileOutputStream); foStream.init(file, 0x02|0x08|0x20, 0666, 0); foStream.write(text, text.length); foStream.close(); file.launch(); }; textToEditor('Пример текста');
Отредактировано bunda1 (15-08-2012 20:02:47)
Отсутствует
bunda1
Там перекодировать в UTF-8, например, надо.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
bunda1
Там перекодировать в UTF-8, например, надо.
Спасибо, вроде работает:
function textToEditor(text) { // перекодировать текст в UTF-8 .... var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"] .createInstance(Components.interfaces.nsIScriptableUnicodeConverter); converter.charset = "utf-8" ; var text = converter.ConvertFromUnicode(text); // путь к файлу .... var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties). get("ProfD", Components.interfaces.nsIFile); //Profile Directory file.append("custombuttons"); file.append("Save.txt"); // .... var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]. createInstance(Components.interfaces.nsIFileOutputStream); foStream.init(file, 0x02|0x08|0x20, 0666, 0); foStream.write(text, text.length); foStream.close(); // открыть файл .... file.launch(); }; textToEditor('Пример текста');
Отредактировано bunda1 (15-08-2012 20:54:45)
Отсутствует
Session Bookmarks 0.2.0pre32 (2012-08-15)
* Добавлено исправление для bug 682360 - Merge nsILocalFile and nsIFile interfaces
* Оптимизирована отрисовка индикатора позиции перетаскивания
Attributes Inspector 0.6.0pre9 (2012-08-16)
+ Реализован вывод информации об атрибутах во время перетаскивания (drag and drop). К сожалению, никакие сочетания клавиш при этом не работают.
* Оптимизировано обновление всплывающей подсказки при очень частом изменении атрибутов узла под курсором.
x Исправлена индикация копирования в модальных окнах, открытых из окна, в котором был запущен Attributes Inspector.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
плюс к этому можно добавить в редакторе скрытие строк ввода урл названия и иконки чтоб увеличить окно редактирования.
Вот примитивная переделка знаменитого watcher'а, посмотри - так подойдёт ?
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%3EField%20Hiders%20for%20CBEditor%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP////////////9eoP//XqD//16g//9eoP////////////9eoP//XqD/////////////XqD//16g//9eoP//XqD/////////////XqD//16g//9eoP//XqD/////////////XqD//16g/////////////16g//9eoP//XqD//16g/////////////16g//9eoP//XqD//16g/////////////16g//9eoP////////////9eoP//XqD//16g//9eoP///////////////////////16g//9eoP//////////////////////////////////XqD//16g//9eoP//XqD///////////////////////9eoP//XqD//////////////////////////////////16g//9eoP//XqD//16g/////////////16g//9eoP//XqD//16g/////////////16g//9eoP////////////9eoP//XqD//16g//9eoP////////////////////////////9eoP////////////9eoP//XqD/////////////XqD//16g//9eoP//XqD/7c/t////////////////////////XqD/////////////XqD//16g/////////////16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD//16g//9eoP//XqD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20The%20CORE%3A%20http%3A//infocatcher.ucoz.net/js/cb/cbEditorToggleOnTop.js%0A//%20mod%20by%20any%20stupid%20user.%0A%0Avar%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.getService%28Components.interfaces.nsIPrefService%29%0A%20%20%20%20%20%20%20%20%20%20%20%20.getBranch%28%22custombutton.FieldHidersForCBEditor.%22%29%0A%0Atry%20%20%20%20%20%20%7B%20var%20p%20%3D%20prefs.getIntPref%28%22fields%22%29%3B%20%7D%0Acatch%28e%29%20%7B%20prefs.setIntPref%28%22fields%22%2C%206%29%3B%20%7D%3B%0A%0Aconst%20watcherId%20%3D%20%22FieldHidersForCBEditor%22%3B%0Avar%20watcher%20%3D%20Application.storage.get%28watcherId%2C%20null%29%3B%0Avar%20locale%20%3D%20%28cbu.getPrefs%28%22general.useragent.locale%22%29%20%7C%7C%20%22en%22%29.match%28/%5E%5Cw*/%29%5B0%5D%3B%0A%0Aif%28%21watcher%29%20%7B%0A%09watcher%20%3D%20%7B%20%20%20%20%20%20%0A%09%09%0A%09%09prefs%3A%20prefs%2C%0A%0A%09%09boxId%3A%20%22FieldHidersBox%22%2C%0A%0A%09%09btn1Id%3A%20%22urlFieldHider%22%2C%0A%09%09btn1Icon%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEADRAAAAEAIACoAwAAFgAAACgAAAANAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4KCEP+CghH/goIP/4KCD/+Cgg//goIR/4KCEAAAAAAAAAAAAAAAAAAAAAAAAAAA/4KCJv+goP//goL//4KC//+Cgv//goL//4KC//+jo///goImAAAAAAAAAAAAAAAA/4KCJv+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+CgiYAAAAA/4KCC/+jo///goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//o6P//4KCC/+Cggr/goL//4KC//+Cgv//l5f//4KCIv+Cggr/goIi/5eX//+Cgv//goL//4KC//+Cggr/goIH/4KC//+Cgv//goL//4KCIgAAAAAAAAAAAAAAAP+CgiL/goL//4KC//+Cgv//goIH/4KCB/+Cgv//goL//4KC//+CggwAAAAAAAAAAAAAAAD/goIM/4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goIPAAAAAAAAAAAAAAAA/4KCD/+Cgv//goL//4KC//+Cggf/goIH/4KC//+Cgv//goL//4KCDwAAAAAAAAAAAAAAAP+Cgg//goL//4KC//+Cgv//goIH/4KCB/+Cgv//goL//4KC//+Cgg8AAAAAAAAAAAAAAAD/goIP/4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goIPAAAAAAAAAAAAAAAA/4KCD/+Cgv//goL//4KC//+Cggf/goIK/4KC//+Cgv//goL//4KCEQAAAAAAAAAAAAAAAP+CghH/goL//4KC//+Cgv//goIK/4KCDf+Cgv//goL//4KC//+CghIAAAAAAAAAAAAAAAD/goIS/4KC//+Cgv//goL//4KCDQAAAAD/goIS/4KCFP+CghIAAAAAAAAAAAAAAAAAAAAAAAAAAP+CghL/goIU/4KCEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//isQeA4rEHAGKxBgAisQQAArEEAAKxBBwCsQQcArEEHAKxBBwCsQQcArEEHAKxBBwCsQQcArEGPiKxB//isQQ%3D%3D%22%2C%0A%09%09%09%09%09%09get%20btn1Tip%28%29%20%7B%20if%28locale%20%3D%3D%20%22ru%22%29%20return%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u043E%u043B%u0435%20%22URL%20%u043A%u043D%u043E%u043F%u043A%u0438%22%27%3B%0A%09%09%09%09%09%09%20%20%20return%20%22Show/hide%20URL%20field%22%3B%0A%09%09%7D%2C%0A%0A%09%09btn2Id%3A%20%22nameFieldHider%22%2C%0A%09%09btn2Icon%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEADRAAAAEAIACoAwAAFgAAACgAAAANAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+CghL/goIU/4KCEgAAAAAAAAAAAAAAAAAAAAAAAAAA/4KCEv+CghT/goISAAAAAP+Cgg3/goL//4KC//+Cgv//goISAAAAAAAAAAAAAAAA/4KCEP+Cgv//goL//4KC//+Cgg3/goIK/4KC//+Cgv//goL//4KCEQAAAAAAAAAAAAAAAP+CgiX/goL//4KC//+Cgv//goIK/4KCB/+Cgv//goL//4KC//+Cgg4AAAAAAAAAAP+CgiP/goL//4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goIKAAAAAP+CgiT/goL//4KC//+Cgv//goL//4KC//+Cggf/goIH/4KC//+Cgv//goL//4KCBv+Cghz/goL//4KC//+Cgv//goL//4KC//+Cgv//goIH/4KCB/+Cgv//goL//4KC//+CgjT/goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KCNP+Cgv//goL//4KC//+Cggf/goIH/4KC//+Cgv//goL//4KC//+Cgv//goL//4KCHP+Cggb/goL//4KC//+Cgv//goIH/4KCB/+Cgv//goL//4KC//+Cgv//goL//4KCJAAAAAD/goIK/4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goL//4KCIwAAAAAAAAAA/4KCDv+Cgv//goL//4KC//+Cggf/goIK/4KC//+Cgv//goL//4KCJQAAAAAAAAAAAAAAAP+CghH/goL//4KC//+Cgv//goIK/4KCDf+Cgv//goL//4KC//+CghAAAAAAAAAAAAAAAAD/goIS/4KC//+Cgv//goL//4KCDQAAAAD/goIS/4KCFP+CghIAAAAAAAAAAAAAAAAAAAAAAAAAAP+CghL/goIU/4KCEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//isQY+IrEEHAKxBBwCsQQYArEEEAKxBAACsQQAArEEAAKxBAACsQQEArEEDAKxBBwCsQQcArEGPiKxB//isQQ%3D%3D%22%2C%0A%09%09%09%09%09%09get%20btn2Tip%28%29%20%7B%20if%28locale%20%3D%3D%20%22ru%22%29%20return%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u043E%u043B%u0435%20%22%u0418%u043C%u044F%22%27%3B%0A%09%09%09%09%09%09%20%20%20return%20%22Show/hide%20Name%20field%22%3B%0A%09%09%7D%2C%0A%0A%09%09btn3Id%3A%20%22imageFieldHider%22%2C%0A%09%09btn3Icon%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEADRAAAAEAIACoAwAAFgAAACgAAAANAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+CghL/goIU/4KCEgAAAAAAAAAAAAAAAAAAAAAAAAAA/4KCEv+CghT/goISAAAAAP+Cgg3/goL//4KC//+Cgv//goISAAAAAAAAAAAAAAAA/4KCEv+Cgv//goL//4KC//+Cgg3/goIK/4KC//+Cgv//goL//4KCEQAAAAAAAAAAAAAAAP+CghH/goL//4KC//+Cgv//goIK/4KCB/+Cgv//goL//4KC//+Cgg4AAAAAAAAAAAAAAAD/goIO/4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goIKAAAAAP+CghIAAAAA/4KCCv+Cgv//goL//4KC//+Cggf/goIH/4KC//+Cgv//goL//4KCCf+CgiP/goL//4KCI/+Cggn/goL//4KC//+Cgv//goIH/4KCB/+Cgv//goL//4KC//+Cghz/goL//4KC//+Cgv//goIc/4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goI1/4KC//+Cgv//goL//4KCNf+Cgv//goL//4KC//+Cggf/goIH/4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goIH/4KCB/+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KC//+Cgv//goL//4KCB/+Cggf/goL//4KC//+Cgv//goL//4KC//+Cgjb/goL//4KC//+Cgv//goL//4KC//+Cggf/goIK/4KC//+Cgv//goL//4KC//+CgiEAAAAA/4KCIf+Cgv//goL//4KC//+Cgv//goIK/4KCDf+Cgv//goL//4KC//+CgiYAAAAAAAAAAAAAAAD/goIm/4KC//+Cgv//goL//4KCDQAAAAD/goIS/4KCE/+CghAAAAAAAAAAAAAAAAAAAAAAAAAAAP+CghD/goIT/4KCEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//isQY+IrEEHAKxBBwCsQQcArEEFAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAgCsQQcArEGPiKxB//isQQ%3D%3D%22%2C%0A%09%09%09%09%09%09%09%09get%20btn3Tip%28%29%20%7B%20if%28locale%20%3D%3D%20%22ru%22%29%20return%20%27%u041F%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0441%u043A%u0440%u044B%u0442%u044C%20%u043F%u043E%u043B%u0435%20%22%u0418%u0437%u043E%u0431%u0440%u0430%u0436%u0435%u043D%u0438%u0435%22%27%3B%0A%09%09%09%09%09%09%20%20%20return%20%22Show/hide%20Image%20field%22%3B%0A%09%09%7D%2C%0A%0A%09%09REASON_STARTUP%3A%201%2C%0A%09%09REASON_SHUTDOWN%3A%202%2C%0A%09%09REASON_WINDOW_LOADED%3A%203%2C%0A%09%09REASON_WINDOW_CLOSED%3A%204%2C%0A%0A%09%09get%20obs%28%29%20%7B%0A%09%09%09delete%20this.obs%3B%0A%09%09%09return%20this.obs%20%3D%20Components.classes%5B%22@mozilla.org/observer-service%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIObserverService%29%3B%0A%09%09%7D%2C%0A%09%09get%20ww%28%29%20%7B%0A%09%09%09delete%20this.ww%3B%0A%09%09%09return%20this.ww%20%3D%20Components.classes%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIWindowWatcher%29%3B%0A%09%09%7D%2C%0A%09%09get%20wm%28%29%20%7B%0A%09%09%09delete%20this.wm%3B%0A%09%09%09return%20this.wm%20%3D%20Components.classes%5B%22@mozilla.org/appshell/window-mediator%3B1%22%5D%0A%09%09%09%09.getService%28Components.interfaces.nsIWindowMediator%29%3B%0A%09%09%7D%2C%0A%0A%09%09init%3A%20function%28reason%29%20%7B%0A%09%09%09this.obs.addObserver%28this%2C%20%22quit-application-granted%22%2C%20false%29%3B%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%0A%09%09%09%09this.initWindow%28ws.getNext%28%29%2C%20reason%29%3B%0A%09%09%09this.ww.registerNotification%28this%29%3B%0A%09%09%7D%2C%0A%09%09destroy%3A%20function%28reason%29%20%7B%20%20%20%20%0A%09%09%09this.obs.removeObserver%28this%2C%20%22quit-application-granted%22%29%3B%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%0A%09%09%09%09this.destroyWindow%28ws.getNext%28%29%2C%20reason%29%3B%0A%09%09%09this.ww.unregisterNotification%28this%29%3B%0A%09%09%7D%2C%0A%09%09initWindow%3A%20function%28window%2C%20reason%29%20%7B%0A%09%09%09if%28%21this.isTargetWindow%28window%29%29%0A%09%09%09%09return%3B%0A%09%09%09var%20document%20%3D%20window.document%3B%0A%0A%09%09%09var%20box%20%3D%20document.getElementById%28this.boxId%29%3B%0A%09%09%09box%20%26%26%20box.parentNode.removeChild%28box%29%3B%0A%09%09%09box%20%3D%20document.createElement%28%22hbox%22%29%3B%0A%09%09%09box.id%20%3D%20this.boxId%3B%0A%09%09%09%0A%09%09%09var%20spacer%20%3D%20null%3B%0A%09%09%09var%20btnBox%20%3D%20document.documentElement.getButton%28%22accept%22%29.parentNode%3B%0A%09%09%09for%20%28var%20node%20%3D%20btnBox.firstChild%3B%20node%3B%20node%20%3D%20node.nextSibling%29%20%7B%0A%09%09%09%09if%28node.localName%20%3D%3D%20%22spacer%22%29%20%7B%20spacer%20%3D%20node%3B%20break%3B%20%7D%0A%09%09%09%7D%09%09%09%0A%09%09%09%0A%09%09%09var%20btn1%20%3D%20document.createElement%28%22toolbarbutton%22%29%3B%0A%09%09%09btn1.id%20%3D%20this.btn1Id%3B%0A%09%09%09btn1.tooltipText%20%3D%20this.btn1Tip%3B%0A%09%09%09btn1.addEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09btn1.style.listStyleImage%20%3D%20%27url%28%22%27%20+%20this.btn1Icon%20+%20%27%22%29%27%3B%0A%09%09%09%0A%09%09%09var%20btn2%20%3D%20document.createElement%28%22toolbarbutton%22%29%3B%0A%09%09%09btn2.id%20%3D%20this.btn2Id%3B%0A%09%09%09btn2.tooltipText%20%3D%20this.btn2Tip%3B%0A%09%09%09btn2.addEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09btn2.style.listStyleImage%20%3D%20%27url%28%22%27%20+%20this.btn2Icon%20+%20%27%22%29%27%3B%0A%09%09%09%0A%09%09%09var%20btn3%20%3D%20document.createElement%28%22toolbarbutton%22%29%3B%0A%09%09%09btn3.id%20%3D%20this.btn3Id%3B%0A%09%09%09btn3.tooltipText%20%3D%20this.btn3Tip%3B%0A%09%09%09btn3.addEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09btn3.style.listStyleImage%20%3D%20%27url%28%22%27%20+%20this.btn3Icon%20+%20%27%22%29%27%3B%0A%09%09%09%0A%09%09%09box.appendChild%28btn1%29%3B%0A%09%09%09box.appendChild%28btn2%29%3B%0A%09%09%09box.appendChild%28btn3%29%3B%0A%09%09%09%0A%09%09%09btnBox.insertBefore%28box%2C%20spacer.nextSibling%29%3B%0A%09%09%09%0A%09%09%09this.toggleHideUrlField%28btn1%2C%20true%29%3B%0A%09%09%09this.toggleHideNameField%28btn2%2C%20true%29%3B%0A%09%09%09this.toggleHideImageField%28btn3%2C%20true%29%3B%0A%09%09%09%0A%09%09%7D%2C%0A%09%09destroyWindow%3A%20function%28window%2C%20reason%29%20%7B%0A%09%09%09if%28reason%20%3D%3D%20this.REASON_WINDOW_CLOSED%29%0A%09%09%09%09window.removeEventListener%28%22DOMContentLoaded%22%2C%20this%2C%20false%29%3B%20//%20Window%20can%20be%20closed%20before%20DOMContentLoaded%0A%09%09%09if%28%21this.isTargetWindow%28window%29%29%0A%09%09%09%09return%3B%0A%09%09%09var%20document%20%3D%20window.document%3B%0A%09%09%09%0A%09%09%09var%20btn%20%3D%20document.getElementById%28this.btn1Id%29%3B%0A%09%09%09btn.removeEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09document.getElementById%28this.btn2Id%29.removeEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09document.getElementById%28this.btn3Id%29.removeEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%09%09%09%0A%09%09%09if%28reason%20%3D%3D%20this.REASON_SHUTDOWN%29%20%7B%0A%09%09%09%09let%20box%20%3D%20btn.parentNode%3B%0A%09%09%09%09box.parentNode.removeChild%28box%29%3B%0A%09%09%09%7D%0A%09%09%7D%2C%0A%09%09isTargetWindow%3A%20function%28window%29%20%7B%0A%09%09%09return%20window.location.href.substr%280%2C%2041%29%20%3D%3D%20%22chrome%3A//custombuttons/content/editor.xul%22%3B%0A%09%09%7D%2C%0A%09%09observe%3A%20function%28subject%2C%20topic%2C%20data%29%20%7B%0A%09%09%09if%28topic%20%3D%3D%20%22quit-application-granted%22%29%0A%09%09%09%09this.destroy%28%29%3B%0A%09%09%09else%20if%28topic%20%3D%3D%20%22domwindowopened%22%29%0A%09%09%09%09subject.addEventListener%28%22DOMContentLoaded%22%2C%20this%2C%20false%29%3B%0A%09%09%09else%20if%28topic%20%3D%3D%20%22domwindowclosed%22%29%0A%09%09%09%09this.destroyWindow%28subject%2C%20this.REASON_WINDOW_CLOSED%29%3B%0A%09%09%7D%2C%0A%09%09handleEvent%3A%20function%28e%29%20%7B%0A%09%09%09if%28e.type%20%3D%3D%20%22DOMContentLoaded%22%29%20%7B%0A%09%09%09%09let%20window%20%3D%20e.originalTarget.defaultView%3B%0A%09%09%09%09window.removeEventListener%28%22DOMContentLoaded%22%2C%20this%2C%20false%29%3B%0A%09%09%09%09this.initWindow%28window%2C%20this.REASON_WINDOW_LOADED%29%3B%0A%09%09%09%7D%0A%09%09%09else%20if%28e.type%20%3D%3D%20%22command%22%29%20%7B%0A%0A%09%09%09%09if%20%28e.target.id%20%3D%3D%20this.btn1Id%29%20%7B%0A%09%09%09%09%0A%09%09%09%09%09this.toggleHideUrlField%28e.target%2C%20false%29%3B%0A%09%09%09%09%7D%0A%0A%09%09%09%09if%20%28e.target.id%20%3D%3D%20this.btn2Id%29%20%7B%0A%09%09%09%09%0A%09%09%09%09%09this.toggleHideNameField%28e.target%2C%20false%29%3B%0A%09%09%09%09%7D%0A%0A%09%09%09%09if%20%28e.target.id%20%3D%3D%20this.btn3Id%29%20%7B%0A%09%09%09%09%0A%09%09%09%09%09this.toggleHideImageField%28e.target%2C%20false%29%3B%0A%09%09%09%09%7D%0A%0A%09%09%09%7D%0A%09%09%7D%2C%0A%0A%09%09toggleHideUrlField%3A%20function%28btn%2C%20self%29%20%7B%0A%09%09%09var%20pref%20%3D%20this.prefs.getIntPref%28%22fields%22%29%3B%0A%09%09%09var%20status%20%3D%20%28pref%20%26%201%29%20%3D%3D%201%3B%0A%09%09%09if%20%28self%29%20%7B%20btn.ownerDocument.getElementById%28%22urlfield%22%29.hidden%20%3D%20%21status%3B%0A%09%09%09%09return%3B%20%7D%0A%09%09%09%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%20%7B%0A%09%09%09%09var%20win%20%3D%20ws.getNext%28%29%3B%0A%09%09%09%09if%20%28%21this.isTargetWindow%28win%29%29%20continue%3B%0A%09%09%09%09win.document.getElementById%28%22urlfield%22%29.hidden%20%3D%20status%3B%0A%09%09%09%09%7D%0A%09%09%09if%20%28status%29%20pref%20-%3D%201%3B%0A%09%09%09else%20pref%20+%3D%201%3B%0A%09%09%09this.prefs.setIntPref%28%22fields%22%2C%20pref%29%3B%0A%09%09%7D%2C%0A%0A%09%09toggleHideNameField%3A%20function%28btn%2C%20self%29%20%7B%0A%09%09%09var%20pref%20%3D%20this.prefs.getIntPref%28%22fields%22%29%3B%0A%09%09%09var%20status%20%3D%20%28pref%20%26%202%29%20%3D%3D%202%3B%0A%09%09%09if%20%28self%29%20%7B%20btn.ownerDocument.getElementById%28%22name%22%29.parentNode.hidden%20%3D%20%21status%3B%0A%09%09%09%09return%3B%20%7D%0A%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%20%7B%0A%09%09%09%09var%20win%20%3D%20ws.getNext%28%29%3B%0A%09%09%09%09if%20%28%21this.isTargetWindow%28win%29%29%20continue%3B%0A%09%09%09%09win.document.getElementById%28%22name%22%29.parentNode.hidden%20%3D%20status%3B%0A%09%09%09%09%7D%0A%09%09%09if%20%28status%29%20pref%20-%3D%202%3B%0A%09%09%09else%20pref%20+%3D%202%3B%0A%09%09%09this.prefs.setIntPref%28%22fields%22%2C%20pref%29%3B%0A%0A%09%09%7D%2C%0A%0A%09%09toggleHideImageField%3A%20function%28btn%2C%20self%29%20%7B%0A%09%09%09var%20pref%20%3D%20this.prefs.getIntPref%28%22fields%22%29%3B%0A%09%09%09var%20status%20%3D%20%28pref%20%26%204%29%20%3D%3D%204%3B%0A%09%09%09if%20%28self%29%20%7B%20btn.ownerDocument.getElementById%28%22image%22%29.parentNode.parentNode.hidden%20%3D%20%21status%3B%0A%09%09%09%09return%3B%20%7D%0A%09%09%09%0A%09%09%09var%20ws%20%3D%20this.wm.getEnumerator%28null%29%3B%0A%09%09%09while%28ws.hasMoreElements%28%29%29%20%7B%0A%09%09%09%09var%20win%20%3D%20ws.getNext%28%29%3B%0A%09%09%09%09if%20%28%21this.isTargetWindow%28win%29%29%20continue%3B%0A%09%09%09%09win.document.getElementById%28%22image%22%29.parentNode.parentNode.hidden%20%3D%20status%3B%0A%09%09%09%09%7D%0A%09%09%09if%20%28status%29%20pref%20-%3D%204%3B%0A%09%09%09else%20pref%20+%3D%204%3B%0A%09%09%09this.prefs.setIntPref%28%22fields%22%2C%20pref%29%3B%0A%09%09%7D%0A%09%7D%3B%0A%09Application.storage.set%28watcherId%2C%20watcher%29%3B%0A%09watcher.init%28watcher.REASON_STARTUP%29%3B%0A%7D%0Athis.onDestroy%20%3D%20function%28reason%29%20%7B%20%0A%09if%28reason%20%3D%3D%20%22update%22%20%7C%7C%20reason%20%3D%3D%20%22delete%22%29%20%7B%20%0A%09%09watcher.destroy%28watcher.REASON_SHUTDOWN%29%3B%0A%09%09Application.storage.set%28watcherId%2C%20null%29%3B%0A%09%7D%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
okkamas_knife
Да я думал все-таки сделать для каждой кнопки отдельную тему (там же еще и обсуждение может быть), но что-то лень возиться ради недопроверенных версий. Приоритетнее их доделать сначала.
А насчет отдельных тем... Может, раз уж встроенного обновления нет, стоит сделать одну общую тему для обновлений и новых кнопок? И писать туда в духе «добавлена такая-то кнопка, <ссылка>», «обновлена такая-то кнопка, изменения вот такие, <ссылка>».
Или даже две темы – по признаку проверенности и стабильности. Чтобы можно было подписаться отдельно на релизы и экспериментальные версии.
чуть погодя добавлю в инструменты. как и орион.
С ним примечание нужно, что с ним не работают старые хоткеи, нет контекстного меню и сломан механизм «а не сохранить ли изменения?».
Отредактировано Infocatcher (16-08-2012 09:07:02)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Attributes Inspector 0.6.0pre9 (2012-08-16)
+ Реализован вывод информации об атрибутах во время перетаскивания (drag and drop). К сожалению, никакие сочетания клавиш при этом не работают.
* Оптимизировано обновление всплывающей подсказки при очень частом изменении атрибутов узла под курсором.
x Исправлена индикация копирования в модальных окнах, открытых из окна, в котором был запущен Attributes Inspector.
Перестала работать, консоль:
Метка времени: 16.08.2012 13:12:34 Ошибка: SyntaxError: missing ) after argument list Источник: chrome://custombuttons/content/button.js?windowId=Firefox&id=custombuttons-button0@init Строка 391, символ 35 Исходный код: + "outline-style: " + _b if(!("setAttributeNS" in node))";"
Отсутствует
Kamui
Ай, побилось при заливке, сейчас...
Добавлено 16-08-2012 09:31:49
Перезалил.
Добавлено 16-08-2012 09:59:02
Эх, не лезет орион во вкладку:
Error: SecurityError: The operation is insecure. Source file: chrome://browser/content/orion.js Line: 7105
Впрочем, chrome://browser/content/scratchpad.xul тоже во вкладку не лезет. Так что это не проблема способа встраивания.
Отредактировано Infocatcher (16-08-2012 09:59:02)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
okkamas_knife
Там же внутри ссылок полно, точно все заменены оказались?
В явном виде же сообщает, что NS_ERROR_FILE_NOT_FOUND.
Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource:///modules/source-editor-ui.jsm");
const SOURCEEDITOR_L10N = "chrome://browser/locale/devtools/sourceeditor.properties";
Потом еще настройка
и файл в соответствии с ней
Может, еще какие-то настройки из devtools.editor.*
resource:///modules/source-editor-orion.jsm =>
В общем, там надо в коде поискать ссылки на требующиеся модули.
сделать одну общую тему для обновлений и новых кнопок?
Только тогда не особо понятно, как быть с отдельными темами по кнопкам. Или там истории изменений не будит, или дублировать ее.
Отредактировано Infocatcher (16-08-2012 13:39:41)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Отсутствует
firepox, пока кто поумней не ответил, предлагаю вот такую несусветную дичь
var oSvc = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); var observer = { observe: function(subject, topic, data) { subject.addEventListener("load", this, false); }, handleEvent: function(e) { var doc = e.target; var win = doc.defaultView; if (doc.location.href != "chrome://browser/content/preferences/cookies.xul") return; oSvc.removeObserver(observer, "domwindowopened", false); var filter = doc.getElementById("filter"); filter.value = gBrowser.contentDocument.location.host; window.setTimeout(function() {win.gCookiesWindow.filter();}, 250) }}; oSvc.addObserver(observer, "domwindowopened", false); var wm = Components. classes["@mozilla.org/appshell/window-mediator;1"]. getService (Components. interfaces. nsIWindowMediator); var win = wm. getMostRecentWindow ("Browser:Cookies"); if (win) { alert("Сначала закройте уже открытое окно с куками"); oSvc.removeObserver(observer, "domwindowopened", false); return; } else openDialog ("chrome://browser/content/preferences/cookies.xul", "_blank", "resizable,dialog=yes,centerscreen", null);
Отредактировано Dumby (17-08-2012 03:48:29)
Отсутствует
Отсутствует
firepox, не-не, только не воспринимай мои ответы серьёзно ( чайник я )
Мешает www - уберём ! Попробуй так:
var oSvc = Components.classes["@mozilla.org/observer-service;1"] .getService(Components.interfaces.nsIObserverService); var observer = { observe: function(subject, topic, data) { subject.addEventListener("load", this, false); }, handleEvent: function(e) { var doc = e.target; var win = doc.defaultView; win.removeEventListener("load", this, false); if (doc.location.href != "chrome://browser/content/preferences/cookies.xul") return; oSvc.removeObserver(observer, "domwindowopened", false); var filter = doc.getElementById("filter"); filter.value = gBrowser.contentDocument.location.host.replace(/www./, ""); window.setTimeout(function() {win.gCookiesWindow.filter();}, 250) }}; oSvc.addObserver(observer, "domwindowopened", false); var wm = Components. classes["@mozilla.org/appshell/window-mediator;1"]. getService (Components. interfaces. nsIWindowMediator); var win = wm. getMostRecentWindow ("Browser:Cookies"); if (win) { alert("Сначала закройте уже открытое окно с куками"); oSvc.removeObserver(observer, "domwindowopened", false); return; } else openDialog ("chrome://browser/content/preferences/cookies.xul", "_blank", "resizable,dialog=yes,centerscreen", null);
Отредактировано Dumby (17-08-2012 03:46:21)
Отсутствует
firepox, что-то никак не могу воспроизвести описанный тобой случай.
Захожу на addons.mozilla.org,
жму на свою поделку,
в поле "Поиск:" - именно addons.mozilla.org
Да и вот специально разрешил им куки устанавливать - не хотят
Отредактировано Dumby (17-08-2012 10:22:39)
Отсутствует