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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№815120-03-2020 13:34:49

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
.accesskey  = И ...у меня нет , какой код вставить? Толком, без рисунка . И на guery не помешало бы.

Отсутствует

 

№815220-03-2020 16:47:07

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

solombala
omni/localization/ru/browser/menubar.ftl

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

Выделить код

Код:

menu-tools =
    .label = И
    .tooltiptext = Инструменты

Отсутствует

 

№815320-03-2020 17:28:35

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Так просто? Класс! А, на это?
.bookmark-item[container][query]  .... tooltiptext="Часто посещаемые"

Отредактировано solombala (20-03-2020 17:29:04)

Отсутствует

 

№815420-03-2020 20:04:52

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

solombala
так наверно
omni/chrome/browser/content/browser/places/browserPlacesViews.js

скрытый текст
PlacesToolbar.prototype = {
...
_insertNewItem: function PT__insertNewItem(
    aChild,
    aInsertionNode,
    aBefore = null
  ) {
...
        if (PlacesUtils.nodeIsQuery(aChild)) {
          button.setAttribute("query", "true");
          button.setAttribute("tooltiptext", aChild.title || "");
          if (PlacesUtils.nodeIsTagQuery(aChild)) {
            button.setAttribute("tagContainer", "true");
          }
        }

ну это не только Часто посещаемые но и Недавно добавленные, Метки, Последние метки...

Отредактировано Vitaliy V. (20-03-2020 20:18:49)

Отсутствует

 

№815520-03-2020 20:25:24

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.

Vitaliy V. пишет

ну это не только Часто посещаемые но и Недавно добавленные, Метки, Последние метки...

Этого у меня нет. Короче, шикарно! Кстати, в 75 поиск сильно изуродовали ? urlbar , searchbar ? Читал что-то об этом.
Не могу из библиотеки убрать "Другие закладки"  ...Опять дерево?
njhi3e97.jpg
Зарыто здесь : OtherBookmarksFolderTitle=Другие закладки
Этот OtherBookmarksFolderTitle - убираю  из скриптов - бесполезно...

Отредактировано solombala (21-03-2020 19:07:45)

Отсутствует

 

№815622-03-2020 12:56:35

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 123
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Привет
В 74 версии не могу посредством about:config: попасть в конфигурации -
2020-03-20_145452.jpg
а мне нужно вот этот параметр откорректировать
2019-10-03_153800.jpg
чего теперь делать?

Отсутствует

 

№815722-03-2020 13:56:56

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 123
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
ПОМОГИТЕ ПОЖАЛУЙСТА РАЗОБРАТЬСЯ

Отсутствует

 

№815822-03-2020 14:19:14

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Ovod
И что это за скриншот https://www.upload.ee/image/11312915/20 … 145452.jpg ?
у вас что перекидывает на эту страницу вместо about:config что ли

А вообще можно создать user.js и добавить
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);

Отсутствует

 

№815922-03-2020 14:29:35

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 123
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
да, перекидывает!

Добавлено 22-03-2020 14:46:00

Vitaliy V. пишет

А вообще можно создать user.js и добавить
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);

добавил, а толку - то !
https://cloud.mail.ru/public/77DK/nwcBqK8LV

все остальные css все едино не работают!
непросмотренные линки мутно-серые, как и просмотренные
ширина полос меню не отрегулирована

Отредактировано Ovod (22-03-2020 14:46:00)

Отсутствует

 

№816022-03-2020 14:58:42

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Ovod пишет

да, перекидывает!

Ну, пробуйте новый профиль, переустановку браузера,
проверяйте систему на вирусы и т. д.

Ovod пишет

добавил, а толку - то !

user.js нужно добавить в корневую папку профиля а не в chrome
именно user.js а не userPref.js

Отсутствует

 

№816122-03-2020 15:29:55

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 123
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
а новый профиль можно создать с сохранением моих закладок всех?

Отсутствует

 

№816222-03-2020 15:37:25

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Ovod
да скопируйте из старого  places.sqlite и favicons.sqlite (необязательно)
если ещё нужны пароли то key4.db и logins.json

Отсутствует

 

№816322-03-2020 16:02:50

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 123
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
и последнее
как в том же коде
   

Выделить код

Код:

/* Подсветка посещенных и непосещенных ссылок */
a:link {color: #FFFFFF !important;} /* Белый цвет непосещенной ссылки */
a:visited {color: ##00ff00 !important;} /* Темно-зеленый цвет посещенной ссылки */

/* Подчеркивать ссылки при наведении на них */
a[href]:hover {
text-decoration: underline !important;
}

уточнить, что фон именно что черный, текст белый?
за userjs спасибо - ширина полос меню, пункты меню и цвет ссылок стал как надо

Отсутствует

 

№816422-03-2020 17:31:49

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Ovod пишет

уточнить, что фон именно что черный

в смысле уточнить?
разве что добавить background к ссылкам
background-color: black !important;

Отсутствует

 

№816523-03-2020 11:44:19

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Эту шнягу можно разрулить? Это в 66 и это хорошо
uub4ifdm.jpg
А это в 74 и не хорошо
tft6jisg.jpg
Вопрос снят ! Нашел  dialog.css , туда коды button.dialog-button и все дела...

Отредактировано solombala (23-03-2020 12:50:49)

Отсутствует

 

№816623-03-2020 16:23:36

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 123
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.

Vitaliy V. пишет

в смысле уточнить?

в том смысле уточнить, что встречаются страницы,где цветовая схема дикаяЁ
2020-03-23_152915.jpg

Добавлено 23-03-2020 16:27:31
у меня черный фон и белый текст в настройках браузера а тут вона что!
(в обычных настроках - не сss)

По поводу бакграунда

Vitaliy V. пишет

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)

Отсутствует

 

№816723-03-2020 16:45:20

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2009
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Ovod
я имел ввиду добавить к вашему коду

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

Выделить код

Код:

a:link {
    color: #FFFFFF !important;
    background-color: #000000 !important;
}

Отсутствует

 

№816823-03-2020 16:49:47

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 113
UA: Firefox 73.0

Re: Настройка внешнего вида Firefox в userChrome.css

solombala пишет

Вопрос снят ! Нашел  dialog.css , туда коды button.dialog-button и все дела...

можно поподробней: где найти dialog.css и где взять коды button.dialog-button, а то в твоей 73 это окно тоже достало уже ...


Reality leaves a lot to the imagination

На форуме

 

№816923-03-2020 17:52:51

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

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)

Отсутствует

 

№817023-03-2020 18:20:55

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 113
UA: Firefox 73.0

Re: Настройка внешнего вида Firefox в userChrome.css

solombala пишет

Иконки - сам мастырь, если надо...

не понял для чего иконки?
просто заменил в dialog.css код на твой, надеюсь это окно теперь не будет выскакивать?


Reality leaves a lot to the imagination

На форуме

 

№817123-03-2020 18:38:20

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Будет , но не такое.
frue2np3.jpg

Отсутствует

 

№817223-03-2020 18:52:25

ALEX_45_ORP
Участник
 
Группа: Members
Зарегистрирован: 18-01-2018
Сообщений: 113
UA: Firefox 73.0

Re: Настройка внешнего вида Firefox в userChrome.css

solombala пишет

Будет , но не такое.

это значит вместо светлых кнопок будут черные :D (понятно, что текст "Закрыть Firefox" лучше читается), я думал избавиться вообще от этого окна как от бага ...

Отредактировано ALEX_45_ORP (23-03-2020 21:50:42)


Reality leaves a lot to the imagination

На форуме

 

№817323-03-2020 18:58:44

Dan Dare
Участник
 
Группа: Members
Зарегистрирован: 28-06-2015
Сообщений: 276
UA: Firefox 52.0

Re: Настройка внешнего вида Firefox в userChrome.css

Приветствую!
Для 68 и старше есть дополнение, чтоб переместить строку вкладок вниз, как было в старых FF ?
С января работаю на обновлённом FF и так никак не могу понять зачем какой-то идиот табы наверх зафутболил..
В интернете ссылки на какие-то стили, но пишут, что они после обновлений постоянно слетают..


Dan Dare: Pilot Of The Foretime

Отсутствует

 

№817423-03-2020 21:49:23

serg792
Участник
 
Группа: Members
Зарегистрирован: 17-12-2017
Сообщений: 21
UA: Firefox 74.0

Re: Настройка внешнего вида Firefox в userChrome.css

Dan Dare пишет

Приветствую!
Для 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;
}

Отсутствует

 

№817524-03-2020 00:44:28

Siovar
Участник
 
Группа: Members
Зарегистрирован: 15-09-2019
Сообщений: 11
UA: Firefox 56.0

Re: Настройка внешнего вида Firefox в userChrome.css

Всем привет.
Подскажите на [firefox] 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;
};

})();


Хотелось бы на [firefox] esr 68.6.0 автооткрытие боковой панели закладок при подведении мыши, очень привык.
гиф'ка
12.gif

Отредактировано Siovar (24-03-2020 00:54:07)

Отсутствует

 

Board footer

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