Как в новом варианте кнопки, панель поиска опустить под вкладки, при расположении вкладок внизу страницы, как это было сделано в этом варианте. И зачем брал из меню кнопки стандартное меню?
Стандартное меню кнопки открывает Ctrl + ПКМ или Snift + ПКМ или двойной ПКМ. А убрал из меню кнопки потому что это лишний код без которого можно обойтись. Но можеш за:
// цикл добавляет из массива атрибуты и обработчики к пунктам меню .... this.......... button.menuPopup.appendChild(mItem); });
добавить:
// добавляем стандартное контекстное меню .... var separator = document.createElement("menuseparator"); this.menuPopup.appendChild( separator ); var cbContextPopup = document.getElementById("custombuttons-contextpopup"); var clone = cbContextPopup.cloneNode(true); clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')"); var menu = document.createElement("menu"); menu.setAttribute( "label", "Меню кнопки" ); menu.appendChild( clone ); this.menuPopup.appendChild( menu );
А как ты разместил вкладки внизу страницы ?
Отсутствует
PEAKTOP пишетКак в новом варианте кнопки, панель поиска опустить под вкладки, при расположении вкладок внизу страницы, как это было сделано в этом варианте. И зачем брал из меню кнопки стандартное меню?
Стандартное меню кнопки открывает Ctrl + ПКМ или Snift + ПКМ или двойной ПКМ. А убрал из меню кнопки потому что это лишний код без которого можно обойтись. Но можеш за:
Выделить кодКод:
// цикл добавляет из массива атрибуты и обработчики к пунктам меню .... this.......... button.menuPopup.appendChild(mItem); });добавить:
Выделить кодКод:
// добавляем стандартное контекстное меню .... var separator = document.createElement("menuseparator"); this.menuPopup.appendChild( separator ); var cbContextPopup = document.getElementById("custombuttons-contextpopup"); var clone = cbContextPopup.cloneNode(true); clone.setAttribute("onpopupshowing", "document.popupNode = document.getElementById('" + this.id + "')"); var menu = document.createElement("menu"); menu.setAttribute( "label", "Меню кнопки" ); menu.appendChild( clone ); this.menuPopup.appendChild( menu );А как ты разместил вкладки внизу страницы ?
Вкладки внизу страницы разместил с помощью расширения Tab Mix Plus
Спасибо за код добавления стандартного меню кнопки, но я его уже скопировал из старой версии. Я думал может это как-то отражается на работе кнопки. Но теперь всё понятно.
Отредактировано PEAKTOP (05-04-2013 19:43:44)
1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!
Отсутствует
PEAKTOP
Не обязательно вставлять в свои сообщения мои
Нащёт опустить панель поиска под вкладки, попробуй удалить в кнопке:
// Приклеить элемент #FindToolbar к странице( #appcontent ) ................................................. XPCOMUtils.defineLazyGetter(window, "gFindBar", function() { let XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; let findbar = document.createElementNS(XULNS, "findbar"); findbar.setAttribute("browserid", "content"); findbar.id = "FindToolbar"; gBrowser.parentNode.insertBefore(findbar, gBrowser); findbar.clientTop; window.gFindBarInitialized = true; return findbar; });
Рестарт. Но тогда не будут работать настройки: FindBar мини, FindBar сверху, FindBar справа
Но их можно удалить из меню:
{ label: 'FindBar мини', value: 'FindBar.mini', func: toggleAttribute, cek:''}, { label: 'FindBar сверху', value: 'FindBar.top', func: toggleAttribute, cek:''}, { label: 'FindBar справа', value: 'FindBar.right', func: toggleAttribute, cek:''},
Отсутствует
В данной версии (v14) заметил такую странность, если в настройках браузера включена функция => "Искать текст на странице по мере его набора", то копирование на странице с помощью "Ctrl+C" или кнопки на мышке невозможно - панель самопроизвольно открывается, а так же это наблюдается и при нажатии комбинации "Ctrl+любая буква" - панель открывается с уже введённой буквой которая была в комбинации "Ctrl+". В предыдущих версиях такого нет.
И небольшая просьба, можно ли сделать так же как было в предыдущих версиях (v10 и v12),что бы при очистке поля текстового ввода нажатием ПКМ по "Найти", курсор автоматически фокусировался в данном поле,а так же подправить цвет поля текстового ввода когда искомого на странице не найдено на более светлый, а то почти не видно, что ты вообще искал - приходиться выделять текст в поисковом окне.
Отсутствует
bunda1
Похоже «виноват» этот кусок кода
// поиск по мере набора если разрешено в 'about:config' и фокус на странице .... if ( custombuttons.getPrefs("accessibility.typeaheadfind") && ( 46 < e.keyCode && e.keyCode < 111 ) && /body|vbox/.test(e.target.localName) ) { if ( !this.firstLetter ) window.onkeypress = function(e) { this.firstLetter = String.fromCharCode(e.which) }; e.preventDefault(); e.stopPropagation(); if ( !gFindBar.hidden ) return; setTimeout(function() { gFindBar.onFindCommand(); gFindBar._findField.value = this.firstLetter }, 0); }
var fastFindBar; setTimeout(function() { fastFindBar = document.getElementById("browser-bottombox").firstChild; fastFindBar._quickFindTimeoutLength = 100; fastFindBar.style.visibility = "collapse"; }, 1000);
А сам кусок тогда
if (gFindBar.hidden && cbu.getPrefs("accessibility.typeaheadfind")) { setTimeout(function() { if (!fastFindBar.hidden) { gFindBar.onFindCommand(); var field = gFindBar._findField; field.value = fastFindBar._findField.value; field.selectionStart = field.value.length; } }, 50); }
Отредактировано Dumby (06-04-2013 07:56:26)
Отсутствует
Ader
Хорошо, исправлю и сделаю как просишь.
Добавлено 06-04-2013 20:58:56
Если я правильно понял идею, то может быть так......
Спасибо, это работает
Кстати отличная идея спрятать панель быстрого поиска и потом проверять !fastFindBar.hidden, и не надо проверять какая там клавиша нажата и где там фокус. Просто и красиво.
Отредактировано bunda1 (06-04-2013 20:58:56)
Отсутствует
а так же подправить цвет поля текстового ввода когда искомого на странице не найдено на более светлый, а то почти не видно, что ты вообще искал - приходиться выделять текст в поисковом окне.
У меня вроде нормально видно текст, даже если не найдено, наверно у тебя нестандартная тема.
У тебя разве не так:
Отредактировано bunda1 (06-04-2013 21:49:26)
Отсутствует
Ader
Старые версии кнопки добавляли свой стиль для панели поиска если текст не найден а вот последние используют стиль по умолчанию от FF, а у тебя его наверно нестандартная тема перебивает.
Можешь попробовать вот такой стиль:
.findbar-textbox[status="notfound"] { -moz-appearance: none !important; box-shadow: 0 0 0 1em #f66 inset; }
Отредактировано bunda1 (06-04-2013 23:16:12)
Отсутствует
Насчёт цвета ты был прав - дело в теме. Уже разобрался.
А, вот по моим вопросам про копированием с клавы "Ctrl + С" и автофокусировки курсора на поле текстового ввода, можно что-нибудь придумать?
Отсутствует
А, вот по моим вопросам про копированием с клавы "Ctrl + С" и автофокусировки курсора на поле текстового ввода, можно что-нибудь придумать?
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment.txt
Добавлено 06-04-2013 23:31:05
Поменяй код + рестарт.
Отредактировано bunda1 (06-04-2013 23:31:05)
Отсутствует
bunda1, а если секцию кода - "// Показать количество совпадений на панели поиска, автор кода 'slimx' ......................................." заменить кодом из старой версии, это на что-нибудь повлияет?
// Показать количество совпадений на панели поиска, автор кода 'slimx' ....................................... (function() { var status = document.getAnonymousElementByAttribute(gFindBar, 'anonid', 'match-case-status'); var count = document.createElement("label"); count.id = 'hits'; count.hidden = true; status.parentNode.insertBefore(count, status); gFindBar.__proto__._foundMatches = count; gFindBar.__proto__._updateMatchesCount = function(aRes) { if (!this._updateMatchCountTimeout) window.clearTimeout(this._updateMatchCountTimeout); this._updateMatchCountTimeout = window.setTimeout(function(aRes, aSelf) { aSelf._updateMatchesCountWorker(aRes); }, 0, aRes, this); } gFindBar.__proto__._updateMatchesCountWorker = function(aRes) { var word = this._findField.value; if ( aRes == this.nsITypeAheadFind.FIND_NOTFOUND || !word) { this._foundMatches.hidden = true; this._foundMatches.value = ""; } else { var matchesCount = this._countMatches(word).toString(); if ( matchesCount !== "0" ) { this._foundMatches.value = "найдено совпадений: "+ matchesCount; if ( matchesCount == "-1") this._foundMatches.value = "найдено >100 совпадений"; this._foundMatches.hidden = false; gFindBar._findField.removeAttribute("status", "notfound"); } else { this._foundMatches.hidden = true; this._foundMatches.value = ""; gFindBar._findField.setAttribute("status", "notfound"); } window.clearTimeout(this._updateMatchCountTimeout); } } gFindBar.__proto__._countMatches = function(aWord, aWindow) { var win = aWindow || this.browser.contentWindow; var countFound = 0; for (var i = 0, count; win.frames && i < win.frames.length; i++) { if ((count = this._countMatches(aWord, win.frames[i])) != -1) countFound += count; else return count; } var doc = win.document; if (!doc || !(doc instanceof HTMLDocument)) return countFound; var body = doc.body; var count = body.childNodes.length; var searchRange = doc.createRange(); var startPt = doc.createRange(); var endPt = doc.createRange(); searchRange.setStart(body, 0); searchRange.setEnd(body, count); startPt.setStart(body, 0); startPt.setEnd(body, 0); endPt.setStart(body, count); endPt.setEnd(body, count); var retRange = null; var finder = Components.classes["@mozilla.org/embedcomp/rangefind;1"] .createInstance() .QueryInterface(Components.interfaces.nsIFind); finder.caseSensitive = this._shouldBeCaseSensitive(aWord); var matchLimit = 100; while ((retRange = finder.Find(aWord, searchRange, startPt, endPt))) { if (this._rangeIsVisible(retRange, win)) { if (this._findMode == this.FIND_LINKS) { if (this._rangeStartsInLink(retRange)) ++ countFound; } else ++ countFound; } if (countFound == matchLimit) { countFound = -1; break; } startPt = doc.createRange(); startPt.setStart(retRange.startContainer, retRange.startOffset + 1); } return countFound; } gFindBar.__proto__._rangeIsVisible = function(aRange, aWindow) { var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } return true; } gFindBar.__proto__._rangeStartsInLink = function(aRange) { var isInsideLink = false; var node = aRange.startContainer; if (node.nodeType == node.ELEMENT_NODE) { if (node.hasChildNodes) { var childNode = node.childNodes[aRange.startOffset]; if (childNode) node = childNode; } } const XLink_NS = "http://www.w3.org/1999/xlink"; do { if (node instanceof HTMLAnchorElement) { isInsideLink = node.hasAttribute("href"); break; } else if (typeof node.hasAttributeNS == "function" && node.hasAttributeNS(XLink_NS, "href")) { isInsideLink = (node.getAttributeNS(XLink_NS, "type") == "simple"); break; } node = node.parentNode; } while (node); return isInsideLink; } eval("gFindBar._updateCaseSensitivity=" + gFindBar._updateCaseSensitivity.toString().slice(0, -1) + "this._updateMatchesCount();}"); eval("gFindBar._updateStatusUI=" + gFindBar._updateStatusUI.toString().slice(0, -1) + "this._updateMatchesCount();}"); })();
Отредактировано PEAKTOP (07-04-2013 14:17:16)
1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!
Отсутствует
bunda1, действительно ошибся, не из того окна редактора скопировал код. Спасибо за ответ. Буду пользоваться секцией старого кода. Для меня более привычно, что кол-во совпадений отображается в конце панели.
1. Приму из добрых рук щедрый дар - инвайт на Хабр и Лепру
2. Бессмысленно осмысливать смысл неосмысленными мыслями!
3. Прежде чем подумать - подумай!
Отсутствует
bunda1
Давно хотел спросить, а можно как-то добавить функцию автоматического срабатывания "Показать - скрыть поиск по странице" при выделении текста, без ручного клика по кнопке. Ну и можно пункт в меню кнопки для переключения режима, для кому как удобней.
Отредактировано villa7 (21-05-2013 21:36:07)
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
bunda1
Давно хотел спросить, а можно как-то добавить функцию автоматического срабатывания "Показать - скрыть поиск по странице" при выделении текста, без ручного клика по кнопке. Ну и можно пункт в меню кнопки для переключения режима, для кому как удобней.
Добавлять в кнопку такую функцию не буду потому что вряд ли это кому то еще нужно.
Но ты можешь добавить в кнопку:
function autoFind(e) { if ( e.button !== 0 ) return; if ( /input|password|textarea|textbox|searchbar|findbar/.test( e.target.localName.toLowerCase() ) ) return; if ( e.type == 'mousedown' ) var lastSelection = getBrowserSelection(); if ( e.type == 'mouseup' ) { var selection = getBrowserSelection(); if ( selection && selection !== lastSelection && gFindBar.hidden ) gFindBar.onFindCommand(); } }; addEventListener("mouseup", autoFind, false, gBrowser ); addEventListener("mousedown", autoFind, false, gBrowser );
Если тебе нужна соответствующая настройка в меню кнопки я сделаю.
Отсутствует
bunda1
Отлично, спасибо. Насчет настройки в меню, так то вроде все устраивает, единственное когда копируешь много текста на компьютер, то наверное можно бы было отключить автопоиск, что-бы не выскакивал постоянно. Если это не затратно конечно.
Отредактировано villa7 (28-05-2013 22:02:29)
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
bunda1
Отлично, спасибо. Насчет настройки в меню, так то вроде все устраивает, единственное когда копируешь много текста на компьютер, то наверное можно бы было отключить автопоиск, что-бы не выскакивал постоянно. Если это не затратно конечно.
Включить авто поиск при выделенные текста можно в настройках кнопки, кстати после редактирования кодов в этой кнопке не нужен рестарт.
Отсутствует
bunda1
Ух ты, класс. По сути эта функция избавляет делать лишний клик по кнопке при поиске на других сайтах, да и мини панель внизу не особо мешает, а если кому мешает то теперь можно и отключить. Спасибо тебе за труды.
Лучше спросить у знающих - чем лезть не зная.
Отсутствует
Toggle Find+3 eksperiment.txt
Очень удобно. Тогда логично бы сделать, чтобы выделенное слово добавлялось в строку поиска и когда Toggle Find+3 уже открыт. Но только чтобы это тоже отключалось.
Отсутствует
Очень удобно. Тогда логично бы сделать, чтобы выделенное слово добавлялось в строку поиска и когда Toggle Find+3 уже открыт. Но только чтобы это тоже отключалось.
http://forum.mozilla-russia.org/uploaded/Toggle Find+3 eksperiment 2.txt
Отсутствует