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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№47614-09-2022 17:43:36

Farby
Участник
 
Группа: Members
Зарегистрирован: 21-11-2012
Сообщений: 243
UA: Google 2.1

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov
Это можно в самих стилях указать

Пример

Выделить код

Код:

@media (-moz-platform: windows) {
  /* some rules targeting windows OS  */
}
@media (-moz-platform: osx) {
  /* some rules targeting mac OS  */
}
@media (-moz-platform: linux) {
  /* some rules targeting linux (by which I think we normally mean gtk in practice?  */
}


Жизнь иногда такое выкидывает, что хочется подобрать...

Отсутствует

 

№47714-09-2022 18:18:30

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

xrun1 пишет

Работает в боковой панели. На панели закладок не спрашивает.

kokoss пишет

А у меня наоборот, этот скрипт на панели закладок работает, а в боковой нет.

У меня и в боковой, и на панели закладок работает. Dumby, спасибо.

Отсутствует

 

№47814-09-2022 18:30:05

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

kokoss пишет

А у меня наоборот, этот скрипт на панели закладок работает, а в боковой нет.

Хех, у меня аналогично, в боковой панели спасает Ctrl+Z

Отсутствует

 

№47914-09-2022 18:42:28

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

bezuma
А ты его куда пристроил?

Отсутствует

 

№48014-09-2022 19:20:29

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

xrun1 пишет

Работает в боковой панели. На панели закладок не спрашивает.

Это я понял ещё из изначального вопроса.
На что была дадена ссылка, где сказано какую строку куда добавить.
Вот и осталось непонятно, помогла строка или нет.


kokoss пишет

А у меня наоборот, этот скрипт на панели закладок работает, а в боковой нет.

Этого не может быть. Наверно ты не понял что скрипт делает.
И неудивительно: человек когда-то что-то спрашивает, затем кто-то другой
спрашивает мод, затем третий, зачем-то, тащит это к себе, да ещё и переименовывает
"Удалять с панели закладок?" в "Удалить закладку/папку?". Короче — испорченный телефон.


Подтверждение появляется если:
1. Удаляется закладка из панели закладок (включая закладки из подпапок).
2. Удаляется папка из панели закладок (только из самой панели закладок, исключая вложенные папки).
А удаляется где — неважно (панель закладок, main-menubar, сайдбар, Библиотека, и.т.д).


Dobrov пишет

возможно добавить восстановление удалённых закладок было и в окне Библиотеки?

Оно там есть. В смысле должно работать Ctrl+Z.
Но можешь попробовать загрузить скрипт в это окно,
в CustomStylesScripts.jsm, для Библиотеки, есть даже пример-комментарий.

чтобы на macos подключались ещё пара своих AGENT_SHEET и USER_SHEET стилей, на linux пара своих, на windows тоже.

Так а в чём, собственно, затруднение?
Я не знаю как тебе видится это организовать, но, допустим, например:


В начале скрипта импортируем лисий модуль AppConstants,
и определяем функцию типа var os = name => `${name}_${AppConstants.platform}.css`;
Тогда, там где path, вместо строки, пишем вызов этой функции path: os("style1"),
получается, как если бы, path: "style1_macosx.css" (или "style1_linux.css", или "style1_win.css").
Не проверял.


Farby пишет

osx

Не osx, а macos. К тому же, Firefox 99+, а не 97.

Отредактировано Dumby (14-09-2022 19:21:45)

Отсутствует

 

№48114-09-2022 19:44:58

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1728
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

bezuma пишет

Хех, у меня аналогично

У меня просто старая версия UCF, видимо поэтому у меня так работает.

Отредактировано kokoss (14-09-2022 19:45:21)


Win7

Отсутствует

 

№48214-09-2022 19:50:32

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

kokoss
Так и у меня старая, и не собираюсь переходить - бесцветные иконки категорически отказываюсь лицезреть )

Отсутствует

 

№48314-09-2022 20:18:20

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1728
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

bezuma пишет

бесцветные иконки категорически отказываюсь лицезреть

Если только из за этого, то просто замените в новом UCF, папку svg и файл icons_in_menu на свои.
Add, забыл. там ещё понадобится комплект full_theme, где и находятся папка svg и файл icons_in_menu.

Отредактировано kokoss (14-09-2022 20:54:20)


Win7

Отсутствует

 

№48414-09-2022 20:33:10

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

kokoss
Да пробовал свои воткнуть, с наскока не вышло, а потом запутался вовсе и плюнул, без сторонней помощи не осилю

Отсутствует

 

№48515-09-2022 02:51:42

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 396
UA: Firefox 97.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

В начале скрипта импортируем лисий модуль AppConstants, и определяем функцию типа var os = name => `${name}_${AppConstants.platform}.css`;

с @media (-moz-platform не совсем подходит, так как хочу, чтобы работало на "быстрых" старых версиях, как UCF для FF78+. Так нормально?

Выделить код

Код:

const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm");
var os = name => `${name}_${AppConstants.platform}.css`;

var UcfStylesScripts = { /** ************************▼ Настройки ▼ + доп. подключение слилей для вашей ОС */
………………………
	stylesall: [ // Для всех документов
		{ path: "custom_styles_all_agent.css", type: "AGENT_SHEET", sheet() { registerSheet(this); }, },
		{ path: "custom_styles_all_user.css", type: "USER_SHEET", sheet() { registerSheet(this); }, },
	// добавить стиль для вашей операционной системы: "*_macosx.css" "*_linux.css" "*_win.css"
		{ path: os("custom_styles_all_agent"), type: "AGENT_SHEET", sheet() { registerSheet(this); }, },
		{ path: os("custom_styles_all_user"), type: "AGENT_SHEET", sheet() { registerSheet(this); }, },
	],

Отсутствует

 

№48615-09-2022 12:17:34

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

На что была дадена ссылка, где сказано какую строку куда добавить.
Вот и осталось непонятно, помогла строка или нет.

Ссылка помогла после повторного прочтения. Меня смутило слово "симилярно".
Что касается перехода на "новый" UCF. Привык делать, если чётко понимаю "что" и "зачем". Второй пункт спорный: если всё работает, то зачем? Оптимизация?
Первый пункт непонятен. Догадываюсь, что CustomStylesScripts.jsm и CustomStylesScriptsChild.jsm некие загрузчики, но чем они отличаются и, в зависимости от этого, что куда прописывать. Виталий этого не объяснил, или я невнимательно читал. Когда "ucfobj" считать объектом? Методом "тыка" делать не хочу, да и долго это будет.
P.S. А я и не переходил на icons_in_menu от Виталия. У меня остался свой с цветными иконками, за исключением системных.:P
P.P.S. Опять переделывать user_chrome.js лениво, сейчас так.

скрытый текст
Image002_2022-09-15_12-09.pngImage003_2022-09-15_12-09.png

Отсутствует

 

№48715-09-2022 17:26:11

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1728
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

bezuma пишет

без сторонней помощи не осилю

Пробуйте.


Win7

Отсутствует

 

№48816-09-2022 09:56:54

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Chrome 102.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

voqabuhe пишет

bezumaА ты его куда пристроил?

Никуда - тупо жмакаю клаву

kokoss
Благодарю - поковыряюсь )

Отредактировано bezuma (16-09-2022 10:05:32)

Отсутствует

 

№48916-09-2022 16:19:16

Yeesha
Участник
 
Группа: Members
Зарегистрирован: 23-08-2008
Сообщений: 356
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Вот пара моих скриптов, надеюсь кому пригодятся.
Они сделаны под загрузчик by alice0775; будут ли работать с описанным в начале этой темы загрузчиком, не знаю.
 
Quick Mark
Переработанное меню добавления закладки. Можно выбрать папку по умолчанию, переименовать папку, создать новую. Высота окошка настраивается (потянуть мышкой). Внутри скрипта есть несколько настроек, которые вы можете изменить по вкусу (думаю, в последних версиях FF не все они уже работают).

Скриншот
0kwPfoB.png

Код

Выделить код

Код:

// QUICK BOOKMARK
// Replacement for QuickMark extension for Firefox 57+
	// https://addons.mozilla.org/firefox/addon/quickmark/
	// https://github.com/TarekJor/Firefox-52-ESR-legacy-addon/blob/master/xpi/quickmark-1.2.11-fx.xpi
// Required Firefox version: min 54, max tested 70a

// Changelog
// 2017.11.14 - initial release for FF 57
// 2018.08.28 - edits for FF 62-63
// 2019.08.18 - edits for FF 68-70:
	// Some operations with folderTree variable moved from initialization code into panel.popupshowing listener as node #editBMPanel_folderTree is no longer present in DOM until popup initialized and toggleFolderTreeVisibility() called.
	// createElement() replaced with createXULElement() (used in makeResizer() and makeFolderContextMenu()).
// 2020.05.08 - edits for FF 76
	// Bookmarks panel is now accessed via StarUI.panel as getElementById(...) returns null in FF 76
// 2020.06.02 - edits for FF 78 or 79
	// Popup hint is now accessed via ConfirmationHint._panel as getElementById(...) returns null since FF 78 or 79
// 2022.06.19 - edits for FF ≈101
	// Small fixes

let settings = {

	// If false, you can set any folder as default via its context menu
	useLastSelectedFolderAsDefault: false,

	// Comment out any element to unhide it
	menuElementsToHide: [
		// '.panel-header',
		'#editBookmarkPanelImage', // FF62+
		'#editBookmarkPanelFaviconContainer', // FF62+
		// '#editBMPanel_nameRow',
		// '#editBMPanel_folderRow',
		'#editBMPanel_folderRow > hbox', // ≈FF101
		'#editBMPanel_newFolderBox',
		// '#editBMPanel_tagsRow',
		'#editBookmarkPanel_showForNewBookmarks', // FF63+
		'#editBookmarkHeaderSeparator', // ≈FF101
	],

	makeMenuNarrower: true,
	makeButtonsSmaller: false,
	hideBookmarksToolbarIfEmpty: true,
	hideThatStupidGreenTooltipOnSaving: true, // FF62+

	useOneClickMode: true,
};


let strings = {
	'en': {
		'setAsDefault': 'Set as default folder',
		'rename': 'Rename',
		'addNewFolder': 'New folder...',
	},
	'ru': {
		'setAsDefault': 'Сделать папкой по умолчанию',
		'rename': 'Переименовать',
		'addNewFolder': 'Новая папка...',
	},
};
strings['en-US'] = strings['en'];
strings['ru-RU'] = strings['ru'];


if (Services.vc.compare(Services.appinfo.platformVersion, '54.*') == -1) {
	let path = Components.stack.filename;
	path = path.substring(path.lastIndexOf('///') + 3);
	alert('“Quick Bookmark” userscript will not work with this version of Firefox. \nMinimal supported version is 54. \nPlease delete the script to avoid such alerts and possible malfunctioning. \n' + path);
}


let storage = Services.prefs.getBranch('extensions.userScripts.quickBookmark.');
let starButton = document.getElementById('star-button-box');

// let panel = document.getElementById('editBookmarkPanel'); // Null since FF76 because of “lazy load” (see browser-places.js)
let panel = StarUI.panel; // This creates the panel in FF76 if missed or just gets it in older versions

let folderTree = panel.querySelector('#editBMPanel_folderTree'); // Null in FF 68-70
let folderTreeRow = panel.querySelector('#editBMPanel_folderTreeRow');

let defaultFolderGuid = storage.getCharPref('defaultFolderGuid', PlacesUtils.bookmarks.unfiledGuid);
let lastSelectedFolderGuid = defaultFolderGuid; // Used to distinguish if user really selected the folder or just expanded/collapsed it
let shouldCloseOnClick = true;

makeResizer();
makeFolderContextMenu();

let folderTreeHeight = storage.getCharPref('folderTreeHeight', '300px');
folderTreeRow.style.height = folderTreeHeight;

for (let sel of settings.menuElementsToHide) {
	if (sel == '#editBookmarkPanel_showForNewBookmarks') continue; // This must be done later
	let el = panel.querySelector(sel);
	if (el)
		el.style.display = 'none';
	if (sel == '#editBMPanel_folderRow > hbox' && el)
		folderTreeRow.style.padding = '0px';
}

if (settings.makeMenuNarrower) {
	if (folderTree)
		folderTree.style.minWidth = '260px';

	// Fix for ~FF62b18, probably will not be needed in latest builds
	panel.querySelector('#editBookmarkPanelBottomButtons').removeAttribute('style');
}
if (settings.makeButtonsSmaller) {
	panel.querySelector('#editBookmarkPanelDoneButton').style.padding = '5px 2px 7px';
	panel.querySelector('#editBookmarkPanelRemoveButton').style.padding = '5px 2px 7px';
}
if (settings.hideThatStupidGreenTooltipOnSaving) {
	// document.querySelector('#confirmation-hint').style.display = 'none'; // Null since FF78 or 79 because of “lazy load” (see browser.js)
	let hint = document.querySelector('#confirmation-hint') || ConfirmationHint._panel; // This creates the hint in FF78-79 if missed or just gets it in older versions
	hint.style.display = 'none';
}

// let tagsSelectorCollapsed = storage.getBoolPref('tagsSelectorCollapsed', true);



// Add/remove bookmark silently when middle-clicking on the star button or pressing Ctrl+Alt+D
// This may interfere with typographic keyboard layouts; possible solution - use Ctrl+Shift+D
starButton.addEventListener('click', function(e) {
	if (e.button == 1 || (e.button == 0 && (e.ctrlKey || e.shiftKey))) {
		e.stopPropagation();
		toggleBookmark();
	}
}, true);
document.addEventListener('keydown', function(e) {
	if (e.ctrlKey && e.altKey && e.code == 'KeyD') {
		e.preventDefault();
		toggleBookmark();
	}

	// In FF63a1, if typographic layout is used and we are pressing Ctrl+Alt+D, both e.ctrlKey and e.altKey are false
	// This is a temporary workaround
	else if (e.key == '°' && e.code == 'KeyD') {
		e.preventDefault();
		toggleBookmark();
	}
});

panel.addEventListener('popupshowing', function() {
	gEditItemOverlay.toggleFolderTreeVisibility();

	if (!folderTree)
		folderTree = panel.querySelector('#editBMPanel_folderTree');

	if (settings.makeMenuNarrower)
		folderTree.style.minWidth = '260px';

	folderTree.contextMenu = 'editBMPanel_folderTree_contextMenu';

	if (settings.menuElementsToHide.includes('#editBookmarkPanel_showForNewBookmarks')) {
		let el = panel.querySelector('#editBookmarkPanel_showForNewBookmarks');
		if (el)
			el.style.display = (el.checked) ? 'none' : '';
	}

	// if (!settings.menuElementsToHide.includes('#editBMPanel_tagsRow') && !tagsSelectorCollapsed)
		// gEditItemOverlay.toggleTagsSelector();
});

panel.addEventListener('popupshown', onPopupShown);
panel.addEventListener('popuphidden', onPopupHidden);

function onPopupShown() {
	folderTree.focus();

	if (StarUI._isNewBookmark)
		gEditItemOverlay._folderTree.selectItems([defaultFolderGuid]);

	lastSelectedFolderGuid = gEditItemOverlay.selectedFolderGuid;

	// Reset var
	shouldCloseOnClick = true;

	if (settings.useOneClickMode) {
		folderTree.addEventListener('select', onFolderTreeSelect);
		folderTreeRow.addEventListener('click', onFolderTreeClick);
		folderTreeRow.addEventListener('keydown', onFolderTreeClick, true);

		// NB: keydown listener must be attached to folderTreeRow, not folderTree,
		// to be able to prevent default folderTree action (expand/collapse folder) when pressing Enter
	}
};

function onFolderTreeSelect(e) {
	// Stop undesirable calls before the panel is shown
	if (!panel.hasAttribute('panelopen')) return;

	if (gEditItemOverlay.selectedFolderGuid == lastSelectedFolderGuid)
		// 'Select' event fired, but folder not changed? Seems user expanded/collapsed some folder, so panel shouldn’t be closed
		shouldCloseOnClick = false;
	else
		lastSelectedFolderGuid = gEditItemOverlay.selectedFolderGuid;
};

function onFolderTreeClick(e) {
	// Cancel one-click mode when Alt pressed, e.g. user can rename folder with Alt+DoubleClick
	if (e.altKey) return;

	// Rename folder with F2
	if (e.code == 'F2') {
		let g = gEditItemOverlay;
		g._folderTree.startEditing(g._folderTree.view.selection.currentIndex, g._folderTree.columns.getFirstColumn());
	}

	// Close menu with Enter or left click
	else if (e.code == 'Enter' || e.button == 0) {
		// Prevent folder from expand/collapse when pressing Enter
		e.stopPropagation();

		if (shouldCloseOnClick || e.code == 'Enter') {
			setTimeout(function() {
				StarUI.panel.hidePopup();
			}, 100);
		}

		shouldCloseOnClick = true;
	}
};

function onPopupHidden() {
	// Hide bookmarks toolbar if empty
	if (settings.hideBookmarksToolbarIfEmpty) {
		setTimeout(function() {
			let toolbarFolder = PlacesUtils.getFolderContents(PlacesUtils.bookmarks.toolbarGuid).root;
			let toolbarNode = document.getElementById('PersonalToolbar');
			if (toolbarNode && !toolbarNode.collapsed && !toolbarFolder.hasChildren)
				BookmarkingUI.toggleBookmarksToolbar();
		}, 500);
	}

	// Save panel height
	let height = folderTreeRow.style.height;
	if (height && height != '0' && height != '0px' && height != folderTreeHeight) {
		storage.setCharPref('folderTreeHeight', height);
		folderTreeHeight = height;
	}

	// Save default folder guid
	if (settings.useLastSelectedFolderAsDefault && gEditItemOverlay.selectedFolderGuid && gEditItemOverlay.selectedFolderGuid != defaultFolderGuid) {
		storage.setCharPref('defaultFolderGuid', gEditItemOverlay.selectedFolderGuid);
		defaultFolderGuid = gEditItemOverlay.selectedFolderGuid;
	}

	// Save tags selector state
	/*
	let collapsed = panel.querySelector('#editBMPanel_tagsSelectorRow').collapsed;
	if (collapsed != tagsSelectorCollapsed) {
		storage.setBoolPref('tagsSelectorCollapsed', collapsed);
		tagsSelectorCollapsed = collapsed;
	}
	*/
};

// Visible resizer above OK/Cancel buttons
/*
function makeResizer() {
	let el = document.createXULElement('resizer');
	el.setAttribute('dir', 'bottom');
	el.setAttribute('element', 'editBMPanel_folderTreeRow');
	el.style.MozAppearance = 'none';
	el.style.backgroundSize = 'auto';
	el.style.backgroundPosition = 'bottom right';
	el.style.backgroundImage = 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABmJLR0QAUABQAFDGhwvwAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gcVDwIBDNJ+vQAAADdJREFUKM9jYCARMDIwMDD8//+fOMWMjAxMhBQdOHDg/4EDB+AmMg2Mk5CdMYBOwuUM+juJZAAAHy0zBdN01HIAAAAASUVORK5CYII=)';
	el.style.marginTop = '-16px';
	// panel.querySelector('#editBookmarkPanelRows').style.paddingBottom = "0px";
	panel.querySelector('#editBookmarkPanelContent').appendChild(el);
};
*/

// Invisible resizer at the bottom edge of panel
function makeResizer() {
	let el = document.createXULElement('resizer');
	el.setAttribute('dir', 'bottom');
	el.setAttribute('element', 'editBMPanel_folderTreeRow');
	el.style.MozAppearance = 'none';
	el.style.background = 'none';
	el.style.height = '6px';
	el.style.margin = '-2px 0 -4px';
	panel.appendChild(el);
};

function makeFolderContextMenu() {
	let menu = document.createXULElement('menupopup');
	menu.id = 'editBMPanel_folderTree_contextMenu';

	let items = ['rename', 'addNewFolder'];
	if (!settings.useLastSelectedFolderAsDefault)
		items.unshift('setAsDefault');

	for (let item of items) {
		let z = document.createXULElement('menuitem');
		z.setAttribute('label', lang(item));
		z.setAttribute('action', item);
		menu.appendChild(z);
	}

	document.querySelector('#mainPopupSet').appendChild(menu);
	// folderTree.contextMenu = 'editBMPanel_folderTree_contextMenu';

	if (!settings.useLastSelectedFolderAsDefault) {
		menu.firstChild.setAttribute('type', 'checkbox');
		menu.addEventListener('popupshowing', function(e) {
			menu.firstChild.setAttribute('checked', (defaultFolderGuid == gEditItemOverlay.selectedFolderGuid));
		});
	}

	menu.addEventListener('command', onFolderContextMenuCommand);
};

function onFolderContextMenuCommand(e) {
	let g = gEditItemOverlay;
	switch (e.target.getAttribute('action')) {
		case 'setAsDefault':
			storage.setCharPref('defaultFolderGuid', g.selectedFolderGuid);
			defaultFolderGuid = g.selectedFolderGuid;
		break;
		case 'rename':
			g._folderTree.startEditing(g._folderTree.view.selection.currentIndex, g._folderTree.columns.getFirstColumn());
		break;
		case 'addNewFolder':
			g.newFolder();
	}
};

function lang(string) {
	let l = strings[navigator.language];
	return (l && l[string]) ? l[string] : strings['en'][string] ? strings['en'][string] : string;
}

function toggleBookmark() {
	if (BookmarkingUI.status == BookmarkingUI.STATUS_STARRED) {
		let uri = gBrowser.currentURI.spec;
		try { uri = decodeURIComponent(uri); } catch {}
		PlacesUtils.bookmarks.search(uri).then((foundItems) => {
			if (foundItems.length)
				PlacesUtils.bookmarks.remove(foundItems);
		});
	}
	else
		PlacesUtils.bookmarks.insert({url: gBrowser.currentURI.spec, title: gBrowser.contentTitle, parentGuid: defaultFolderGuid});
}


 
Tab Wheel Scroll
Переключение между вкладками вращением колеса мыши.
Код

Выделить код

Код:

(function() {

// FF65-
// let tabbox = document.getElementById('tabbrowser-tabs').arrowScrollbox._scrollbox;

// FF66+
let tabbox = document.getElementById('tabbrowser-tabs').arrowScrollbox.scrollbox;

tabbox.addEventListener('wheel', wheelHandler);

function wheelHandler(event) {
	// Preserve original behaviour if meta (Windows) key is held
	if (event.metaKey) return;

	if (event.deltaY < 0) {
		gBrowser.tabContainer.advanceSelectedTab(-1, false);
	}
	else {
		gBrowser.tabContainer.advanceSelectedTab(1, false);
	}    
	event.stopPropagation();
	event.preventDefault();
}

})();


 
Input Language Assistant
Это аналог старого расширения с таким же названием, и работает точно так же. Поставили курсор в адресную строку - раскладка переключилась на английскую, убрали оттуда курсор - раскладка вернулась к прежней (русской). Работает только на Windows.
Код

Выделить код

Код:

window.inputLanguageAssistant = {

	init: function() {

		let urlbar = document.getElementById('urlbar-input'); // Since FF 68-70 (I don't know exact version)
		if (!urlbar)
			urlbar = document.getElementById('urlbar');
		if (!urlbar)
			return;

		try {
			Components.utils.import("resource://gre/modules/ctypes.jsm");
			this.lib = ctypes.open("user32.dll");
			this.ActivateKeyboardLayout = this.lib.declare("ActivateKeyboardLayout",
														   ctypes.winapi_abi,
														   ctypes.voidptr_t,  // return HKL
														   ctypes.voidptr_t,  // HKL hkl
														   ctypes.uint32_t);  // UINT Flags
			this.KLF_SETFORPROCESS = 0x00000100;
			this.HKL_ENGLISH = ctypes.voidptr_t(0x00000409); // United States (US)
		}
		catch (err) {
			// console.log(err);
		}

		urlbar.addEventListener('focus', function(e) {
			window.inputLanguageAssistant.focus();
		});

		urlbar.addEventListener('blur', function(e) {
			window.inputLanguageAssistant.blur();
		});

	},

	focus: function() {
		try {
			if (this.ActivateKeyboardLayout) {
				this.hkl = this.ActivateKeyboardLayout(this.HKL_ENGLISH, this.KLF_SETFORPROCESS);
			}
		}
		catch (err) {
			// console.log(err);
		}
	},

	blur: function() {
		try {
			if (this.ActivateKeyboardLayout && this.hkl) {
				this.ActivateKeyboardLayout(this.hkl, this.KLF_SETFORPROCESS);
			}
		}
		catch (err) {
			// console.log(err);
		}
	}
};

window.inputLanguageAssistant.init();

Отсутствует

 

№49016-09-2022 19:21:42

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 83
UA: unknown 0.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Yeesha, спасибо!
А у вас подключено через userChrome.js или rebuild_userChrome.uc.js?
У меня на 68 есть загрузчик через userChrome.js, через него не работает. А на основных браузерах параллельно с UCF стоит загрузчик от xiaoxiaoflood, закладки и язык подхватились и работают, проверял на 68, 78 и 102. Жаль, закладки конфликтуют с кастомной кнопкой, изменяющей размер окошка, не знаю, кого из них оставить, и ваш хорош, и тот. А за Input Language Assistant особо спасибо, очень полезная фича. Хотя раньше у меня её не было, были две кнопки в доквантумном браузере, из которых я сделал одну - указание цветом в поле, какой язык сейчас включён, и индикатор на тулбаре. У вас случайно какой-нибудь из них нет под квантум?
Код для вкладок не проверял, мне такая фича неудобна.

Отсутствует

 

№49116-09-2022 20:19:40

Yeesha
Участник
 
Группа: Members
Зарегистрирован: 23-08-2008
Сообщений: 356
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

kazarin, через userChrome.js, про rebuild не знаю

У вас случайно какой-нибудь из них нет под квантум?

Увы, нет

Отредактировано Yeesha (16-09-2022 20:28:47)

Отсутствует

 

№49216-09-2022 21:38:06

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 83
UA: unknown 0.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Yeesha
Через rebuild_userChrome.uc.js это у Ксяо, нужен этот файл и папка utils в chrome (я третий метод использую), и код в config.js. Скрипты просто кладутся рядом и сами подхватываются.

Отсутствует

 

№49317-09-2022 01:41:38

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1160
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Попробовал поставить "новый" UCF. До кнопок пока не добрался, попробовал стили. Мои все заработали, кроме одного. В нём можно было регулировать ширину боковой и высоту доп.панелей. С "новым" UCF не работает или я его не туда воткнул.

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

Выделить код

Код:

/* Сжать доп.панели https://forum.mozilla-russia.org/viewtopic.php?pid=775867#p775867 */
#add-additional-top-bar,
#add-additional-bottom-bar {
    --toolbarbutton-outer-padding: 2px !important; /* было 0px */
    --toolbarbutton-inner-padding: 2px !important;
    min-height: 20px !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;
}
#add-additional-bottom-closebutton {
    padding: 0 !important;
}
#add-additional-vertical-bar {
    --toolbarbutton-outer-padding: 2px !important; /* было 0px */
    --toolbarbutton-inner-padding: 3px !important;
    min-width: 20px !important;
}
#add-additional-vertical-bar .toolbarbutton-badge {
    margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important;
}


Как ширину/высоту панелей отрегулировать в "новом" UCF?

Отсутствует

 

№49417-09-2022 03:03:41

kazarin
Участник
 
Группа: Members
Зарегистрирован: 23-11-2016
Сообщений: 83
UA: unknown 0.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

xrun1
С нижней я сделал так:

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

Выделить код

Код:

#ucf-additional-bottom-bar {
      margin-bottom: -4px !important;
 }


Вертикальная меня устраивает (она прозрачная и автоскрывается), но, наверно, можно попробовать margin-left.

Отсутствует

 

№49517-09-2022 05:45:54

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 396
UA: Firefox 104.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Опять в Firefox 103+ перестал работать скрипт от Виталия - нужно скрывать панель вкладок, если открыта одна вкладка.
Dumby - может починишь код menubarVisibilityChance.js или переделаешь, чтобы работало автоскрытие панели вкладок на FF90+ ?

Выделить код

Код:

var menubarvisibilitychance = {
	buttons: null,
	buttonsfullscreen: null,
	init(that) {
		var menubar = this.menubar = document.querySelector("#toolbar-menubar");
		if (!menubar) return;
		this.autohidechange = new MutationObserver(() => {
			this.settoolbarvisibility();
		});
		this.autohidechange.observe(menubar, {
			attributeFilter: ["autohide", "inactive"],
			attributes: true,
		});
		this.sizemodechange = new MutationObserver(() => {
			this.setbuttonboxwidth();
		});
		this.sizemodechange.observe(document.documentElement, {
			attributeFilter: ["sizemode"],
			attributes: true,
		});
		that.unloadlisteners?.push("menubarvisibilitychance");
		this.settoolbarvisibility();
	},
	settoolbarvisibility() {
		var docElm = document.documentElement;
		if (this.menubar.getAttribute("autohide") == "true" && this.menubar.getAttribute("inactive") == "true") {
			docElm.setAttribute("v_menubar_autohide", true);
			this.setbuttonboxwidth();
		} else
			docElm.setAttribute("v_menubar_autohide", false);
	},
	width(outerRect, innerRect) {
		if (!window.RTL_UI)
			this.width = (outerRect, innerRect) => outerRect.right - innerRect.left;
		else
			this.width = (outerRect, innerRect) => innerRect.right - outerRect.left;
		return this.width(outerRect, innerRect);
	},
	setbuttonboxwidth() {
		var buttons, docElm = document.documentElement;
		if (docElm.getAttribute("sizemode") != "fullscreen")
			buttons = (this.buttons || (this.buttons = this.menubar.querySelector(".titlebar-buttonbox-container")));
		else
			buttons = (this.buttonsfullscreen || (this.buttonsfullscreen = document.querySelector("#window-controls")));
		var innerRect = buttons.getBoundingClientRect();
		if (innerRect.width < 1) {
			docElm.style.setProperty("--v-titlebar-buttonbox-container-width", "0px");
			return;
		}
		var outerRect = docElm.getBoundingClientRect();
		docElm.style.setProperty("--v-titlebar-buttonbox-container-width", `${this.width(outerRect, innerRect)}px`);
	},
	destructor() {
		this.autohidechange.disconnect();
		this.sizemodechange.disconnect();
		this.autohidechange = null;
		this.sizemodechange = null;
	}
};
menubarvisibilitychance.init(this);

Отсутствует

 

№49617-09-2022 08:18:57

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov пишет

Так нормально?

В комментарий прокралась опечатка: «слилей».

может починишь код menubarVisibilityChance.js или переделаешь, чтобы работало автоскрытие панели вкладок

Не понял просьбу. menubar это не панель вкладок.


xrun1 пишет

Как ширину/высоту панелей отрегулировать в "новом" UCF?

kazarin верно намекает, что в "новом" UCF
id тулбаров префиксятся с ucf- а не с add-

Отсутствует

 

№49717-09-2022 09:59:09

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 396
UA: Firefox 97.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

Не понял просьбу. menubar это не панель вкладок.

Ну, именно этот этот код автоскрывает панель вкладок, но на FF103+ не пашет.

Отсутствует

 

№49817-09-2022 10:30:05

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov пишет

именно этот этот код автоскрывает панель вкладок

Нет, он этого не делает. Он вообще ничего не автоскрывает.


Код следит за атрибутами "autohide" и "inactive" toolbar-menubar'а,
и за атрибутом "sizemode" корневого элемента документа (<html>).


И, при изменении этих атрибутов, устанавливает для <html>
значение атрибута "v_menubar_autohide" и в его атрибуте "style"
устанавливает часть именуемую "--v-titlebar-buttonbox-container-width".


Вот и всё. Если у тебя какой-то стиль повешен на эти атрибуты, то где стиль?

Отсутствует

 

№49917-09-2022 10:32:49

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 396
UA: Firefox 97.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

при изменении этих атрибутов, устанавливает для <html>
значение атрибута "v_menubar_autohide" и в его атрибуте "style"
устанавливает часть именуемую "--v-titlebar-buttonbox-container-width".

Вот и всё. Если у тебя какой-то стиль повешен на эти атрибуты, то где стиль?

Так как этот стиль связан с кодом, привожу стиль от Виталия здесь:

Выделить код

Код:

@-moz-document url("chrome://browser/content/browser.xhtml") {
:root { /* вкладки снизу: стиль плюс скрипты https://forum.mozilla-russia.org/viewtopic.php?pid=784310#p784310 */
    --v-toolbar-menubar-height: 28px; /* высота панели меню, только чётные числа не меньше 20px для macos = 0
    если изменяете эту переменную то и в --v-toolbar-menubar-height-content - атрибут height= нужно установить ровно в два раза больше*/
    --v-toolbar-menubar-height-content: url("data:image/svg+xml,<svg width='28' height='56' xmlns='http://www.w3.org/2000/svg'><rect x='0' y='0' width='100%' height='100%' style='fill:transparent;'/></svg>");  /* height='2 * --v-toolbar-menubar-height' */
    --tab-border-radius: 4px !important;

    /* **************************************** */
    --proton-tab-block-margin: 0px !important;
    --tab-block-margin: 0px !important;
    --tabs-navbar-shadow-size: 0px !important;
}
#navigator-toolbox {
    border-block: none !important;
    box-shadow: none !important;
    padding-top: 0 !important;
    -moz-appearance: none !important;
    appearance: none !important;
}
:root:not([inFullscreen])[tabsintitlebar] #navigator-toolbox {
    position: relative !important;
}
#navigator-toolbox > toolbar {
    -moz-box-ordinal-group: 10 !important;
}
#navigator-toolbox > #nav-bar {
    margin-block: 0 !important;
    box-shadow: none !important;
    -moz-box-ordinal-group: 0 !important;
    padding-inline: 0 !important;
}
:root:not([inFullscreen]) #navigator-toolbox > #nav-bar {
    margin-top: var(--v-toolbar-menubar-height) !important;
}
#navigator-toolbox > #PersonalToolbar {
    -moz-box-ordinal-group: 1 !important;
}
:root:not([inFullscreen])[tabsintitlebar] > *|body::before {
    content: var(--v-toolbar-menubar-height-content) !important;
    display: -moz-box !important;
    -moz-box-flex: 0 !important;
    -moz-box-orient: vertical !important;
    -moz-box-pack: start !important;
    -moz-box-align: stretch !important;
    -moz-box-ordinal-group: 0 !important;
    margin-bottom: calc(-2 * var(--v-toolbar-menubar-height)) !important;
    box-sizing: content-box !important;
}
:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] > *|body::before {
    -moz-appearance: -moz-window-titlebar !important;
    appearance: -moz-window-titlebar !important;
}
:root:not([inFullscreen])[tabsintitlebar][sizemode="maximized"] > *|body::before {
    -moz-appearance: -moz-window-titlebar-maximized !important;
    appearance: -moz-window-titlebar-maximized !important;
}
:root:not([inFullscreen])[tabsintitlebar]:-moz-lwtheme > *|body::before {
    visibility: hidden !important;
}
@media not all and (-moz-os-version: windows-win7) {
    @media not all and (-moz-os-version: windows-win8) {
:root:-moz-lwtheme {
    background-color: var(--lwt-accent-color, -moz-Dialog) !important;
}
:root:-moz-window-inactive:-moz-lwtheme {
    background-color: var(--lwt-accent-color-inactive, var(--lwt-accent-color, -moz-Dialog)) !important;
}
    }
}
#navigator-toolbox > #titlebar {
    -moz-appearance: none !important;
    appearance: none !important;
    -moz-box-ordinal-group: 100 !important;
    position: static !important;
}
#toolbar-menubar {
    padding-block: 0 !important;
    margin-block: 0 !important;
    border: none !important;
    background: none !important;
    --toolbarbutton-outer-padding: 0px !important;
    --toolbarbutton-inner-padding: calc((var(--v-toolbar-menubar-height) - 16px) / 2) !important;
    -moz-appearance: none !important;
    appearance: none !important;
}
:root:not(:is([inFullscreen],[chromehidden~="menubar"])) #toolbar-menubar {
    position: absolute !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    display: flex !important;
    flex-wrap: nowrap !important;
    flex-direction: row !important;
    align-items: stretch !important;
    justify-content: flex-start !important;
    min-height: 0 !important;
    height: var(--v-toolbar-menubar-height) !important;
    overflow: hidden !important;
}
#toolbar-menubar .toolbarbutton-badge {
    margin-inline-end: calc(-1 * (var(--toolbarbutton-outer-padding) + var(--toolbarbutton-inner-padding))) !important;
}
:root:not([inFullscreen]) #toolbar-menubar > :is(toolbaritem,toolbarbutton) {
    align-self: center !important;
}
:root:not([inFullscreen]) #toolbar-menubar > :is(#menubar-items,#wrapper-menubar-items,.titlebar-buttonbox-container) {
    align-self: flex-start !important;
}
:root:not([inFullscreen]) #toolbar-menubar > * {
    padding-block: 0 !important;
    margin-block: 0 !important;
}
:root:not([inFullscreen]) #toolbar-menubar[autohide="true"][inactive="true"]:not([customizing="true"]) > *:not(.titlebar-buttonbox-container) {
    opacity: 0 !important;
    pointer-events: none !important;
}
:root[inFullscreen] #toolbar-menubar {
    visibility: collapse !important;
}
:root:not([inFullscreen]) #toolbar-menubar > :is(*[style*="-moz-box-ordinal-group: 1000;"],.titlebar-buttonbox-container) {
    order: 1000 !important;
}
:root:not([inFullscreen]) #toolbar-menubar > :is(toolbarspring,spacer,[id^="wrapper-customizableui-special-spring"]) {
    flex-grow: 1 !important;
}
:root:not([inFullscreen]) #toolbar-menubar > :is(#search-container,#wrapper-search-container) {
    flex-grow: 100 !important;
}
#toolbar-menubar #search-container {
    padding-block: 0 !important;
}
#toolbar-menubar #searchbar {
    min-height: calc(var(--v-toolbar-menubar-height) - 2px) !important;
}
#TabsToolbar {
    -moz-appearance: none !important;
    appearance: none !important;
    padding-block: 0 !important;
    margin-block: 0 !important;
    box-shadow: 0 -1px 0 var(--tabs-border-color, rgba(0,0,0,.3)) inset !important;
    position: static !important;
    background-color: var(--toolbar-bgcolor, -moz-dialog) !important;
    background-image: var(--toolbar-bgimage, none) !important;
    color: var(--toolbar-color, -moz-dialogtext) !important;
    --lwt-toolbarbutton-icon-fill: inherit !important;
}
#tabbrowser-tabs {
    padding-bottom: 0 !important;
    margin-bottom: 0 !important;
}
.tabbrowser-tab {
    background-color: transparent !important;
    border-top: none !important;
}
.tab-background {
    border-end-end-radius: 0 !important;
    border-end-start-radius: 0 !important;
    margin-block-start: 1px !important;
}
:root:not(:-moz-lwtheme) .tab-background {
    --toolbar-bgimage: none;
    --toolbar-non-lwt-bgimage: none;
}
#TabsToolbar > .toolbar-items {
    padding-top: 0 !important;
    margin-top: 0 !important;
}
.tabbrowser-tab[usercontextid] .tab-context-line {
    margin-block: 0 !important;
    margin-inline: calc(var(--tab-border-radius) / 2) !important;
}
#TabsToolbar .titlebar-buttonbox-container,
#navigator-toolbox::after,
#TabsToolbar::after,
#TabsToolbar .titlebar-spacer:is([type="pre-tabs"],[type="post-tabs"]) {
    display: none !important;
}
#scrollbutton-up, #scrollbutton-down {
    border-block: none !important;
    border-end-end-radius: 0 !important;
    border-end-start-radius: 0 !important;
}
:root[inFullscreen] #window-controls {
    position: absolute !important;
    display: flex !important;
    align-items: start !important;
    top: 0 !important;
    inset-inline-start: auto !important;
    inset-inline-end: 0 !important;
    margin: 0 !important;
}
:root[inFullscreen] #navigator-toolbox > #nav-bar {
    margin-inline-end: var(--v-titlebar-buttonbox-container-width, 108px) !important;
}
:root:not([inFullscreen])[v_menubar_autohide="true"] #navigator-toolbox > #nav-bar {
    margin-top: 0 !important;
    margin-inline-end: var(--v-titlebar-buttonbox-container-width, 108px) !important;
}
:root:not([inFullscreen])[v_menubar_autohide="true"] #toolbar-menubar {
    pointer-events: none !important;
}
:root:not([inFullscreen])[v_menubar_autohide="true"] #toolbar-menubar .titlebar-buttonbox-container {
    pointer-events: auto !important;
}
@media (-moz-os-version: windows-win7), (-moz-os-version: windows-win8) {
:root[sizemode="normal"] #TabsToolbar {
    border-inline: 1px solid hsla(240,5%,5%,0.3) !important;
    background-clip: padding-box !important;
}
    @media (-moz-windows-classic: 0) {
:root:not([inFullscreen])[v_menubar_autohide="true"][tabsintitlebar][sizemode="normal"] #navigator-toolbox > #nav-bar {
    margin-top: 1px !important;
}
:root:not([inFullscreen])[sizemode="normal"] #toolbar-menubar:not([autohide="true"]) > #menubar-items {
    margin-top: 1px !important;
}
    }
}
@media (-moz-windows-classic) {
:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #navigator-toolbox::before {
    content: "" !important;
    display: -moz-box !important;
    height: 4px !important;
    -moz-box-ordinal-group: 0 !important;
    visibility: visible !important;
}
:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"]:-moz-lwtheme #navigator-toolbox::before {
    background-image: linear-gradient(to bottom, ThreeDLightShadow 0, ThreeDLightShadow 1px, ThreeDHighlight 1px, ThreeDHighlight 2px, ActiveBorder 2px, ActiveBorder 4px, transparent 4px) !important;
}
:root:not([inFullscreen])[tabsintitlebar][sizemode="normal"] #toolbar-menubar {
    margin-top: 4px !important;
}
}
:root[data-l10n-id="browser-main-window-mac"] {
    --v-toolbar-menubar-height: 0px !important;
    --v-toolbar-menubar-height-content: none !important;
}
:root:not([inFullscreen])[tabsintitlebar][data-l10n-id="browser-main-window-mac"] #nav-bar {
    margin-inline-start: calc(var(--toolbarbutton-outer-padding, 2px) + var(--v-titlebar-button-horizont-padding, 6px) * 6 + var(--v-titlebar-button-image-width, 12px) * 3) !important;
}
:root:not([inFullscreen])[tabsintitlebar][data-l10n-id="browser-main-window-mac"] #TabsToolbar .titlebar-buttonbox-container {
    visibility: visible !important;
    display: -moz-box !important;
    position: absolute !important;
    display: flex !important;
    top: 0 !important;
}
}

Отсутствует

 

№50017-09-2022 11:16:54

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dobrov пишет

привожу стиль

Ну и где там хоть что-то про автоскрытие панели вкладок (TabsToolbar)?

Отсутствует

 

Board footer

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