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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№1577618-07-2021 14:07:06

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Vitaliy V. пишет

Но теперь можно

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

Выделить код

Код:

.tab-label-container {
    mask: none !important;
}
.tab-label-container > .tab-label {
    display: block !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    min-width: 0 !important;
    line-height: 1.25em !important;
    height: 1.25em !important;
    margin: 0 !important;
}
.tab-close-button {
    padding: 5px !important;
    width: 20px !important;
    height: 20px !important;
}
.tab-close-button:not(:hover) {
    padding-inline-start: 0 !important;
    width: 15px !important;
}

Vitaliy V., спасибо.


«The Truth Is Out There»

Отсутствует

 

№1577718-07-2021 17:34:48

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

Vitaliy V. пишет

Но теперь можно

Наблюдение: если вторичный протонский капс-лейбл
не помещается, то это мешает эллипситься основному лейблу.

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

Выделить код

Код:

data:image/png;base64,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

Отсутствует

 

№1577818-07-2021 18:00:44

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

Re: Custom Buttons

Dumby
Но это вроде поправимо https://forum.mozilla-russia.org/viewto … 78#p793078
Теперь норм?

Вот ещё код для старых версий проверял на [firefox] 78

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

Выделить код

Код:

.tab-label-container {
    mask: none !important;
    -moz-box-orient: vertical !important;
}
.tab-label-container > .tab-label {
    display: inline-block;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    min-width: 0 !important;
    line-height: 1.25em !important;
    height: 1.25em !important;
    margin: 0 !important;
}

Отредактировано Vitaliy V. (18-07-2021 18:58:36)

Отсутствует

 

№1577918-07-2021 19:03:40

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

Vitaliy V. пишет

Теперь норм?

Да, теперь отлично!
Таким образом, js-огород совершенно не нужен.
Я предполагал, что это возможно, но сам, конечно, сделать бы не смог.

Отсутствует

 

№1578018-07-2021 22:31:11

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Dumby.
Не поправите кнопочку Reload user{Chrome, Content}?
На [firefox] v90 перестал работать Reload userContent по ПКМ.


«The Truth Is Out There»

Отсутствует

 

№1578119-07-2021 08:30:32

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

unter_officer
Что-то я не вижу чему бы там перестать работать.
На вкладке Справка всё в порядке? Консоль что-нибудь пишет?


Зато обнаружился косяк в CB, надо будет поправить,
но сейчас времени нет.

Отсутствует

 

№1578219-07-2021 12:46:52

mokujin
Участник
 
Группа: Members
Зарегистрирован: 17-02-2017
Сообщений: 494
UA: Firefox 68.0

Re: Custom Buttons

Можно ли из CB узнать запущена ли программа(есть ли процесс) в Системе?
Хотелось бы аналог консольного :

Выделить код

Код:

tasklist | findstr /i "dmaster.exe" && echo "Есть !11" ||  echo "Нийхуа 222"

rem вообще то с переменной, дабы дальше ее юзать подставляя параметры запуска или просто урл-у ↓
tasklist | findstr /i "dmaster.exe" && set run=true ||  set run=false

Отредактировано mokujin (19-07-2021 12:48:27)


...программисты словно войну какую-то ведут за свои обновления. Блин, почему сейчас повсюду мания ухудшать интерфейсы и делать их максимально неудобными?! Radiation

Отсутствует

 

№1578319-07-2021 12:56:46

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Консоль что-нибудь пишет?

ReferenceError: Services is not defined     data:((href, data) => { var en = Services.ww.getWindowEnumerator(null);:2:11


Dumby пишет

На вкладке Справка всё в порядке?

Может и не в порядке, не знаю.
Скиньте пожалуйста код, который у вас во вкладке справка. Или лучше код всей кнопки целиком.

Отредактировано unter_officer (19-07-2021 14:13:09)


«The Truth Is Out There»

Отсутствует

 

№1578419-07-2021 16:09:12

Alex_one
Участник
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 135
UA: Firefox 90.0

Re: Custom Buttons

Dumby,
Добрый день!
Если не затруднит Вас, добавьте ещё пожалуйста, чтобы при выборе поисковика происходило тоже очищение строки поиска.
Сейчас эта строка не очищается.


картинка
POISKd38c009e7d3a446c.jpg

Автоматически очистить панель поиска после запуска поиска для firefox v.90.0

Выделить код

Код:

(sel => {
	var sb = document.getElementById("searchbar") ||
		gNavToolbox.palette.querySelector("#searchbar");
	var clear = setTimeout.bind(window, () => sb.value = "", 75);

	addEventListener("keydown", e =>
		e.key != "Enter" || e.repeat || !sb.value ||
		sb.textbox.popup.querySelector(sel) || clear()
	, true, sb || 1);

	var sels = {
		click: ".search-go-button",
		command: ".searchbar-paste-and-search"
	};
	var listener = e => e.button < 2 && e.target.matches(sels[e.type]) && clear();
	for(var type in sels) addEventListener(type, listener, false, sb);

})(':is(#searchbar-anon-search-settings,.searchbar-engine-one-off-add-engine)[selected=true]');

Отсутствует

 

№1578520-07-2021 14:42:09

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 78.0

Re: Custom Buttons

mokujin пишет

Можно ли из CB узнать запущена ли программа(есть ли процесс) в Системе?
Хотелось бы аналог консольного

Не слышал о таком. Разве что через ctypes.
Эх, на PM, кажется, нет nsIProcess.startHidden,
а так-то, вроде, работает

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

Выделить код

Код:

var file = Services.dirsvc.get("SysD", Ci.nsIFile);
file.append("cmd.exe");

var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
process.init(file);
if ("startHidden" in process) process.startHidden = true;

process.run(true, ["/c", "tasklist | findstr /i notepad.exe || exit 1"], 2);

setTimeout(res => alert(res), 50, `Блокнот ${process.exitValue ? "не" : ""} запущен`);

unter_officer пишет

лучше код всей кнопки целиком

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EReload%20user%7BChrome%2C%20Content%7D.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAIpwAACKcBMsYCAwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMwSURBVEiJ5dbNb5RVFMfxz3mmrYgYE0IN4IaKb4n4UqOwMCYu2JCoQVDiwoUrQ4j0xao7ExITQxRoodEFK1cmRkSE8AeYYKpEFF0YY4SiUSMRQW0sLe0818U8nekwHe3U7vhtnnNOzj3f89znPvderjVFK8npaSWrPSjpElahQzhvyrF4y++t1GqbF7DHOvQLj6Ozrt2EDutYRHAasMK0vXgWWZO0SX/7DlJf6Skp3UWcFeVRV4zG235tCZx6rDPtKLqqAN4XPhROm3DJEiG3LA6aKkZ14jUSKaOd1Gsco6Qz8vRiDDvTFJz63S13AjdVAg7JvBxDzs2RfrE2MP9ijolZijvJXo/h8pmmb5z6LZf7qICWJQNxwP5mM1OnzNdy03V1U0oi2x77y+/Wp16t3CDWgvDKvKGIQZepfO+iWBIpKG9s7HGW0k7dKgsJjsSQffOF1or4srAuS04U9jOp14amYGGgiF2Re6llaEWnMSbPNyl5DtNFQzvnBKdd2oRNhXt4ZvW1rCwfkbInY9jHMeiscBiEJ9Lz2mfSaovgovXC8sI7siAoYsgnMy8JkmPYhhtdbwOV6a9NdVhT69qphYIblPl0FuO2WrimVVVrcu7dZkFqd75q525uBCelqj0tXzRwvSYbwWZ1doOVi4Yad0vVDj81gjPfV+2y9YsGLnlgFrj6p9TA405irPAemwmn/raNqc/D/wO9uXj+bMhXDeDihDledLYt9VmTektb5flxebYgcOpx+yzw0aic3vXgSqY9hdUuOUx6T+WWcX/LUELYh3ZMyqq1G8FxwCl8ULjdVFd6d6tgPQbMfLIwHIPONgVXWs1OFm3Mjt6Rdlg2X2bq0yfsLtzP/OHVq3PqzuPUm/Vj9xz9ZDrcg5F/Bb6gS8mbkq1F6EdlW+IdE03Baae1pEeJb1SuO0vrMvPsPvKRArDaChf8qWRal/BQccBsxnXFiBFTtjS7czW93qYdVurQJZW6SLeK+DaGyofSLh0uGUNHk6F/SfZI3ojh2k41b3DThnrdS+1/nAnjcxzR5mDsdeG/6szrXl2nJX4w4RFJJ3LhF7lzMey3lmtdU/oHaoj4Y/PDRWgAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20c%20%3D%20msg%20%3D%3E%20Services.console.logStringMessage%28String%28msg%29%29%2C%20i%20%3D%20obj%20%3D%3E%20inspectObject%28obj%29%2C%20n%20%3D%20node%20%3D%3E%20inspectDOMNode%28node%29%3B%0A%0A%28obj%20%3D%3E%20%7B%0A%09this.onclick%20%3D%20obj.click.bind%28obj%29%3B%0A%09this.oncontextmenu%20%3D%20obj.contextmenu.bind%28obj%29%3B%0A%09this.tooltipText%20%3D%20%22L%3A%20Reload%20userChrome.css%5CnM%3A%20CB%20Menu%5CnR%3A%20Reload%20userContent.css%22%3B%0A%7D%29%28%7B%0A%09async%20click%28e%29%20%7B%0A%09%09if%20%28e.button%20%3D%3D%201%29%20return%20gShowPopup%28self%29%3B%0A%09%09if%20%28e.button%20%7C%7C%20%21this.chromeSheet%29%20return%3B%0A%09%09await%20this.reload%28this.chromeSheet%29%3B%0A%09%09this.restyle%280%29%3B%0A%09%7D%2C%0A%09re%3A%20/%5E%28%3F%3Aweb.*%7Cfile%7Cextension%7Cprivilegedabout%29%24/%2C%0A%09get%20url%28%29%20%7B%0A%09%09delete%20this.url%3B%0A%09%09return%20this.url%20%3D%20%60chrome%3A//extensions/content/dummy.x%24%7B%0A%09%09%09parseInt%28Services.appinfo.platformVersion%29%20%3E%3D%2074%20%3F%20%22htm%22%20%3A%20%22u%22%0A%09%09%7Dl%60%3B%0A%09%7D%2C%0A%09async%20contextmenu%28e%29%20%7B%0A%09%09if%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.detail%20%21%3D%201%20%7C%7C%20%21this.contentSheetURL%29%20return%3B%0A%09%09e.preventDefault%28%29%3B%0A%0A%09%09var%20count%20%3D%20Services.ppmm.childCount%2C%20one%20%3D%20count%20%3D%3D%201%3B%0A%09%09var%20data%20%3D%20await%20this.reloadTab%28this.url%2C%20one%20%3F%20false%20%3A%20%7B%7D%29%3B%0A%09%09if%20%28one%29%20this.reloadTab%28%29%3B%0A%09%09else%20if%20%28data%29%20%7B%0A%09%09%09var%20url%20%3D%20%22data%3A%2C%22%20+%20encodeURIComponent%28%0A%09%09%09%09self.Help%20+%20this.contentSheetURL%20+%20%27%22%2C%20%27%20+%20JSON.stringify%28data%29%20+%20%22%29%3B%22%0A%09%09%09%29%3B%0A%09%09%09for%28var%20ind%20%3D%200%3B%20ind%20%3C%20count%3B%20ind++%29%20%7B%0A%09%09%09%09var%20child%20%3D%20Services.ppmm.getChildAt%28ind%29%3B%0A%09%09%09%09var%20rt%20%3D%20child.remoteType%3B%0A%09%09%09%09rt%20%26%26%20this.re.test%28rt%29%20%26%26%20child.loadProcessScript%28url%2C%20false%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09this.restyle%28250%29%3B%0A%09%7D%2C%0A%09async%20reload%28sheet%2C%20obj%29%20%7B%0A%09%09try%20%7Bvar%20style%20%3D%20await%20%28await%20fetch%28sheet.href%29%29.text%28%29%3B%7D%0A%09%09catch%20%28ex%29%20%7Breturn%20obj%3B%7D%0A%09%09InspectorUtils.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09if%20%28obj%29%20obj%5Bsheet.href%5D%20%3D%20style%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20await%20this.reload%28rule.styleSheet%2C%20obj%29%3B%0A%09%09%7D%0A%09%09return%20obj%3B%0A%09%7D%2C%0A%09reloadTab%28url%2C%20obj%29%20%7B%0A%09%09var%20tab%20%3D%20gBrowser.addTab%28url%2C%20%7BskipAnimation%3A%20true%2C%20triggeringPrincipal%3A%20document.nodePrincipal%7D%29%3B%0A%09%09tab.style.setProperty%28%22display%22%2C%20%22none%22%2C%20%22important%22%29%3B%0A%09%09return%20new%20Promise%28resolve%20%3D%3E%20%7B%0A%09%09%09var%20result%2C%20stop%2C%20destroy%20%3D%20%28%29%20%3D%3E%20%7B%0A%09%09%09%09if%20%28%21stop%29%20resolve%28result%29%2C%20gBrowser.removeTab%28tab%29%2C%20stop%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09%09setTimeout%28destroy%2C%20500%29%3B%0A%09%09%09try%20%7B%0A%09%09%09%09tab.linkedBrowser.addEventListener%28%22DOMContentLoaded%22%2C%20async%20e%20%3D%3E%20%7B%0A%09%09%09%09%09var%20sheet%20%3D%20this.getSheet%28e.target%2C%20this.contentSheetURL%29%3B%0A%09%09%09%09%09if%20%28sheet%29%20result%20%3D%20await%20this.reload%28sheet%2C%20obj%29%3B%0A%09%09%09%09%09destroy%28%29%3B%0A%09%09%09%09%7D%2C%20%7Bonce%3A%20true%7D%29%3B%0A%09%09%09%7D%20catch%28ex%29%20%7B%0A%09%09%09%09destroy%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09getSheet%28doc%2C%20href%29%20%7B%0A%09%09var%20sheets%20%3D%20InspectorUtils.getAllStyleSheets%28doc%29%3B%0A%09%09return%20sheets.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09%7D%2C%0A%09get%20contentSheetURL%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userContent.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%09%09delete%20this.contentSheetURL%3B%0A%09%09return%20this.contentSheetURL%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%7D%2C%0A%09get%20restyle%28%29%20%7B%0A%09%09var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%09%09var%20uri%20%3D%20Services.io.newURI%28%22data%3Atext/css%2C%3Aroot%7B%7D%22%29%2C%20type%20%3D%20sss.USER_SHEET%3B%0A%09%09delete%20this.restyle%3B%20return%20this.restyle%20%3D%20delay%20%3D%3E%20setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09sss.loadAndRegisterSheet%28uri%2C%20type%29%3B%0A%09%09%09sss.unregisterSheet%28uri%2C%20type%29%3B%0A%09%09%7D%2C%20delay%29%3B%0A%09%7D%2C%0A%09get%20chromeSheet%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userChrome.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%0A%09%09var%20href%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%09var%20sheet%20%3D%20this.getSheet%28document%2C%20href%29%3B%0A%09%09if%20%28%21sheet%29%20return%20null%3B%0A%0A%09%09delete%20this.chromeSheet%3B%20return%20this.chromeSheet%20%3D%20sheet%3B%0A%09%7D%0A%7D%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%28%28href%2C%20data%29%20%3D%3E%20%7B%0A%09var%20en%20%3D%20Cc%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%09%09.getService%28Ci.nsIWindowWatcher%29.getWindowEnumerator%28null%29%3B%0A%09if%20%28%21en.hasMoreElements%28%29%29%20return%3B%0A%09var%20doc%20%3D%20en.getNext%28%29.document%3B%0A%09Cu.importGlobalProperties%28%5B%22InspectorUtils%22%5D%29%3B%0A%0A%09var%20reload%20%3D%20sheet%20%3D%3E%20%7B%0A%09%09var%20style%20%3D%20data%5Bsheet.href%5D%3B%20if%20%28%21style%29%20return%3B%0A%0A%09%09InspectorUtils.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20reload%28rule.styleSheet%29%3B%0A%09%09%7D%0A%09%7D%0A%09var%20sheet%20%3D%20InspectorUtils.getAllStyleSheets%28doc%29.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09if%20%28sheet%29%20reload%28sheet%29%3B%0A%7D%29%28%22%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Alex_one пишет

добавьте ещё

Может роди исчерпывающий список
когда не надо очищать, то есть как бы «от противного»,
а я, попозже, попробую почесать репу исходя из этого.

Отредактировано Dumby (20-07-2021 14:42:47)

Отсутствует

 

№1578620-07-2021 15:09:54

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 537
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

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

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EReload%20user%7BChrome%2C%20Content%7D.css%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAIpwAACKcBMsYCAwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAMwSURBVEiJ5dbNb5RVFMfxz3mmrYgYE0IN4IaKb4n4UqOwMCYu2JCoQVDiwoUrQ4j0xao7ExITQxRoodEFK1cmRkSE8AeYYKpEFF0YY4SiUSMRQW0sLe0818U8nekwHe3U7vhtnnNOzj3f89znPvderjVFK8npaSWrPSjpElahQzhvyrF4y++t1GqbF7DHOvQLj6Ozrt2EDutYRHAasMK0vXgWWZO0SX/7DlJf6Skp3UWcFeVRV4zG235tCZx6rDPtKLqqAN4XPhROm3DJEiG3LA6aKkZ14jUSKaOd1Gsco6Qz8vRiDDvTFJz63S13AjdVAg7JvBxDzs2RfrE2MP9ijolZijvJXo/h8pmmb5z6LZf7qICWJQNxwP5mM1OnzNdy03V1U0oi2x77y+/Wp16t3CDWgvDKvKGIQZepfO+iWBIpKG9s7HGW0k7dKgsJjsSQffOF1or4srAuS04U9jOp14amYGGgiF2Re6llaEWnMSbPNyl5DtNFQzvnBKdd2oRNhXt4ZvW1rCwfkbInY9jHMeiscBiEJ9Lz2mfSaovgovXC8sI7siAoYsgnMy8JkmPYhhtdbwOV6a9NdVhT69qphYIblPl0FuO2WrimVVVrcu7dZkFqd75q525uBCelqj0tXzRwvSYbwWZ1doOVi4Yad0vVDj81gjPfV+2y9YsGLnlgFrj6p9TA405irPAemwmn/raNqc/D/wO9uXj+bMhXDeDihDledLYt9VmTektb5flxebYgcOpx+yzw0aic3vXgSqY9hdUuOUx6T+WWcX/LUELYh3ZMyqq1G8FxwCl8ULjdVFd6d6tgPQbMfLIwHIPONgVXWs1OFm3Mjt6Rdlg2X2bq0yfsLtzP/OHVq3PqzuPUm/Vj9xz9ZDrcg5F/Bb6gS8mbkq1F6EdlW+IdE03Baae1pEeJb1SuO0vrMvPsPvKRArDaChf8qWRal/BQccBsxnXFiBFTtjS7czW93qYdVurQJZW6SLeK+DaGyofSLh0uGUNHk6F/SfZI3ojh2k41b3DThnrdS+1/nAnjcxzR5mDsdeG/6szrXl2nJX4w4RFJJ3LhF7lzMey3lmtdU/oHaoj4Y/PDRWgAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20c%20%3D%20msg%20%3D%3E%20Services.console.logStringMessage%28String%28msg%29%29%2C%20i%20%3D%20obj%20%3D%3E%20inspectObject%28obj%29%2C%20n%20%3D%20node%20%3D%3E%20inspectDOMNode%28node%29%3B%0A%0A%28obj%20%3D%3E%20%7B%0A%09this.onclick%20%3D%20obj.click.bind%28obj%29%3B%0A%09this.oncontextmenu%20%3D%20obj.contextmenu.bind%28obj%29%3B%0A%09this.tooltipText%20%3D%20%22L%3A%20Reload%20userChrome.css%5CnM%3A%20CB%20Menu%5CnR%3A%20Reload%20userContent.css%22%3B%0A%7D%29%28%7B%0A%09async%20click%28e%29%20%7B%0A%09%09if%20%28e.button%20%3D%3D%201%29%20return%20gShowPopup%28self%29%3B%0A%09%09if%20%28e.button%20%7C%7C%20%21this.chromeSheet%29%20return%3B%0A%09%09await%20this.reload%28this.chromeSheet%29%3B%0A%09%09this.restyle%280%29%3B%0A%09%7D%2C%0A%09re%3A%20/%5E%28%3F%3Aweb.*%7Cfile%7Cextension%7Cprivilegedabout%29%24/%2C%0A%09get%20url%28%29%20%7B%0A%09%09delete%20this.url%3B%0A%09%09return%20this.url%20%3D%20%60chrome%3A//extensions/content/dummy.x%24%7B%0A%09%09%09parseInt%28Services.appinfo.platformVersion%29%20%3E%3D%2074%20%3F%20%22htm%22%20%3A%20%22u%22%0A%09%09%7Dl%60%3B%0A%09%7D%2C%0A%09async%20contextmenu%28e%29%20%7B%0A%09%09if%20%28e.ctrlKey%20%7C%7C%20e.shiftKey%20%7C%7C%20e.detail%20%21%3D%201%20%7C%7C%20%21this.contentSheetURL%29%20return%3B%0A%09%09e.preventDefault%28%29%3B%0A%0A%09%09var%20count%20%3D%20Services.ppmm.childCount%2C%20one%20%3D%20count%20%3D%3D%201%3B%0A%09%09var%20data%20%3D%20await%20this.reloadTab%28this.url%2C%20one%20%3F%20false%20%3A%20%7B%7D%29%3B%0A%09%09if%20%28one%29%20this.reloadTab%28%29%3B%0A%09%09else%20if%20%28data%29%20%7B%0A%09%09%09var%20url%20%3D%20%22data%3A%2C%22%20+%20encodeURIComponent%28%0A%09%09%09%09self.Help%20+%20this.contentSheetURL%20+%20%27%22%2C%20%27%20+%20JSON.stringify%28data%29%20+%20%22%29%3B%22%0A%09%09%09%29%3B%0A%09%09%09for%28var%20ind%20%3D%200%3B%20ind%20%3C%20count%3B%20ind++%29%20%7B%0A%09%09%09%09var%20child%20%3D%20Services.ppmm.getChildAt%28ind%29%3B%0A%09%09%09%09var%20rt%20%3D%20child.remoteType%3B%0A%09%09%09%09rt%20%26%26%20this.re.test%28rt%29%20%26%26%20child.loadProcessScript%28url%2C%20false%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09this.restyle%28250%29%3B%0A%09%7D%2C%0A%09async%20reload%28sheet%2C%20obj%29%20%7B%0A%09%09try%20%7Bvar%20style%20%3D%20await%20%28await%20fetch%28sheet.href%29%29.text%28%29%3B%7D%0A%09%09catch%20%28ex%29%20%7Breturn%20obj%3B%7D%0A%09%09InspectorUtils.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09if%20%28obj%29%20obj%5Bsheet.href%5D%20%3D%20style%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20await%20this.reload%28rule.styleSheet%2C%20obj%29%3B%0A%09%09%7D%0A%09%09return%20obj%3B%0A%09%7D%2C%0A%09reloadTab%28url%2C%20obj%29%20%7B%0A%09%09var%20tab%20%3D%20gBrowser.addTab%28url%2C%20%7BskipAnimation%3A%20true%2C%20triggeringPrincipal%3A%20document.nodePrincipal%7D%29%3B%0A%09%09tab.style.setProperty%28%22display%22%2C%20%22none%22%2C%20%22important%22%29%3B%0A%09%09return%20new%20Promise%28resolve%20%3D%3E%20%7B%0A%09%09%09var%20result%2C%20stop%2C%20destroy%20%3D%20%28%29%20%3D%3E%20%7B%0A%09%09%09%09if%20%28%21stop%29%20resolve%28result%29%2C%20gBrowser.removeTab%28tab%29%2C%20stop%20%3D%20true%3B%0A%09%09%09%7D%0A%09%09%09setTimeout%28destroy%2C%20500%29%3B%0A%09%09%09try%20%7B%0A%09%09%09%09tab.linkedBrowser.addEventListener%28%22DOMContentLoaded%22%2C%20async%20e%20%3D%3E%20%7B%0A%09%09%09%09%09var%20sheet%20%3D%20this.getSheet%28e.target%2C%20this.contentSheetURL%29%3B%0A%09%09%09%09%09if%20%28sheet%29%20result%20%3D%20await%20this.reload%28sheet%2C%20obj%29%3B%0A%09%09%09%09%09destroy%28%29%3B%0A%09%09%09%09%7D%2C%20%7Bonce%3A%20true%7D%29%3B%0A%09%09%09%7D%20catch%28ex%29%20%7B%0A%09%09%09%09destroy%28%29%3B%0A%09%09%09%7D%0A%09%09%7D%29%3B%0A%09%7D%2C%0A%09getSheet%28doc%2C%20href%29%20%7B%0A%09%09var%20sheets%20%3D%20InspectorUtils.getAllStyleSheets%28doc%29%3B%0A%09%09return%20sheets.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09%7D%2C%0A%09get%20contentSheetURL%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userContent.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%09%09delete%20this.contentSheetURL%3B%0A%09%09return%20this.contentSheetURL%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%7D%2C%0A%09get%20restyle%28%29%20%7B%0A%09%09var%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0A%09%09var%20uri%20%3D%20Services.io.newURI%28%22data%3Atext/css%2C%3Aroot%7B%7D%22%29%2C%20type%20%3D%20sss.USER_SHEET%3B%0A%09%09delete%20this.restyle%3B%20return%20this.restyle%20%3D%20delay%20%3D%3E%20setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09sss.loadAndRegisterSheet%28uri%2C%20type%29%3B%0A%09%09%09sss.unregisterSheet%28uri%2C%20type%29%3B%0A%09%09%7D%2C%20delay%29%3B%0A%09%7D%2C%0A%09get%20chromeSheet%28%29%20%7B%0A%09%09var%20file%20%3D%20Services.dirsvc.get%28%22UChrm%22%2C%20Ci.nsIFile%29%3B%0A%09%09file.append%28%22userChrome.css%22%29%3B%0A%09%09if%20%28%21file.exists%28%29%29%20return%20null%3B%0A%0A%09%09var%20href%20%3D%20Services.io.newFileURI%28file%29.spec%3B%0A%09%09var%20sheet%20%3D%20this.getSheet%28document%2C%20href%29%3B%0A%09%09if%20%28%21sheet%29%20return%20null%3B%0A%0A%09%09delete%20this.chromeSheet%3B%20return%20this.chromeSheet%20%3D%20sheet%3B%0A%09%7D%0A%7D%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%28%28href%2C%20data%29%20%3D%3E%20%7B%0A%09var%20en%20%3D%20Cc%5B%22@mozilla.org/embedcomp/window-watcher%3B1%22%5D%0A%09%09.getService%28Ci.nsIWindowWatcher%29.getWindowEnumerator%28null%29%3B%0A%09if%20%28%21en.hasMoreElements%28%29%29%20return%3B%0A%09var%20doc%20%3D%20en.getNext%28%29.document%3B%0A%09Cu.importGlobalProperties%28%5B%22InspectorUtils%22%5D%29%3B%0A%0A%09var%20reload%20%3D%20sheet%20%3D%3E%20%7B%0A%09%09var%20style%20%3D%20data%5Bsheet.href%5D%3B%20if%20%28%21style%29%20return%3B%0A%0A%09%09InspectorUtils.parseStyleSheet%28sheet%2C%20style%29%3B%0A%09%09for%28var%20ind%20%3D%200%2C%20len%20%3D%20sheet.cssRules.length%3B%20ind%20%3C%20len%3B%20ind++%29%20%7B%0A%09%09%09var%20rule%20%3D%20sheet.cssRules.item%28ind%29%3B%0A%0A%09%09%09rule.type%20%3D%3D%20rule.IMPORT_RULE%0A%09%09%09%26%26%20rule.styleSheet.href.startsWith%28%22file%3A///%22%29%0A%09%09%09%26%26%20reload%28rule.styleSheet%29%3B%0A%09%09%7D%0A%09%7D%0A%09var%20sheet%20%3D%20InspectorUtils.getAllStyleSheets%28doc%29.find%28sheet%20%3D%3E%20sheet.href%20%3D%3D%20href%29%3B%0A%09if%20%28sheet%29%20reload%28sheet%29%3B%0A%7D%29%28%22%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Dumby, спасибо. Теперь всё работает.


P.S. У меня была проблема с кодом во вкладке "Справка".


«The Truth Is Out There»

Отсутствует

 

№1578721-07-2021 10:12:03

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 90.0

Re: Custom Buttons

Dumby
Как сделать скрипт "добавить в очередь"  - убрать к чертям ...Мастырил, но без толку.  Это на ютубе. Там еще "смотреть позже"
В html "icon":{"iconType":"ADD_TO_QUEUE_TAIL"}

скрытый текст
(function() {
let css = `

    div#hover-overlays div#label-container {
        display: none !important;
    }

`;
if (typeof GM_addStyle !== "undefined") {
  GM_addStyle(css);
} else {
  let styleNode = document.createElement("style");
  styleNode.appendChild(document.createTextNode(css));
  (document.querySelector("head") || document.documentElement).appendChild(styleNode);
}
})();

Отредактировано ВВП (21-07-2021 11:43:51)

Отсутствует

 

№1578821-07-2021 16:25:37

Alex_one
Участник
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 135
UA: Firefox 90.0

Re: Custom Buttons

Dumby пишет

когда не надо очищать

Да вот я уже и думаю, может оставить всё как сейчас есть.
Выбрал поисковую систему, строка не очистилась, тут же можно выбрать другой поиск.
Ну и на худой конец можно колёсиком мышки почистить :D

Отсутствует

 

№1578922-07-2021 19:27:49

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 313
UA: Firefox 91.0

Re: Custom Buttons

Dumby

Dumby пишет

xrun1 пишет

    Можно сделать тоже самое для ucf, тоько для ПКМ сделать эмуляцию, как СКМ с вставкой из буфера?

А можно сделать, чтобы текст из буфера в AkelPad открывался?

Отредактировано Garalf (22-07-2021 19:28:44)

Отсутствует

 

№1579022-07-2021 21:50:47

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 91.0

Re: Custom Buttons

Dumby
А нельзя ли добавить как-то в этот скрипт вот этот код(второй спойлер)? Добавьте пожалуйста, если возможно.

Отсутствует

 

№1579122-07-2021 23:14:24

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 68.0

Re: Custom Buttons

Garalf
Вроде есть такое в документации. Демо-кнопка.

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

Выделить код

Код:

(async self => CustomizableUI.createWidget(self = {
	label: "AkelPad",
	tooltiptext: "ЛКМ: AkelPad\nПКМ: AkelPad + вставка из буфера",
	akelpadPath: "C:\\Program Files\\AkelPad\\AkelPad.exe",
	image: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAApKSlRRkZGh0BAQHxBQUF+QUFBfkFBQX5BQUF+QEBAfEZGRogaGho1AAAAAAABAAECAgICAgICAgQEBAUAAAAAMTEwWeLi4f//////+vr6//r6+v/6+vr//Pz8//v7+//5+fn++/v7/7CwsPdNTU2hAQEBAgAAAAAAAAAAAwMDBAAAAABvbm+x8vHy/+Df4Pfi4+P76ubr++Lh4vvk5OT7/f39+/////v////77/Dv/aysrP8BEAElKngnxDCDLdEvgSzOLX8qy0GTPu1Zq1b/WatW/lasU/9op2f/xcPF/8PEw//i5+L/8vfx//H27//p6+n/qqqq/ESaQOS67a7/teip/rbpqv+36qv/suSm/6zfoP+s36D/teOo/4bNfP93s3b/39bf/9XY1f/5/Pj/+Pv2/+vs6/+qqar/T6RK8bvjsP6t2qT8sNym/LDcpvyx3af+st6o/7LeqP+w3ab/vuaz/1mqVP+2w7b/3dvd//D07//4+/f/6+zr/6qqqv8BNwFvndiU/8Djt/y34a//ueGw/7nhsP+54bD/ueGw/7jgr//B5Lj/mtSS/3q1ev/WzNb/4ufh//f79f/p6+n/qqqq/wAAAANHk0Pbzu/F/73gtP3A47f/wOO3/8Djt//A47f/wOO4/73itf/D5rn/Y7Je/7/MwP/k4eP/+f35/+vs6/+qqqr/AAAAAAAzAGap4KP/zebG+8Tkvv/G5b//xuS//8blv//F5b7/vuK2/8LkuP+U0Yv/ZaBl/97W3v/u9e3/6+3r/6qqqv8DAQMAAAAABE6XS+Db8dT/yuPD/czmxv/N5sf/zObG/8blv//A47j/t+Cu/7vjsP9nuWP/uMW5/+zr6//s7+z/qamq/wACAAQAAAAAATQBZrTir//a6dX70ufN/9Pozv/N5sf/xuS//8Djt/+44K//u+Ow/4zNgv9uqW7/6+Tr/+ru6v+qqar/AAAAAQMBAwAAAAAHVJhS2Or25v/W59L91OjP/8zmxv/G5b//wOO3/7rhsP+w3ab/tuSp/1isU/+vva//6+rq/6qqqv8AAAAAAQIBAwAAAAAENQRkv+S7/+Pr3vvR58z/zObG/8bkv/+/4rf/ueCw/7Hep/+z4Kf/h818/3Kucv/r4uv/qKqo/gAAAAAAAAABAwEDAAAAAApVl1TU7Pbo/9HlzP3P58j/xuS//8Ljuf+64bH/s9+p/6vcoP+t4KD/Wq5U/8bSx/23tLf9AAAAAAAAAAABAgEDAAAAAAk3CWaq36b/1unR+cLjvPzF5r78t+Cv/LXgrP2w36b8odmW/Kzgn/1yxGf7gLKA/52Sne0AAAAAAAAAAAAAAAECAQIAAAEADUOCQcdwt23/Zati82GrXvVjrWD4XKlY9FqpVvZaqlX3UqZN81OnTvxYbFndGxcbNAAAAAAAAAAAAAAAAAABAQEAAAAAFBAUHTAzMGcqKipRJSclUS8wL14nJyZNKCspVy4uLlsiJCJKNjU2aQQABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",

	id: "ucf-AkelPad",
	localized: false,
	onCreated(btn) {
		btn.setAttribute("image", this.image);
		btn._handleClick = btn.oncontextmenu = this.akelpad;
	},
	akelpad(e) {
		if (e && (e.ctrlKey || e.shiftKey)) return;

		var akelpad = Components.Constructor(
			"@mozilla.org/file/local;1", "nsIFile", "initWithPath"
		)(self.akelpadPath);

		if (!e) return akelpad.launch();

		e.preventDefault();

		var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
		process.init(akelpad);
		var args = [
			//"/NewInstance",	// Форсировать создание нового экземпляра программы
			//"/Command(4157)",	// Выделить всё
			"/Command(4155)",	// Вставить
		];
		process.runwAsync(args, args.length);
	}
}))();

sandro79 пишет

Добавьте пожалуйста

Давай сначала что-то более простецкое попробуем,
если не сработает, тогда уже USER_SHEET и всё такое.


Вот, добавил строку, задающую для ноды
CSS-переменную --urlbar-icon-fill-opacity (в атрибут style пропишется).

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

Выделить код

Код:

(async (url, pa = ChromeUtils.import(url).PageActions) => pa.addAction(new pa.Action({

	title: "Копировать ссылку",
	tooltip: "Копировать ссылку",
	iconURL: "chrome://browser/skin/link.svg",

	id: "ucf-copyURL",
	pinnedToUrlbar: true,		
	onCommand(e) {
		var gBrowserBundle = {
			GetStringFromName: () => "Скопировано в буфер обмена!"
		};
		var show = eval(`(function ${e.view.ConfirmationHint.show})`);
		var helper = Cc["@mozilla.org/widget/clipboardhelper;1"]
			.getService(Ci.nsIClipboardHelper);

		(this.onCommand = e => {
			var win = e.view;
			var uri = win.gBrowser.selectedBrowser.currentURI;
			helper.copyString(win.gURLBar.makeURIReadable(uri).displaySpec);

			var anchor = win.BrowserPageActions.panelAnchorNodeForAction(this, e);
			show.call(win.ConfirmationHint, anchor, "", {event: e, hideArrow: true});
		})(e);
	},
	onPlacedInUrlbar: node => node.style.setProperty("--urlbar-icon-fill-opacity", ".6", "important")
})))("resource:///modules/PageActions.jsm");

Отсутствует

 

№1579222-07-2021 23:23:25

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 91.0

Re: Custom Buttons

Dumby пишет

Давай сначала что-то более простецкое попробуем

Да, это сработало. Отлично! Благодарю!

Отсутствует

 

№1579331-07-2021 20:34:12

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 78.0

Re: Custom Buttons

Dumby
Здравствуйте, вы бы не могли помочь, если можно так сделать, чтобы левый клик по крестику закрытия окна выполнял функцию выхода с браузера (ctrl+shift+q) а правый клик стандартно закрывал окно?

Отредактировано Stkvsky (31-07-2021 21:08:50)

Отсутствует

 

№1579401-08-2021 22:58:25

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 68.0

Re: Custom Buttons

Stkvsky пишет

клик по крестику закрытия окна

Смотря по какому. Если по одному из трёх лисьих, то вроде так работает.
А если по тому, который в нативном titlebar'е окна Windows,
то что-то не получается придумать ничего хорошего.

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

Выделить код

Код:

(sel => {
	var lst = e => {
		if (e.button == 1 || e.ctrlKey || e.shiftKey) return;
		e.preventDefault();
		e.button ? BrowserTryToCloseWindow(e) : goQuitApplication(e);
	}
	for(var btn of gNavToolbox.querySelectorAll(sel))
		addEventListener("click", lst, false, btn);

})("#close-button, hbox.titlebar-buttonbox-container toolbarbutton.titlebar-close");

Отсутствует

 

№1579502-08-2021 11:28:49

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 90.0

Re: Custom Buttons

Dumby пишет

то что-то не получается придумать ничего хорошего.

Так работает жеж) Спасибо большое:):)

Отсутствует

 

№1579602-08-2021 11:33:12

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 332
UA: Firefox 90.0

Re: Custom Buttons

Dumby
Есть проблемка и по ходу оне не решатся.. Label  - отрегулировать . ЭТИ СПОСОБЫ НЕ ПОДХОДЯТ

скрытый текст
#PlacesToolbarItems > toolbarbutton > label{
  Подходит , но не очень. Поэтому имя закладки начинаю через пробел. Вот бы так на автомате сделать ?
celu8gp7.jpg
Теперь ровно при hover:
скрытый текст

Выделить код

Код:

.bookmark-item:hover {
  background-image: url( chrome://browser/skin/tabbrowser/tab-bg-active.png);
  background-repeat: repeat-x !important;
  padding: 2px 0px 2px 2px !important;
  background-position: left center !important;
  border-radius: 3px !important;
  background-color: #FFFF80 !important; 
  color: blue !important; 
  
}

Отсутствует

 

№1579702-08-2021 12:31:19

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 90.0

Re: Custom Buttons

Dumby
Можно еще вас попросить изменить скрипт, который вы делали для открытия папки закладок в контейнере (ПКМ по папке закладок - Открыть все в контейнере) (после открытия папка закладок удаляется)

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

Выделить код

Код:

(async (sel, self) => ({

	icon: "circle",
	colors: [
		"#FF9800",
		"#03A9F4",
		"#FFC107",
		"#00BCD4",
		"#FFEB3B",
		"#009688",
		"#CDDC39",
		"#4CAF50",
		"#8BC34A",
		"#D32F2F",
		"#4949ff",
		"#C2185B",
		"#607D8B",
		"#7B1FA2",
		"#9E9E9E",
		"#673AB7",
		"#795548",
		"#3F51B5",
		"#FF5722",
		"#2196F3",
	],

	initColors() {
		var colorName = "ucf-gen";
		var css = "@-moz-document url(about:preferences#containers),"
			+ " url-prefix(chrome://browser/content/browser.x) {\n";
		this.colors.forEach((color, ind) => {
			var [ic, tc] = color.split(/\s*\|\s*/);
			css += `\t.identity-color-${colorName}${ind} {\n`
				+ `\t\t--identity-tab-color: ${tc || ic};\n`
				+ `\t\t--identity-icon-color: ${ic};\n\t}\n`
		});
		var url = "data:text/css;charset=utf-8," + encodeURIComponent(css + "}");
		var sss = Cc["@mozilla.org/content/style-sheet-service;1"]
			.getService(Ci.nsIStyleSheetService);
		sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

		var len = this.colors.length;
		var pref = "ucf.openInGeneratedContainer.lastColor";
		var ind = Math.min(Services.prefs.getIntPref(pref, -1), len - 1);
		this.nextColor = () => {
			var next = ind + 1;
			Services.prefs.setIntPref(pref, ind = next == len ? 0 : next);
			return colorName + ind;
		}
	},
	quit: false,
	init(topic) {
		Services.obs.addObserver(self = this, topic);

		var lt = "browser-lastwindow-close-granted";
		var lw = () => this.quit = true;
		Services.obs.addObserver(lw, lt);

		Services.obs.addObserver(function quit(s, t) {
			self.quit = true;
			Services.obs.removeObserver(self, topic);
			Services.obs.removeObserver(lw, lt);
			Services.obs.removeObserver(quit, t);
		}, "quit-application-granted");
		this.initColors();
		this.newUsercontext = name => {
			var id = this.cis.create(
				name || `[ ${this.cis._lastUserContextId + 1} ]`, this.icon, this.nextColor()
			).userContextId;
			this.saveGens(this.gens.add(id));
			return id;
		}
		var cpref = "ucf.openInGeneratedContainer.containers";
		var arr = Services.prefs.getStringPref(cpref, "").split(",").map(Number).filter(Boolean);
		if (arr.length) {
			var ids = this.cis.getPublicIdentities().map(i => i.userContextId);
			arr = arr.filter(id => ids.includes(id));
		}
		this.gens = new Set(arr);
		(this.saveGens = () => Services.prefs.setStringPref(cpref, Array.from(this.gens).join(",")))();
	},
	observe(doc) {
		var list = doc.querySelectorAll(sel);
		if (!list.length) return;

		var menuitem = doc.createXULElement("menuitem");
		for(var args of Object.entries({
			selectiontype: "single",
			oncommand: "cmd(window)",
			nodetype: "folder|query",
			selection: "folder|query",
			label: "Открыть всё в контейнере",
			id: "placesContext_openContainer:tabs:newUsercontext"
		}))
			menuitem.setAttribute(...args);
		menuitem.cmd = this.cmd;
		menuitem.rnd = menuitem.constructor.prototype.render;
		menuitem.render = this.render;
		var [m1, m2] = menuitem.list = Array.from(list);
		(m2 || m1).after(menuitem);

		if (doc.documentElement.getAttribute("windowtype") != "navigator:browser") return;

		for(var btn of [
			doc.getElementById("tabs-newtab-button"),
			doc.getElementById("new-tab-button") ||
				doc.ownerGlobal.gNavToolbox.palette.querySelector("#new-tab-button")
		])
			if (btn) btn.checkForMiddleClick = this.click;

		var win = doc.ownerGlobal;
		this.redefDoSearch(win, win.customElements.get("searchbar").prototype);

		win.gBrowser.tabContainer.addEventListener("TabClose", this.tabClose);
		win.addEventListener("unload", this.winUnload, {once: true});
		this.quit = false;
	},
	winUnload(e) {
		var win = e.target.ownerGlobal;
		win.removeEventListener("TabClose", self.tabClose);
		if (self.quit) return;
		var gb = win.gBrowser;
		if (gb) for(var tab of gb.tabs) self.tabClose(null, tab);
	},
	closed: new Set(),
	cis: ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm")
		.ContextualIdentityService,
	tabClose(e, tab = e.target) {
		var id = +tab.getAttribute("usercontextid");
		id && self.gens.has(id) && self.closed.add(id);
		self.closed.size == 1 && ChromeUtils.idleDispatch(self.meaybeRemove);
	},
	meaybeRemove() {
		var ids = Array.from(self.closed);
		self.closed.clear();
		for(var id of ids) self.meaybeRemoveById(id);
	},
	meaybeRemoveById(id) {
		for(var win of CustomizableUI.windows)
			if (win.document.querySelector(`tab.tabbrowser-tab[usercontextid="${id}"]`))
				return;
		this.saveGens(this.gens.delete(id));
		this.cis.remove(id);
	},
	redefDoSearch(win, proto) {
		var code = `(openTrustedLinkIn => [
			{${proto.doSearch}}, openTrustedLinkIn
		])(
			function otl(url, where, params) {
				/*
				if (where != "current")
*/
				if (where != "current") params.resolveOnNewTabCreated =
					br => gBrowser.moveTabTo(
						gBrowser.getTabForBrowser(br), Infinity
					),
					params.userContextId = otl.newUsercontext(
						document.getElementById("searchbar").value
					);
				openTrustedLinkIn(url, where, params);
			}
		);`;
		(this.redefDoSearch = (win, proto) => {
			var [obj, func] = win.eval(code);
			Object.assign(proto, obj);
			func.newUsercontext = this.newUsercontext;
		})(win, proto);
	},
	click(btn, e) {
		if (!(e.button != 2 || e.ctrlKey || e.shiftKey)) {
			var txt = e.view.readFromClipboard();
			if (txt) {
				var urls = txt.split("\n").map(self.map).filter(Boolean);
				if (urls.length) return e.preventDefault(),
					self.openFromClipboard(e.view, urls);
			}
		}
		e.view.checkForMiddleClick(btn, e);
	},
	eo: Object.create(null),
	map(str) {
		str = str.trim();
		try {
			var scheme = Services.io.extractScheme(str);
			var ph = Services.io.getProtocolHandler(scheme);
			if (ph.scheme == scheme)
				return Services.io.newURI(str) && {uri: str};
		} catch {}
	},
	openFromClipboard(win, urls) {
		if (win.OpenInTabsUtils.confirmOpenInTabs(urls.length, win))
			urls.load = true,
			this.open(win, this.eo, urls);
	},
	async render() {
		this.rnd();
		await new Promise(this.ownerGlobal.requestAnimationFrame);
		this.hidden || (this.hidden = this.list.every(self.every));
	},
	every: node => node.disabled || node.hidden,
	cmd(win) {
		var view = this.parentNode._view;
		var node = win.document.popupNode;
		node = node._placesView && node._placesView.result.root;
		self.open(win, node || view.selectedNode || view.result.root);
	},
	open(win, node, list) {
		var gbw = Cu.import("resource:///modules/PlacesUIUtils.jsm", {}).getBrowserWindow;
		var w = gbw(win);
		this.pu = w.PlacesUIUtils;
		this.fs = w.PlacesUtils.favicons;
		this.sysp = w.E10SUtils.SERIALIZED_SYSTEMPRINCIPAL;

		(this.open = (win, node, list) => {
			this.openURLs(gbw(win), list || win.PlacesUtils.getURLsForContainerNode(node));
			node.bookmarkGuid && this.pu.doCommand(win, "placesCmd_delete");
		})(win, node, list);
	},
	async openURLs(win, urls) {
		var userContextId = this.newUsercontext();
		var mark = !win.PrivateBrowsingUtils.isWindowPrivate(win);
		var {load} = urls, gb = win.gBrowser, pos = gb.selectedTab._tPos;

		for(var {uri, title, isBookmark} of urls) try {
			if (mark) isBookmark
				? this.pu.markPageAsFollowedBookmark(uri)
				: this.pu.markPageAsTyped(uri);

			if (load) {
				gb.addTrustedTab(uri, {index: ++pos, userContextId});
				continue;
			}
			var state = {userContextId, entries: [{
				url: uri,
				title: title || uri,
				triggeringPrincipal_base64: this.sysp
			}]};
			var [,, data, mime] = await new Promise(
				resolve => this.fs.getFaviconDataForPage(
					Services.io.newURI(uri), (...args) => resolve(args), 16
				)
			);
			if (data.length) state.image = `data:${
				mime || "image/x-icon"
			};base64,${
				btoa(String.fromCharCode(...data))
			}`;
			var tab = gb.addTrustedTab(null, {index: ++pos, userContextId});
			win.SessionStore.setTabState(tab, state);
		} catch {};
	}
}).init("chrome-document-loaded"))(
	"#placesContext_openBookmarkContainer\\:tabs,#placesContext_openContainer\\:tabs"
);

Вы бы не могли пожалуйста добавить чтобы названия для контейнера бралось с названия папки закладок?

Отредактировано Stkvsky (02-08-2021 12:32:51)

Отсутствует

 

№1579802-08-2021 21:04:45

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 68.0

Re: Custom Buttons

ВВП пишет

Есть проблемка и по ходу оне не решатся..

Ну да. Скажем так: вряд ли такое описание поспособствует решению.
Тут нужен весь стиль, экстракт всех правил,
которые применяются к проблемным элементам,
чтобы накатить на нестилизованый профиль и увидеть проблему.


Вообще интересно, зачем по :hover задавать padding, в чём замысел?


Stkvsky пишет

чтобы названия для контейнера бралось с названия папки закладок

Тогда вроде как получается, что из папок журнала браться не должно,
но не стал их исключать, на всякий случай.

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

Выделить код

Код:

(async (sel, self) => ({

	icon: "circle",
	colors: [
		"#FF9800",
		"#03A9F4",
		"#FFC107",
		"#00BCD4",
		"#FFEB3B",
		"#009688",
		"#CDDC39",
		"#4CAF50",
		"#8BC34A",
		"#D32F2F",
		"#4949ff",
		"#C2185B",
		"#607D8B",
		"#7B1FA2",
		"#9E9E9E",
		"#673AB7",
		"#795548",
		"#3F51B5",
		"#FF5722",
		"#2196F3",
	],

	initColors() {
		var colorName = "ucf-gen";
		var css = "@-moz-document url(about:preferences#containers),"
			+ " url-prefix(chrome://browser/content/browser.x) {\n";
		this.colors.forEach((color, ind) => {
			var [ic, tc] = color.split(/\s*\|\s*/);
			css += `\t.identity-color-${colorName}${ind} {\n`
				+ `\t\t--identity-tab-color: ${tc || ic};\n`
				+ `\t\t--identity-icon-color: ${ic};\n\t}\n`
		});
		var url = "data:text/css;charset=utf-8," + encodeURIComponent(css + "}");
		var sss = Cc["@mozilla.org/content/style-sheet-service;1"]
			.getService(Ci.nsIStyleSheetService);
		sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

		var len = this.colors.length;
		var pref = "ucf.openInGeneratedContainer.lastColor";
		var ind = Math.min(Services.prefs.getIntPref(pref, -1), len - 1);
		this.nextColor = () => {
			var next = ind + 1;
			Services.prefs.setIntPref(pref, ind = next == len ? 0 : next);
			return colorName + ind;
		}
	},
	quit: false,
	init(topic) {
		Services.obs.addObserver(self = this, topic);

		var lt = "browser-lastwindow-close-granted";
		var lw = () => this.quit = true;
		Services.obs.addObserver(lw, lt);

		Services.obs.addObserver(function quit(s, t) {
			self.quit = true;
			Services.obs.removeObserver(self, topic);
			Services.obs.removeObserver(lw, lt);
			Services.obs.removeObserver(quit, t);
		}, "quit-application-granted");
		this.initColors();
		this.newUsercontext = name => {
			var id = this.cis.create(
				name || `[ ${this.cis._lastUserContextId + 1} ]`, this.icon, this.nextColor()
			).userContextId;
			this.saveGens(this.gens.add(id));
			return id;
		}
		var cpref = "ucf.openInGeneratedContainer.containers";
		var arr = Services.prefs.getStringPref(cpref, "").split(",").map(Number).filter(Boolean);
		if (arr.length) {
			var ids = this.cis.getPublicIdentities().map(i => i.userContextId);
			arr = arr.filter(id => ids.includes(id));
		}
		this.gens = new Set(arr);
		(this.saveGens = () => Services.prefs.setStringPref(cpref, Array.from(this.gens).join(",")))();
	},
	observe(doc) {
		var list = doc.querySelectorAll(sel);
		if (!list.length) return;

		var menuitem = doc.createXULElement("menuitem");
		for(var args of Object.entries({
			selectiontype: "single",
			oncommand: "cmd(window)",
			nodetype: "folder|query",
			selection: "folder|query",
			label: "Открыть всё в контейнере",
			id: "placesContext_openContainer:tabs:newUsercontext"
		}))
			menuitem.setAttribute(...args);
		menuitem.cmd = this.cmd;
		menuitem.rnd = menuitem.constructor.prototype.render;
		menuitem.render = this.render;
		var [m1, m2] = menuitem.list = Array.from(list);
		(m2 || m1).after(menuitem);

		if (doc.documentElement.getAttribute("windowtype") != "navigator:browser") return;

		for(var btn of [
			doc.getElementById("tabs-newtab-button"),
			doc.getElementById("new-tab-button") ||
				doc.ownerGlobal.gNavToolbox.palette.querySelector("#new-tab-button")
		])
			if (btn) btn.checkForMiddleClick = this.click;

		var win = doc.ownerGlobal;
		this.redefDoSearch(win, win.customElements.get("searchbar").prototype);

		win.gBrowser.tabContainer.addEventListener("TabClose", this.tabClose);
		win.addEventListener("unload", this.winUnload, {once: true});
		this.quit = false;
	},
	winUnload(e) {
		var win = e.target.ownerGlobal;
		win.removeEventListener("TabClose", self.tabClose);
		if (self.quit) return;
		var gb = win.gBrowser;
		if (gb) for(var tab of gb.tabs) self.tabClose(null, tab);
	},
	closed: new Set(),
	cis: ChromeUtils.import("resource://gre/modules/ContextualIdentityService.jsm")
		.ContextualIdentityService,
	tabClose(e, tab = e.target) {
		var id = +tab.getAttribute("usercontextid");
		id && self.gens.has(id) && self.closed.add(id);
		self.closed.size == 1 && ChromeUtils.idleDispatch(self.maybeRemove);
	},
	maybeRemove() {
		var ids = Array.from(self.closed);
		self.closed.clear();
		for(var id of ids) self.maybeRemoveById(id);
	},
	maybeRemoveById(id) {
		for(var win of CustomizableUI.windows)
			if (win.document.querySelector(`tab.tabbrowser-tab[usercontextid="${id}"]`))
				return;
		this.saveGens(this.gens.delete(id));
		this.cis.remove(id);
	},
	redefDoSearch(win, proto) {
		var code = `(openTrustedLinkIn => [
			{${proto.doSearch}}, openTrustedLinkIn
		])(
			function otl(url, where, params) {
				if (where != "current") params.resolveOnNewTabCreated =
					br => gBrowser.moveTabTo(
						gBrowser.getTabForBrowser(br), Infinity
					),
					params.userContextId = otl.newUsercontext(
						document.getElementById("searchbar").value
					);
				openTrustedLinkIn(url, where, params);
			}
		);`;
		(this.redefDoSearch = (win, proto) => {
			var [obj, func] = win.eval(code);
			Object.assign(proto, obj);
			func.newUsercontext = this.newUsercontext;
		})(win, proto);
	},
	click(btn, e) {
		if (!(e.button != 2 || e.ctrlKey || e.shiftKey)) {
			var txt = e.view.readFromClipboard();
			if (txt) {
				var urls = txt.split("\n").map(self.map).filter(Boolean);
				if (urls.length) return e.preventDefault(),
					self.openFromClipboard(e.view, urls);
			}
		}
		e.view.checkForMiddleClick(btn, e);
	},
	eo: Object.create(null),
	map(str) {
		str = str.trim();
		try {
			var scheme = Services.io.extractScheme(str);
			var ph = Services.io.getProtocolHandler(scheme);
			if (ph.scheme == scheme)
				return Services.io.newURI(str) && {uri: str};
		} catch {}
	},
	openFromClipboard(win, urls) {
		if (win.OpenInTabsUtils.confirmOpenInTabs(urls.length, win))
			urls.load = true,
			this.open(win, this.eo, urls);
	},
	async render() {
		this.rnd();
		await new Promise(this.ownerGlobal.requestAnimationFrame);
		this.hidden || (this.hidden = this.list.every(self.every));
	},
	every: node => node.disabled || node.hidden,
	cmd(win) {
		var {_view, triggerNode} = this.parentNode;
		var node = triggerNode._placesView && triggerNode._placesView.result.root;
		self.open(win, node || _view.selectedNode || _view.result.root);
	},
	open(win, node, list) {
		var gbw = Cu.import("resource:///modules/PlacesUIUtils.jsm", {}).getBrowserWindow;
		var w = gbw(win);
		this.pu = w.PlacesUIUtils;
		this.fs = w.PlacesUtils.favicons;
		this.sysp = w.E10SUtils.SERIALIZED_SYSTEMPRINCIPAL;

		(this.open = (win, node, list) => {
			var {bookmarkGuid: guid, title} = node;
			if (guid && title) title = win.PlacesUtils.bookmarks.getLocalizedTitle({guid, title});
			this.openURLs(gbw(win), list || win.PlacesUtils.getURLsForContainerNode(node), title);
			guid && this.pu.doCommand(win, "placesCmd_delete");
		})(win, node, list);
	},
	async openURLs(win, urls, title) {
		var userContextId = this.newUsercontext(title);
		var mark = !win.PrivateBrowsingUtils.isWindowPrivate(win);
		var {load} = urls, gb = win.gBrowser, pos = gb.selectedTab._tPos;

		for(var {uri, title, isBookmark} of urls) try {
			if (mark) isBookmark
				? this.pu.markPageAsFollowedBookmark(uri)
				: this.pu.markPageAsTyped(uri);

			if (load) {
				gb.addTrustedTab(uri, {index: ++pos, userContextId});
				continue;
			}
			var state = {userContextId, entries: [{
				url: uri,
				title: title || uri,
				triggeringPrincipal_base64: this.sysp
			}]};
			var [,, data, mime] = await new Promise(
				resolve => this.fs.getFaviconDataForPage(
					Services.io.newURI(uri), (...args) => resolve(args), 16
				)
			);
			if (data.length) state.image = `data:${
				mime || "image/x-icon"
			};base64,${
				btoa(String.fromCharCode(...data))
			}`;
			var tab = gb.addTrustedTab(null, {index: ++pos, userContextId});
			win.SessionStore.setTabState(tab, state);
		} catch {};
	}
}).init("chrome-document-loaded"))(
	"#placesContext_openBookmarkContainer\\:tabs,#placesContext_openContainer\\:tabs"
);

Отсутствует

 

№1579902-08-2021 22:47:04

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 78.0

Re: Custom Buttons

Dumby
Класс:), спасибо большое

Добавлено 02-08-2021 22:53:30
Dumby
Еще можете пожалуйста изменить процесс добавления контейнера в папку закладок так же?
Вот ваш код для custom buttons который добавляет в меню вкладки (ПКМ по вкладке - Добавить контейнер в закладки)

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

Выделить код

Код:

// Добавить контейнер в закладки....................
(async id => {
	var menuitem = document.createXULElement("menuitem");
	document.getElementById(id).after(menuitem);
	typeof addDestructor == "function"
		&& addDestructor(() => menuitem.remove());
	menuitem.render = function() {
		this.id = "context_bookmarkContainer";
		this.label = "Добавить контейнер в закладки";
		this.setAttribute("oncommand", "bookmark()");

		var bm = PlacesUtils.bookmarks, attr = "usercontextid";
		var {toolbarGuid: parentGuid, TYPE_FOLDER: type} = bm;
		this.bookmark = async () => {
			var tab = TabContextMenu.contextTab;
			var title = tab.label, id = tab.getAttribute(attr);
			var {guid} = await bm.insert({title, parentGuid, type});
			var tabs = [];
			for(tab of gBrowser.visibleTabs)
				tab.getAttribute(attr) == id
				&& tabs.unshift(tab) && await bm.insert({
					parentGuid: guid, title: tab.label,
					url: tab.linkedBrowser.currentURI.spec
				});
			gBrowser.removeTabs(tabs);
		}
		var raf = () => menuitem.hidden =
			!TabContextMenu.contextTab.hasAttribute(attr);
		var {render} = this.constructor.prototype;
		(this.render = () => {
			requestAnimationFrame(raf);
			render.call(menuitem);
		})();
	}
})("context_reopenInContainer");


Вы бы не могли изменить чтобы названия для папки закладок бралось с названия контейнера?
(сейчас оно берется с названия вкладки по которой кликается ПКМ)

Отредактировано Stkvsky (03-08-2021 01:39:06)

Отсутствует

 

№1580003-08-2021 08:35:35

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 68.0

Re: Custom Buttons

Stkvsky

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

Выделить код

Код:

/*
			var title = tab.label, id = tab.getAttribute(attr);
*/
			var id = tab.getAttribute(attr);
			var title = ContextualIdentityService.getUserContextLabel(id);

Отсутствует

 

Board footer

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