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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№45102-09-2022 23:23:26

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

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

kazarin пишет

toolbarbutton_0.addEventListener("click"

Это-то зачем, type = "menu" вполне достаточно.
Неиспользуемое долой.

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

Выделить код

Код:

(async data => CustomizableUI.createWidget({
	id: "FFTools",
	label: "FFTools",
	localized: false,
	onCreated(btn) {
		var doc = btn.ownerDocument;
		var n = nn => doc.createXULElement(nn);

		btn.type = "menu";
		btn.setAttribute("image", "data:image/png;base64,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");

		var popup = n("menupopup"), dummy = n("menuitem");
		popup.toggleAttribute("context");
		dummy.n = n;
		dummy.render = this.render;

		popup.append(dummy);
		btn.prepend(popup);

		var tt = btn.appendChild(n("box")).appendChild(n("tooltip"));
		tt.btn = dummy.btn = btn;
		tt.setAttribute("onpopupshowing", "return !(this.btn.open = true);");
		btn.setAttribute("tooltip", tt.id = btn.id + "-tooltip");
	},
	render() {
		var {n, btn, parentNode: popup} = this;
		this.remove();

		for(var o of data) {
			if (!o) {
				popup.append(n("menuseparator"));
				continue;
			}
			var {lab, url, img} = o;
			var menuitem = n("menuitem");
			
			menuitem.setAttribute("label", lab || url);
			if (img)
				menuitem.className = "menuitem-iconic",
				menuitem.setAttribute("image", img);
			menuitem.url = url;
			popup.append(menuitem);
		}
		popup.setAttribute(
			"oncommand", 
			"gBrowser.selectedTab = gBrowser.addTrustedTab(event.target.url);"
		);
	}
}))([{
	url: "about:config",
	img: "chrome://browser/skin/developer.svg"
},{
	lab: "about:config old",
	url: "chrome://global/content/config.xhtml",
	img: "chrome://browser/skin/developer.svg"
},{
	url: "about:support",
	img: "chrome://global/skin/icons/info.svg"
},{
	url: "about:performance",
	img: "chrome://global/skin/icons/performance.svg"
},{
	url: "about:memory",
	img: "chrome://global/skin/icons/warning.svg"
},{
	url: "about:profiling",
	img: "chrome://devtools/skin/images/profiler-stopwatch.svg"
},{
	lab: "about:debugging",
	url: "about:debugging#/runtime/this-firefox",
	img: "chrome://browser/skin/developer.svg"
},
null,{
	lab: "Библиотека",
	url: "chrome://browser/content/places/places.xhtml",
	img: "chrome://browser/skin/library.svg"
},{
	lab: "О сборочной конфигурации",
	url: "about:buildconfig",
	img: "chrome://devtools/skin/images/settings.svg"
}]);


P.S. Если в UA поста вопроса гуглятина,
то хорошая практика — указывать о какой версии Firefox речь.

Отсутствует

 

№45203-09-2022 01:16:29

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

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

Dumby
Так откуда ж мне знать, что оно неиспользуемое:(
Большое спасибо! Прекрасно работает.
За юзерагент извиняюсь, проверял кое-что и забыл сменить. Обычно стараюсь ставить на актуальный. когда что-то спрашиваю. Пользуюсь обычно 78 и 101. Хотя вообще у меня их много.
А можно ещё спросить, как сделать такое же, но для папок виндовс? Вариантов кнопок, открывающих одну папку, много, а хотелось бы одну кнопку на всех.

Опять... агент сменил, а страницу не обновил:dumb:

Отредактировано kazarin (03-09-2022 01:18:50)

Отсутствует

 

№45303-09-2022 23:36:59

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

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

kazarin пишет

А можно ещё спросить, как сделать такое же, но для папок виндовс?

Что-то не слишком подробный вопрос. Может типа как-то так

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

Выделить код

Код:

(async data => CustomizableUI.createWidget({
	id: "WinFolders",
	label: "Some Label",
	localized: false,
	onCreated(btn) {
		var doc = btn.ownerDocument;
		var n = nn => doc.createXULElement(nn);

		btn.type = "menu";
		btn.setAttribute("image", this.image);

		var popup = n("menupopup"), dummy = n("menuitem");
		popup.toggleAttribute("context");
		dummy.n = n;
		dummy.render = this.render;

		popup.append(dummy);
		btn.prepend(popup);

		var tt = btn.appendChild(n("box")).appendChild(n("tooltip"));
		tt.setAttribute("onpopupshowing", "return !(this.btn.open = true);");
		btn.setAttribute("tooltip", tt.id = (tt.btn = btn).id + "-tooltip");
	},
	render() {
		var {n, parentNode: popup} = this;
		this.remove();

		for(var o of data) {
			if (!o) {
				popup.append(n("menuseparator"));
				continue;
			}
			var {lab, file, img} = o;
			var menuitem = n("menuitem");

			menuitem.setAttribute("label", lab || file.leafName);
			menuitem.className = "menuitem-iconic";
			menuitem.setAttribute("image", img || "moz-icon://file:///" + file.path);
			menuitem.tooltipText = file.path;

			menuitem.file = file;
			popup.append(menuitem);
		}
		popup.setAttribute(
			"oncommand", 
			'var {file} = event.target; file.exists() ? file.reveal() : Services.prompt.alert(null, "Not found!", file.path);'
		);
	},
	get image() {
		var sym = Symbol.iterator;
		data[sym] = () => {
			delete data[sym];
			var it = data[sym](), {next} = it;
			var f = Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath");
			it.next = () => {
				var res = next.call(it), obj = res.value;
				if (obj) {
					var {file} = obj;
					//if (typeof file == "function") obj.file = obj.file(f);
					if (typeof file == "string") {
						var ind = file.indexOf("\\"), has = ind > 0;
						var root = has ? file.slice(0, ind) : file;
						if (root.length > 2)
							file = Services.dirsvc.get(root, Ci.nsIFile).path
								+ (has ? file.slice(ind) : "");
						obj.file = f(file);
					}
				}
				return res;
			}
			return it;
		}
		delete this.image;
		return this.image = "chrome://browser/skin/save.svg";
	}
}))([{

	file: "WinD"
},{
	lab: "Автозагрузка",
	file: "Progs\\Startup"
},{
	file: "SysD\\drivers\\etc"
},
null, {
	lab: "Fox",
	file: "GreD",
	img: "chrome://branding/content/icon16.png"
},{
	file: "UChrm\\user_chrome_files\\custom_scripts",
	img: "data:image/svg+xml, <svg xmlns='http://www.w3.org/2000/svg' fill='%23fee082' stroke='%23b28501'><path d='M 7.7500004,3.5 H 13.5 a 2,2 45 0 1 2,2 v 7 a 2,2 135 0 1 -2,2 h -11 a 2,2 45 0 1 -2,-2 v -9 a 2,2 135 0 1 2,-2 H 5.0000004 A 1.3150997,1.3150997 20.81677 0 1 5.8737051,1.8321819 L 7.7500004,3.5 5.8737051,5.1678181 A 1.3150997,1.3150997 159.18323 0 1 5.0000004,5.5 H 0.5'/></svg>"
},{
	file: "D:\\Folder\\SubFolder"
}]);

Отсутствует

 

№45404-09-2022 00:29:38

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

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

Dumby
Да-да, я именно это имел в виду! Огромнейшее спасибо! Ужасно не хватало такой кнопки.

Отсутствует

 

№45507-09-2022 14:31:26

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

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

Dumby пишет

Настройки — about:llc

Как переместить эту закладку на панель навигации ?


Win7

Отсутствует

 

№45608-09-2022 10:11:46

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

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

kokoss пишет

Как переместить эту закладку на панель навигации ?

как вариант добавить в эту кнопку код:

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

Выделить код

Код:

},{
	lab: "LLC Config",
	url: "about:llc",
	img: "resource://long_left_click/svg/long-click.svg"


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

Отсутствует

 

№45708-09-2022 13:24:56

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

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

kokoss пишет

Как переместить эту закладку на панель навигации ?

Никак. Закладка — это же всего лишь запись в places.sqlite,
её нельзя переместить на панель навигации.

Отсутствует

 

№45808-09-2022 15:59:17

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

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

Farby пишет

как вариант добавить в эту кнопку код:
скрытый текст

Мне для этого достаточно и дефолтной кнопки "Закладки", но это не то.

Dumby пишет

Никак.

Ясненько.


Win7

Отсутствует

 

№45910-09-2022 01:40:43

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

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

Dumby
Извините, что снова о том же, но что надо изменить в скриптах-кнопочках, чтоб они завелись на 68? Замечательно работают на 78 и выше, но хотелось бы, чтоб и там тоже.
(почему именно на 68, это форк квантумной лисы, работающей на XP, но на ней работают и все те же кнопки и скрипты, что и на обычном 68, только один скрипт за всё время не завёлся, видимо, обращается именно к изменённой части)

Отсутствует

 

№46010-09-2022 13:09:28

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

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

kazarin пишет

68, это форк квантумной лисы

Уж не знаю что за форк, а на квантумной лисе 68
<toolbarbutton>-добро построено на XBL, значит такая правка

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

Выделить код

Код:

…
		//btn.type = "menu";
		btn.setAttribute("type", "menu");

Отсутствует

 

№46110-09-2022 19:41:30

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

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

Dumby
Одна-единственная строчка разницы... поразительно.
Огромное вам спасибо ещё раз! Всё работает.

Отсутствует

 

№46210-09-2022 21:25:49

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

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

Dumby
Сделайте пожалуйста что бы этот скрипт отрывал историю и закладки рядом с текущей вкладкой!
Add, и что бы работал в UCF/2021-6-5. И желательно что бы был выбор, открывать рядом с текущей или в новой!

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


Win7

Отсутствует

 

№46311-09-2022 10:23:45

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

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

kokoss пишет

Сделайте пожалуйста что бы этот скрипт отрывал историю и закладки рядом с текущей вкладкой!

Дело в том, что «этот скрипт» ничего не открывает,
он просто меняет метод BrowserUtils.whereToOpenLink().
Можно попробовать "TabOpen" послушать чтобы вкладку подвинуть,
но это как-то нестрого, нужно тестировать.

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

Выделить код

Код:

(async url => {
	try {var exp = ChromeUtils.importESModule(url + "sys.mjs");}
	catch {exp = ChromeUtils.import(url + "jsm");}
	var bu = exp.BrowserUtils, {whereToOpenLink} = bu;

	var ts, ind;
	var args = ["TabOpen", e => Cu.now() - ts < 100
		&& e.target.ownerGlobal.gBrowser.moveTabTo(e.target, ind)
	, {once: true}];

	var rn = Ci.nsINavHistoryResultNode, notRn = o => !(o instanceof rn);

	bu.whereToOpenLink = function(e) {
		var beg, res = whereToOpenLink.apply(bu, arguments);
		if (!Event.isInstance(e) || "ws".includes(beg = res[0])) return res;
		try {
			var trg = e.composedTarget, win = trg.ownerGlobal;
			var node = trg._placesNode;
			if (notRn(node)) {
				node = trg.closest("tree")?.selectedNode;
				if (notRn(node)) return res;
				win = win.BrowserWindowTracker.getTopWindow();
			}
			//if ((e.button == 1 || e.ctrlKey) && res == "tab") return "current";

			var gb = win.gBrowser;
			if (beg == "c") {
				if (gb.selectedTab.isEmpty || node.uri.startsWith("javascript:"))
					return res;
				res = "tab";
			}
			if (res.startsWith("t")) {
				ts = Cu.now();
				ind = gb.selectedTab._tPos + 1;
				gb.tabContainer.addEventListener(...args);
			}
			return res;
		}
		catch(ex) {return res;}
	}
})("resource://gre/modules/BrowserUtils.");

желательно что бы был выбор, открывать рядом с текущей или в новой

Прости великодушно, но я слишком глуп чтобы такие загадки разгадывать.
Это ещё более(!) непонятно, чем «переместить закладку на панель навигации».

Отсутствует

 

№46411-09-2022 13:27:25

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

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

Dumby пишет

Можно попробовать "TabOpen" послушать чтобы вкладку подвинуть,
но это как-то нестрого, нужно тестировать.
скрытый текст

Благодарю :beer:, работает, а если нужно что бы открывало в новой вкладке, то изменяем "TabOpen" на "whereToOpenLink".


Win7

Отсутствует

 

№46511-09-2022 23:39:09

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

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

Dumby возможно ли сделать из этого расширения https://www.upload.ee/files/14493725/do … s.xpi.html кнопку для UCF что бы закачки передавались в портативный Download Master

Отсутствует

 

№46612-09-2022 21:14:56

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

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

Тут потребовалось, а оказалось, что у меня не работает.
1. Вопрос-подтверждение "Удалить закладку/папку?" Сам скрипт выше.

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

Выделить код

Код:

(async repl => {
  var obj = `{\n  ${
    (await (await fetch("chrome://browser/content/places/controller.js")).text())
      .match(/async _removeRange\(.+?\n\ +}(?=,\n)/s)[0]
      .replace("// This is a common bookmark item.", repl)
  }\n}`
  var ps = await ChromeUtils.compileScript("data:,(" + encodeURIComponent(`${obj => {
    var patch = async ctor => {
      var proto = ctor.prototype, meth = proto?._removeRange;
      meth && Object.assign(proto, obj);
    }
    var key = "PlacesController";
    var desc = Object.getOwnPropertyDescriptor(window, key);
    if (!desc) return;

    var {get} = desc;
    if (get)
      desc.get = () => {
        var val = get();
        patch(val);
        return val;
      },
      Object.defineProperty(window, key, desc);
    else
      patch(desc.value);
  }})(${obj});`));

  var obs = doc => "PlacesController" in doc.ownerGlobal && ps.executeInGlobal(doc);
  var topic = "chrome-document-loaded";
  Services.obs.addObserver(obs, topic);
  Services.obs.addObserver(function quit(s, t) {
    Services.obs.removeObserver(quit, t);
    Services.obs.removeObserver(obs, topic);
  }, "quit-application-granted");
})(
    `$&
        if (!removedFolders.ignore) {
/*
          let info = await PlacesUtils.bookmarks.fetch(node.bookmarkGuid);
*/
          let args = [node.bookmarkGuid];
          let isBookmark = PlacesUtils.nodeIsBookmark(node);

          isBookmark && args.push(null, {includePath: true});
          let info = await PlacesUtils.bookmarks.fetch(...args);
          if (isBookmark) info.parentGuid = info.path[0].guid;
          if (
            info?.parentGuid == "${PlacesUtils.bookmarks.toolbarGuid}" &&
            !(removedFolders.ignore ??= Services.prompt.confirm(
              null, null, "Удалить закладку/папку?"
            ))
          ) {
            totalItems--;
            continue;
          }
        }`
);


2. "Восстановить удалённое". Ссылки в коде.
скрытый текст

Выделить код

Код:

// Исходная версия https://github.com/alice0775/userChrome.js/blob/master/undoBookmarksContextMenu.uc.js
// более свежая https://github.com/alice0775/userChrome.js/blob/master/91/undoBookmarksContextMenu.uc.js
// Версия _zt https://forum.mozilla-russia.org/viewtopic.php?pid=792868#p792868
// Версия ВВП https://forum.mozilla-russia.org/viewtopic.php?pid=798662#p798662
// Это вариант от Dumby https://forum.mozilla-russia.org/viewtopic.php?pid=798678#p798678
// иконка моя
(async sep => {
  if (!sep) return;

  var key = "hasRemoveTransaction";
  var g = Cu.import("resource://gre/modules/PlacesTransactions.jsm", {});
  if (!g[key]) {
    Services.scriptloader.loadSubScript(
      `data:,this.${key}=TransactionsHistory.proxifiedToRaw;`, g
    );
    var raws = g[key];
    g[key] = entry => {
      for(var tr of entry)
        if (raws.get(tr) instanceof PlacesTransactions.Remove)
          return true;
    }
  }
  var menuitem = document.createXULElement("menuitem");
  for(var args of Object.entries({
    closemenu: "single",
    class: "menuitem-iconic",
    id: "placesCmd_undoRemove",
    label: "Восстановить удалённое",
    oncommand: "PlacesTransactions.undo().catch(Cu.reportError);",
    image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAEd0lEQVRIx53Ve2yW5RkG8N/7ft8Hxa/9CgjSSDnMA4xVTUMQWzadhzhnjSCC0y0jSjom+JdGp844ZhSjHLJsowaNZoCCHOWglXGoQbo2fBW3obDNUBfXKpsUVhxn6OHdH8+31GXGmL3/3M913ffzPNed93qeBxvmI8umCNjyPFEDSRJw40qKa9jyHSbdzY77Ar+9FTvZ+nHAb9T7P76YcwlOktlBdJia2SSthfRvaR/Mync5tp85Q2mbEHJ/X0bqRTpOBJyehog3C3j1HV9RQP91xG9T8z2SofyphMELWH4zW5s40s7kQ/T0cnYfXfPD1OgM0TlGzSN1DZkzxG1EdURjaa9HCfddEupfuSkIfHXJ5wVENA8Iw9QcRnbzXj31++g8w+WVZHMhXzaKhu2MGMtd36f5CTrn8WAJyf001KCYpA6dDBtLlOfoYuI6kgp6XuLsbhQRfw39ovDPx7/JgYS1b3NkCxcvoPgTevIULyFVTm4jyinp4uRJiirYt5BMLc15kvE0lnCsgZaE2wdx6LVCo9/ghQn4LhdFxEOonELv8ogVV9Iyjd9fx8T1FE2nq5XSQWQuJbsmrJH9JclMsldhFsW3EU0iuxsb6f9zTA3dHj1J1yPsKaPrIOtnkn6KDY2cvYF/vkfmINGuiPdnUD6Pd/7Mur/x0RCqXqTfj+m5glyO1B8ovR1pijeil6KvBw8V1QaB/QYWzNgSYu+TmMm5GVhKT47OBWR28kgnvxvKS/OjvuMGuTSr72FtBR/WctNe4l+H3GUt7DxB2TKe+CmnF5IZRzSZzFmS4wy9n2QGY2eR3Mx193DqAao+4vh04lZS2/EkQyqo7cWux4Kjwf4gKF3N5hEs+QsLlwVuVRPLP2FeTSh95hZSpSx6OOAkwWCWLSEqYWVz4JtLqd3GiuX0/oS6XKjd/BQbF6SRJynij4eJKpl7WSg8cCdzxjHjH3QuIsaorQx7NCx8QQdxCYM2kzxL423BbGN6SP+I6tmcO86hahqu4MA2To3mX+eTxbA2er6VJjcA/Yl2kOzlrutJxrDraaI1XH09j3fQVk7pcG5sCgIOttLVzejpmMPrnxJvYnIZXelwxGHTCOaX0PorsmUMOC/wpeNofg4fjg9EW3+k6CzcYJ99M7h6fSfxFFJrMZzFm0I+fzXxlTQ1EHf3eSlJyI3mlYGs/yEPx4F7/NkQ11zEymFhnDoY9RnwcHmIZ34Q1CcTkBD9FSM58gu8SmUHbmVuJbYRt2AiE/cwZT/tG3h+Gh29lH3A+VPZ+zMq1rHwcq6tY1U31ReQXPgFt3M+/9+xJRvM9f5S3NnX6btLqfqYt1p44xQrFnH0aX6zmBXIj+Hae0N95qG+ea/PJjrB7tV47csE7CzEJqKXyTcW8CquaibfwTOX0FjPLSfYk+G8XWyb+rlTUcndVUQjWXOK+FiBn/QfQen/FVBVVdhoc4FIkczqM5WBvPMWp4fQMpzFHeEN2NCFCcyNSH2b1AiSl3nhVnrnkjpNkqP9jrBvdzX8G2rIlxvMK3a7AAAAInpUWHRTb2Z0d2FyZQAAeNorLy/Xy8zLLk5OLEjVyy9KBwA22AZYEFPKXAAAAABJRU5ErkJggg==",
  }))
    menuitem.setAttribute(...args);

  var desc = Object.getOwnPropertyDescriptor(XULElement.prototype, "hidden");
  var {set} = desc;
  desc.set = () => {
    var entry = PlacesTransactions.topUndoEntry;
    var vis = entry && g[key](entry);
    vis && menuitem.removeAttribute("disabled");
    set.call(menuitem, !vis);
  }
  Object.defineProperty(menuitem, "hidden", desc);
  sep.before(menuitem);
})(document.getElementById("placesContext_deleteSeparator"));


Поделитесь, кто пользуется и у кого работает.

Отсутствует

 

№46713-09-2022 01:58:37

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

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

xrun1 пишет

Поделитесь, кто пользуется и у кого работает.

Вопрос на удаление работал, но зачем нужен? Только время отнимает.

2. второй очень полезный: пережал иконку в Восстановить закладки, сократив на 800 байт.

Отсутствует

 

№46813-09-2022 03:28:23

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

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

Dobrov пишет

Только время отнимает.

1. Меня заставляет ещё раз подумать. Код работает в боковой панели, а хотелось бы ещё в панели закладок. Помнится, раньше и там работал.
2. Пережали иконку - спасибо, но мне это не интересно: в посте выше в коде моя иконка и вопрос был в том, что этот код не работает у меня на [firefox] v104.0 и работает ли вообще?
UPD: обновлённый код от alice0775 пока не проверял.

Отредактировано xrun1 (13-09-2022 03:30:18)

Отсутствует

 

№46913-09-2022 08:20:59

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

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

egorsemenov06 пишет

возможно ли сделать из этого расширения https://www.upload.ee/files/14493725/do … s.xpi.html кнопку для UCF

Конечно же нет, это ведь не расширение, а WebExtensions.
Не, ну может есть где-то такие лбы, которые могут, но они не будут.
Плюс, оно, в некоторой части, зависимо от конкретных веб-сайтов,
а значит должно обновляться, если там что-то поменяется.

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

Разве что можно попытаться забрать у него browser.runtime.sendNativeMessage() себе,
и попробовать построить симуляцию на аргументах командной строки.
Затея так себе, но раз всё равно не работает...
Создать .mjs'ку, прописать там путь до dmaster.exe. Импортировать, например, так

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

Выделить код

Код:

var UcfStylesScripts = {
    /** ************************▼ Настройки ▼************************ */
    .......

    scriptsbackground: [ // В фоне [System Principal]
        .......

        { func: 'ChromeUtils.importESModule("chrome://user_chrome_files/content/custom_scripts/DownloadMaster.mjs");' },
    ],
    /** ************************▲ Настройки ▲************************ */
};


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

Выделить код

Код:

if (!ChromeUtils.domProcessChild.childID) {

	var path = "C:\\Portable Program Files\\Download Master Portable\\dmaster.exe";

	var urlsListURL = "download_master.urls"; // Relative to "chrome" folder, use "/"


	var U = Services.io.newFileURI, CC = Components.Constructor;
	var F = CC("@mozilla.org/file/local;1", "nsIFile", "initWithPath");

	var file = F(path);
	if (!file.exists()) throw "Download Master Portable Not Found!\n" + path;
	var proc = CC("@mozilla.org/process/util;1", "nsIProcess", "init").bind(null, file);

	var urlsListPath = Services.io.newURI(
		U(Services.dirsvc.get("UChrm", Ci.nsIFile)).resolve(urlsListURL)
	).QueryInterface(Ci.nsIFileURL).file.path;

	var esModuleURI = Components.stack.filename;
	ChromeUtils.registerWindowActor("DownloadMaster", {
		parent: {esModuleURI},
		remoteTypes: ["extension"],
		child: {esModuleURI, events: {DOMDocElementInserted: {}}},
		matches: ["moz-extension://*/_generated_background_page.html"]
	});
	var DownloadMasterParent = class extends JSWindowActorParent {
		async receiveMessage(msg) {
			var id = msg.name, d = msg.data;
			if (id == "D") return file.launch(); // openDownloadMaster

			var args = [];
			if (id == "A") var arg = d.url; // openAddURLWindow
			else {
				var push, url, arg = "", dwnld = id == "l";

				if (dwnld) url = d.url; // downloadFile
				else { // addUrls
					if (d.urls.length == 1) url = d.urls[0];
					else await IOUtils.writeUTF8(
						push = url = urlsListPath, d.urls.join("\n")
					);
				}
				arg += `<url>${url}</url><referer>${d.referrer}</referer>`;

				var str = "<cookies>"
				for(var {name, value} of d.cookies) str += `${name}=${value}; `;
				arg += str + "</cookies>";

				if (dwnld) { // downloadFile
					var uri = U(F(d.filename)).QueryInterface(Ci.nsIFileURL);

					if (d.isNameSelected)
						arg += `<savepath>${uri.file.parent.path}</savepath>`
							+ `<filename>${uri.fileName}</filename>`;

					var ext = uri.fileExtension;
					if (ext) arg += `<fileExtension>.${ext}</fileExtension>`
				}
				else if (d.urlsdata?.title) // addUrls [1]
					arg += `<filename>${d.urlsdata.title}</filename>`;

				args.push(push || "-addurl");
			}
			args.push(arg);
			proc().runwAsync(args, args.length);
		}
	}
}
export {DownloadMasterParent};

export class DownloadMasterChild extends JSWindowActorChild {
	handleEvent(e) {
		var win = this.contentWindow;
		if (WebExtensionPolicy.getByHostname(win.location.host).id != "dm@westbyte.com")
			return;

		win = win.wrappedJSObject;
		var o = win.Object, res = new o();
		res.downloadState = "DOWNLOAD_ACCEPTED";

		var desc = new o();
		desc.configurable = true;
		Cu.exportFunction(() => {
			delete res.protocolVersion;
			return res.protocolVersion = win.BRDEP.protocolVersion;
		}, desc, {defineAs: "get"});
		o.defineProperty(res, "protocolVersion", desc);
		
		var dummy = win.Promise.resolve(res);
		var sendMethods = new Set([
			"downloadFile", "addUrls", "openAddURLWindow", "openDownloadMaster"
		]);
		win.browser.runtime.sendNativeMessage = (s, data) => {
			if (sendMethods.has(data.method)) {
				var id = data.method[4];
				delete data.method;
				this.sendAsyncMessage(id, data);
			}
			return dummy;
		}
	}
}

xrun1 пишет

1. Вопрос-подтверждение "Удалить закладку/папку?"
Код работает в боковой панели

Видимо, симилярно этому. Заведи уже наконец "новый" UCF.

2. "Восстановить удалённое"

Тоже вроде обсуждалось. Но, наверно, без lazy.
Вобщем, пока Cu.import() еще с нами, такой вариант

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

Выделить код

Код:

(async sep => {
	if (!sep) return;

	var key = "hasRemoveTransaction";
	var g = Cu.import("resource://gre/modules/PlacesTransactions.jsm", {});

	var raws = (g.lazy || g).TransactionsHistory?.proxifiedToRaw;
	if (raws) g = raws;

	if (!g[key]) {
		if (!raws) {
			Services.scriptloader.loadSubScript(
				`data:,this.${key}=TransactionsHistory.proxifiedToRaw;`, g
			);
			raws = g[key];
		}
		g[key] = entry => {
			for(var tr of entry)
				if (raws.get(tr) instanceof PlacesTransactions.Remove)
					return true;
		}
	}
	var menuitem = document.createXULElement("menuitem");
	for(var args of Object.entries({
		closemenu: "single",
		class: "menuitem-iconic",
		id: "placesCmd_undoRemove",
		label: "Восстановить удалённое",
		oncommand: "PlacesTransactions.undo().catch(Cu.reportError);",
		image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAQAAAAEABcxq3DAAAEd0lEQVRIx53Ve2yW5RkG8N/7ft8Hxa/9CgjSSDnMA4xVTUMQWzadhzhnjSCC0y0jSjom+JdGp844ZhSjHLJsowaNZoCCHOWglXGoQbo2fBW3obDNUBfXKpsUVhxn6OHdH8+31GXGmL3/3M913ffzPNed93qeBxvmI8umCNjyPFEDSRJw40qKa9jyHSbdzY77Ar+9FTvZ+nHAb9T7P76YcwlOktlBdJia2SSthfRvaR/Mync5tp85Q2mbEHJ/X0bqRTpOBJyehog3C3j1HV9RQP91xG9T8z2SofyphMELWH4zW5s40s7kQ/T0cnYfXfPD1OgM0TlGzSN1DZkzxG1EdURjaa9HCfddEupfuSkIfHXJ5wVENA8Iw9QcRnbzXj31++g8w+WVZHMhXzaKhu2MGMtd36f5CTrn8WAJyf001KCYpA6dDBtLlOfoYuI6kgp6XuLsbhQRfw39ovDPx7/JgYS1b3NkCxcvoPgTevIULyFVTm4jyinp4uRJiirYt5BMLc15kvE0lnCsgZaE2wdx6LVCo9/ghQn4LhdFxEOonELv8ogVV9Iyjd9fx8T1FE2nq5XSQWQuJbsmrJH9JclMsldhFsW3EU0iuxsb6f9zTA3dHj1J1yPsKaPrIOtnkn6KDY2cvYF/vkfmINGuiPdnUD6Pd/7Mur/x0RCqXqTfj+m5glyO1B8ovR1pijeil6KvBw8V1QaB/QYWzNgSYu+TmMm5GVhKT47OBWR28kgnvxvKS/OjvuMGuTSr72FtBR/WctNe4l+H3GUt7DxB2TKe+CmnF5IZRzSZzFmS4wy9n2QGY2eR3Mx193DqAao+4vh04lZS2/EkQyqo7cWux4Kjwf4gKF3N5hEs+QsLlwVuVRPLP2FeTSh95hZSpSx6OOAkwWCWLSEqYWVz4JtLqd3GiuX0/oS6XKjd/BQbF6SRJynij4eJKpl7WSg8cCdzxjHjH3QuIsaorQx7NCx8QQdxCYM2kzxL423BbGN6SP+I6tmcO86hahqu4MA2To3mX+eTxbA2er6VJjcA/Yl2kOzlrutJxrDraaI1XH09j3fQVk7pcG5sCgIOttLVzejpmMPrnxJvYnIZXelwxGHTCOaX0PorsmUMOC/wpeNofg4fjg9EW3+k6CzcYJ99M7h6fSfxFFJrMZzFm0I+fzXxlTQ1EHf3eSlJyI3mlYGs/yEPx4F7/NkQ11zEymFhnDoY9RnwcHmIZ34Q1CcTkBD9FSM58gu8SmUHbmVuJbYRt2AiE/cwZT/tG3h+Gh29lH3A+VPZ+zMq1rHwcq6tY1U31ReQXPgFt3M+/9+xJRvM9f5S3NnX6btLqfqYt1p44xQrFnH0aX6zmBXIj+Hae0N95qG+ea/PJjrB7tV47csE7CzEJqKXyTcW8CquaibfwTOX0FjPLSfYk+G8XWyb+rlTUcndVUQjWXOK+FiBn/QfQen/FVBVVdhoc4FIkczqM5WBvPMWp4fQMpzFHeEN2NCFCcyNSH2b1AiSl3nhVnrnkjpNkqP9jrBvdzX8G2rIlxvMK3a7AAAAInpUWHRTb2Z0d2FyZQAAeNorLy/Xy8zLLk5OLEjVyy9KBwA22AZYEFPKXAAAAABJRU5ErkJggg==",
	}))
		menuitem.setAttribute(...args);

	var desc = Object.getOwnPropertyDescriptor(XULElement.prototype, "hidden");
	var {set} = desc;
	desc.set = () => {
		var entry = PlacesTransactions.topUndoEntry;
		var vis = entry && g[key](entry);
		vis && menuitem.removeAttribute("disabled");
		set.call(menuitem, !vis);
	}
	Object.defineProperty(menuitem, "hidden", desc);
	sep.before(menuitem);
})(document.getElementById("placesContext_deleteSeparator"));

Отсутствует

 

№47013-09-2022 10:03:56

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

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

Dumby пишет

Затея так себе

Спасибо но у меня так и не заработало!Наверно лыжи не едут :)

Отсутствует

 

№47113-09-2022 13:15:00

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

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

Dumby пишет

Заведи уже наконец "новый" UCF.

Нет, я не трус, но я боюсь. Боюсь, смогу ли я, способен ли?
2. Работает, спасибо.:beer:

Отсутствует

 

№47213-09-2022 14:04:17

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

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

xrun1 пишет

2. Работает

Не понял. А 1. что, не работает что ли?

Нет, я не трус, но я боюсь. Боюсь, смогу ли я, способен ли?

Так склонируй браузер, и там пробуй разобраться.
Никто не торопит, ни чем не рискуешь.
В отношении скриптов в "новом" вообще ничего не поменялось.
Не нравится встроенный загрузчик — не используй, делай как привык.
Со стилями да, наверно придётся почесать репу.

Отсутствует

 

№47314-09-2022 03:23:46

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

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

Dumby пишет

Не понял. А 1. что, не работает что ли?

Работает в боковой панели. На панели закладок не спрашивает.
Я почему об этом вспомнил? Случайно удалил закладку, потом вспомнил, что там пост обновляемый. Пришлось лезть на форум, вспоминать тему, формулировать запрос, искать... А с подсказкой подумал бы второй раз, стоит ли удалять.
Что касается "нового" UCF. Там слишком много для меня слов, смысл которых не понимаю. И файлы непонятные со страшными словами CustomStylesScripts.jsm, CustomStylesScriptsChild.jsm. Что куда пихать не понял тогда, не понимаю и сейчас. Даже пробовать боюсь, да и зачем, если всё работает.

Пока гром не грянет, мужик не перекрестится
— констатация того, что люди ленивы и не предусмотрительны, идут вслед за событиями, а не опережая их; предпочитают полагаться на случай, на судьбу, а не формировать её; не думать, анализировать ситуацию, моделировать грядущие события, чтобы встретить их последствия во всеоружии, а пускать дело на самотек, как кривая вывезет.

P.S. Например, у меня нет стилей AGENT_SHEET,  AUTHOR_SHEET или USER_SHEET. У меня просто стили, которые работают. Как-то так...

Отсутствует

 

№47414-09-2022 09:15:34

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

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

xrun1 пишет

1. Вопрос-подтверждение "Удалить закладку/папку?"
скрытый текст

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


Win7

Отсутствует

 

№47514-09-2022 15:08:38

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

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

Dumby пишет

Вобщем, пока Cu.import() еще с нами, такой вариант

В панели закладок вернуть удалённое работает. А как насчёт окна "Управление закладками"?


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


Ещё вопрос по стилям UCF в CustomStylesScripts.jsm - подскажите, как подключать стили в зависимости от операционной системы?
Хотелка такая - подключать общие AGENT_SHEET и USER_SHEET стили как обычно, но добавить ещё пару CSS в зависимости от OS.
То есть чтобы на macos подключались ещё пара своих AGENT_SHEET и USER_SHEET стилей, на linux пара своих, на windows тоже.

Выделить код

Код:

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); }, },
	],

Отредактировано Dobrov (14-09-2022 15:26:30)

Отсутствует

 

Board footer

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