возможность запуска через $(which …mpv…)
Это возможно из консоли или из bash скрипта.
Ну так напишите скрипт и вызывайте его вместо приложения, в качестве аргументов для скрипта передать в том числе в каком приложении открыть
Отредактировано Vitaliy V. (13-04-2021 01:29:34)
Отсутствует
Vitaliy V. - подход со скриптом будет работать только на одном компе!
Vitaliy V. ещё просьба по Открыть ссылку в…
Удалить из кода открытие страницы, оставить только открытие ссылки!
Второй вопрос по стилям - как увеличить шрифт названий плиток?
Как сделать плитки прямоугольными (например в пропорции 16:9), а не квадратными?
Заранее спасибо!
Отредактировано Dobrov (13-04-2021 02:11:25)
Отсутствует
Удалить из кода открытие страницы, оставить только открытие ссылки!
Обновил скрипт, на 88 не работал ну и эту хрень что они там придумали исправил, и добавил такую возможность для каждого пункта можно указать открытие страницы или ссылки или все https://forum.mozilla-russia.org/viewto … 54#p782454
как увеличить шрифт названий плиток?
@-moz-document url("about:newtab"), url("about:home") { .top-site-outer .title { font-size: 14px !important; } }
Как сделать плитки прямоугольными (например в пропорции 16:9), а не квадратными?
Там все поломается если так сделать, а исправлять долго и муторно
Отсутствует
Vitaliy V. спасибо! Два дополнения 1) плеер mpv для МакОС:
['mpv', 'MPV', '/usr/bin/open', '-n -a "mpv" --args --ytdl-format=bestvideo[height<=?720][fps<=?30]+bestaudio/best[height<=?720][fps<=?30] %OpenURI', 'moz-icon://file:///Applications/mpv.app?size=16'],
2) неплохо бы и для других плееров ограничить качество видео, а ещё лучше менять этот параметр (например через кнопку кнопка QuickToggleAbout) как 480p/720p/1080p…, а то некоторые видео 8К без (--ytdl-format=bestvideo…) очень долго открываются.
Отсутствует
tagnupip пишет
снова сломали
browser.proton.enabled — false должно помочь, но на долго ли...
Dobrov пишет
Как сделать плитки прямоугольными (например в пропорции 16:9), а не квадратными?
Можно с этим кодом поэкспериментировать.
Отсутствует
Ребят, может у кого есть строчка, убрать надо бы пункт один из контекстного меню, (когда выделяешь текст в поле/форуме/чате, там присутствует пункт "Печать выделенной области" в 87. Ранее скидывали полезную ссылку: simpleMenuWizard Спс. Убрал, что нужно мне, а на этот пункт ненашел. было подобно что-то #context-printframe, но пункт не исчез.
Отредактировано Totem (14-04-2021 12:43:09)
Отсутствует
Dobrov
mpv добавил, насчет параметров это кому как надо, насчет менять их, можно просто создать несколько одинаковых пунктов но с разными аргументами.
Что это за вертикаль ?
#identity-box[pageproxystate="valid"].chromeUI, #identity-box[pageproxystate="valid"].extensionPage { border-inline-end: none !important; }
Totem
#context-print-selection
Отсутствует
Отсутствует
Отсутствует
this.contextmenuopenwith = {
Меню Открыть ссылку в подключаю как отдельный скрипт - не работает, а если вставляю весь код в custom_script_win.js, тогда пункты в контекстном меню появляются…
// this.autohidesidebar.init(); // <-- Auto Hide Sidebar /* ************************************************ */ // Здесь может быть ваш код который сработает по событию "load" не раньше var loadscript = name => { try { Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`,globalThis,"UTF-8"); return true; } catch(e) {} }; loadscript("contextmenuopenwith.js"); loadscript("undo-tab.js"); // этот скрипт подключается и работает /* ************************************************ */ }, handleEvent(e) {
Отсутствует
подключаю как отдельный скрипт
Загрузчик нужен для custom_script_win.js https://forum.mozilla-russia.org/viewto … 01#p788301
подключить так
loadscript("contextmenuopenwith.js", this);
Отсутствует
Vitaliy V. - спасибо! (из 400 страниц нужное очень сложно, пора делать отдельный FAQ со ссылками на полезные посты)
Вопрос по блоку "Загрузка скриптов для browser.xhtml" - в тексте не указано, после каких команд конкретно включать этот код.
Я добавил загрузчик в custom_script_win.js в функцию load(), убрав первую и последнюю строки: (() => { ……… })();
Или надо было по-другому подключить? Или загрузчик скриптов в window.режим автономен и его можно и в custom_script.js включить?
load() { if (this.initialized) return; this.initialized = true; // this.specialwidgets.init(); // <-- Special Widgets /* ************************************************ */ // Здесь может быть ваш код который сработает по событию "load" не раньше // (() => { var loadscript = (relpath, obj) => { try { Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${relpath}`, obj, "UTF-8"); …………
Vitaliy V. - нужно в user_chrome_files сразу включить 3 внешних демо-скрипта, (и может быть Greasemonkey скрипт, например с подсветкой указанных слов). Тогда каждый не будет задавать вопросы хотя-бы по подключению внешних скриптов!
P.S. у меня ушло много времени, чтобы "перерыть" форум и подключить код от CustomButtons и внешние скрипты…
Отредактировано Dobrov (15-04-2021 06:11:15)
Отсутствует
Я добавил загрузчик в custom_script_win.js в функцию load(), убрав первую и последнюю строки: (() => { ……… })();
В функцию load правильно, но обертку убирать не надо, чтобы не засорять функцию лишними переменными loadscript, load_scripts_by_url
его можно и в custom_script.js включить?
Нет для
custom_script.js https://forum.mozilla-russia.org/viewto … 70#p788670
custom_script_all_win.js https://forum.mozilla-russia.org/viewto … 57#p784757
нужно в user_chrome_files сразу включить 3 внешних демо-скрипта
Ну давайте пример таких скриптов, тут не может быть универсального способа если скрипты не написаны для user_chrome_files
и может быть Greasemonkey скрипт
А это уже другая область, контента, можно использовать Frame script
Но framescript устарел, есть замена ему JSWindowActor
Вот пример JSWindowActor для user_chrome_files https://forum.mozilla-russia.org/viewto … 52#p788552
Есть смысл если скриптов Greasemonkey немного, иначе проще использовать менеджеры скриптов по их назначению.
Отсутствует
Vitaliy V.
Почему иногда пропадает белый дроп ? Перезапуск нужен или очистка всего...
Сам код
scrollbar,
scrollbar * {
-moz-appearance: none !important;
margin: 0px !important;
padding: 0px !important;
border: 0px !important;
box-shadow: none !important;
cursor: pointer;
}
scrollbar thumb[orient="vertical"]:hover {
background: linear-gradient(to right, rgb(0, 196, 244), rgb(3, 96, 120))!important;
border-radius: 0px !important;
}
scrollbar thumb[orient="horizontal"]:hover {
background: linear-gradient(rgb(0, 196, 244), rgb(3, 96, 120))!important;
border-radius: 0px !important;
}
scrollbar thumb[orient="vertical"]:active {
background: linear-gradient(to right, red, #D90000, brown) !important;
border-radius: 0px !important;
}
scrollbar thumb[orient="horizontal"]:active {
background: linear-gradient(red, #D90000, brown) !important;
border-radius: 0px !important;
}
scrollbar[orient="vertical"] {
-moz-margin-start: 0px !important;
max-width: 10px !important;
min-width: 10px !important;
background-image: -moz-linear-gradient(to right, #d1d2d4, #e3e4e6, #dadbdd);
background-color: transparent;
background-size: 10px 10px !important;
box-shadow: 0 1px 6px hsla(0,0%,0%,.1) !important;
background-repeat: repeat-y !important;
background-position: 50% 0% !important;
}
scrollbar[orient="horizontal"] {
margin-top: 0px !important;
max-height: 10px !important;
min-height: 10px !important;
background-image: -moz-linear-gradient(#d1d2d4, #e3e4e6, #dadbdd);
background-color: transparent;
background-size: 10px 10px !important;
background-repeat: repeat-x !important;
background-position: 0% 50% !important;
}
scrollbar > slider {
-moz-appearance: none !important;
background: none !important;
border: none !important;
}
scrollbar thumb {
border-radius: 12px !important;
background-color: #555 !important;
transition: all 0.4s !important;
cursor: default !important;
}
menulist > dropmarker {
-moz-appearance: none !important;
min-width: 14px !important;
width: 14px !important;
height: auto !important;
margin: 0 -1px -1px 0px !important;
border: none !important;
border-radius: 0px !important;
background: linear-gradient(to right, rgb(0, 196, 244), rgb(3, 96, 120))!important;)!important;
filter: none !important;
list-style-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='5' width='5'><path d='M 0,0.75 2.5,3.25 5,0.75 5,1.75 2.5,4.25 0,1.75 Z' style='fill:white;shape-rendering:crispEdges'/></svg>") !important;
-moz-box-align: center !important;
-moz-box-pack: center !important;
}
scrollbar thumb[orient="vertical"] {
min-height: 26px !important;
width: 10px !important;
min-width: 10px !important;
max-width: 10px !important;
background: linear-gradient(to right, #A0A0A0, #555) !important;
border-radius: 0px !important;
}
scrollbar thumb[orient="horizontal"] {
min-height: 26px !important;
width: 10px !important;
min-width: 10px !important;
max-width: 10px !important;
background: linear-gradient(#A0A0A0, #555) !important;
border-radius: 0x !important;
}
scrollbar > slider > thumb:hover,
scrollbar > scrollbarbutton:hover,
html|select > html|button:hover {
-moz-appearance: none !important;
border: none !important;
border-radius: 0px !important;
background-color: #0080FF !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 8px, auto !important;
}
scrollbar > slider > thumb,
scrollbar > scrollbarbutton,
html|select > html|button {
-moz-appearance: none !important;
border: none !important;
border-radius: 0px !important;
background-color: #555 !important;
background-repeat: no-repeat !important;
background-position: center !important;
background-size: 8px, auto !important;
}
scrollbar[orient="vertical"],
scrollbar[orient="vertical"] > slider,
scrollbar[orient="vertical"] > slider > thumb {
none !important;
cursor: pointer !important;
}
scrollbar[orient="horizontal"],
scrollbar[orient="horizontal"] > slider,
scrollbar[orient="horizontal"] > slider > thumb {
min-height: 10px !important;
max-height: 10px !important;
cursor: pointer !important;
}
scrollbar > scrollbarbutton {
-moz-appearance: none !important;
width: 10px !important;
height: 10px !important;
}
scrollbar > slider > thumb:-moz-any(:active),
scrollbar > scrollbarbutton:not([disabled="true"]):-moz-any(:active),
menulist > dropmarker:not([disabled="true"])[open="true"],
html|select > html|button:-moz-any(:active) {
background-color: #D90000 !important;
cursor: pointer !important;
}
html|select > html|button {
background-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='6' width='6'><path d='M 0,0.75 2.5,3.25 5,0.75 5,1.75 2.5,4.25 0,1.75 Z' style='fill:white;shape-rendering:crispEdges'/></svg>"), linear-gradient(to right, rgb(0, 196, 244), rgb(3, 96, 120))!important;
}
scrollbar > scrollbarbutton[type="increment"],
html|select > html|button[orientation="right"] {
background-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='6' width='6'><path d='M 0.75,0 3.25,2.5 0.75,5 1.75,5 4.25,2.5 1.75,0 Z' style='fill:white;shape-rendering:crispEdges'/></svg>"), linear-gradient(to bottom, rgba(255,255,255,0.5), transparent) !important;
}
scrollbar[orient="vertical"] > scrollbarbutton[type="increment"] {
background-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='6' width='6'><path d='M 0,0.75 2.5,3.25 5,0.75 5,1.75 2.5,4.25 0,1.75 Z' style='fill:white;shape-rendering:crispEdges'/></svg>"), linear-gradient(to right, rgba(255,255,255,0.5), transparent) !important;
}
scrollbar > scrollbarbutton[type="decrement"],
html|select > html|button[orientation="left"] {
background-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='6' width='6'><path d='M 4.25,5 1.75,2.5 4.25,0 3.25,0 0.75,2.5 3.25,5 Z' style='fill:white;shape-rendering:crispEdges'/></svg>"), linear-gradient(to bottom, rgba(255,255,255,0.5), transparent) !important;
}
scrollbar[orient="vertical"] > scrollbarbutton[type="decrement"] {
background-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='6' width='6'><path d='M 0,4.25 2.5,1.75 5,4.25 5,3.25 2.5,0.75 0,3.25 Z' style='fill:white;shape-rendering:crispEdges'/></svg>"), linear-gradient(to right, rgba(255,255,255,0.5), transparent) !important;
}
Отредактировано ВВП (15-04-2021 18:14:56)
Отсутствует
( … в user_chrome_files сразу включить 3 внешних демо-скрипта )
Ну давайте пример таких скриптов, тут не может быть универсального способа если скрипты не написаны для user_chrome_files
Лучше всего в отдельный каталог-архив на гитхабе добавлять все скрипты форума, написанные для user_chrome_files!
скрипты, которые можно подключить в user_chrome_files (то есть в проект на гитхабе, чтобы проще обновлять):
custom_script_all_win.js > ucf_wheretoopenlink.js, ucf_SidebarTabs.js
custom_script.js > ucf-undo-tab.js, ucf-eom-button.js (знаю, что ucf-eom-button есть в дополнении add_toolbar_buttons.2021.2.20.xpi, но ведь user_chrome_files отдельное расширение)
custom_script_win.js > ucf_win_contextmenuopenwith.js (Открыть ссылку в), ucf_win_hookClick.js "клики для downloads-button" (в этот код просьба ещё включить код SaveHTML)
// в этот код желательно на Right-click добавить сохранение страницы/выделенного в единый файл с помощью CustomButton кнопки "SaveHTML" (async (name, id, func) => { if (name == "Object") return CustomizableUI.createWidget(func()); var win = name == "Window", g = Components.utils.import("resource://gre/modules/Services.jsm", {}); if (g[id]) {if (win) return;} else g[id] = func(); if (win) return CustomizableUI.createWidget(g[id]); addDestructor(r => r[5] == "e" && delete g[id]); g[id].onCreated(this); })(this.constructor.name, "hookClick", () => { // BEGIN (async id => { // добавить клики для downloads-button await window.delayedStartupPromise; var btn = document.getElementById("downloads-button"); if (!btn) return; btn.setAttribute("context", "event.stopPropagation()"); // откл контекстное меню btn.tooltipText = GetDynamicShortcutTooltipText(btn.id) + '\nКолёсико: Download Folder\nПравый клик: Сохранить страницу'; var listener = e => { if (e.button == 1) { Downloads.getSystemDownloadsDirectory().then(path => FileUtils.File(path).launch(), Cu.reportError); // Обзор папки «Загрузки» } else if (e.button == 2) { if (e.metaKey || e.ctrlKey || e.shiftKey) return; e.preventDefault(); // this.SaveHTML(e); alert("Right-click"); } } btn.addEventListener("click", listener); var ucf = window.ucf_custom_script_win || window.ucf_custom_script_all_win; ucf[id] = {destructor: () => btn.removeEventListener("click", listener)}; ucf.unloadlisteners.push(id); })("downloads-button-click-listener"); }); // END hookClicks
Три просьбы: доработать код ucf_win_hookClick.js - включить в него Сохранить страницу/выделенное как единый HTML-файл.
2) изменить ucf-undo-tab.js, сделать "Недавно закрытые вкладки" сразу в меню, то есть сделать меню таким:
• Показать весь журнал
• Восстановить все вкладки
• Удалить недавнюю историю
• подменю Недавно закрытые окна
… separator …
• далее строки недавно закрытых вкладок, как в кнопке Undo Close Tabs от infocatcher
И убрать drop marker, сделав кнопку единой: Клик мыши - Меню, правый клик - Восстановить вкладку, Колёсико - Восстановить окно (или Показать весь журнал).
3) объединить код в один, чтобы избавиться от отдельного скрипта UCFTitleChangedChild.jsm
ChromeUtils.registerWindowActor("UCFTitleChanged", { child: { moduleURI: "chrome://user_chrome_files/content/custom_scripts/UCFTitleChangedChild.jsm", events: { DOMTitleChanged: { capture: true }, }, }, matches: ["https://forum.mozilla-russia.org", "https://www.google.com/search?*", "https://www.google.ru/search?*"], messageManagerGroups: ["browsers"], }); ====== UCFTitleChangedChild.jsm - отдельный скрипт ======== var EXPORTED_SYMBOLS = ["UCFTitleChangedChild"]; class UCFTitleChangedChild extends JSWindowActorChild { handleEvent(e) { var reg = /-\s*Поиск\s*в\s*Google$| \| Форум Mozilla Россия/; if (reg.test(this.document.title)) this.document.title = this.document.title.replace(reg, ""); } }
Отредактировано Dobrov (16-04-2021 06:05:39)
Отсутствует
Лучше всего в отдельный каталог-архив на гитхабе добавлять все скрипты форума, написанные для user_chrome_files!
Возможно некоторые добавлю
от себя: ucf_win_hookClick.js «добавить клики для downloads-button» (нужно добавить SaveHTML)
Что это вначале, зачем?
доработать код ucf_win_hookClick.js - включить в него Сохранить страницу/выделенное как единый HTML-файл.
custom_script_win.js
(async id => { // добавить клики для downloads-button await window.delayedStartupPromise; var btn = document.getElementById("downloads-button"); if (!btn) return; btn.setAttribute("context", "event.stopPropagation()"); // откл контекстное меню btn.tooltipText = GetDynamicShortcutTooltipText(btn.id) + '\nКолёсико: Download Folder\nПравый клик: Сохранить страницу'; var listener = e => { if (e.button == 1) { Downloads.getSystemDownloadsDirectory().then(path => FileUtils.File(path).launch(), Cu.reportError); // Обзор папки «Загрузки» } else if (e.button == 2) { if (e.metaKey || e.ctrlKey || e.shiftKey) return; e.preventDefault(); let vert=`javascript:(function(){var getSelWin=function(w){if(w.getSelection().toString())return w;for(var i=0,f,r;f=w.frames[i];i++){try{if(r=getSelWin(f))return r}catch(e){}}};var selWin=getSelWin(window),win=selWin||window,doc=win.document,loc=win.location;var qualifyURL=function(url,base){if(!url||/^([a-z]+:|%23)/.test(url))return url;var a=doc.createElement('a');if(base){a.href=base;a.href=a.protocol+(url.charAt(0)=='/'%3F(url.charAt(1)=='/'%3F'':'//'+a.host):'//'+a.host+a.pathname.slice(0,(url.charAt(0)!='%3F'&&a.pathname.lastIndexOf('/')+1)||a.pathname.length))+url}else{a.href=url};return a.href};var encodeImg=function(src,obj){var canvas,img,ret=src;if(/^https%3F:%5C/%5C//.test(src)){canvas=doc.createElement('canvas');if(!obj||obj.nodeName.toLowerCase()!='img'){img=doc.createElement('img');img.src=src}else{img=obj};if(img.complete)try{canvas.width=img.width;canvas.height=img.height;canvas.getContext('2d').drawImage(img,0,0);ret=canvas.toDataURL((/%5C.jpe%3Fg/i.test(src)%3F'image/jpeg':'image/png'))}catch(e){};if(img!=obj)img.src='about:blank'};return ret};var toSrc=function(obj){var strToSrc=function(str){var chr,ret='',i=0,meta={'%5Cb':'%5C%5Cb','%5Ct':'%5C%5Ct','%5Cn':'%5C%5Cn','%5Cf':'%5C%5Cf','%5Cr':'%5C%5Cr','%5Cx22':'%5C%5C%5Cx22','%5C%5C':'%5C%5C%5C%5C'};while(chr=str.charAt(i++)){ret+=meta[chr]||chr};return'%5Cx22'+ret+'%5Cx22'},arrToSrc=function(arr){var ret=[];for(var i=0;i<arr.length;i++){ret[i]=toSrc(arr[i])||'null'};return'['+ret.join(',')+']'},objToSrc=function(obj){var val,ret=[];for(var prop in obj){if(Object.prototype.hasOwnProperty.call(obj,prop)&&(val=toSrc(obj[prop])))ret.push(strToSrc(prop)+': '+val)};return'{'+ret.join(',')+'}'};switch(Object.prototype.toString.call(obj).slice(8,-1)){case'Array':return arrToSrc(obj);case'Boolean':case'Function':case'RegExp':return obj.toString();case'Date':return'new Date('+obj.getTime()+')';case'Math':return'Math';case'Number':return isFinite(obj)%3FString(obj):'null';case'Object':return objToSrc(obj);case'String':return strToSrc(obj);default:return obj%3F(obj.nodeType==1&&obj.id%3F'document.getElementById('+strToSrc(obj.id)+')':'{}'):'null'}};var ele,pEle,clone,reUrl=/(url%5C(%5Cx22%3F)(.+%3F)(%5Cx22%3F%5C))/g;if(selWin){var rng=win.getSelection().getRangeAt(0);pEle=rng.commonAncestorContainer;ele=rng.cloneContents()}else{pEle=doc.documentElement;ele=(doc.body||doc.getElementsByTagName('body')[0]).cloneNode(true)};while(pEle){if(pEle.nodeType==1){clone=pEle.cloneNode(false);clone.appendChild(ele);ele=clone};pEle=pEle.parentNode};var sel=doc.createElement('div');sel.appendChild(ele);for(var el,all=sel.getElementsByTagName('*'),i=all.length;i--;){el=all[i];if(el.style&&el.style.backgroundImage)el.style.backgroundImage=el.style.backgroundImage.replace(reUrl,function(a,b,c,d){return b+encodeImg(qualifyURL(c))+d});switch(el.nodeName.toLowerCase()){case'link':case'style':case'script':el.parentNode.removeChild(el);break;case'a':case'area':if(el.hasAttribute('href')&&el.getAttribute('href').charAt(0)!='%23')el.href=el.href;break;case'img':case'input':if(el.hasAttribute('src'))el.src=encodeImg(el.src,el);break;case'audio':case'video':case'embed':case'frame':case'iframe':if(el.hasAttribute('src'))el.src=el.src;break;case'object':if(el.hasAttribute('data'))el.data=el.data;break;case'form':if(el.hasAttribute('action'))el.action=el.action;break}};var head=ele.insertBefore(doc.createElement('head'),ele.firstChild);var meta=doc.createElement('meta');meta.httpEquiv='content-type';meta.content='text/html; charset=utf-8';head.appendChild(meta);var title=doc.getElementsByTagName('title')[0];if(title)head.appendChild(title.cloneNode(true));head.copyScript=function(){if('$'in win)return;var f=doc.createElement('iframe');f.src='about:blank';f.setAttribute('style','position:fixed;left:0;top:0;visibility:hidden;width:0;height:0;');doc.documentElement.appendChild(f);var str,script=doc.createElement('script');script.type='text/javascript';for(var name in win){if(name in f.contentWindow||!/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name))continue;try{str=toSrc(win[name]);if(!/%5C{%5Cs*%5C[native code%5C]%5Cs*%5C}/.test(str)){script.appendChild(doc.createTextNode('var '+name+' = '+str.replace(/<%5C/(script>)/ig,'<%5C%5C/$1')+';%5Cn'))}}catch(e){}};f.parentNode.removeChild(f);if(script.childNodes.length)this.nextSibling.appendChild(script)};head.copyScript();head.copyStyle=function(s){if(!s)return;var style=doc.createElement('style');style.type='text/css';if(s.media&&s.media.mediaText)style.media=s.media.mediaText;try{for(var i=0,rule;rule=s.cssRules[i];i++){if(rule.type!=3){if((!rule.selectorText||rule.selectorText.indexOf(':')!=-1)||(!sel.querySelector||sel.querySelector(rule.selectorText))){style.appendChild(doc.createTextNode(rule.cssText.replace(reUrl,function(a,b,c,d){var url=qualifyURL(c,s.href);if(rule.type==1&&rule.style&&rule.style.backgroundImage)url=encodeImg(url);return b+url+d})+'%5Cn'))}}else{this.copyStyle(rule.styleSheet)}}}catch(e){if(s.ownerNode)style=s.ownerNode.cloneNode(false)};this.appendChild(style)};var sheets=doc.styleSheets;for(var j=0;j<sheets.length;j++)head.copyStyle(sheets[j]);head.appendChild(doc.createTextNode('%5Cn'));var doctype='',dt=doc.doctype;if(dt&&dt.name){doctype+='<!DOCTYPE '+dt.name;if(dt.publicId)doctype+=' PUBLIC %5Cx22'+dt.publicId+'%5Cx22';if(dt.systemId)doctype+=' %5Cx22'+dt.systemId+'%5Cx22';doctype+='>%5Cn'};var href = 'data:text/html;charset=utf-8,' + encodeURIComponent(doctype + sel.innerHTML + '\n<!-- This document saved from ' + (loc.protocol != 'data:' ? loc.href : 'data:uri') + ' -->');var a = document.documentElement.appendChild(document.createElement("a"));a.setAttribute("href", href);var name = selWin ? win.getSelection().toString() : (title && title.text ? title.text : loc.pathname.split('/').pop());name=name.replace(/[:\\\/<>?*|"]+/g, '_').replace(/\s+/g, ' ').slice(0, 100).replace(/^\s+|\s+$/g, '');name += (function () {var d = new Date(), z=function(n){return '_' + (n < 10 ? '0' : '') + n};return z(d.getHours()) + z(d.getMinutes()) + z(d.getSeconds());})();a.setAttribute("download", name + ".html");a.click();a.remove();})();`; gBrowser.loadURI(vert, {triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()}); } } btn.addEventListener("click", listener); var ucf = window.ucf_custom_script_win || window.ucf_custom_script_all_win; ucf[id] = {destructor: () => btn.removeEventListener("click", listener)}; ucf.unloadlisteners.push(id); })("downloads-button-click-listener");
изменить ucf-undo-tab.js, сделать "Недавно закрытые вкладки" сразу в меню, то есть сделать меню таким:
Ну примерно так в add_toolbar_buttons но с дропмаркером
объединить код в один, чтобы избавиться от отдельного скрипта UCFTitleChangedChild.jsm
Объединить можно но модуль jsm нужен
var EXPORTED_SYMBOLS = ["registerUCFTitleChanged", "UCFTitleChangedChild"]; function registerUCFTitleChanged() { ChromeUtils.registerWindowActor("UCFTitleChanged", { child: { moduleURI: "chrome://user_chrome_files/content/custom_scripts/UCFTitleChangedChild.jsm", events: { DOMTitleChanged: { capture: true }, }, }, matches: ["https://forum.mozilla-russia.org/*", "https://www.google.com/search?*", "https://www.google.ru/search?*"], messageManagerGroups: ["browsers"], }); } class UCFTitleChangedChild extends JSWindowActorChild { handleEvent(e) { var reg = /-\sПоиск\sв\sGoogle$|\s\|\sФорум\sMozilla\sРоссия$/; if (reg.test(this.document.title)) this.document.title = this.document.title.replace(reg, ""); } }
ChromeUtils.import("chrome://user_chrome_files/content/custom_scripts/UCFTitleChangedChild.jsm", {}) .registerUCFTitleChanged();
Отсутствует
Как сделать такое же оформление для кнопок панели меню, панелей инструментов и закладок в режимах hover и active?
Отсутствует
Отсутствует
скажите как уменьшить по вертикали (сжать) расстояние между закладками?
Эта настройка, или можно кодом и для других подобных меню
Отсутствует
Bug 1702013 - Re-introduce "view image info" in the context menu behind a hidden (about:config) pref and enable that pref by default in devedition
Status: RESOLVED FIXED
Milestone: 89 Branch
browser.menu.showViewImageInfo
Отсутствует
Не скажу касательно ночнушек, не пользуюсь и проверить не смогу. Код отсюда, второй спойлер.
#BMB_bookmarksPopup .subviewbutton { min-height: 18px !important; padding-top: 1px !important; padding-bottom: 1px !important; }
Добавлено 17-04-2021 02:09:21
browser.menu.showViewImageInfo
Ага, значит всё таки баг. А я всё голову ломал, зачем выпилили этот пункт меню
Отредактировано xrun1 (17-04-2021 02:09:21)
Отсутствует