где взять файлы изображений для кнопок?
http://www.iconfinder.com/
http://www.iconsearch.ru/
http://findicons.com/
И бывают ли такие файлы, в которых "зашито" много изображений?
Бывают: http://ru.wikipedia.org/wiki/ICO_%28%D1 … E%D0%B2%29
Вроде бы, при использовании в Custom Buttons должна выбираться иконка подходящего размера.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
rsuan
Подскажите пожалуйста, где взять файлы изображений для кнопок?
везде можно взять, например http://www.iconspedia.com/ или скачай красивую тему для FF, вот nuri-1.0 https://addons.mozilla.org/ru/firefox/addon/220152/ разархивируй, и вытащи иконки для своих кнопок.
Отредактировано bunda1 (30-12-2010 17:53:56)
Отсутствует
правда? я не пробовал.
Попробовал. Видимо, берется самая первая с 32-битным цветом.
По крайней мере, так для всех имеющихся у меня иконок, а там сначала 16х16.
Но можно схитрить:
moz-icon:file:///C:/some.ico?size=32
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Anton
Прошу о помощи.
Вот два /*Initialization Code*/
Search and open
/*Initialization Code*/ this.leftclick = function(e) {if (e.originalTarget.nodeName != "xul:toolbarbutton") return; goDoCommand("cmd_copy"); var str = readFromClipboard(); var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); var submission = ss.currentEngine.getSubmission(str, null); gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false); } this.leftDclick = function(event) { var str = gURLBar.value; var ss = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); var submission = ss.currentEngine.getSubmission(str, null); gBrowser.loadOneTab(submission.uri.spec, null, null, submission.postData, true, false); }; this.midclick = function (evt){ warn_if_opening_more_than = 16; var browser = getBrowser(); var n_to_open,dl,dll,i; function linkIsSafe(u) { if (u.substr(0,7)=='mailto:' ) return false; if (u.substr(0,11)=='javascript:') return false; return true; } n_to_open = 0; dl = window._content.document.links; dll = dl.length; if (window._content.getSelection && window._content.getSelection().containsNode) { for(i=0; i<dll; ++i) { if (window._content.getSelection().containsNode(dl[i], true) && linkIsSafe(dl[i].href)) { ++n_to_open; } } if (n_to_open && (n_to_open<=warn_if_opening_more_than || confirm('Open ' + n_to_open + ' selected links in new windows?'))) { for(i=0; i<dll; ++i) { if (window._content.getSelection().containsNode(dl[i], true) && linkIsSafe(dl[i].href)) { browser.addTab(dl[i].href); } } } } if (!n_to_open) { /* if no links selected, open all links */ for(i = 0; i < dll; ++i) { if (linkIsSafe(dl[i].href)) ++n_to_open; } if (!n_to_open) alert ('no links'); else { if (confirm('No links selected. Open ' + n_to_open + ' links in new windows?')) { for (i = 0; i < dll; ++i) { if (linkIsSafe(dl[i].href)) { browser.addTab(dl[i].href); } } } } } }; this.rightclick = function(event) { goDoCommand("cmd_copy"); const IN_NEW_TAB = true; const IN_BACKGROUND = false; var str = readFromClipboard(); if (!str) return; if (IN_NEW_TAB) gBrowser.loadOneTab(str, null, null, null, IN_BACKGROUND, false); else gBrowser.loadURI(str); }; this.setAttribute('onclick', 'gQuot(event, this)'); this.setAttribute('ondblclick', 'gQuot(event, this)'); function searchService() { return Components.classes["@mozilla.org/browser/search-service;1"] .getService(Components.interfaces.nsIBrowserSearchService); } this.selectEngine = function(aNode, aEvent) { var engine = aEvent.target.engine; var ss = searchService(); ss.currentEngine = ss.getEngineByName(engine.name); aNode.engine = engine; aNode.image = aEvent.target.getAttribute("src"); } this.populateMenu = function(aNode) { var ss = searchService(); var engines = ss.getVisibleEngines({ }); const kXULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; while(aNode.firstChild && aNode.firstChild.localName != "menuseparator") { aNode.removeChild(aNode.firstChild); } for(var i = engines.length - 1; i >= 0; i--) { var mi = document.createElementNS(kXULNS, "menuitem"); mi.id = "cb-search-" + engines[i].name; mi.className = "menuitem-iconic searchbar-engine-menuitem"; mi.setAttribute("label", engines[i].name); if(engines[i].iconURI) mi.setAttribute("src", engines[i].iconURI.spec); mi.engine = engines[i]; if(mi.engine == ss.currentEngine) mi.style.fontWeight = "bold"; mi.setAttribute("onclick", "event.preventDefault();event.stopPropagation();parentNode.parentNode.selectEngine(parentNode.parentNode, event);"); aNode.insertBefore(mi, aNode.firstChild); } } this.currentEngine = searchService().currentEngine; var ss = searchService(); this.engine = ss.currentEngine; this.image = this.engine.iconURI.spec; var mp = this.appendChild(document.createElement("menupopup")); mp.setAttribute("onpopupshowing", "parentNode.populateMenu(this)"); mp.setAttribute("oncommand", "event.stopPropagation()"); var managerSeparator = mp.appendChild(document.createElement("menuseparator")); managerSeparator.id = "cb-searchbutton-separator" var managerItem = mp.appendChild(document.createElement("menuitem")); managerItem.setAttribute("label", "Manage Search Engines..."); managerItem.setAttribute("oncommand", "openDialog('chrome://browser/content/search/engineManager.xul', " + "'engineManager', 'chrome, dialog=no')"); this.type = "menu-button";
/*Initialization Code*/ var easyDragToGo = { loaded: false, moving: false, StartAlready: false, onStartEvent: null, // drag start event onDropEvent: null, // drag drop event aXferData: null, // drag data aDragSession: null, // drag session onLoad: function() { if (!easyDragToGo.loaded) { var contentArea = getBrowser().mPanelContainer; if (contentArea) { eval("nsDragAndDrop.checkCanDrop =" + nsDragAndDrop.checkCanDrop.toString().replace( 'if ("canDrop" in aDragDropObserver)', 'if (easyDragToGo.StartAlready) this.mDragSession.canDrop = true; $&') ); contentArea.addEventListener('draggesture', function(e) {easyDragToGo.dragStart(e)}, true); contentArea.addEventListener('dragover', function(e) { nsDragAndDrop.dragOver(e, easyDragToGoDNDObserver); }, false); contentArea.addEventListener('dragdrop', function(e) { nsDragAndDrop.drop(e, easyDragToGoDNDObserver); }, false); contentArea.addEventListener('drop', function(e) { nsDragAndDrop.drop(e, easyDragToGoDNDObserver); }, false); } easyDragToGo.loaded = true; } }, dragStart: function(aEvent) { this.onStartEvent = aEvent; this.StartAlready = true; }, clean: function() { this.StartAlready = false; if (this.onDropEvent) { this.onDropEvent.preventDefault(); this.onDropEvent.stopPropagation(); } this.onStartEvent = this.onDropEvent = this.aXferData = this.aDragSession = null; }, openURL: function(aURI, src, target, X, Y) { if (!aURI) return; var act = ""; var browser = getTopWin().getBrowser(); var uri = ""; var bg = true; var postData = {}; act = Y<0 ? "link-fg" : "link-bg"; // get search strings if ((target == "text" || target == "fromContentOuter.text")) { var submission = this.getSearchSubmission(aURI, act); if (submission) { uri = submission.uri.spec; postData.value = submission.postData; if (uri) act = act.replace("link", "search"); else act = ""; } else act = ""; if (!act) alert("No Search Engines!"); } switch (act) { case "search-fg": case "link-fg": // open a new tab and selected it bg = false; case "search-bg": case "link-bg": if (!uri) uri = getShortcutOrURI(aURI, postData); try { var cur = (!bg || browser.mTabs.length == 1) && browser.webNavigation.currentURI.spec == "about:blank" && !browser.mCurrentBrowser.webProgress.isLoadingDocument || (/^(javascript|mailto):/i.test(uri)); } catch(e) {} if (cur) // open in current tab loadURI(uri, null, postData.value, true); else { // for Tree Style Tab extension if ("TreeStyleTabService" in window && (target == "link" && !this.aDragSession.sourceNode.localName || target == "img")) try {TreeStyleTabService.readyToOpenChildTab(gBrowser.selectedTab);} catch(e) {} // open a new tab browser.loadOneTab(uri, null, null, postData.value, bg, true); } break; default: break; } }, customCode: function(code, url, src, target, X, Y) { eval(code); }, getSearchSubmission: function(searchStr, action) { try { var ss = Components.classes["@mozilla.org/browser/search-service;1"] .getService(Components.interfaces.nsIBrowserSearchService); var engine, engineName; if ( /^search-(.+?)-?(fg|bg|cur)$/.test(action) ) engineName = RegExp.$1; else engineName = "c"; if ( engineName == "c" ) engine = ss.currentEngine || ss.defaultEngine; else if ( engineName == "d" ) engine = ss.defaultEngine || ss.currentEngine; else { engine = ss.getEngineByName(engineName); if (!engine) engine = ss.currentEngine || ss.defaultEngine; } return engine.getSubmission(searchStr, null); } catch (e) { return null; } }, SelectedText: function(node) { if (!node) return ""; if ( node.localName == "TEXTAREA" || (node.localName == "INPUT" && node.type == "text") ) return node.value.substring(node.selectionStart, node.selectionEnd); else return document.commandDispatcher.focusedWindow.getSelection().toString(); }, seemAsURL: function(url) { // url test var DomainName = /(\w+(\-+\w+)*\.)+\w{2,7}/; var HasSpace = /\S\s+\S/; var KnowNameOrSlash = /^(www|bbs|forum|blog)|\//; var KnowTopDomain1 = /\.(com|net|org|gov|edu|info|mobi|mil|asia)$/; var KnowTopDomain2 = /\.(de|uk|eu|nl|it|cn|be|us|br|jp|ch|fr|at|se|es|cz|pt|ca|ru|hk|tw|pl)$/; var IsIpAddress = /^([1-2]?\d?\d\.){3}[1-2]?\d?\d/; return !HasSpace.test(url) && DomainName.test(url) && (KnowNameOrSlash. test(url) || KnowTopDomain1.test(url) || KnowTopDomain2.test(url) || IsIpAddress.test(url)); }, getForceURL: function(url) { var code; var str = ""; url = url.replace(/\s|\r|\n|\u3000/g, ""); for (var i = 0; i < url.length; i++) { code = url.charCodeAt(i); if (code >= 65281 && code <= 65373) str += String.fromCharCode(code - 65248); else str += url.charAt(i); } str = this.fixupSchemer(str); str = this.SecurityCheckURL(str); return str; }, SecurityCheckURL: function(aURI) { if ( /^data:/.test(aURI) ) return ""; if ( /^javascript:/.test(aURI) || /^about:/.test(aURI)) return aURI; var sourceURL = getBrowser().currentURI.spec; const nsIScriptSecurityManager = Components.interfaces.nsIScriptSecurityManager; var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"] .getService(nsIScriptSecurityManager); const nsIScriptSecMan = Components.interfaces.nsIScriptSecurityManager; try { secMan.checkLoadURIStr(sourceURL, aURI, nsIScriptSecMan.STANDARD); } catch(e) { aURI = ""; } return aURI; }, fixupSchemer: function(aURI) { if ( /^(?::\/\/|\/\/|\/)?(([1-2]?\d?\d\.){3}[1-2]?\d?\d(\/.*)?|[a-z]+[\-\w]+\.[\-\w\.]+(\/.*)?)$/i.test(aURI) ) aURI = "http://" + RegExp.$1; else if ( /^\w+[\-\.\w]*@(\w+(\-+\w+)*\.)+\w{2,7}$/.test(aURI) ) aURI = "mailto:" + aURI; else { var table = "ttp=>http,tp=>http,p=>http,ttps=>https,tps=>https,ps=>https,s=>https"; var regexp = new RegExp(); if (aURI.match(regexp.compile('^('+ table.replace(/=>[^,]+|=>[^,]+$/g, '').replace(/\s*,\s*/g, '|')+'):', 'g'))) { var target = RegExp.$1; table.match(regexp.compile('(,|^)'+target+'=>([^,]+)')); aURI = aURI.replace(target, RegExp.$2); } } return aURI; } }; var easyDragToGoDNDObserver = { onDragOver: function(aEvent, aFlavour, aDragSession) { aDragSession.canDrop = true; // for drag tabs or bookmarks if (!easyDragToGo.StartAlready) { easyDragToGo.onStartEvent = aEvent; easyDragToGo.StartAlready = true; } }, onDrop: function(aEvent, aXferData, aDragSession) { if (!easyDragToGo.StartAlready) return; easyDragToGo.onDropEvent = aEvent; easyDragToGo.aXferData = aXferData; easyDragToGo.aDragSession = aDragSession; var sNode = aDragSession.sourceNode; var url; if ( !sNode ) { // Drag and Drop from content outer try {url = aXferData.data.replace( /^[\s\n]+|[\s\n]+$/g, '' )} catch(e) {} if (!url) { easyDragToGo.clean(); return; } var target = "fromContentOuter.text"; if ( easyDragToGo.seemAsURL(url) || (/^file:\/\/\/[\S]+$/.test(url)) ) { //force it to a url or local file/directory if ( /^file:\/\/\//.test(url)) { if ( /([^\/]+\.(xpi|jar))$/.test(url) ) { eval("InstallTrigger.install({ '" + RegExp.$1 + "' : url })"); easyDragToGo.clean(); return; } else target = "fromContentOuter.link"; } else { var tmpurl = url; url = easyDragToGo.fixupSchemer(url); url = easyDragToGo.SecurityCheckURL(url); if (url) target = "fromContentOuter.link"; else url = tmpurl; } } easyDragToGo.openURL(url, null, target); } else { // Drag and Drop from Content area var relX = aEvent.screenX - easyDragToGo.onStartEvent.screenX; var relY = aEvent.screenY - easyDragToGo.onStartEvent.screenY; // do nothing with drag distance less than 10px if ( Math.abs(relX) < 10 && Math.abs(relY) < 10 ) { easyDragToGo.clean(); return; } var str, src; var selectStr = ""; var type = "STRING"; var target = "link"; url = str = aXferData.data.replace( /\r\n/g, "\n").replace( /\r/g, "\n"); try { selectStr = easyDragToGo.SelectedText(easyDragToGo.onStartEvent.target); selectStr = selectStr.replace( /\r\n/g, "\n").replace( /\r/g, "\n"); } catch(e) {} if (str != selectStr) { var idx = str.indexOf("\n"); if (idx > 0) { url = str.substr(0, idx); str = str.substr(idx + 1); } if (str == selectStr) url = str; else if ( !(/\s|\n/.test(url)) && (/^([a-z]{2,7}:\/\/|mailto:|about:|javascript:)/i.test(url)) ) type = "URL"; else url = selectStr; } else if (!(/\s|\n/.test(url)) && (/^([a-z]{2,7}:\/\/|mailto:|about:|javascript:)/i.test(url))) type = "URL"; url = url.replace( /^[\s\n]+|[\s\n]+$/g, '' ); if ( url && type == "URL" ) { src = url = easyDragToGo.SecurityCheckURL(url); if (sNode.nodeName == "IMG" || sNode.nodeName == "A" && !sNode.textContent && sNode.firstElementChild instanceof HTMLImageElement) { try {src = sNode.src || sNode.firstElementChild.src;} catch(e) {} target = "img"; } else if (aEvent.ctrlKey) { // as text with ctrlkey var aNode = easyDragToGo.onStartEvent.target; while (aNode && aNode.nodeName != "A") aNode = aNode.parentNode; if (aNode && aNode.textContent) { url = aNode.textContent; target = "text"; } } } else if (url) { var tmpurl = url; if (aEvent.ctrlKey) { url = easyDragToGo.getForceURL(url) // force convert to a url if (url) target = "link"; else url = tmpurl; } else if ( easyDragToGo.seemAsURL(url) ) { //seem as a url url = easyDragToGo.fixupSchemer(url); url = easyDragToGo.SecurityCheckURL(url); if (!url) { // not a url, search it url = tmpurl; target = "text"; } } else //it's a text string, so search it target = "text"; } easyDragToGo.openURL(url, src, target, relX, relY); } easyDragToGo.clean(); }, getSupportedFlavours: function() { var flavourSet = new FlavourSet(); flavourSet.appendFlavour("text/x-moz-url"); flavourSet.appendFlavour("text/unicode"); return flavourSet; } }; easyDragToGo.onLoad();
которые по отдельности прекрасно работают, но если их поместить в одну кнопку,код Drag To Go(котрый дает возможность удерживая левую кнопку мыши, подцепить ссылку и движением мыши вверх-вниз открыть ссылку в новой активной или фоновой вкладке или выделенную фразу отправить в поисковик,в новой вкладке) начинает глючить и открывать по две вкладки, вместо одной.Пажалуйста дай код каторый исправит это.
Отредактировано bunda1 (03-01-2011 20:51:54)
Отсутствует
А как насчёт того, чтобы сделать удобную интеграцию с новым менеджером дополнений?
Вот стайлиш и скриптиш (ну или гризманки) - оба этих дополнения интегрировались в новый АОМ и теперь управлять стилями и скриптами можно из одного места, что удобно.
Может возможно сделать такое и для КБ? Ну чтобы был списочек всех имеющихся кнопочек. Чтобы было показано какие из них работают, а какие спрятаны (спрятаны - значит не работают). Чтобы можно было отключить или удалить ненужные.
На мой взгляд, это привлекло бы больше пользователей - ведь не все могут догадаться (хоть в каком-нибудь FAQе это и описано), что кнопка у которой своё контекстное меню при правом клике по ней - что чтобы удалить её - надо перед кликом правой сначала зажать ктрл/альт/шифт.
А потом можно будет слегка добавить функционала - чтобы установленные КБ кнопки умели бы обновляться (т.е. как вот в стайлише стили и скриптише). Тогда вообще юзеру и отслеживать никаких форумов не надо - были какие-то изменения в движке лисы и какая-нибудь кнопочка поламалась. Её автор быстро правит её, а юзер пока на форум не залезет - и не узнает, что есть исправленная версия. А так - нажал "проверить обновления" - а оно и говорит, что таковые имеются и предлагает их установить. Удобство. Ценой вашего труда
mzfx
Отсутствует
bunda1
которые по отдельности прекрасно работают, но если их поместить в одну кнопку,код Drag To Go(котрый дает возможность удерживая левую кнопку мыши, подцепить ссылку и движением мыши вверх-вниз открыть ссылку в новой активной или фоновой вкладке или выделенную фразу отправить в поисковик,в новой вкладке) начинает глючить и открывать по две вкладки, вместо одной.Пажалуйста дай код каторый исправит это.
вызывает повторную инициализацию кнопки, при этом Drag To Go устанавливает второй обработчик, соответственно они оба срабатывают при перетаскивании. Для того, чтобы Drag To Go не устанавливал второй обработчик, надо убрать строки
и
а в конце поместить
if (this. type == "menu-button") easyDragToGo. onLoad (); this. type = "menu-button";
Добавлено 04-01-2011 11:24:32
iDev.Pi
А как насчёт того, чтобы сделать удобную интеграцию с новым менеджером дополнений?
Вот стайлиш и скриптиш (ну или гризманки) - оба этих дополнения интегрировались в новый АОМ и теперь управлять стилями и скриптами можно из одного места, что удобно.
Может возможно сделать такое и для КБ?
Возможно, но не во всех поддерживаемых CB приложениях новый менеджер дополнений, а делать две разные ветки кода мне бы не хотелось.
Ну чтобы был списочек всех имеющихся кнопочек. Чтобы было показано какие из них работают, а какие спрятаны (спрятаны - значит не работают). Чтобы можно было отключить или удалить ненужные.
Списочек есть в планах, Infocatcher давно меня пинал в этом направлении. Когда-нибудь обязательно сделаю.
Её автор быстро правит её
Нет, это фантастика Я в это не верю.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Anton
Можно ли как то сделать чтобы у CB кнопок были видны тултипы
если в Firefox вообще отключены тултипы (tooltip) через about:config browser.chrome.toolbar_tips; false .
Отсутствует
Копировать информацию вкладки & Link Tooltips & TextLink(Firefox3.6 - 4.0.1)
Добавляет в контекстное меню вкладки пункты:"Копировать название вкладки и адрес""Копировать название вкладки и адрес(HTML)""Копировать название вкладки и адрес(BBCode)", при наведении курсора на ссылку показывает в всплывающей подсказке(как в Opera) название и полный адрес ссылки,открытие текстовых адресов двойным кликом ЛКМ. После установки и вывода кнопки на панель желателен перезапуск браузера.
(function() { var htmlEscape = function(s) { s = s.replace(/&/g, "&"); s = s.replace(/>/g, ">"); s = s.replace(/</g, "<"); s = s.replace(/"/g, """); return s; }; var copyTabInfo = function (aAsHTML) { var tab = document.popupNode; var title = tab.label; var url = gBrowser.getBrowserForTab(tab).contentWindow.location.href; var txt = aAsHTML ? '<a href="' + htmlEscape(url) + '">' + htmlEscape(title) + '</a>' : title + "\n" + url; Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper) .copyString(txt); }; var copyTabBBC = function (aAsBBC) { var tab = document.popupNode; var title = tab.label; var url = gBrowser.getBrowserForTab(tab).contentWindow.location.href; var txt = aAsBBC ? '[url=' + htmlEscape(url) + ']' + htmlEscape(title) + '[/url]' : title + "\n" + url; Cc["@mozilla.org/widget/clipboardhelper;1"] .getService(Ci.nsIClipboardHelper) .copyString(txt); }; var menuitem1 = document.createElement("menuitem"); menuitem1.setAttribute("label", "Копировать название + URL"); menuitem1.addEventListener("command", function() { copyTabInfo(false); }, false); var menuitem2 = document.createElement("menuitem"); menuitem2.setAttribute("label", "Копировать название + URL (HTML)"); menuitem2.addEventListener("command", function() { copyTabInfo(true); }, false); var menuitem3 = document.createElement("menuitem"); menuitem3.setAttribute("label", "Копировать название + URL (BBCode)"); menuitem3.addEventListener("command", function() { copyTabBBC(true); }, false); setTimeout(function() { gBrowser.mStrip.childNodes[1].appendChild(document.createElement("menuseparator")); gBrowser.mStrip.childNodes[1].appendChild(menuitem1); gBrowser.mStrip.childNodes[1].appendChild(menuitem2); gBrowser.mStrip.childNodes[1].appendChild(menuitem3); }, 0); })(); /* :::::::: Link Tooltips ::::::::::::::: */ getBrowser().addEventListener("DOMContentLoaded", function(aEvent) { var doc = new XPCNativeWrapper(aEvent.originalTarget); var links = doc.evaluate("//a[@href and @href!='']", doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var link, i = 0; (link = links.snapshotItem(i)); i++) { link.title = link.title ? link.title + " <" + link.href + ">" : link.href; } }, true); function ucjs_textlink(event){ if(event.button != 0 && event.keyCode != 13) return; var Start = new Date().getTime(); const relative = true; //相対urlを解決するかどうか const ioService = Components.classes['@mozilla.org/network/io-service;1'] .getService(Components.interfaces.nsIIOService); const urlRegex = /(((h?t)?tps?|h..ps?|ftp|((\uff48)?\uff54)?\uff54\uff50(\uff53)?|\uff48..\uff50(\uff53)?|\uff46\uff54\uff50)(:\/\/|\uff1a\/\/|:\uff0f\uff0f|\uff1a\uff0f\uff0f)[-_.!~*'()|a-zA-Z0-9;:\/?,@&=+$%#\[\]\uff0d\uff3f\u301c\uffe3\uff0e\uff01\uff5e\uff0a\u2019\uff08\uff09\uff5c\uff41-\uff5a\uff21-\uff3a\uff10-\uff19\uff1b\uff1a\uff0f\uff1f\uff1a\uff20\uff06\uff1d\uff0b\uff04\uff0c\uff05\uff03\uff5c\uff3b\uff3d]*[-_.!~*)|a-zA-Z0-9;:\/?@&=+$%#\[\]\uff0d\uff3f\u301c\uffe3\uff0e\uff01\uff5e\uff0a\u2019\uff5c\uff41-\uff5a\uff21-\uff3a\uff10-\uff19\uff1b\uff1a\uff0f\uff1f\uff20\uff06\uff1d\uff0b\uff04\uff0c\uff05\uff03\uff5c\uff3b\uff3d]+)/ig; const urlRegex1 = /([-_.!~*'()|a-zA-Z0-9;:\/?,@&=+$%#\[\]\uff0d\uff3f\u301c\uffe3\uff0e\uff01\uff5e\uff0a\u2019\uff08\uff09\uff5c\uff41-\uff5a\uff21-\uff3a\uff10-\uff19\uff1b\uff1a\uff0f\uff1f\uff20\uff06\uff1d\uff0b\uff04\uff0c\uff05\uff03\uff5c\uff3b\uff3d]*[.\uff0e]+[-_.!~*'|a-zA-Z0-9;:\/?@&=+$%#\uff0d\uff3f\u301c\uffe3\uff0e\uff01\uff5e\uff0a\u2019\uff08\uff09\uff5c\uff41-\uff5a\uff21-\uff3a\uff10-\uff19\uff1b\uff1a\uff0f\uff1f\uff1a\uff20\uff06\uff1d\uff0b\uff04\uff0c\uff05\uff03\uff5c]+[.\uff0e/\uff0f]*[-_.!~*|a-zA-Z0-9;:\/?@&=+$%#\uff0d\uff3f\u301c\uffe3\uff0e\uff01\uff5e\uff0a\u2019\uff5c\uff41-\uff5a\uff21-\uff3a\uff10-\uff19\uff1b\uff1a\uff0f\uff1f\uff1a\uff20\uff06\uff1d\uff0b\uff04\uff0c\uff05\uff03\uff5c]+)/ig; const urlRx = /^(ttp|tp|h..p|\uff54\uff54\uff50|\uff54\uff50|\uff48..\uff50)/i; const urlRx1 = /(:\/\/|\uff1a\/\/|:\uff0f\uff0f|\uff1a\uff0f\uff0f)/i; const mailRx = /(^(mailto:|\uff4d\uff41\uff49\uff4c\uff54\uff4f\uff1a)(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$)/; const mailRx1 = /(^(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:"(?:\\[^\r\n]|[^\\"])*")))\@(?:(?:(?:(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+)(?:\.(?:[a-zA-Z0-9_!#\$\%&'*+/=?\^`{}~|\-]+))*)|(?:\[(?:\\\S|[\x21-\x5a\x5e-\x7e])*\])))$)/; //ドキュメントとコンテントタイプ var doc = event.originalTarget.ownerDocument; if(doc.contentType != 'text/plain' && doc.contentType != 'text/html' && doc.contentType != 'application/xml' && doc.contentType != 'application/xhtml+xml') return; //designModeなら何もしない if (Components.lookupMethod(doc, 'designMode').call(doc) == 'on') return; var win = doc.defaultView; if(!win)return; var str1, text, str2; //textarea かどうか var node = isParentEditableNode(document.commandDispatcher.focusedElement); if (!node) { // このif ブロックは textarea等以外の処理 //ダブルクリックで選択された選択文字列のレンジを得る var selection = win.getSelection(); var selRange; try{ selRange = selection.getRangeAt(0); }catch(e){ selRange = selection; } if(!selRange)return; //レンジのノードなど text = selection.toString(); if(text == '') return; //debug(text); var sNode = selRange.startContainer; //debug(sNode.nodeName); var soffset = selRange.startOffset; var eNode = selRange.endContainer; //debug(eNode.nodeName); var eoffset = selRange.endOffset; if (sNode != eNode){ eNode = sNode; eoffset = soffset + text.length - 1; } var sOyaNode = oyaNode(sNode); var eOyaNode = oyaNode(eNode); var root; if(sOyaNode == eOyaNode) root = sOyaNode; else root = doc; if (!root) return; //debug("eOyaNode " + eOyaNode.nodeName); //親ブロック要素の文字列をすべて得る const allowedParents = [ /*"a",*/"abbr", "acronym", "address", "applet", "b", "bdo", "big", "blockquote", "body", "caption", "center", "cite", "code", "dd", "del", "dir", "div", "dfn", "dl", "dt", "em", "fieldset", "font", "form", "h1", "h2", "h3", "h4", "h5", "h6", "i", "iframe", "ins", "kdb", "li", "menu", "noframes", "noscript", "object", "ol", "p", "pre", "q", "samp", "small", "span", "strike", "s", "strong", "sub", "sup", "table", "td", "th", "thead", "tt", "u", "var" ]; var xpath = ".//text()[(parent::" + allowedParents.join(" or parent::") + ")]"; var candidates = doc.evaluate(xpath, root, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); //debug("candidates.snapshotLength " + candidates.snapshotLength); //レンジより前にある文字列 var i1 = - 1; for (var i = i1 + 1, len = candidates.snapshotLength; i < len; i++) { if(candidates.snapshotItem(i) != sNode) continue; i1 = i - 1; break; } str1 =""; if (i >= 0) { for (var i = i1; i >= 0 ; i--){ if(sOyaNode == oyaNode(candidates.snapshotItem(i))){ if (candidates.snapshotItem(i).nextSibling && /^br$/i.test(candidates.snapshotItem(i).nextSibling.nodeName)) { //debug(candidates.snapshotItem(i).nodeValue + " " + candidates.snapshotItem(i).nextSibling.nodeName); break; } str1 = candidates.snapshotItem(i).nodeValue + str1; //debug("str1 "+str1); if (/[ ]/.test(str1)) break; } else { break; } } } str2 = str1; if(sNode.nodeValue && soffset > 0) str1 = str1 + sNode.nodeValue.substr(0,soffset); //レンジより後ろにある文字列 for(var i = i1 + 1, len = candidates.snapshotLength; i < len; i++){ if(sOyaNode == oyaNode(candidates.snapshotItem(i))){ str2 = str2 + candidates.snapshotItem(i).nodeValue; //debug("str2 "+str2); if (i > i1 + 1 && /[ ]/.test(candidates.snapshotItem(i).nodeValue)) break; } else { break; } if (candidates.snapshotItem(i).nextSibling && /^br$/i.test(candidates.snapshotItem(i).nextSibling.nodeName)) { break; } } str2 = str2.substr(str1.length + text.length); } else { // この elseブロックは textarea等の処理 // readonlyでないなら何もしない if (!node.hasAttribute("readonly")) return; if (node && (node.type == "text" || node.type == "textarea") && 'selectionStart' in node && node.selectionStart != node.selectionEnd) { var offsetStart = Math.min(node.selectionStart, node.selectionEnd); var offsetEnd = Math.max(node.selectionStart, node.selectionEnd); str1 = node.value.substr(0, offsetStart); text = node.value.substr(offsetStart, offsetEnd-offsetStart); str2 = node.value.substr(offsetEnd); } else { return; } } //すべての文字列の中でのレンジの位置を得る var allStr = str1 + text + str2; var si = str1.length var ei = si + text.length; //全角括弧調整 while(text.match(/^[\u3001\u3002\uff08\uff5b\uff3b\u300c\u3014\u3008\u300a\u300e\u3010\u2018\u201c\u201d\u2019\u226a\uff1c\uff09\uff5d\uff3d\u300d\u3015\u3009\u300b\u300f\u3011\u2018\u201c\u201d\u2019\u226b\uff1e]/)){ si = si + 1; text = text.substr(1); } while(text.match(/[\s\u3001\u3002\uff08\uff5b\uff3b\u300c\u3014\u3008\u300a\u300e\u3010\u2018\u201c\u201d\u2019\u226a\uff1c\uff09\uff5d\uff3d\u300d\u3015\u3009\u300b\u300f\u3011\u2018\u201c\u201d\u2019\u226b\uff1e]$/)){ ei = ei - 1; text = text.substr(0,text.length -1); } //文末の.は無いことに allStr = allStr.replace(/\.$/ ,''); //debug("2 " + str2); //debug("Str " + text); //debug("1 " + str1); //debug("all " + allStr); //すべての文字列の中でURLと思しき文字列を配列として得る var i1, i2; var arrUrl = allStr.match(urlRegex); if(arrUrl){ //見つかったURLと思しき文字列の中にレンジが含まれているかどうか i2=0 for(var i =0,len = arrUrl.length; i < len; i++){ //debug(i + "] " + arrUrl[i]); i1 = allStr.indexOf(arrUrl[i],i2); i2 = i1 + arrUrl[i].length; //debug(i1 <= si && ei <= i2); if(i1 <= si && ei <= i2){ //このURLと思しき文字列の中にレンジが含まれていたので,これをURLとして新しいタブで開きましょう var url = arrUrl[i]; // ~等 を半角に url = url.replace(/\u301c/g,'\uff5e'); url = url.replace(/\uffe3/g,'\uff5e'); // 末尾の )や] の調整 if (/\)$/.test(url)){ if (url.indexOf("(") == -1) url = url.replace(/\)$/,''); } if (/\]$/.test(url)){ if (url.indexOf("[") == -1) url = url.replace(/\]$/,''); } if (/[.,]$/.test(url)){ url = url.replace(/[.,]$/,''); } // ttp等を http等に および :// を 半角に url = /^(ftp|\uff46\uff54\uff50)/i.test(url) ? url.replace(urlRx1,'://') : url.replace(urlRx,'http').replace(urlRx1,'://'); var URIFixup = Components.classes['@mozilla.org/docshell/urifixup;1'] .getService(Components.interfaces.nsIURIFixup); var uri = URIFixup.createFixupURI( url, URIFixup.FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP ); if(!uri) return; if (!isValidTld(uri)) return; uri = ioService.newURI(uri.spec, null, null); debug('Parsing ucjs_textlink: '+((new Date()).getTime()-Start) +'msec\n'); try{ if(event.shiftKey) saveAsURL(uri,doc); else openNewTab(uri); }catch(e){} return; } } } if( !relative ) return; //すべての文字列の中で相対URLと思しき文字列を配列として得る arrUrl = allStr.match(urlRegex1); if(!arrUrl) return; i2=0 for(var i =0,len = arrUrl.length; i < len; i++){ //debug("Relative " + arrUrl[i]); i1 = allStr.indexOf(arrUrl[i],i2); i2 = i1 + arrUrl[i].length; //debug(i1 +" "+ si +" "+ ei +" "+ i2); if(i1 <= si && ei <= i2){ //debug(arrUrl[i]); //このURLと思しき文字列の中にレンジが含まれていたので,これをURLとして新しいタブで開きましょう var url = arrUrl[i]; // ~等 を半角に url = url.replace(/\u301c/g,'\uff5e'); url = url.replace(/\uffe3/g,'\uff5e'); // 末尾の )や] の調整 if (/\)$/.test(url)){ if (url.indexOf("(") == -1) url = url.replace(/\)$/,''); } if (/\]$/.test(url)){ if (url.indexOf("[") == -1) url = url.replace(/\]$/,''); } if (/[.,]$/.test(url)){ url = url.replace(/[.,]$/,''); } // host名が ftp で始まるなら ftp://に if (/^ftp/.test(url)){ url = "ftp://" + url; } // host名が irc で始まるなら irc:に if (/^irc/.test(url)){ url = "irc://" + url; } //メール? if (mailRx1.test(url)) { url = "mailto:" + url; } //相対パスの処理 if(url.match(/^\.{1,}/)){ var baseURI = ioService.newURI(win.document.documentURI, null, null); url = ioService.newURI(url, null, baseURI).spec; } //debug(url.indexOf(url.match(urlRegex))); if (!mailRx.test(url) && url.indexOf(url.match(urlRegex)) > 1) return; var URIFixup = Components.classes['@mozilla.org/docshell/urifixup;1'] .getService(Components.interfaces.nsIURIFixup); try{ //debug(url); var uri = URIFixup.createFixupURI( url, URIFixup.FIXUP_FLAG_NONE ); //FIXUP_FLAG_ALLOW_KEYWORD_LOOKUP→FIXUP_FLAG_NONE }catch(e){return;} if(!uri) return; if (!isValidTld(uri)) { return; } debug(url); uri = ioService.newURI(uri.spec, null, null); debug('Parsing ucjs_textlink: '+((new Date()).getTime()-Start) +'msec\n'+uri.spec); try{ if(event.shiftKey) saveAsURL(uri,doc); else openNewTab(uri); }catch(e){} return; } } function activeBrowser() { return ('SplitBrowser' in window ? SplitBrowser.activeBrowser : null ) || gBrowser; } function _getFocusedWindow(){ //現在のウインドウを得る var focusedWindow = document.commandDispatcher.focusedWindow; if (!focusedWindow || focusedWindow == window) return window._content; else return focusedWindow; } //レンジの要素が所属する親ブロック要素を得る function oyaNode(aNode){ var pNode = aNode.parentNode; while(pNode && /^(a|abbr|acronym|b|bdo|big|body|code|dfn|em|font|i|kbd|label|pre|q|samp|small|span|strong|sub|sup|tt|var|wbr)$/i.test(pNode.nodeName) ){ pNode = pNode.parentNode; } return pNode; } function isParentEditableNode(node){ //if (Components.lookupMethod(node.ownerDocument, 'designMode').call(node.ownerDocument) == 'on') // return node; while (node && node.parentNode) { try { node.QueryInterface(Ci.nsIDOMNSEditableElement); return node; } catch(e) { } if (/input|textarea/.test(node.localName)) return node; if (node.isContentEditable || node.contentEditable=='true') return node; node = node.parentNode; } return null; } function isValidTld(aURI){ const regexpTLD = new RegExp("\\.(arpa|int|nato|com|net|org|info|biz|name|pro|museum|coop|aero|edu|gov|mil|ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bu|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cp|cr|cs|sk|cu|cv|cx|cy|cz|dd|de|dg|dj|dk|dm|do|dz|ea|ec|ee|eg|eh|er|es|et|fi|fj|fk|fm|fo|fr|fx|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|ic|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|pa|pc|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|ta|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|wg|ws|yd|ye|yt|yu|za|zm|zr|zw)\\.?$",""); const regexpIP = new RegExp("^[1-2]?[0-9]?[0-9]\\.[1-2]?[0-9]?[0-9]\\.[1-2]?[0-9]?[0-9]\\.[1-2]?[0-9]?[0-9]$",""); var host, tlds; try { host = aURI.host.split('/')[0]; } catch(e) { if (aURI.spec.match(/^(.+?\/\/(?:[^\/]+@)?)([^\/]+)(:\d+)?(?:.*)$/)) { host = RegExp.$2; } else if (aURI.spec.match(/^(mailto:(?:[^\/]+@)?)([^\/]+)(:\d+)?(?:.*)$/)){ host = RegExp.$2; } } //debug("host " + host); if (!host) return false; if (getVer() < 3.0){ if (regexpTLD.test(host)) return true; else return (regexpIP.test(host)); } else { var eTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"] .getService(Components.interfaces.nsIEffectiveTLDService); try { var tld = eTLDService.getPublicSuffixFromHost(host); return regexpTLD.test('.'+tld); } catch(e) { return (regexpIP.test(host)); } } } function saveAsURL(uri,doc){ var linkText = uri.spec; //Thunderbird if (/^chrome:\/\/messenger\/content\//.test(window.location.href)) { // URL Loading Security Check var focusedWindow = document.commandDispatcher.focusedWindow; var sourceURL = getContentFrameURI(focusedWindow); const nsIScriptSecurityManager = Components.interfaces.nsIScriptSecurityManager; var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"] .getService(nsIScriptSecurityManager); try { secMan.checkLoadURIStr(sourceURL, uri.spec, nsIScriptSecurityManager.STANDARD); } catch (e) { throw "Load of " + url + " denied."; } saveURL( uri.spec, linkText, null, true ); return; } // urlSecurityCheck wanted a URL-as-string for Fx 2.0, but an nsIPrincipal on trunk if(activeBrowser().contentPrincipal) urlSecurityCheck(uri.spec, activeBrowser().contentPrincipal,Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL); else urlSecurityCheck(uri.spec, activeBrowser().currentURI.spec,Ci.nsIScriptSecurityManager.DISALLOW_SCRIPT); saveURL( uri.spec, linkText, null, true, false, makeURI(doc.location.href, doc.characterSet) ); } function openNewTab(uri){ //Thunderbird if (/^chrome:\/\/messenger\/content\//.test(window.location.href)) { // Make sure we are allowed to open this URL // URL Loading Security Check var focusedWindow = document.commandDispatcher.focusedWindow; var sourceURL = getContentFrameURI(focusedWindow); const nsIScriptSecurityManager = Components.interfaces.nsIScriptSecurityManager; var secMan = Components.classes["@mozilla.org/scriptsecuritymanager;1"] .getService(nsIScriptSecurityManager); try { secMan.checkLoadURIStr(sourceURL, uri.spec, nsIScriptSecurityManager.STANDARD); } catch (e) { throw "Load of " + url + " denied."; } var protocolSvc = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"] .getService(Components.interfaces.nsIExternalProtocolService); protocolSvc.loadUrl(uri); return; } // urlSecurityCheck wanted a URL-as-string for Fx 2.0, but an nsIPrincipal on trunk if(activeBrowser().contentPrincipal) urlSecurityCheck(uri.spec, activeBrowser().contentPrincipal,Ci.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL); else urlSecurityCheck(uri.spec, activeBrowser().currentURI.spec,Ci.nsIScriptSecurityManager.DISALLOW_SCRIPT); if( (event.ctrlKey) ){ loadURI(uri.spec, null, null, false); }else{ if ('TreeStyleTabService' in window) TreeStyleTabService.readyToOpenChildTab(activeBrowser().selectedTab); openNewTabWith(uri.spec, null, null, null, false) //activeBrowser().loadOneTab(uri.spec, null, null, null, getPref("browser.tabs.loadInBackground", "bool", false), false); //activeBrowser().selectedTab = activeBrowser().addTab(uri.spec); } } function getVer(){ const Cc = Components.classes; const Ci = Components.interfaces; var info = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo); // このコードを実行しているアプリケーションの名前を取得する var ver = parseInt(info.version.substr(0,3) * 10,10) / 10; return ver; } function getPref(aPrefString, aPrefType, aDefault){ var xpPref = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch2); try{ switch (aPrefType){ case "str": return xpPref.getCharPref(aPrefString).toString(); break; case "int": return xpPref.getIntPref(aPrefString); break; case "bool": default: return xpPref.getBoolPref(aPrefString); break; } }catch(e){ } return aDefault; } function debug(aMsg){ const Cc = Components.classes; const Ci = Components.interfaces; Cc["@mozilla.org/consoleservice;1"] .getService(Ci.nsIConsoleService) .logStringMessage(aMsg); } } var textLinkForSidebar = { init: function(event){ try{ var doc = event.originalTarget; if (!doc.location) return; if(doc.location.href == "chrome://browser/content/web-panels.xul"){ doc.addEventListener('dblclick',function(event){setTimeout(ucjs_textlink,100,event);},false); doc.addEventListener('keypress',function(event){ucjs_textlink(event);},false); } }catch(e){} }, uninit: function(event){ try{ var doc = event.originalTarget; if (!doc.location) return; if(doc.location.href == "chrome://browser/content/web-panels.xul"){ doc.removeEventListener('dblclick',function(event){setTimeout(ucjs_textlink,100,event);},false); doc.removeEventListener('keypress',function(event){ucjs_textlink(event);},false); } }catch(e){} } } //for contents area if (/^chrome:\/\/messenger\/content\//.test(window.location.href)) { var target = document.getElementById("messagepane"); } else { var target = document.getElementById("appcontent"); } target.addEventListener('dblclick',function(event){setTimeout(ucjs_textlink,100,event);},false); target.addEventListener('keypress',function(event){ucjs_textlink(event);},false); //for already loaded chrome://browser/content/web-panels.xul if (!/^chrome:\/\/messenger\/content\//.test(window.location.href)) { setTimeout(function(){ try{ var doc = document.getElementById('sidebar').contentDocument; if(doc && doc.location && doc.location.href == "chrome://browser/content/web-panels.xul") doc.addEventListener('dblclick',function(event){setTimeout(ucjs_textlink,100,event);},false); doc.addEventListener('keypress',function(event){ucjs_textlink(event);},false); }catch(e){} },1000); } //for sidebar document onload event Listener window.document.addEventListener('load', textLinkForSidebar.init, true); window.document.addEventListener('unload', textLinkForSidebar.uninit, true);
Отредактировано imyax (24-05-2011 22:58:30)
Отсутствует
Всем привет.
У меня вопрос не по Mozilla Firefox, а по Mozilla Thunderbird, те нужно сделать две кнопки, но я не могу найти их функционал с помощью DOMi.
Вот скриншот:
По сути нужна кнопка - "Отметить всё как прочитанное" для активного окна или как правильно сказать - папки.
Отредактировано Indomito (15-01-2011 12:07:57)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
bunda1
Можно ли как то сделать чтобы у CB кнопок были видны тултипы
если в Firefox вообще отключены тултипы (tooltip) через about:config browser.chrome.toolbar_tips; false .
Наверное, можно сделать как-то вручную. Как — не знаю.
Indomito
«Все как прочитанные»
«Запустить анти-спам фильтры»
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
"Отметить всё как прочитанное"
Плохо искали.
<menuitem id="mailContext-markAllRead" label="Все как прочитанные" accesskey="В" command="cmd_markAllRead"/>
=>
P.S. Опередили.
Отредактировано Infocatcher (15-01-2011 14:36:46)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Anton и Infocatcher спасибо обоим... странно я искал по дереву - видимо упустил/пропустил.
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Indomito
Так ведь «Найти узел для исследования, щёлкнув по нему», Alt+Tab, Shift+F10 (или специальная кнопка контекстного меню).
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
IndomitoТак ведь «Найти узел для исследования, щёлкнув по нему», Alt+Tab, Shift+F10 (или специальная кнопка контекстного меню).
видимо я просто редко пользуюсь, а если пользуюсь, то ищу интуитивно
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Вот, обновил, поможет в поисках: Attributes Inspector.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher сорри за тупой вопрос... куда кидать код? Делать кнопку или что?
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
в тексте кода написано что с ним делать. Кинуть в "код", так что да - лучше создайте новую кнопку, чтобы не перебивать функций имеющихся кнопок. Хотя если у вас есть такая, у которой используется только секция "инициализация", то можно и в неё запихнуть этот код (в раздел "код", естественно).
mzfx
Отсутствует
iDev.Pi ясно - понял, другой вопрос, опять про Mozilla Thunderbird.
1. Есть кнопка - Экспорт всех кнопок в HTML
2. С Mozilla FireFox то все понятно Файл - Открыть файл... что бы считать записанные кнопки.
А как поступить/сделать в Mozilla Thunderbird. Я не нашёл аналогичной функции
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Indomito
Если не слишком часто надо, то можно через
Настройки – Основные – Показывать стартовую страницу в области просмотра сообщения при запуске Thunderbird
Отредактировано Infocatcher (16-01-2011 17:34:44)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher "Если не слишком часто надо.." нет конечно, это же не браузер, кнопки добавляются раз в полгода я утрирую
Только я вот написал - file:///C:/Custom Buttons/Сохранение кнопок/Mozilla Thunderbird/a.html и он открылся FireFox, а как его открыть в Mozilla Thunderbird?
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Indomito
Только я вот написал - file:///C:/Custom Buttons/Сохранение кнопок/Mozilla Thunderbird/a.html и он открылся FireFox, а как его открыть в Mozilla Thunderbird?
Можно сделать кнопку: http://custombuttons.mozdev.org/drupal/ … omment-559
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Я свое предыдущее сообщение правлю, а тут уже понаписали.
Обновил Attributes Inspector, теперь DOM Inspector ищется во всех окнах. Нужно при запуске из произвольного окна (важно для Mouse Gestures).
Отредактировано Infocatcher (16-01-2011 17:35:44)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует