solombala
omni/localization/ru/browser/menubar.ftl
Отсутствует
Vitaliy V.
Так просто? Класс! А, на это?
.bookmark-item[container][query] .... tooltiptext="Часто посещаемые"
Отредактировано solombala (20-03-2020 17:29:04)
Отсутствует
solombala
так наверно
omni/chrome/browser/content/browser/places/browserPlacesViews.js
Отредактировано Vitaliy V. (20-03-2020 20:18:49)
Отсутствует
Vitaliy V.
ну это не только Часто посещаемые но и Недавно добавленные, Метки, Последние метки...
Этого у меня нет. Короче, шикарно! Кстати, в 75 поиск сильно изуродовали ? urlbar , searchbar ? Читал что-то об этом.
Не могу из библиотеки убрать "Другие закладки" ...Опять дерево?
Зарыто здесь : OtherBookmarksFolderTitle=Другие закладки
Этот OtherBookmarksFolderTitle - убираю из скриптов - бесполезно...
Отредактировано solombala (21-03-2020 19:07:45)
Отсутствует
Ovod
И что это за скриншот https://www.upload.ee/image/11312915/20 … 145452.jpg ?
у вас что перекидывает на эту страницу вместо about:config что ли
А вообще можно создать user.js и добавить
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
Отсутствует
Vitaliy V.
да, перекидывает!
Добавлено 22-03-2020 14:46:00
А вообще можно создать user.js и добавить
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
добавил, а толку - то !
https://cloud.mail.ru/public/77DK/nwcBqK8LV
все остальные css все едино не работают!
непросмотренные линки мутно-серые, как и просмотренные
ширина полос меню не отрегулирована
Отредактировано Ovod (22-03-2020 14:46:00)
Отсутствует
да, перекидывает!
Ну, пробуйте новый профиль, переустановку браузера,
проверяйте систему на вирусы и т. д.
добавил, а толку - то !
user.js нужно добавить в корневую папку профиля а не в chrome
именно user.js а не userPref.js
Отсутствует
Ovod
да скопируйте из старого places.sqlite и favicons.sqlite (необязательно)
если ещё нужны пароли то key4.db и logins.json
Отсутствует
Vitaliy V.
и последнее
как в том же коде
/* Подсветка посещенных и непосещенных ссылок */ a:link {color: #FFFFFF !important;} /* Белый цвет непосещенной ссылки */ a:visited {color: ##00ff00 !important;} /* Темно-зеленый цвет посещенной ссылки */ /* Подчеркивать ссылки при наведении на них */ a[href]:hover { text-decoration: underline !important; }
уточнить, что фон именно что черный, текст белый?
за userjs спасибо - ширина полос меню, пункты меню и цвет ссылок стал как надо
Отсутствует
уточнить, что фон именно что черный
в смысле уточнить?
разве что добавить background к ссылкам
background-color: black !important;
Отсутствует
Отсутствует
Vitaliy V.
в смысле уточнить?
в том смысле уточнить, что встречаются страницы,где цветовая схема дикаяЁ
Добавлено 23-03-2020 16:27:31
у меня черный фон и белый текст в настройках браузера а тут вона что!
(в обычных настроках - не сss)
По поводу бакграунда
background-color: black !important;
- не надо двоеточия буквы а разве?
Как указать белый текст кодом?
Добавлено 23-03-2020 16:42:46
a:link {color: #FFFFFF !important;} /* Белый цвет непосещенной ссылки */ a:visited {color: ##00ff00 !important;} /* Темно-зеленый цвет посещенной ссылки */ background-color: #000000 !important; color: #FFFFFF !important;
right all 7
Добавлено 23-03-2020 16:43:32
?
Отредактировано Ovod (23-03-2020 16:43:32)
Отсутствует
Ovod
я имел ввиду добавить к вашему коду
Отсутствует
Вопрос снят ! Нашел dialog.css , туда коды button.dialog-button и все дела...
можно поподробней: где найти dialog.css и где взять коды button.dialog-button, а то в твоей 73 это окно тоже достало уже ...
Win 10х64
Отсутствует
ALEX_45_ORP
omni.ja/chrome/toolkit/skin/classic/global/dialog.css
/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* ===== dialog.css ===================================================== == Styles used by the XUL dialog element. ======================================================================= */ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* ::::: dialog ::::: */ dialog { padding-top: 8px; padding-bottom: 10px; padding-inline-start: 8px; padding-inline-end: 10px; } /* ::::: dialog buttons ::::: */ .dialog-button { font: menu; margin-top: 6px; } button.dialog-button:hover { -moz-appearance: none !important; border-radius: 3px !important; background: linear-gradient(rgb(72, 85, 108),rgb(20, 25, 34)) !important; cursor: pointer !important; color: #00ffff !important; padding: 2px !important} button.dialog-button{ -moz-appearance: none !important; border-radius: 3px !important; cursor: pointer !important; padding: 2px !important; background: linear-gradient(#aaa,#444) !important; color: #fff !important} dialog button, toolbar[printpreview="true"] button { -moz-appearance: none !important; border-radius: 3px !important; background: linear-gradient(#aaa,#444) !important; cursor: pointer !important; color: #fff !important; padding: 2px !important} dialog button:hover, toolbar[printpreview="true"] button:hover { background: linear-gradient(rgb(72, 85, 108),rgb(20, 25, 34)) !important; color: #00ffff !important} button[dlgtype="accept"] > .button-box > .button-icon, button[dlgtype="finish"] > .button-box > .button-icon, button[id="save-chrome"] > .button-box > .button-icon, button[id="save-content"] > .button-box > .button-icon, button[id="save-js"] > .button-box > .button-icon, button[oncommand="doOKButton();"] > .button-box > .button-icon, dialog[id="exceptiondialog"] button[dlgtype="extra1"] > .button-box > .button-icon, button[oncommand="enigmailKeygenStart();"] > .button-box > .button-icon, button[id="editBookmarkPanelDoneButton"] > .button-box > .button-icon, button[id="restart-button"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/ok.png") !important; margin-right: 5px !important; margin-left: -2px !important; } button[dlgtype="accept"][disabled="true"] > .button-box > .button-icon, button[dlgtype="finish"][disabled="true"] > .button-box > .button-icon, button[id="save-chrome"][disabled="true"] > .button-box > .button-icon, button[id="save-content"][disabled="true"] > .button-box > .button-icon, button[id="save-js"][disabled="true"] > .button-box > .button-icon, button[oncommand="doOKButton();"][disabled="true"] > .button-box > .button-icon, dialog[id="exceptiondialog"] button[dlgtype="extra1"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/ok-dis.png") !important; margin-right: 4px !important; margin-left: -3px !important; } button[dlgtype="cancel"] > .button-box > .button-icon, button[oncommand="doCancelButton();"] > .button-box > .button-icon, button[id="clearFilter"] > .button-box > .button-icon, button[id="clearListButton"] > .button-box > .button-icon, /* Download Manager - downloads.css */ button[id="editBookmarkPanelDeleteButton"] > .button-box > .button-icon, button[id="cancel-button"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 4px !important; margin-left: -4px !important; } button[dlgtype="cancel"][disabled="true"] > .button-box > .button-icon, button[oncommand="doCancelButton();"][disabled="true"] > .button-box > .button-icon, button[id="clearFilter"][disabled="true"] > .button-box > .button-icon, button[id="clearListButton"][disabled="true"] > .button-box > .button-icon { /* Download Manager - downloads.css */ list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(48px 16px 64px 0px) !important; margin-right: 4px !important; margin-left: -4px !important; } button[id="button-close"] > .button-box > .button-icon, button[id="closeButton"] > .button-box > .button-icon, button[id="donebutton"] > .button-box > .button-icon, button[id="Close"][class="spell-check"] > .button-box > .button-icon, button[id="editBookmarkPanelRemoveButton"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 4px !important; margin-left: -4px !important; } button[id="button-close"][disabled="true"] > .button-box > .button-icon, button[id="closeButton"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/close.png") !important; -moz-image-region: rect(48px 16px 64px 0px) !important; margin-right: 2px !important; } button[dlgtype="help"] > .button-box > .button-icon, button[id="HelpButton"] > .button-box > .button-icon, button[oncommand="doHelpButton();"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/question-16.png") !important; margin-right: 2px !important; } button[id="editMessageButton"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/edit.png") !important; margin-right: 2px !important; } button[id$=".advancedbutton"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/advanced-prefs.png") !important; margin-right: 2px !important; } button[id="more-panels-link"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/search.png") !important; margin-right: 2px !important; } /* "Don't Save" and "Quit" (there are no unique identifiers except the label ) */ dialog[id="commonDialog"] button[dlgtype="extra1"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/close.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 2px !important; } /* For the Software Update wizard - this cannot be grouped above */ wizard[id="updates"] .wizard-button[dlgtype="extra1"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/close.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 2px !important; } wizard[id="updates"] .wizard-button[dlgtype="extra2"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/stop.png") !important; margin-right: 2px !important; } /* View Cookie Manager button on Privacy dialog */ dialog[id="p3pDialog"] button[dlgtype="extra1"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/cookie.png") !important; margin-right: 2px !important; } button[dlgtype="extra2"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/information-16.png") !important; margin-right: 2px !important; } button[dlgtype="extra2"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/information-16-dis.png") !important; margin-right: 2px !important; } button[id="launch"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/launch.png") !important; margin-right: 2px !important; } button[id="launch"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/launch-dis.png") !important; margin-right: 2px !important; } button[id="pauseResume"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/pause.png") !important; margin-right: 2px !important; } button[id="pauseResume"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/pause-dis.png") !important; margin-right: 2px !important; } button[label="Resume"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/go.png") !important; margin-right: 2px !important; } button[id="download-button"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/download.png") !important; margin-right: 2px !important; } wizard[currentpageid="updatesfound"] .wizard-button[dlgtype="next"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/install.png") !important; margin-right: 2px !important; } button[id="backButton"] > .button-box > .button-icon, button[dlgtype="back"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/back.png") !important; margin-right: 2px !important; } button[dlgtype="back"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/back-dis.png") !important; margin-right: 2px !important; } button[dlgtype="next"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/next.png") !important; margin-right: 2px !important; } button[dlgtype="next"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/next-dis.png") !important; margin-right: 2px !important; } /* Override for Console2 extension */ dialog[id="Console2BlacklistDialog"] button[dlgtype="extra2"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 4px !important; margin-left: -3px !important; } dialog[id="Console2BlacklistDialog"] button[dlgtype="extra2"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(48px 16px 64px 0px) !important; margin-right: 5px !important; margin-left: -3px !important; } /* Override to make sure "OK" and "Apply" are always the ok image (English only) */ button[label="OK"] > .button-box > .button-icon, button[label="Apply"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/ok.png") !important; margin-right: 4px !important; margin-left: -4px !important; } button[label="OK"][disabled="true"] > .button-box > .button-icon, button[label="Apply"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/subskin/icons/ok-dis.png") !important; margin-right: 4px !important; margin-left: -3px !important; } /* Override to make sure "Cancel" is always the cancel image (English only) */ button[label="Cancel"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 4px !important; margin-left: -3px !important; } button[label="Cancel"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/clear-small.png") !important; -moz-image-region: rect(48px 16px 64px 0px) !important; margin-right: 4px !important; margin-left: -3px !important; } /* Override to make sure "Close" is always the close image (English only) */ button[label="Close"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/close.png") !important; -moz-image-region: rect(0px 16px 16px 0px) !important; margin-right: 2px !important; } button[label="Close"][disabled="true"] > .button-box > .button-icon { list-style-image: url("chrome://global/skin/icons/close.png") !important; -moz-image-region: rect(48px 16px 64px 0px) !important; margin-right: 2px !important; } .small-button .button-icon, /* Override for searchDialog and filterDialog */ #notification-popup button.popup-notification-menubutton .button-icon { /* Don't display button images inside the notification popup */ display: none !important; }
Отредактировано solombala (23-03-2020 17:54:05)
Отсутствует
Иконки - сам мастырь, если надо...
не понял для чего иконки?
просто заменил в dialog.css код на твой, надеюсь это окно теперь не будет выскакивать?
Win 10х64
Отсутствует
Будет , но не такое.
это значит вместо светлых кнопок будут черные (понятно, что текст "Закрыть Firefox" лучше читается), я думал избавиться вообще от этого окна как от бага ...
Отредактировано ALEX_45_ORP (23-03-2020 21:50:42)
Win 10х64
Отсутствует
Приветствую!
Для 68 и старше есть дополнение, чтоб переместить строку вкладок вниз, как было в старых FF ?
С января работаю на обновлённом FF и так никак не могу понять зачем какой-то идиот табы наверх зафутболил..
В интернете ссылки на какие-то стили, но пишут, что они после обновлений постоянно слетают..
Dan Dare: Pilot Of The Foretime
Отсутствует
Приветствую!
Для 68 и старше есть дополнение, чтоб переместить строку вкладок вниз, как было в старых FF ?
С января работаю на обновлённом FF и так никак не могу понять зачем какой-то идиот табы наверх зафутболил..
В интернете ссылки на какие-то стили, но пишут, что они после обновлений постоянно слетают..
Вот вкладки внизу без стиля вложи в папку Chrome /* Вкладки внизу */
#main-window:not([inFullscreen]) #navigator-toolbox > #PersonalToolbar {
-moz-box-ordinal-group: 1 !important;}
#main-window:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #navigator-toolbox {
-moz-appearance: -moz-window-titlebar !important;}
#main-window:not([inFullscreen])[tabsintitlebar][sizemode="maximized"] #navigator-toolbox {
-moz-appearance: -moz-window-titlebar-maximized !important;}
#main-window:not([inFullscreen])[tabsintitlebar]:-moz-lwtheme #navigator-toolbox {
visibility: hidden !important;}
#main-window:not([inFullscreen])[tabsintitlebar]:-moz-lwtheme #navigator-toolbox > *:not([collapsed="true"]) {
visibility: visible;}
#navigator-toolbox > #titlebar {
-moz-appearance: none !important;
-moz-box-ordinal-group: 100 !important;
--v-control-buttons-left: auto;
--v-control-buttons-right: 0;
position: static !important;}
#navigator-toolbox > #titlebar:-moz-locale-dir(rtl) {
--v-control-buttons-left: 0;
--v-control-buttons-right: auto;}/* Зум вкладок */
#main-window:not([uidensity="touch"]) :-moz-any(#titlebar,#TabsToolbar,#tabbrowser-tabs) {
--tab-min-height: 24px !important;
--toolbarbutton-inner-padding: 3px !important;
}#add-additional-top-bar,
#add-additional-bottom-bar {
--toolbarbutton-outer-padding: 0px !important;
--toolbarbutton-inner-padding: 2px !important;
min-height: 20px !important;
}
#add-additional-bottom-closebutton {
padding: 0 !important;
}
:-moz-any(#add-additional-top-bar,#add-additional-bottom-bar) .toolbarbutton-badge {
margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important;
}
Отсутствует
Всем привет.
Подскажите на 56 работает автоскрытие боковой панели закладки, когда мышь не подведена к краю на сколько я понял это Sidebar.Automod из св "Меню"
// //toButtonAction: if (!event.target) this.click(); //Menu .349 const id = "Compact-Menu-menupopup", attrs = { id: id, position: "after_start", oncontextmenu: "event.preventDefault()", oncommand: "event.stopPropagation()" }; var itemTimers = {}, menubar, anchItem, menusOriginPopups, popup = document.getElementById(id), popupOpen = false; if(popup)popup.remove(); if(self.parentNode.getAttribute("id").indexOf('alette') > 0 || self.parentNode.parentNode.getAttribute("id").indexOf('alette') > 0) return; popup = self.appendChild(document.createElement("menupopup")); itemTimers.Mmenu = setTimeout(function() { for(var attr in attrs) popup.setAttribute(attr, attrs[attr]); anchItem = document.getElementById("menu_openDownloads").parentNode.firstChild; menubar = (document.getElementById("file-menu")||document.getElementById("edit-menu")||document.getElementById("view-menu")).parentNode; var menus = Array.slice(menubar.childNodes), menusFiltedPopups = []; menusOriginPopups = new Array(menus.length); for(var iM = 0; iM < menus.length; iM++){ if(menus[iM] !== null && menus[iM].firstChild){ menusFiltedPopups.push(menus[iM].firstChild); menusOriginPopups[iM] = menus[iM].firstChild; var clonedMenu = menus[iM].cloneNode(false); clonedMenu.hidden = false; clonedMenu.disabled = false; popup.appendChild(clonedMenu); if(menusOriginPopups[iM].id == 'goPopup'){ ["", "Window"].forEach(function(str) { var node = menusOriginPopups[iM].getElementsByAttribute("id", "historyUndo" + str + "Popup")[0]; var attr = node.getAttribute("onpopupshowing"); if(!attr.startsWith("this.parentNode.parentNode.parentNode"))node.setAttribute("onpopupshowing", "this.parentNode.parentNode.parentNode" + attr.substring(39)); }); }; } else menusOriginPopups[iM] = null; }; popup.addEventListener("mouseenter", function onPS(e) { if(popupOpen) return; popupOpen = true; for(var ip = 0; ip < popup.childNodes.length && ip < menusFiltedPopups.length; ip++)popup.childNodes[ip].appendChild(menusFiltedPopups[ip]); for(var ip = 0; ip < menus.length; ip++)if(menusOriginPopups[ip])menus[ip].style.visibility = 'visible'; }, false); popup.addEventListener("popuphidden", function onPH(e) { if(e.originalTarget != this) return; for(var ip = 0; ip < menubar.childNodes.length && ip < menusOriginPopups.length; ip++)menubar.childNodes[ip].appendChild(menusOriginPopups[ip]); popupOpen = false; }, false); self.onclick = function(e) { if (!e.button && e.target == self) popup.openPopup(self); if (e.button == 2 && e.target == self && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey){ e.preventDefault(); PanelUI.show(); //popup.openPopup(self); } if(e.button == 1)stopTor(); }; }, 1000); addDestructor(()=> { for (itemTimer in itemTimers)clearTimeout(itemTimers[itemTimer]); if(popupOpen && menubar)for(var idd = 0; idd < menubar.childNodes.length && idd < menusOriginPopups.length; idd++)menubar.childNodes[idd].appendChild(menusOriginPopups[idd]); if(anchItem)while(anchItem.previousSibling)anchItem.previousSibling.remove(); }); var temp1, temp2; // "Дублировать вкладку" в контекстном меню вкладки, от 27.09.2016. ................. (tabContextMenu => { var menuitem = document.createElement("menuitem"); menuitem.setAttribute("label", "Дублировать вкладку"); menuitem.onclick =()=> { temp1 = cbu.getPrefs("browser.tabs.insertRelatedAfterCurrent"); cbu.setPrefs("browser.tabs.insertRelatedAfterCurrent", true); setTimeout(() => cbu.setPrefs("browser.tabs.insertRelatedAfterCurrent", temp1), 300); gBrowser.selectedTab = gBrowser.duplicateTab(TabContextMenu.contextTab); }; tabContextMenu.insertBefore(menuitem, tabContextMenu.children[0]); // [1] определяет место нахождение пункта меню addDestructor(()=> menuitem.remove()); })(document.getElementById("tabContextMenu")); // Добавить новый пункт "Перезапуск" в главном меню, от 20.06.2016. ...................... (()=> { var menuItem = document.createElement("menuitem"); menuItem.setAttribute("id", "restart_firefox"); menuItem.setAttribute("label", "Перезапуск"); menuItem.onclick =()=> setTimeout(()=> {var startup = Services.startup; startup.quit(startup.eForceQuit | startup.eRestart)}, 0); itemTimers.restartmenu = setTimeout(function() {popup.appendChild(menuItem)}, 1600); })(); // Предотвращаем постоянную работу по кругу скрипта построения эскизов, когда он на каком-то зависает. (()=> { var captTimer, ccash = true; function unlockCapturing() { if(content.location.toString() != 'about:newtab') return; if(ccash){ cbu.setPrefs('browser.newtab.preload', false); cbu.setPrefs('browser.pagethumbnails.capturing_disabled', false); }; ccash = false; clearTimeout(captTimer); captTimer = setTimeout(function() { cbu.setPrefs('browser.pagethumbnails.capturing_disabled', true); cbu.setPrefs('browser.newtab.preload', true); ccash = true; clearTimeout(captTimer); }, 20000); }; function lockCapturing() { if(ccash)return; //cbu.setPrefs('browser.pagethumbnails.capturing_disabled', true); cbu.setPrefs('browser.newtab.preload', true); //ccash = true; //clearTimeout(captTimer); }; if(!cbu.getPrefs('browser.cache.disk.parent_directory')) { getBrowser().addEventListener("mouseenter", unlockCapturing, false); document.getElementById("tabbrowser-tabs").addEventListener("mouseenter", lockCapturing, false); addDestructor(() => { getBrowser().removeEventListener("mouseenter", unlockCapturing, false); document.getElementById("tabbrowser-tabs").removeEventListener("mouseenter", lockCapturing, false); cbu.setPrefs('browser.pagethumbnails.capturing_disabled', true); cbu.setPrefs('browser.newtab.preload', true); }); } else cbu.setPrefs('browser.pagethumbnails.capturing_disabled', true); })(); // Настройка экспресс-панели (()=> { var Ewidth;//ширина оригинальной плитки - 294 пикселя if(!window.opener && (Ewidth = cbu.getPrefs('CB.elementwidth')) && Ewidth && (Ewidth = parseInt(Ewidth,10)) && Ewidth){ var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); Ewidth = Ewidth < 50 ? 50 : Ewidth; var Eheight = 32 + Math.floor(Ewidth*0.58); var styles = '@-moz-document url("about:newtab"){\ .newtab-cell {max-height:'+Eheight+'px !important;max-width:'+Ewidth+'px!important;margin:0px 5px!important;}\ #newtab-margin-top {display:none!important;}\ .newtab-side-margin {max-width:10px!important;width:10px!important;}\ #newtab-grid {overflow:auto!important;max-height:none!important;max-width:none!important;height:auto!important;width:auto!important;padding:0!important;margin:0!important;border:none!important;-moz-box-flex:5!important;}\ #newtab-margin-bottom {max-height:20px!important;height:20px!important;}\ }\ '; stylesuri = makeURI("data:text/css," + encodeURIComponent(styles)); try { sss.unregisterSheet(stylesuri, 0) } catch(e) {}; sss.loadAndRegisterSheet(stylesuri, 0); }; })(); //Добавить новый пункт "Восстановить иконки всех закладок" в меню "Закладки", от 04.10.2016. .............. (()=> { //Создать новый пункт в меню "Закладки" .... var menuitem = document.createElement("menuitem"); //var sep = document.getElementById("organizeBookmarksSeparator"); itemTimers.restBmenu = setTimeout(function() { anchItem.parentNode.insertBefore(menuitem, anchItem); }, 2800); menuitem.setAttribute("label", "Восстановить иконки всех закладок"); menuitem.onclick =e=> chooseBookmarks(); // Перебрать все http(s) закладки .... function chooseBookmarks(id = 1) { var folder = PlacesUtils.getFolderContents(id).root; folder.QueryInterface(Ci.nsINavHistoryContainerResultNode); folder.containerOpen = true; for ( var i = 0; i < folder.childCount; i++ ) { var child = folder.getChild(i); PlacesUtils.nodeIsFolder(child) ? chooseBookmarks(child.itemId) : child.uri.startsWith("http") && child.icon == '' && getSiteFavicon(child.uri); } folder.containerOpen = false; }; // Добавить иконки к закладкам с одинаковыми адресами .... function setBookFavicon(siteURI, faviconURI) { var iconURI = Services.io.newURI( faviconURI, null, null); var bookmarkURI = Services.io.newURI( siteURI, null, null ); PlacesUtils.favicons.setAndFetchFaviconForPage( bookmarkURI, iconURI, false, this.FAVICON_LOAD_NON_PRIVATE, null, Services.scriptSecurityManager.getSystemPrincipal() ) }; // Получить адрес иконки закладки и запустить установку иконки .... function getSiteFavicon(siteURI) { var hostURI = "http://" + siteURI.split(/\/+/g)[1] + "/"; var faviconURI = hostURI + "favicon.ico"; // адрес иконки, если не получить адрес иконки из сайта // получить адрес иконки из документа сайта закладки var xhr = new XMLHttpRequest(); xhr.open("GET", siteURI, true); xhr.responseType = "document"; xhr.onload = xhr.onerror =()=> { var doc = xhr.responseXML; if ( doc !== null ) { var links = doc.getElementsByTagName("link"); [...links].forEach(link=> { if ( /(?:^|\s)icon(?:\s|$)/.test(link.rel.toLowerCase()) ) faviconURI = link.href }); } setBookFavicon(siteURI, faviconURI); // запустить установку иконки } xhr.send(); }; })(); //Ariadne.Flip custombuttons.alertSlide1 = function(sTitle) { var as = Components.classes["@mozilla.org/alerts-service;1"].getService(Components.interfaces.nsIAlertsService); as.showAlertNotification('chrome://global/skin/icons/information-16.png', "", sTitle, false, "", null); setTimeout(() => as.closeAlert(), 999); }; (()=> { var showCount = 0, noFlip = false, unlockTimer, lastShownTab = function() { let orderMax = 0, currentOrder = gBrowser.selectedTab.getAttribute('showOrder'), tabOrder = 0, lST = null; currentOrder = currentOrder ? parseInt(currentOrder, 10) : 0; for(ii = 0; ii < gBrowser.tabs.length; ii++) { tabOrder = parseInt(gBrowser.tabs[ii].getAttribute('showOrder'), 10); if(tabOrder != currentOrder){ gBrowser.tabs[ii].removeAttribute('_YesClck'); if(tabOrder > orderMax) { lST = gBrowser.tabs[ii]; orderMax = tabOrder; } } }; if(lST) return lST; for(ii = 0; ii < gBrowser.tabs.length; ii++) { tabOrder = -parseInt(gBrowser.tabs[ii].getAttribute('showOrder'), 10); if(-tabOrder != currentOrder) { gBrowser.tabs[ii].setAttribute('showOrder', tabOrder); if(tabOrder > orderMax) { lST = gBrowser.tabs[ii]; orderMax = tabOrder; } } }; return lST; }; function clickToFlip(event) { if(event.button || noFlip || !event.target.hasAttribute('_YesClck')) return; event.stopPropagation(); event.target.removeAttribute('_YesClck'); let lShowT = lastShownTab(); if(lShowT) { event.target.setAttribute('showOrder', -parseInt(event.target.getAttribute('showOrder'), 10)); gBrowser.selectedTab = lShowT; } else { setTimeout(() => custombuttons.alertSlide1("Нет других просмотренных ранее вкладок"), 100); setTimeout(() => gBrowser.selectedTab.setAttribute('_YesClck', true), 800); }; }; function onTabClose(e) { if(gBrowser.selectedTab != e.target)return; let lastSh = lastShownTab(); if(lastSh) gBrowser.selectedTab = lastSh; }; setTimeout(() => { if(gBrowser.selectedTab) { if(parseInt(gBrowser.selectedTab.getAttribute('showOrder'), 10) > 0) { showCount = parseInt(gBrowser.selectedTab.getAttribute('showOrder'), 10); } else { gBrowser.selectedTab.setAttribute('showOrder', ++showCount); gBrowser.selectedTab.setAttribute('_YesClck', true); } }; }, 800); function onTabselect(e) { setTimeout(() => gBrowser.selectedTab.setAttribute('_YesClck', true), 150); for(ii = 0; ii < gBrowser.tabs.length; ii++)gBrowser.tabs[ii].removeAttribute('_YesClck'); e.target.setAttribute('showOrder', ++showCount); }; function onMouseDown(e) { if(!e.target.hasAttribute('_YesClck')){ noFlip = true; clearTimeout(unlockTimer); unlockTimer = setTimeout(function() { noFlip = false; clearTimeout(unlockTimer); }, 2000); } }; function onMouseUp(e) { clearTimeout(unlockTimer); setTimeout(() => noFlip = false, 100); }; addEventListener("mouseup", onMouseUp, false, gBrowser.tabContainer); addEventListener("mousedown", onMouseDown, false, gBrowser.tabContainer); addEventListener("TabSelect", onTabselect, false, gBrowser.tabContainer); addEventListener("TabClose", onTabClose, false, gBrowser.tabContainer); addEventListener("click", clickToFlip, false, gBrowser.tabContainer); addDestructor(()=>{ removeEventListener("mouseup", onMouseUp, false, gBrowser.tabContainer); removeEventListener("mousedown", onMouseDown, false, gBrowser.tabContainer); removeEventListener("TabSelect", onTabselect, false, gBrowser.tabContainer); removeEventListener("TabClose", onTabClose, false, gBrowser.tabContainer); removeEventListener("click", clickToFlip, false, gBrowser.tabContainer); }); })(); // Раскукоживатель коротких ссылок, от 28.08.2016 ((cntxtMenu, elm, mItem) => { mItem.id = "cb-unshorten-url"; mItem.setAttribute("label", "Раскукожить ссылку"); mItem.setAttribute("class", "menuitem-iconic"); mItem.setAttribute("image", self.image); elm.parentNode.insertBefore(mItem, elm); const alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService); var url, link, isUnshortened, // Сервисы сокращения ссылок. Можно добавлять свои. Работать, в теории, должно с любыми shortenerServices = [ "tinyurl.com", "po.st", "img.ly", "bit.ly", "goo.gl", "youtu.be", "t.co", "db.tt", "u.to", "shortlinks.de" ], // Опции: options = { replaceShortenedLinks: true, // Заменять адрес ссылки на странице раскукоженной showAlert: true, // Показывать всплывающие уведомления clickAlertToOpen: true, // Клик по уведомлению с раскукоженной ссылкой - откроет ее в новой вкладке showOnShortenedTextLinks: true, // Показывать пункт контекстного меню на выделенных текстовых ссылках promptDialogForTextLinks: true, // Показывать диалог с результатом для текстовых ссылок copyToClipboard: true, // Копировать раскукоженную ссылку в буфер обмена changeColorForUnshortenedLinks: true, // Индикация цветом ссылки ожидания ответа и результата changeColorBackAfterTimeout: false, // Возвращать цвет ссылок к исходному, после паузы unshortenedLinksColor: "lightgreen" // Цвет раскукоженных ссылок }, isFF32 = (parseFloat(Services.appinfo.platformVersion) >= 32); function isShortenedURL(aURL) { if (aURL && (gContextMenu && (gContextMenu.onLink && !gContextMenu.isTextSelected || gContextMenu.onPlainTextLink) || !aURL.match(/\s/) && !!aURL.match(/\//))) { if (!aURL.startsWith('http')) aURL = 'http://' + aURL.split(/^((\w+)?:\/\/)?(.+)/)[3]; var host = aURL.split(/http(s)?:\/\/([\w\.-]+)/)[2]; if (shortenerServices.indexOf(host) !== -1) { url = aURL; return true; } } return false; }; function promptDialog(aURL) { var input = {value: aURL}; var prompt = Services.prompt.prompt(null, options.copyToClipboard ? "Раскукоженная ссылка скопирована!" : "Ссылка раскукожена!", "Отредактировать и открыть в новой вкладке?", input, null, {value: false}); if (prompt) gBrowser.selectedTab = gBrowser.addTab(input.value); }; function xhr(aURL, cb) { let reURL = null; let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest); let alertListener = { observe: function(aSubject, aTopic, aData) { if (aTopic != 'alertclickcallback') return; gBrowser.selectedTab = gBrowser.addTab(aData); } } let handler = ev => { evf(m => xhr.removeEventListener(m, handler, !1)); switch (ev.type) { case 'load': if (xhr.status == 200 || (isFF32 ? xhr.responseURL : xhr.channel.URI.spec) != aURL) { reURL = isFF32 ? xhr.responseURL : xhr.channel.URI.spec; cb(reURL); options.showAlert && (options.clickAlertToOpen ? alertsService.showAlertNotification(self.image, self.label, 'Ссылка раскукожена!\nНажмите, чтобы открыть в новой вкладке:\n' + (reURL.length > 100 ? ([reURL.slice(0,45), reURL.slice(-45)]).join('...') : reURL), true, reURL, alertListener, "") : alertsService.showAlertNotification(self.image, self.label, 'Ссылка раскукожена:\n' + (reURL.length > 100 ? ([reURL.slice(0,45), reURL.slice(-45)]).join('...') : reURL), false, "", null, "")); break; } default: cb(reURL); options.showAlert && alertsService.showAlertNotification(self.image, self.label, 'Ошибка при попытке получить ссылку: ' + xhr.statusText + ' [' + ev.type + ':' + xhr.status + ']', false, "", null, ""); break; } }; let evf = f => ['load', 'error', 'abort'].forEach(f); evf(m => xhr.addEventListener(m, handler, false)); try { xhr.mozBackgroundRequest = true; xhr.open('HEAD', aURL, true); xhr.channel.loadFlags |= Ci.nsIRequest.LOAD_ANONYMOUS | Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsIRequest.INHIBIT_CACHING; xhr.setRequestHeader("User-Agent", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", false); xhr.setRequestHeader("Accept", "text/html,text/xml", false); xhr.send(null); } catch (ex) { cb(reURL); options.showAlert && alertsService.showAlertNotification(self.image, self.label, 'Неправильная ссылка: ' + (ex.toString().length > 100 ? ([ex.toString().slice(0,45), ex.toString().slice(-45)]).join('...') : ex.toString()), false, "", null, ""); } }; function shouldDisplay() { mItem.label = "Раскукожить ссылку"; if (gContextMenu.onLink && !gContextMenu.isTextSelected) { url = gContextMenu.getLinkURL(); link = gContextMenu.link; isUnshortened = link.getAttribute("cb-short-url"); if (isUnshortened) mItem.label = "Скукожить ссылку"; } if (gContextMenu.onPlainTextLink) { url = gContextMenu.linkURL; } if (!gContextMenu.onPlainTextLink && gContextMenu.isTextSelected) { url = document.commandDispatcher.focusedWindow.content.document.getSelection().toString().trim(); } mItem.hidden = !((gContextMenu.onLink || (gContextMenu.onPlainTextLink || gContextMenu.isTextSelected) && options.showOnShortenedTextLinks) && isShortenedURL(url) || gContextMenu.onLink && isUnshortened); }; cntxtMenu.addEventListener("popupshowing", shouldDisplay, false); addDestructor(()=> { cntxtMenu.removeEventListener("popupshowing", shouldDisplay, false); cntxtMenu.removeChild(mItem); }); mItem.onclick =()=> { if (gContextMenu.onLink && !gContextMenu.isTextSelected) { if (!isUnshortened) { if (options.changeColorForUnshortenedLinks) { var linkClr = link.style.getPropertyValue('color'); linkClr && link.style.setProperty('-cb-old-color', linkClr, link.style.getPropertyPriority('color')); var oldClr = link.style.getPropertyValue('-cb-old-color'); var oldClrPrrt = link.style.getPropertyPriority('-cb-old-color'); link.style.setProperty("color", "orangered", "important"); } xhr(url, reURL => { if (!reURL) { options.changeColorForUnshortenedLinks && (oldClr ? (link.style.setProperty("color", oldClr, oldClrPrrt), link.removeProperty('-cb-old-color')) : link.style.removeProperty("color")); return; } if (options.changeColorForUnshortenedLinks) { link.style.setProperty("color", options.unshortenedLinksColor, "important"); options.changeColorBackAfterTimeout && setTimeout(()=> oldClr ? (link.style.setProperty("color", oldClr, oldClrPrrt), link.removeProperty('-cb-old-color')) : link.style.removeProperty("color"), 1000); } options.copyToClipboard && gClipboard.write(reURL); options.replaceShortenedLinks && (link.setAttribute("cb-short-url", link.href), link.setAttribute("href", reURL)); }) } else { oldClr ? (link.style.setProperty("color", oldClr, oldClrPrrt), link.removeProperty('-cb-old-color')) : link.style.removeProperty("color"); link.setAttribute("href", isUnshortened); link.removeAttribute("cb-short-url"); } } else { xhr(url, reURL => { if (!reURL) return; options.copyToClipboard && gClipboard.write(reURL); options.promptDialogForTextLinks && promptDialog(reURL); }) } }; /* this._handleClick =()=> { url = gClipboard.read(); if (!url || !isShortenedURL(url)) { options.showAlert && alertsService.showAlertNotification(self.image, self.label, 'Неправильная ссылка!', false, "", null, ""); return; } xhr(url, reURL => { if (!reURL) return; options.copyToClipboard && gClipboard.write(reURL); promptDialog(reURL); }) }; this.tooltipText = "ПКМ: Раскукожить ссылку в буфере обмена";*/ })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-sep-open"), document.createElement("menuitem")); //Sidebar.Switch (()=> { var txtSwitchTo = 'Показать ', txtBookmarks = 'Закладки', txtHistory = 'Журнал'; var sidebarheader = document.getElementById("sidebar-header"); var sidebarBox = document.getElementById("sidebar-box"); var sidebartitl = document.getElementById("sidebar-title"); var sidebartitlValu = sidebartitl.getAttribute("value"); function showSwitch() { if(!sidebartitl.getAttribute("value").startsWith(txtSwitchTo)) sidebartitlValu = sidebartitl.getAttribute("value"); sidebartitl.style.setProperty('background-color','#EDF5F7','important'); if(sidebarBox.getAttribute("sidebarcommand") != 'viewBookmarksSidebar') { sidebartitl.setAttribute("value", txtSwitchTo+txtBookmarks); } else { sidebartitl.setAttribute("value", txtSwitchTo+txtHistory); } }; function showSwitchOut() { sidebartitl.setAttribute("value", sidebartitlValu); sidebartitl.style.setProperty('background-color','',''); }; function showSwitchOut2(e) { e.stopPropagation(); sidebartitl.setAttribute("value", sidebartitlValu); sidebartitl.style.setProperty('background-color','',''); }; function clickToSwitch(e) { if(e.button > 0) return; if(e.target.tagName == 'toolbarbutton') { e.stopPropagation(); return; }; if(sidebarBox.getAttribute("sidebarcommand") != 'viewBookmarksSidebar') { SidebarUI.toggle('viewBookmarksSidebar'); } else { SidebarUI.toggle('viewHistorySidebar'); } setTimeout(() => { if(!sidebartitl.getAttribute("value").startsWith(txtSwitchTo)) { sidebartitlValu = sidebartitl.getAttribute("value"); if(sidebarBox.getAttribute("sidebarcommand") != 'viewBookmarksSidebar') { sidebartitl.setAttribute("value", txtSwitchTo+txtBookmarks); } else { sidebartitl.setAttribute("value", txtSwitchTo+txtHistory); } } }, 10); }; sidebarheader.addEventListener('mouseover', showSwitch, false); sidebarheader.addEventListener('mouseout', showSwitchOut, false); sidebarheader.getElementsByTagName('toolbarbutton')[0].addEventListener('mouseover', showSwitchOut2, false); sidebarheader.getElementsByTagName('toolbarbutton')[0].addEventListener('mouseout', showSwitch, false); sidebarheader.addEventListener('click', clickToSwitch, false); addDestructor(()=>{ sidebarheader.removeEventListener('mouseover', showSwitch, false); sidebarheader.removeEventListener('mouseout', showSwitchOut, false); sidebarheader.getElementsByTagName('toolbarbutton')[0].removeEventListener('mouseover', showSwitchOut2, false); sidebarheader.getElementsByTagName('toolbarbutton')[0].removeEventListener('mouseout', showSwitch, false); sidebarheader.removeEventListener('click', clickToSwitch, false); }); })(); [b]//Sidebar.Automod[/b] var vso = { name: "Sidebar.Automod", btn: this, toolbarContextMenu: document.getElementById("toolbar-context-menu"), deck: document.getElementById("content-deck"), id: "cb-am", init: function() { if(gBrowser.currentURI.spec == "about:customizing") return; var vt = this.initVT(); var vso = this; this.sidebarSplitter = document.getElementById("sidebar-splitter"); this.sidebarBox = document.getElementById("sidebar-box"); this.lastSidebar = this.sidebarBox.getAttribute("sidebarcommand"); this.sidebarBox.removeEventListener("mouseleave", this, false); this.sidebarBox.addEventListener("mouseleave", this, false); window.addEventListener("resize", this, false); window.addEventListener("fullscreenchange", this, false); window.addEventListener("beforecustomization", this, false); this.toolbarContextMenu.addEventListener("command", this, false); this.resize(); this.deck.style.setProperty('margin-left', '4px', 'important'); this.vt.addEventListener("mouseenter", this, false); this.vt.addEventListener("mouseout", this, false); getBrowser().removeEventListener("mousemove", vso.mousemove, false); if(!vso.sidebarBox.getAttribute("hidden")) getBrowser().addEventListener("mousemove", vso.mousemove, false); vso.btn._destructors.push({ context: vso, destructor: vso.destroy }); }, fullscreenchange: function(e) { if(!document.fullscreenElement){ if(vso.vt && !vso.vt.collapsed)vso.deck.style.setProperty('margin-left', '4px', 'important'); } else vso.deck.style.setProperty('margin-left', '', ''); }, mouseleave: function(e) { getBrowser().removeEventListener("mousemove", vso.mousemove, false); getBrowser().addEventListener("mousemove", vso.mousemove, false); }, mouseenter: function(e) { clearTimeout(this.Timer); if(this.sidebarBox.getAttribute("hidden")) { let dY = e.screenY - vso.vt.boxObject.screenY; this.Timer = setTimeout(function() { if(vso.sidebarBox.getAttribute("hidden")) { SidebarUI.show(vso.lastSidebar ? vso.lastSidebar : 'viewBookmarksSidebar'); getBrowser().removeEventListener("mousemove", vso.mousemove, false); getBrowser().addEventListener("mousemove", vso.mousemove, false); }; }, (e.relatedTarget && e.relatedTarget.id == 'browser-panel' ? 300 : 0)+(dY > 50 ? 150 : -dY*10 + 650)); }; }, mouseout: function(e) { clearTimeout(this.Timer); if(e.relatedTarget && vso.sidebarBox.getAttribute("hidden") && (e.relatedTarget.id != 'browser-panel' || window.windowState == 3) && e.screenY > vso.vt.boxObject.screenY + 20){ SidebarUI.show(vso.lastSidebar ? vso.lastSidebar : 'viewBookmarksSidebar'); getBrowser().removeEventListener("mousemove", vso.mousemove, false); getBrowser().addEventListener("mousemove", vso.mousemove, false); } }, beforecustomization: function(e) { vso.destroy(); }, mousemove: function(e) { if(vso.sidebarBox.getAttribute("hidden")) { getBrowser().removeEventListener("mousemove", vso.mousemove, false); } else { if(e.screenX > (50 + vso.sidebarSplitter.boxObject.screenX)) { getBrowser().removeEventListener("mousemove", vso.mousemove, false); vso.lastSidebar = vso.sidebarBox.getAttribute("sidebarcommand"); SidebarUI.hide(); } } }, destroy: function(reason) { window.removeEventListener("resize", this, false); window.removeEventListener("fullscreenchange", this, false); window.removeEventListener("beforecustomization", this, false); if(this.vt) { this.vt.removeEventListener("mouseenter", this, false); this.vt.removeEventListener("mouseout", this, false); this.vt.parentNode && this.vt.parentNode.removeChild(this.vt); }; this.sidebarBox.removeEventListener("mouseleave", this, false); getBrowser().removeEventListener("mousemove", vso.mousemove, false); this.deck.style.setProperty('margin-left', '', ''); this.toolbarContextMenu.removeEventListener("command", this, false); }, handleEvent: function(e) this[e.type](e), command: function(e) { if(e.target.id != "toggle_" + this.id) return; e.preventDefault(); if(this.vt.collapsed) { if(this.vt) { this.vt.removeEventListener("mouseenter", this, false); this.vt.removeEventListener("mouseout", this, false); }; this.sidebarBox.removeEventListener("mouseleave", this, false); getBrowser().removeEventListener("mousemove", vso.mousemove, false); this.deck.style.setProperty('margin-left', '', ''); } else { if(this.vt) { this.vt.addEventListener("mouseenter", this, false); this.vt.addEventListener("mouseout", this, false); }; this.sidebarBox.removeEventListener("mouseleave", this, false); this.sidebarBox.addEventListener("mouseleave", this, false); getBrowser().removeEventListener("mousemove", vso.mousemove, false); if(!vso.sidebarBox.getAttribute("hidden")) getBrowser().addEventListener("mousemove", vso.mousemove, false); this.deck.style.setProperty('margin-left', '4px', 'important'); }; }, resize: function(e) { this.vt.style.maxHeight = this.deck.boxObject.height - 1 + "px"; }, initVT: function() { var id = this.id; var vt = this.vt = document.getElementById(id) || document.createElement("toolbar"); var attrs = { id: id, mode: "icons", iconsize: "small", orient: "vertical", customizable: "false", persist: "collapsed", toolbarname: this.name, fullscreentoolbar: "true", class: "chromeclass-toolbar", style: "-moz-appearance: none; display: -moz-box; height: 100%;border:0!important;padding:0px!important; position: fixed;background: #AAAAAA; min-width: 2px;outline: 3px solid #BBBBBB;margin-top:3px!important;" }; for(var attr in attrs) vt.setAttribute(attr, attrs[attr]); if(!vt.parentNode) gNavToolbox.appendChild(vt); return vt; } }; if(!cbu.getPrefs('CB.noautomod'))vso.init(); //Custom.Torifier var imgOrig = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAB7CAAAewgFu0HU+AAABG0lEQVR42mP8//8/AxgY2Hv+90vM+c8IE2EE8SCMzNz1fz59D2CAAhYQ8fD+fRifAa4HLuAVnQIX+f33NwMLCxsHXPbft/8MLHdvXkfVArLl+omzAYyMjAyY4D+mJeiAiYEAAFvBxykUgE3l7+8/CVvBqGFk9f8fA6YDQRo1LYw3sMipqgE9y4LbBIJWeEQk/2fj5MQq+eLRQyJM0LZyxqlCWV9rA2NkZsV/Vk52DMl/QPzp+7sNBK0gGNI61i7/RUXFGdjZ2UnS+PPnD4aP798xUO4CUFzfPnMhAGIOI5Ha/oNTkYqpwQZwFKpo6zKwMbOSZPPv37+Ji2mCXjBzC/gvLS/PwM7JDXQWcV74B/TCz2/fGF49e0K5CwCQq3eH2QS1RAAAAABJRU5ErkJggg==" var imgOrange = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAB7CAAAewgFu0HU+AAABEElEQVR42q1T3UrDMBT+TnKGQze77gcEZfhCfRQRvPFWUPDOh1lvBRGvFAR9C2EqddKiW9Ojia6gZrRjfoSQnJ985y8kInC4POjJ7elQaC4he3OHu6PhaMpFhG+w3dJxOr+j9CkFNyc7paQwAtZalVoRA548vP50sSyP4yQCEXz4Q/IbChVwFLrDkc+0yItqCjrfCwQ+m0/H/qATc6vfgtL+DJDXyIKuj7eFWXuVaZLVeOFiP1xoEYbtmO7PdkWxrwiASfK4kqKy0jaEZrAG1dBLOZqZwTSbYfUIbK+fnifRV7fqPkZu9bqbsRvyYKsNxbQUsx13vOMfUrg6HMhGdx26oRZ9Ct8cuiJmL2+rR/ABvC57Gs27SRgAAAAASUVORK5CYII="; var imgGreen = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAB7CAAAewgFu0HU+AAABHElEQVR42mP8//8/Axgoz+n8b7l+3n9GmAgjiAdmmG/u3fT/B48vAxSwgIhX797C+AxwPXABs9Uz4SJ//v5BGAYCv3//YWB5/uoFqhaQLU8efvFlZGRkwABA8zEsQQdMDAQA2AoeNhlfRgZMK/78/UfYCka5KU3//2F1338GGXmezSyioqIMzEy4nPKFCCtMVs38z8rKilXy/fv3RJigMLMNpwpxKfbNjA7bVvxnYcZ05H8g/PLryWaCVhAMaYVZbf/5efgZWFlYSNL4+/dvhm/fvzFQ7gJQXD9//A2aaBmJ1AZMZkAoIcu5GexuKQkpBhZmVpJs/gtM7v8Y3lPBCxoL+v4LCwoysLKxMzAS6QVQFP7+9Zvhw0cquAAAZAyCFY7eC5cAAAAASUVORK5CYII="; var imgSGreen = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAB7CAAAewgFu0HU+AAAA90lEQVR42q1SSw6CMBCdKQUC4ofoeXSpG+7kXk6jJyDRxIUxceEtNC5MNFDKSEXxBwGjb9FM55P3+qZIRKCgTYY++Qd/jPcMdjbuNcLmdjRl4dKDG7g6olN0v0M+kyfa606eIUqAo4aPsmTAw2P4OqJYxC7wAOETVEDyDgYVuFIYbOUVFVOR1RRoBRZRiUC9N5hxwzHSNiycTqAOhbLuxa0niJOoI3Jul3Zwtz/jlmsDltgV1fGh0mlrYZNu8pSFfTVIMgEp5B8UqF3H+yDbNdalz5p5NzVJhWbL/P4JCYGEf5jYWDpk2Dqgxsq+1Cc7ZSaKc/y7ggu8xW7YWfjMLwAAAABJRU5ErkJggg=="; var imgRed = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAB7CAAAewgFu0HU+AAABAElEQVR42qVSPU/DQAz1C86lV4agSgxsVCpSB/4AAxsDS/8s+TGoVcWHhMTQoRMtSQ8euYRGggYuVd9wOttnv2efQVIqzMZ9Pl+fEFsPvFVfbtI7vslEvqH+yBfF1pYmp3E8XaWNh46iUDRRH9H31/xnimdZzfOJQHbBFpLfiCSAikJVWyl89SAF7oeWdQO7AvujJNPeqREc/VMhSPFYji5StAaL5aZDhenI/vmid24yvNwOCKC1C+dcFqQITnp6YRmnsSDGXoksKG71IYcr8H+9fijqpe0qgvVbOzRZteT2LBGYPVtwrCod3sL88phmYCRKSgXoqKIk/dyw26aE8AV8bnPNy+EmrQAAAABJRU5ErkJggg=="; var imgViol = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAFo9M/3AAAACXBIWXMAAB7CAAAewgFu0HU+AAAA/0lEQVR42q2SO4+CQBDHZ5ZdFC/nq/Q78T2vIFdIZ2Fz5fko1PgNLDXB4oAFxlmiJKeQxei/2LDz+s0Og0QEpb57K5oPd4Q3C5pb+RH0N9M+og9XSXNEaXy7Q5VTGWaDbWUp2CklYuXNgA3H5O9/iqFkaexDgx4g9xJgUYmYKMUIfHDmVNgR+OX9EjTESLcbypHb5eJYGxBxdTtiNtiQxPrHRDptUSHwFs0RqhPiz3hPTi2C4KB1aEXYJ+0tqackOCieSswZHOcZvKED/te5TnzzJmyZdF18cMyQTIGREL5AfIps1v1UFG8Y4vRjTZ9uB5TpoG0XDM14lc9avz7ECyYbf9iUaPRTAAAAAElFTkSuQmCC"; var origTxt = 'Меню'; var txtTCErr = origTxt + '\nНет интернет-соединения через TOR'; var txtCC = origTxt + '\nИнтернет исправен. Проверка интернет-соединения производится.'; var txtCE = origTxt + '\nНет интернет-соединения.'; var txtOF = origTxt + '\nВ браузере включен оффлайн-режим'; var txtOFT = origTxt + '\nВключен оффлайн-режим. Соединение настроено через TOR'; var txtTErr = origTxt + '\nНет связи с процессом Tor.exe. В браузере включен режим через TOR'; var txtTM = origTxt + '\nВключен режим интернет-соединения через TOR'; var txtTMC = origTxt + '\nИнтернет исправен. Включен режим соединения через TOR'; var txtStopStart = 'Остановить запуск'; var menuItemT1 = document.createElement("menuitem"); menuItemT1.setAttribute("id", "start_tor"); menuItemT1.setAttribute("label", "Использовать TOR"); menuItemT1.setAttribute('type', 'checkbox'); itemTimers.usetor = setTimeout(function() {popup.insertBefore(menuItemT1, popup.lastChild)}, 1800); menuItemT1.onclick = () => setTimeout(() => { if(!!menuItemT1.getAttribute('checked')) { if(menuItemT1.getAttribute('label') != txtStopStart) { startTor(); menuItemT1.setAttribute("label", txtStopStart); } else { stopTor(); } } else { stopTor(); } }, 100); var menuItemT2 = document.createElement("menuitem"); menuItemT2.setAttribute("id", "restart_tor"); menuItemT2.setAttribute("label", "TOR рестарт"); menuItemT2.onclick = () => setTimeout(() => restartTor(), 10); var menuItemCC = document.createElement("menuitem"); menuItemCC.setAttribute("id", "check_conn"); menuItemCC.setAttribute("label", "Проверять наличие интернет-соединения"); menuItemCC.setAttribute('type', 'checkbox'); itemTimers.checkmenu = setTimeout(function() {anchItem.parentNode.insertBefore(menuItemCC, anchItem)}, 1800); self.onmouseenter = function(e) { menuItemCC.setAttribute('checked', !!cbu.getPrefs('CB.ct.checkconnection')); menuItemT1.setAttribute('checked', isTorMod); if(isTorMod) { if(!document.getElementById("restart_tor")) popup.insertBefore(menuItemT2, popup.lastChild); } else { if(document.getElementById("restart_tor")) menuItemT2.remove(); } }; menuItemCC.onclick = () => setTimeout(() => { isCheckConnection = !!menuItemCC.getAttribute('checked'); cbu.setPrefs('CB.ct.checkconnection', isCheckConnection); clearCheckTimeouts(); if(isCheckConnection) { itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); sendCheck(rndBeacon()); } else { if(sCount < 35)cbu.setPrefs('CB.ct.neterror', false); } }, 100); if(!cbu.getPrefs('CB.ct.nogooglebeacons')){ var netBeacons = ['http://google.com', 'http://google.ru', 'http://google.com.ua', 'http://google.co.in', 'http://google.co.jp', 'http://google.de', 'http://google.co.uk', 'http://google.fr', 'http://google.it', 'http://google.es', 'http://google.com.hk', 'http://google.ca']; }else{ var netBeacons = ['http://duckduckgo.com?', 'http://otf.msn.com/c.gif?', 'http://ask.com', 'http://office.com', 'http://bing.com', 'http://microsoft.com', 'http://adobe.com', 'http://ask.fm', 'http://aolsearch.com', 'http://answers.com', 'http://stackexchange.com']; }; var rndBeacon = function() { let iB = Math.floor(Math.random() * netBeacons.length * 0.66); let rndB = netBeacons[iB]; netBeacons.splice(iB, 1); netBeacons.push(rndB); return rndB; }; var onlineMode = navigator.onLine ? 1 : 0; var relativPathToTor_bat = '\\TorExpertBundle\\StartTor.bat'; var sCount = 0; var itIsPrimWin = ''; var torReady = false; var acccheckTor = true; var startInProc = 0; var restartInProc = 0; var cacheParams = ['network.proxy.ftp', 'network.proxy.ftp_port', 'network.proxy.http', 'network.proxy.http_port', 'network.proxy.no_proxies_on', 'network.proxy.socks', 'network.proxy.socks_port', 'network.proxy.socks_remote_dns', 'network.proxy.socks_version', 'network.proxy.type']; var accFlag = true; var goodCnt = 0; var attCnt = 0; var xhrInProc = 0; var nextCheckTimer; var checkTorTimer; var noResponseTimer; var noResponseTimer2; var preventTimer; var preventTimer2; var Rtimer; var blinksInterv; var digi = /^\d+$/; var xhrB; var isTorMod = !!cbu.getPrefs('CB.ct.tormode'); var isCheckConnection = !!cbu.getPrefs('CB.ct.checkconnection'); var noRestFlag = isTorMod && onlineMode && !window.opener; var torPort = function() { let torport = cbu.getPrefs("CB.torport"); if(torport && parseInt(torport, 10) > 0)return parseInt(torport, 10); return 9050; }; var isAccesXHR = function() { if(xhrInProc && isCheckConnection && onlineMode && itIsPrimWin && accFlag && !sCount) return true; return false; }; var sendCheck = function(url) { if(xhrInProc || !isCheckConnection || !onlineMode || !itIsPrimWin || !accFlag || sCount) return; preventTimer = setTimeout(function() { if(xhrInProc++ || !isAccesXHR()) { clearTimeout(preventTimer); return; }; xhrB = new XMLHttpRequest(); Services.console.logStringMessage('sendCheck to ' + url + '/abc'); noResponseTimer = setTimeout(function() { if(isAccesXHR()) { Services.console.logStringMessage('ResendCheck to ' + url + '/def'); xhrB.open("HEAD", url + '/' + Math.random().toString(36).slice(4, 7)); xhrB.send(); noResponseTimer2 = setTimeout(function() { if(xhrB) xhrB.abort(); xhrB = null; if(isAccesXHR()) notconnect(); xhrInProc = 0; clearTimeout(noResponseTimer2); }, 4000); if(isTorMod) checkTorTimer = setTimeout(function() { if(isAccesXHR() && isTorMod) checkTor() clearTimeout(checkTorTimer); }, 3000); } else { if(xhrB) xhrB.abort(); xhrB = null; xhrInProc = 0; return; } clearTimeout(noResponseTimer); }, 3000); xhrB.onreadystatechange = function(e) { if(xhrB.readyState < 2) { return; } if(xhrB.status > 99) { clearTimeout(noResponseTimer); clearTimeout(noResponseTimer2); clearTimeout(checkTorTimer); if(xhrB) xhrB.abort(); xhrB = null; preventTimer2 = setTimeout(function() { if(isAccesXHR()) goodconnect(); xhrInProc = 0; clearTimeout(preventTimer2); }, 5 + Math.random() * 20); } else return }; xhrB.open("HEAD", url + '/' + Math.random().toString(36).slice(4, 7)); xhrB.send(); clearTimeout(preventTimer); }, 5 + Math.random() * 20); }; document.addEventListener('offline', function() { if(!onlineMode) return; onlineMode = 0; clearCheckTimeouts(); setColor(); }, false); function clearCheckTimeouts() { clearTimeout(nextCheckTimer); clearTimeout(noResponseTimer); clearTimeout(noResponseTimer2); clearTimeout(preventTimer); clearTimeout(preventTimer2); if(xhrB) try { xhrB.abort() } catch(e) {}; xhrB = null; xhrInProc = 0; goodCnt = 0; attCnt = 0; accFlag = true; }; document.addEventListener('online', function() { if(onlineMode) return; onlineMode = 1; setColor(); if(itIsPrimWin) { setTimeout(() => { if(onlineMode++ > 1) return; clearCheckTimeouts(); sendCheck(rndBeacon()); }, 5 + Math.random() * 20); } }, false); function goodconnect() { if(!accFlag) return; accFlag = false; attCnt = 0; if(!goodCnt++)cbu.setPrefs('CB.ct.neterror', false); nextCheckTimer = setTimeout(function() { accFlag = true; sendCheck(rndBeacon()); clearTimeout(nextCheckTimer); }, 15000 + Math.random() * 7000); }; function notconnect() { if(!accFlag) return; accFlag = false; if(isTorMod && !torReady) { cbu.setPrefs('CB.ct.neterror', true); setTimeout(() => self.tooltipText = txtTErr, 200); connectToTor(); return; } nextCheckTimer = setTimeout(function() { accFlag = true; sendCheck(rndBeacon()); clearTimeout(nextCheckTimer); }, (attCnt++ < 55) ? 99+(250 + Math.random() * 125)*attCnt : 14000 + Math.random() * 7000); if(attCnt == 2) { goodCnt = 0; cbu.setPrefs('CB.ct.neterror', true); } }; gPrefService.addObserver('CB.ct.neterror', setColor, false); gPrefService.addObserver('CB.ct.tormode', setColor, false); gPrefService.addObserver('CB.ct.checkconnection', setColor, false); function setColor() { isCheckConnection = !!cbu.getPrefs('CB.ct.checkconnection'); isTorMod = !!cbu.getPrefs('CB.ct.tormode'); if(!onlineMode){ self.image = imgOrange; if(isTorMod) { self.tooltipText = txtOFT; } else { self.tooltipText = txtOF; } }else{ if(!cbu.getPrefs('CB.ct.neterror')) { if(!isCheckConnection) { if(isTorMod) { self.image = imgGreen; self.tooltipText = txtTM; } else { self.image = imgOrig; self.tooltipText = origTxt; } } else { if(isTorMod) { self.image = imgSGreen; self.tooltipText = txtTMC; } else { self.image = imgOrig; self.tooltipText = txtCC; } } } else { if(isTorMod) { self.image = imgViol; if(sCount > 34){ self.tooltipText = txtTErr; }else{ self.tooltipText = txtTCErr; } } else { self.image = imgRed; self.tooltipText = txtCE; } } } }; function connectToTor() { setTimeout(() => { if(startInProc++ || restartInProc) return; clearInterval(blinksInterv); sCount = 12; self.image = imgGreen; blinksInterv = setInterval(torBlinksFunc, 300); }, 10 + Math.random() * 20); } function restartTor() { setTimeout(() => { if(restartInProc++) return; clearInterval(blinksInterv); sCount = 0; self.image = imgGreen; BATcommand('taskkill /im tor.exe'); blinksInterv = setInterval(torBlinksFunc, 300); }, 10 + Math.random() * 20); } function startTor() { setTimeout(() => { if(startInProc++ || restartInProc) return; sCount = 3; noRestFlag = false; self.image = imgGreen; clearCheckTimeouts(); runBAT(); blinksInterv = setInterval(torBlinksFunc, 300); }, 5 + Math.random() * 20); } function torBlinksFunc() { if(sCount++ == 2) { clearCheckTimeouts(); noRestFlag = false; runBAT(); }; if(sCount == 15) { if(noRestFlag)noRestFlag = noRestFlag && gBrowser.tabs.length < 2 && content && content.location.protocol == "about:" && Math.abs(Date.now() - parseInt(cbu.getPrefs('CB.ct.primwintime'), 10)) < 6000; clearCheckTimeouts(); itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); torReady = false; }; if(!(sCount & 1)) { self.image = imgGreen; if(sCount > 16) { if(torReady) { sCount = 0; if(!isCheckConnection)cbu.setPrefs('CB.ct.neterror', false); menuItemT1.setAttribute("label", 'Использовать TOR'); menuItemT1.setAttribute('checked', true); startInProc = 0; restartInProc = 0; plugTor(); setColor(); clearInterval(blinksInterv); return; } else { if(sCount == 24 && noRestFlag) { menuItemT1.setAttribute("label", 'Использовать TOR'); menuItemT1.setAttribute('checked', false); if(!isCheckConnection)cbu.setPrefs('CB.ct.neterror', false); startInProc = 0; restartInProc = 0; sCount = 0; clearInterval(blinksInterv); clearCheckTimeouts(); unplugTor(); return; }; if(sCount > 150) { // ошибка - не запущен процесс tor.exe или оффлайн мод if(!isTorMod) { //выходим, если настройки сети не на tor menuItemT1.setAttribute("label", 'Использовать TOR'); if(!isCheckConnection)cbu.setPrefs('CB.ct.neterror', false); startInProc = 0; restartInProc = 0; sCount = 0; setColor(); clearInterval(blinksInterv); if(!onlineMode && sCount < 9999) { plugTor(); menuItemT1.setAttribute('checked', true); return; } clearCheckTimeouts(); sendCheck(rndBeacon()); return; } }; if(!!((sCount/2) & 1))checkTor(); } } } else { if(!isTorMod) { if(!onlineMode) { self.image = imgOrange; } else { if(!cbu.getPrefs('CB.ct.neterror')) { self.image = imgOrig; } else { self.image = imgRed; } } } else { if(sCount < 150) { if(!onlineMode) { self.image = imgOrange; } else { if(!cbu.getPrefs('CB.ct.neterror')) { if(sCount == 35)cbu.setPrefs('CB.ct.neterror', true); self.image = imgOrig; } else { if(sCount == 37)self.tooltipText = txtTErr; self.image = imgViol; } } } else { self.image = imgViol; } } } }; var checkTor = function() { if(!acccheckTor) return; acccheckTor = false; var xhrT = new XMLHttpRequest(), noResponseTimerT = setTimeout(function() { xhrT.abort(); xhrT = null; acccheckTor = true; torReady = false; }, 500); xhrT.onreadystatechange = function(e) { if(xhrT.readyState < 2) { return; } if(xhrT.status > 99) { try { clearTimeout(noResponseTimerT) } catch(e) {}; xhrT.abort(); xhrT = null; acccheckTor = true; torReady = true; } else return }; xhrT.open("HEAD", 'http://127.0.0.1:' + torPort().toString()); //Services.console.logStringMessage('chek tor ' + 'http://127.0.0.1:' + torPort().toString()); xhrT.send(); }; function stopTor() { clearCheckTimeouts(); itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); menuItemT1.setAttribute("label", 'Использовать TOR'); setTimeout(() => menuItemT1.setAttribute('checked', false), 10); BATcommand('taskkill /im tor.exe'); startInProc = 0; restartInProc = 0; clearInterval(blinksInterv); sCount = 0; if(!isCheckConnection)cbu.setPrefs('CB.ct.neterror', false); setColor(); unplugTor(); }; function plugTor() { if(!(!cbu.getPrefs('network.proxy.http') && cbu.getPrefs('network.proxy.type') == 1 && cbu.getPrefs('network.proxy.socks') == '127.0.0.1' && cbu.getPrefs("network.proxy.socks_port") > 0)) { let cachedParams = new Array(cacheParams.length); for(var iT = 0; iT < cacheParams.length; iT++) { cachedParams[iT] = cbu.getPrefs(cacheParams[iT]); } cbu.setPrefs("CB.ct.savednetsettings", JSON.stringify(cachedParams)); } cbu.setPrefs('network.proxy.ftp', ''); cbu.setPrefs('network.proxy.ftp_port', 0); cbu.setPrefs('network.proxy.http', ''); cbu.setPrefs('network.proxy.http_port', 0); cbu.setPrefs('network.proxy.no_proxies_on', 'localhost, 10.0.0.0/8, 127.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16'); cbu.setPrefs('network.proxy.socks', '127.0.0.1'); cbu.setPrefs('network.proxy.socks_port', torPort()); cbu.setPrefs('network.proxy.socks_remote_dns', true); cbu.setPrefs('network.proxy.socks_version', 5); cbu.setPrefs('network.proxy.type', 1); cbu.setPrefs('CB.ct.tormode', true); if(!document.getElementById("restart_tor")) popup.insertBefore(menuItemT2, popup.lastChild); sendCheck(rndBeacon()); }; function unplugTor() { let cachedParams = cbu.getPrefs('CB.ct.savednetsettings'); if(cachedParams) { cachedParams = JSON.parse(cachedParams); for(var iT = 0; iT < cacheParams.length; iT++) { cbu.setPrefs(cacheParams[iT], cachedParams[iT]); } } cbu.setPrefs('CB.ct.tormode', false); sendCheck(rndBeacon()); }; function BATcommand(Command) { var CMDfile = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); CMDfile.initWithPath( Components.classes["@mozilla.org/process/environment;1"] .getService(Components.interfaces.nsIEnvironment) .get("ComSpec") ); var processC = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); processC.init(CMDfile); processC.run(false, ['/C', Command], 2); }; function runBAT() { var fileB = Services.dirsvc.get('CurProcD', Ci.nsIFile); var MozExeDir = fileB.path.split('\\').slice(0,-1).join('\\'); fileB.initWithPath(MozExeDir + relativPathToTor_bat); if(!fileB.exists()) { self.image = imgViol; sCount = 9999; custombuttons.alertBox("File not found!", MozExeDir + relativPathToTor_bat); return; }; var processB = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); processB.init(fileB); processB.run(false, [(parseInt(cbu.getPrefs("CB.torport"), 10) > 0 ? ' -SOCKSPort ' + cbu.getPrefs("CB.torport").toString() : '')], 1); }; function primWinReq() { if(!(temp2 = cbu.getPrefs('CB.ct.primwintime')) || !temp2 || temp2.length < 2 || temp2.length > 14 || !digi.test(temp2) || (Math.abs(Date.now() - parseInt(temp2, 10)) > 2500)) { cbu.setPrefs('CB.ct.primwintime', 'R'); Rtimer = setTimeout(function() { clearTimeout(Rtimer); if(cbu.getPrefs('CB.ct.primwintime').length < 2) { itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); clearCheckTimeouts(); if(isTorMod) { connectToTor(); } else { preventTimer = setTimeout(function() {clearTimeout(preventTimer);sendCheck(rndBeacon())}, 600); }; } else { itIsPrimWin = ''; clearCheckTimeouts(); }; gPrefService.addObserver('CB.ct.primwintime', setPrim, false); }, 100); } else { itIsPrimWin = ''; clearCheckTimeouts(); gPrefService.addObserver('CB.ct.primwintime', setPrim, false); } }; function cHandl(cTime) { if(cTime == 'R') { Rtimer = setTimeout(function() { clearTimeout(Rtimer); if(cbu.getPrefs('CB.ct.primwintime').length < 2) { Rtimer = setTimeout(function() {clearTimeout(Rtimer);primWinReq()}, 3000 + Math.random() * 1000); } else { itIsPrimWin = ''; clearCheckTimeouts(); gPrefService.addObserver('CB.ct.primwintime', setPrim, false); }; }, 100); } else { if(Math.abs(Date.now() - parseInt(cTime, 10)) > 2500) { Rtimer = setTimeout(function() {clearTimeout(Rtimer);primWinReq()}, 200 + Math.random() * 300); } else { itIsPrimWin = ''; clearCheckTimeouts(); gPrefService.addObserver('CB.ct.primwintime', setPrim, false); }; } }; if(!(temp2 = cbu.getPrefs('CB.ct.primwintime')) || !temp2 || temp2 == '0' || temp2.length > 14 || (temp2 != 'R' && !digi.test(temp2))) { Rtimer = setTimeout(function() { clearTimeout(Rtimer); if(!(temp2 = cbu.getPrefs('CB.ct.primwintime')) || !temp2 || temp2 == '0' || temp2.length > 14 || (temp2 != 'R' && !digi.test(temp2))) { itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); clearCheckTimeouts(); if(isTorMod) { connectToTor(); } else { preventTimer = setTimeout(function() {clearTimeout(preventTimer);sendCheck(rndBeacon())}, 900); }; gPrefService.addObserver('CB.ct.primwintime', setPrim, false); } else cHandl(temp2); }, Math.random() * 100); } else cHandl(temp2); function setPrim() { temp2 = cbu.getPrefs('CB.ct.primwintime'); if(itIsPrimWin) { if(temp2 == itIsPrimWin) { return; } else { if(!temp2 || temp2.length < 2 || temp2.length > 14 || !digi.test(temp2)) { cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); } else { itIsPrimWin = ''; clearCheckTimeouts(); }; } } else { if(!temp2 || temp2 == '0' || temp2.length > 14 || (temp2 != 'R' && !digi.test(temp2))) { clearTimeout(Rtimer); Rtimer = setTimeout(function() { if(!(temp2 = cbu.getPrefs('CB.ct.primwintime')) || !temp2 || temp2 == '0' || temp2.length > 14 || (temp2 != 'R' && !digi.test(temp2))) { itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); clearTimeout(Rtimer); clearCheckTimeouts(); sendCheck(rndBeacon()); }; }, 100 + Math.random() * 200); } else { if(temp2 == 'R') { clearTimeout(Rtimer); Rtimer = setTimeout(function() { if(cbu.getPrefs('CB.ct.primwintime') == 'R') { itIsPrimWin = Date.now().toString(); cbu.setPrefs('CB.ct.primwintime', itIsPrimWin); clearTimeout(Rtimer); clearCheckTimeouts(); sendCheck(rndBeacon()); }; }, 3000 + Math.random() * 1000); } else { clearTimeout(Rtimer); } } } }; setTimeout(() => setColor(), 100); addDestructor(() => { clearCheckTimeouts(); clearInterval(blinksInterv); clearTimeout(Rtimer); gPrefService.removeObserver('CB.ct.primwintime', setPrim, false); gPrefService.removeObserver('CB.ct.neterror', setColor, false); gPrefService.removeObserver('CB.ct.tormode', setColor, false); gPrefService.removeObserver('CB.ct.checkconnection', setColor, false); if(itIsPrimWin) cbu.setPrefs('CB.ct.primwintime', '0'); }); //Buttons.Restorator (()=> { var restMenu = ['Сохранить расположение кнопок', 'Восстановить расположение кнопок', 'Восстановить оригинальное расположение']; var tabsToSave = ['nav-bar', 'TabsToolbar']; itemTimers.restmenu = setTimeout(function() { for(var ir = 0; ir < restMenu.length; ir++) { var mItemr = document.createElement("menuitem"); mItemr.setAttribute("label", restMenu[ir]); if(ir == 0) mItemr.onclick = () => customSave(); if(ir == 1) mItemr.onclick = () => { customRestor(false); setTimeout(() => customRestor(false), 600); }; if(ir == 2) mItemr.onclick = () => { customRestor(true); setTimeout(() => customRestor(true), 600); }; anchItem.parentNode.insertBefore(mItemr, anchItem); }; }, 2100); function customSave() { for(let toolbarId of tabsToSave) cbu.setPrefs('CB.buttons.restore.saved_' + toolbarId, document.getElementById(toolbarId).getAttribute("currentset")); }; function customRestor(flag) { if(window._inRest == '1') return; window._inRest = '1'; setTimeout(() => window._inRest = '0', 100); let notFound = ''; let palette = document.getElementById("navigator-toolbox").palette; var savedSet = '', movToPalette; for(let toolbarId of tabsToSave) if((savedSet = cbu.getPrefs('CB.buttons.restore.' + (flag ? 'origin_' : 'saved_') + toolbarId)) && savedSet.length) { var toolbar = document.getElementById(toolbarId); var currentsetArr = toolbar.getAttribute("currentset").split(","); var savedsetArr = savedSet.split(","); for(var ib = 0; ib < currentsetArr.length; ib++) if(savedSet.indexOf(currentsetArr[ib]) == -1 && (movToPalette = document.getElementById(currentsetArr[ib])) && movToPalette) { gCustomizeMode.removeFromArea(movToPalette); toolbar.setAttribute("currentset", toolbar.currentSet); document.persist(toolbar.id, "currentset"); try { top.BrowserToolboxCustomizeDone(true) } catch(e) {} }; var currentSet = toolbar.getAttribute("currentset"); var currentsetArr = currentSet.split(","); for(var sv = 0; sv < savedsetArr.length; sv++) { if(currentSet.indexOf(savedsetArr[sv]) == -1) { var isExist = false; for(var ib = 0; ib < palette.childNodes.length; ib++) if(palette.childNodes[ib].id == savedsetArr[sv]) { isExist = true; break; }; } else var isExist = true; if(!isExist) { notFound = notFound + savedsetArr[sv] + ','; } else { if(savedsetArr[sv]!=currentsetArr[sv]){ let before = null; for(var ib = sv + 1; ib < currentsetArr.length; ib++) { before = document.getElementById(currentsetArr[ib]); if(before) { toolbar.insertItem(savedsetArr[sv], before); break; } }; if(!before) { toolbar.insertItem(savedsetArr[sv]); }; toolbar.setAttribute("currentset", toolbar.currentSet); document.persist(toolbar.id, "currentset"); try { top.BrowserToolboxCustomizeDone(true) } catch(e) {} } } } }; if(notFound) Services.console.logStringMessage('notFound: ' + notFound); }; function check_n_rest() { if(window._inRest == '1') return; setTimeout(() => { let navbarIds = document.getElementById('nav-bar').getAttribute("currentset"); let navbarArr = navbarIds.split(","); if(navbarArr.indexOf('downloads-button') > 0 && (navbarArr.indexOf('home-button') - navbarArr.indexOf('downloads-button')) == 1 && navbarIds.indexOf('custombuttons-button') < 0){ customRestor(true); setTimeout(() => customRestor(true), 600); }; }, 300); }; if(window._custAdded != '1') { window.addEventListener('aftercustomization', check_n_rest, true); if(!cbu.getPrefs('CB.setsearch'))setTimeout(() => { var SearchService = Cc["@mozilla.org/browser/search-service;1"].getService(Ci.nsIBrowserSearchService); var searchEng = SearchService.getEngineByName('Google'); if(searchEng)SearchService.currentEngine = searchEng; cbu.setPrefs('CB.setsearch', true); }, 700); }; window._custAdded = '1'; })(); //Adds.Menu (()=> { var contMenu = document.getElementById("contentAreaContextMenu"); var addMenufragm = document.createDocumentFragment('menupopup'); (contextMenu => { var menuGl = contextMenu.appendChild(document.createElement("menuitem")); menuGl.id = "content-googlel."; menuGl.setAttribute("label", "Посмотреть ссылку через кэш Google"); menuGl.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://webcache.googleusercontent.com/search?q=cache:" + encodeURIComponent(normlink(gContextMenu.linkURI.spec))); var menuAl = contextMenu.appendChild(document.createElement("menuitem")); menuAl.id = "content-archivel."; menuAl.setAttribute("label", "Посмотреть ссылку через Archive.org"); menuAl.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://web.archive.org/web/" + normlink(gContextMenu.linkURI.spec)); var menuW = contextMenu.appendChild(document.createElement("menuitem")); menuW.id = "content-wot." menuW.setAttribute("label", "Посмотреть отзывы о сайте в WOT"); menuW.onclick = () => gBrowser.selectedTab = gBrowser.addTab("https://www.mywot.com/ru/scorecard/" + normDom()); var menuG = contextMenu.appendChild(document.createElement("menuitem")); menuG.id = "content-google."; menuG.setAttribute("label", "Посмотреть страницу в кэше Google"); menuG.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://webcache.googleusercontent.com/search?q=cache:" + encodeURIComponent(normlink(gBrowser.currentURI.spec))); var menuA = contextMenu.appendChild(document.createElement("menuitem")); menuA.id = "content-archive."; menuA.setAttribute("label", "Посмотреть страницу в Archive.org"); menuA.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://web.archive.org/web/" + normlink(gBrowser.currentURI.spec)); var menuM = contextMenu.appendChild(document.createElement("menu")); menuM.id = "content-addmenu."; menuM.setAttribute("label", "Дополнительно ..."); var menuAddPopup = menuM.appendChild(document.createElement("menupopup")); var contextViewsource = document.getElementById("context-viewsource"); var contextViewsource2 = menuAddPopup.appendChild(contextViewsource.cloneNode(true)); contextViewsource2.id = "context-viewsource2."; contextViewsource2.hidden = false; var menuitem1 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem1.setAttribute("label", "Узнать, кому принадлежит домен через Domaintools"); menuitem1.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://whois.domaintools.com/" + normDom()); var menuitem2 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem2.setAttribute("label", "Узнать, кому принадлежит домен через Reg.ru"); menuitem2.onclick = () => gBrowser.selectedTab = gBrowser.addTab("https://www.reg.ru/whois/?dname=" + normDom()); var menuitem5 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem5.setAttribute("label", "Поискать сохраненную копию страницы на Bing.com"); menuitem5.onclick = () => gBrowser.selectedTab = gBrowser.addTab("https://www.bing.com/search?q=" + encodeURIComponent(normlink(gBrowser.currentURI.spec))); var menuitem3 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem3.setAttribute("label", "Поискать сохраненную копию страницы на Yandex"); menuitem3.onclick = () => gBrowser.selectedTab = gBrowser.addTab("https://yandex.ru/search/?text=" + encodeURIComponent(normlink(gBrowser.currentURI.spec))); var menuitem4 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem4.setAttribute("label", "Проверить доступность сайта через isitdownrightnow"); menuitem4.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://www.isitdownrightnow.com/downorjustme.php?url=" + normDom()); var menuitem6 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem6.setAttribute("label", "Проверить доступность через downforeveryoneorjustme"); menuitem6.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://downforeveryoneorjustme.com/" + normDom()); var menuitem7 = menuAddPopup.appendChild(document.createElement("menuitem")); menuitem7.setAttribute("label", "Информация о сервере (netcraft)"); menuitem7.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://toolbar.netcraft.com/site_report?url=" + normDom()); var menu8 = menuAddPopup.appendChild(document.createElement("menuitem")); menu8.id = "content-bugmen."; menu8.setAttribute("label", "Поискать логины к сайту на BugMeNot.com"); menu8.onclick = () => gBrowser.selectedTab = gBrowser.addTab("http://bugmenot.com/view/" + normDom()); // Удалить куки текущего сайта в контекстном меню на странице, от 04.02.2017. ................bunda1 var menu = contextMenu.appendChild(document.createElement("menu")); menu.id = "content-removeCookies."; menu.setAttribute("label", "Удалить куки текущего сайта"); var menuPopup = menu.appendChild(document.createElement("menupopup")); var menuitem = menuPopup.appendChild(document.createElement("menuitem")); menuitem.setAttribute("label", "Удалить (так же будут удалены все Flash-куки)"); menuitem.onclick =()=> { var host = Services.eTLD.getBaseDomain(gBrowser.currentURI); for ( var en = Services.cookies.enumerator; en.hasMoreElements(); ) { var cookie = en.getNext().QueryInterface(Ci.nsICookie); ~cookie.host.indexOf(host.trim()) && Services.cookies.remove(cookie.host, cookie.name, cookie.path, false); } var reversedDomain = host.split("").reverse().join("") + "."; Cu.import("resource://gre/modules/FileUtils.jsm"); var file = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]); var dbConn = Services.storage.openDatabase(file); dbConn.executeSimpleSQL("DELETE FROM webappsstore2 WHERE scope LIKE \"%" + reversedDomain +"%\""); dbConn.close(); //удалить и все Flash куки. закомпанию. var dir = Services.dirsvc.get('Home', Ci.nsIFile); dir.append("Application Data"); dir.append("Macromedia"); dir.remove(true); dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0777); }; contMenu.addEventListener("popupshowing", () => { contextViewsource.hidden = gBrowser.currentURI.scheme.startsWith("http") || gContextMenu.onLink; menu.hidden = menuW.hidden = menuM.hidden = pophiddP(); menuA.hidden = menu.hidden || onWArch(gBrowser.currentURI.spec); menuG.hidden = menu.hidden || onGCahe(gBrowser.currentURI.spec); menuGl.hidden = !gContextMenu.linkURI || !gContextMenu.linkURI.scheme.startsWith("http"); menuAl.hidden = menuGl.hidden || onWArch(gContextMenu.linkURI.spec); }, false); addDestructor(() => {menuW.remove();menuG.remove();menuA.remove();menuGl.remove();menuAl.remove();menuM.remove();menu.remove()}); })(addMenufragm); contMenu.insertBefore(addMenufragm, contMenu.lastChild); var onGCahe = function(link) { if((link.startsWith('https://webcache.googleusercontent.com/search?q=cache:') || link.startsWith('http://webcache.googleusercontent.com/search?q=cache:') || link.startsWith('http://www.google.com/search?q=cache:') || link.startsWith('https://www.google.com/search?q=cache:')) && link.indexOf(':http') > 0)return true; return false; }; var Glink = function(link) { return decodeURIComponent(link.substring(link.indexOf(':http')+1).split('+&')[0].split('&')[0]); }; var onWArch = function(link) { if((link.startsWith('http://web.archive.org/web/') || link.startsWith('https://web.archive.org/web/')) && link.indexOf('/http') > 0)return true; return false; }; var Wlink = function(link) { return link.substring(link.indexOf('://web.archive.org/web/')+23).match(/\/(https?:\/\/\S+)/)[1]; }; var normlink = function(link) { if(onGCahe(link))return Glink(link); if(onWArch(link))return Wlink(link); return link; }; var normDom = function() { let urispec = gBrowser.currentURI.spec; let dom = ''; if(onGCahe(urispec)) dom = Glink(urispec); if(onWArch(urispec)) dom = Wlink(urispec); if(dom)return dom.replace(/^https?:\/\//,'').split('/')[0].split('?')[0].split('#')[0]; return content.location.hostname; }; var pophiddP = function() { if(!gBrowser.currentURI.scheme.startsWith("http") || gContextMenu.onVideo || gContextMenu.isContentSelected || gContextMenu.onLink || gContextMenu.onTextInput)return true; return false; }; })();
Отредактировано Siovar (24-03-2020 00:54:07)
Отсутствует