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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№1387609-11-2019 20:14:21

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 182
UA: Firefox 70.0

Re: Custom Buttons

Dumby, solombala,
№13841, №13844, вроде так легче? чем расширение, если я правильно понял, там перемещает не недавнее при клике на саму кнопку?

Flip

Выделить код

Код:

//Flip - forum.mozilla-russia.org/viewtopic.php?pid=773298#p773298
(dummy=>{var getTab=()=>{
var tab=dummy;for(var t of gBrowser.tabs)if(!t.closing&&!t.selected&&t.lastAccessed>tab.lastAccessed)tab=t;return tab==dummy?gBrowser.selectedTab:tab;}
var tabToSelect=dummy;addDestructor(()=>tabToSelect=null);this._handleClick=()=>gBrowser.selectedTab=tabToSelect.parentNode&&!tabToSelect.closing?tabToSelect:getTab();
addEventListener("TabSelect",e=>tabToSelect=e.detail.previousTab,false,gBrowser.tabContainer||1);})({lastAccessed:0}); /**/


Dobrov, спасибо, посмотрю но не сейчас.
Автор не я, и вообще сомневаюсь что я бы написал такую) если ток сильно захотел, пока мне легче забирать готовое спасибо что пока есть у кого))... Dumby, Andrey_Krropotkin, Vitaliy V.. Меня хватает лишь что-то подредактировать для себя, и если интересно могу сильно влезть на день два, но в силу незнания у меня занимает это как раз таки день, два, вместо 30минут у знающего (и не факт что получится!), вот так.

Посмотрел интересно сделано, я как то на одной кнопки примерное сделал, но там топорно автопопап вылазит и другое меню, ну как смог).. (ну как сделал скопипастил).
Реально зачем плодить 100 кнопок если можно в одном все реализовать.
С другой стороны тогда зачем CB, когда можно через .uc.js файлы, или расширения типа AddToolbarButtons. В плане отваливания от версий к версий наверно меньше и не надо ждать фикса CB. Хотя это просто размышления, не все ведь умеют с кодом, я к примеру тоже не умею но полазив немного подумал это как-то удобнее чем отдельный нестабильный фикс,фикс,фикс. А так спс еще раз Dumby, что не бросает нас но вечно ли это.. кто потом придет?) + я не знаю, может с CB какие-та функций берутся для самих кнопок или еще что.
Просто размышления! ничего не имею против и т.д. пока что многие кнопки у меня на CB, и наврятли я смог бы сам перенести все на что-то новое.

Отредактировано func4ptch4 (09-11-2019 20:51:09)

Отсутствует

 

№1387711-11-2019 14:15:57

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 318
UA: Firefox 70.0

Re: Custom Buttons

Dumby
Как ключ этот -no-deelevate в ini влепить, если портабл, или в config.js ? Ну, чтобы на раб.стол перетаскивать , в ярлык пихать , не того...не эстетично.

Отсутствует

 

№1387811-11-2019 21:13:50

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

Re: Custom Buttons

solombala пишет:

в ярлык пихать , не того...не эстетично

Не только, ключ не подхватывается после рестарта,
не работает с ключём -p (в смысле с окном выбора профиля),
и при запуске из внешних приложений ключу тоже неотуда взяться.

Поэтому, только в about:config, вручную, переключить
browser.launcherProcess.enabled, закрыть браузер, запустить браузер.
Ну, или скажем так: другой способ мне не известен.

Отсутствует

 

№1387911-11-2019 22:51:59

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 182
UA: Firefox 70.0

Re: Custom Buttons

solombala
батник = start Firefox.exe -no-deelevate -profile .\profileTest
но наверно это тоже самое что и с ярлыка, или вот видел такой старый код, по идее можно наверно как-то в config.js...

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

Выделить код

Код:

//forum.mozilla-russia.org/viewtopic.php?pid=568343#p568343
//путь до папки с firefox.exe, в данном случае Aurora
var profileDir=Cc["@mozilla.org/file/directory_service;1"]
.getService(Ci.nsIProperties)
.get("CurProcD",Ci.nsIFile).path;
//путь до firefox.exe
var firefox=profileDir+"\\..\\Aurora\\firefox.exe";
startProcess(firefox,["-no-remote","-P","Test",url]);


Через lockPref не пашет, и не наследуется в user.js, только после запуска и ручная настройка... если один раз поставить и перезагрузить запоминает навсегда вроде.
support.mozilla.org/ru/kb/modifikaciya-firefox-s-pomoshyu-autoconfig

Отредактировано func4ptch4 (11-11-2019 22:59:03)

Отсутствует

 

№1388012-11-2019 09:48:40

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 318
UA: Firefox 70.0

Re: Custom Buttons

Браузер по умолчанию не возможно с ключом -no-deelevate , но рестарт получилось , аж два рестарта. С восстановлением вкладок и с полной очисткой профиля ...
Ключ работает.

Отредактировано solombala (14-11-2019 23:08:16)

Отсутствует

 

№1388118-11-2019 20:27:01

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 364
UA: Firefox 70.0

Re: Custom Buttons

Dumby подскажи если вариант сделать в about:addons на главной странице в каждом дополнении копии кнопок Отключить, Включить, Обновить как в старых версиях Лисы?

Отсутствует

 

№1388219-11-2019 22:06:50

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

Re: Custom Buttons

Dumby
В 72 CB будет работать?

Отсутствует

 

№1388321-11-2019 17:33:48

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

Re: Custom Buttons

Возможно ли поправить кнопки "Удалить куки текущего сайта" и "Переключить текущий поисковик" под [firefox] 68?

Отсутствует

 

№1388423-11-2019 09:19:36

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

Re: Custom Buttons

Andrey_Krropotkin пишет:

вариант сделать в about:addons на главной странице в каждом дополнении копии кнопок Отключить, Включить, Обновить

Похоже, нормально клонируются, только стиль к ним нужен.
Поклевал немного правил из чужих стилей, мне, вроде, подходяще.
Кстати, баг уже в autoland пошёл, так что ...

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

Выделить код

Код:

((cn, flag, css) => addEventListener("update", ({
    btnActions: ["preferences", "toggle-disabled", "remove", "install-update"],
    every(reason) {
        reason || addDestructor(this.every, this);
        var g = this.g || (this.g = Cu.import(
            "resource://gre/modules/AddonManager.jsm", {}
        ));
        var has = flag in g;
        if (reason) {
            if (!has || reason[5] != "e") return;
        } else if (has) return this;

        var method, wins = Array.from(
            g.AddonManagerInternal.addonListeners, Cu.getGlobalForObject
        ).filter(
            w => w.docShell && w.docShell.name == "html-view-browser"
        );
        if (reason) method = "destroyDoc", delete g[flag];
        else method = "initDoc", g[flag] = true;
        for(var win of new Set(wins)) this[method](win.document);
        return this;
    },
    initDoc(doc, onlyStyle) {
        if (doc[flag]) return; doc[flag] = true;
        doc.ownerGlobal.windowUtils.loadSheetUsingURIString(this.url, this.type);
        if (onlyStyle) return;
        for(var card of doc.getElementsByTagName("addon-card")) this.onCard(card);
    },
    destroyDoc(doc) {
        if (!doc[flag]) return; delete doc[flag];
        for(var span of Array.from(doc.getElementsByClassName(cn))) span.remove();
        doc.ownerGlobal.windowUtils.removeSheetUsingURIString(this.url, this.type);
    },
    get url() {
        this.type = windowUtils.USER_SHEET;
        this.btnActions = this.btnActions.map(
            action => `panel-list > panel-item[action="${action}"]`
        );
        delete this.url;
        return this.url = "data:text/css;charset=utf-8," +
            encodeURIComponent(css.replace(/;/g, " !important;"));
    },
    handleEvent(e) {
        var card = e.target;
        card.nodeName == "ADDON-CARD" && this.onCard(card);
    },
    onCard(card, again) {
        var div = card.querySelector("div.more-options-menu");
        if (!div) return again || card.ownerGlobal.requestAnimationFrame(
            () => this.onCard(card, true)
        );
        var [span] = card.getElementsByClassName(cn);
        if (span) span.textContent = "";
        else {
            var doc = card.ownerDocument;
            doc[flag] || this.initDoc(doc, true);
            div.before(span = doc.createElement("span"));
            span.className = cn;
            span.onclick = this.onclick;
        }
        var btns = this.btnActions.map(sel => {
            var item = div.querySelector(sel);
            return item && item.cloneNode(true);
        });
        var {addon} = card, cbbtn = addon.type == "custombuttons";
        for(var item of btns) if (item) {
            span.append(item);
            item.shadowRoot.querySelector("button").classList.add("cb-cloned-button");
            if (cbbtn) item.closest = this.closest;
        }
        if (addon.id != "custombuttons@xsms.org") return;
        var item = span.querySelector("[action=preferences]");
        if (item) item.removeAttribute("hidden"), item.onclick = this.cbprefs;
    },
    onclick(e) {
        InspectorUtils.removeContentState(e.target, 4, true);
        Services.focus.clearFocus(e.target.ownerGlobal);
    },
    closest(sel) {
        return sel == ".more-options-menu" || this.ownerGlobal
            .Element.prototype.closest.call(this, sel);
    },
    cbprefs(e) {
        var url = "chrome://custombuttons/content/prefs.xul";
        for(var win of Services.wm.getEnumerator(null))
            if (!win.closed && win.document.documentURI == url)
                return win.focus();
        e.view.requestAnimationFrame(() => openDialog(
            url, "", "chrome,titlebar,toolbar,centerscreen,modal"
        ));
    }
}).every(), true))("cb-cloned-buttons-container", "AAcbButtonizedFlag", `

    addon-card:not([expanded]) .card-contents {
        width: 1px;
    }
    span.cb-cloned-buttons-container {
        display: flex;
    }
    button.cb-cloned-button {
        width: auto;
        padding: 1px 6px 3px 6px;
        margin: 0 1px;
        background-image: none;
        border: 1px solid var(--in-content-box-border-color);
        border-radius: 0px;

        font-size: 13px;
        font-family: Segoe UI;
    }
    button.cb-cloned-button:after {
        display: none;
    }
`);


Garalf пишет:

В 72 CB будет работать?

Это почти невозможно знать заранее.

unter_officer пишет:

"Переключить текущий поисковик" под [firefox] 68?

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

Выделить код

Код:

(obj => {
    obj.observe();
    this._handleClick = () => obj.menupopup.openPopup(this);
    var topic = "browser-search-engine-modified";
    Services.obs.addObserver(obj, topic, false);
    addDestructor(() => Services.obs.removeObserver(obj, topic));
    if (!obj.excludeHiddenOneOffs) return;
    var obs = () => obj.upd = true;
    Services.prefs.addObserver(obj.pref, obs);
    addDestructor(() => Services.prefs.removeObserver(obj.pref, obs));
})({
    excludeHiddenOneOffs: false,

    get menupopup() {
        this.upd && this.rebuild();
        return this.popup;
    },
    get popup() {
        var popup = self.appendChild(document.createXULElement("menupopup"));
        popup.setAttribute("context", "");
        popup.setAttribute("position", "after_start");
        popup.setAttribute("oncommand", "Services.search.defaultEngine = event.target.engine");
        delete this.popup; return this.popup = popup;
    },
    async rebuild() {
        this.popup.textContent = "";
        var df = document.createDocumentFragment();
        var de = Services.search.defaultEngine.wrappedJSObject, jsde = this.json(de);
        if (this.excludeHiddenOneOffs)
            var ex = Services.prefs.getStringPref(this.pref, "").split(",");
        var check = true;
        for(var engine of await Services.search.getVisibleEngines()) {
            if (check && engine.name == de.name && this.json(engine) == jsde) {
                check = false; continue;
            }
            if (this.excludeHiddenOneOffs && ex.includes(engine.name)) continue;
            var menuitem = df.appendChild(document.createXULElement("menuitem"));
            menuitem.engine = engine;
            menuitem.label = engine.name;
            menuitem.image = this.img(engine);
            menuitem.className = "menuitem-iconic";
        }
        this.upd = this.popup.append(df);
    },
    observe() {
        var engine = Services.search.defaultEngine;
        (self.icon || document.getAnonymousElementByAttribute(
            self, "class", "toolbarbutton-icon"
        )).src = this.img(engine);
        self.tooltipText = engine.name;
        this.upd = true;
    },
    pref: "browser.search.hiddenOneOffs",
    json: e => JSON.stringify(e.toJSON()),
    img: e => e.iconURI ? e.iconURI.spec : "chrome://browser/skin/search-engine-placeholder.png"
});

Отсутствует

 

№1388523-11-2019 10:34:52

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 364
UA: Firefox 70.0

Re: Custom Buttons

Dumby спасибо, то что нужно

Отсутствует

 

№1388623-11-2019 12:56:34

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 131
UA: Firefox 70.0

Re: Custom Buttons

Всем привет. Помогите сделать кнопку со следующим функционалом:

- Копирование в буфер обмена названия активной вкладки
- Замена по регулярным (изменение буфера)

(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)
$1 $2 ($4) ($3)

Название вкладки Как чокнутые / Безумное веселье / La pazza gioia (Паоло Вирдзи / Paolo Virzì) [2016, Италия, Франция, драма, комедия, BDRip] MVO (СВ Студия) :: RuTracker.org

Результат (в буфере) Как чокнутые - Безумное веселье - La pazza gioia (Паоло Вирдзи - Paolo Virzì) (MVO (СВ Студия)) (2016)

Отсутствует

 

№1388723-11-2019 15:31:49

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

Re: Custom Buttons

Dumby пишет:

unter_officer пишет:

"Переключить текущий поисковик" под [firefox] 68?

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

Выделить код

Код:

(obj => {
    obj.observe();
    this._handleClick = () => obj.menupopup.openPopup(this);
    var topic = "browser-search-engine-modified";
    Services.obs.addObserver(obj, topic, false);
    addDestructor(() => Services.obs.removeObserver(obj, topic));
    if (!obj.excludeHiddenOneOffs) return;
    var obs = () => obj.upd = true;
    Services.prefs.addObserver(obj.pref, obs);
    addDestructor(() => Services.prefs.removeObserver(obj.pref, obs));
})({
    excludeHiddenOneOffs: false,

    get menupopup() {
        this.upd && this.rebuild();
        return this.popup;
    },
    get popup() {
        var popup = self.appendChild(document.createXULElement("menupopup"));
        popup.setAttribute("context", "");
        popup.setAttribute("position", "after_start");
        popup.setAttribute("oncommand", "Services.search.defaultEngine = event.target.engine");
        delete this.popup; return this.popup = popup;
    },
    async rebuild() {
        this.popup.textContent = "";
        var df = document.createDocumentFragment();
        var de = Services.search.defaultEngine.wrappedJSObject, jsde = this.json(de);
        if (this.excludeHiddenOneOffs)
            var ex = Services.prefs.getStringPref(this.pref, "").split(",");
        var check = true;
        for(var engine of await Services.search.getVisibleEngines()) {
            if (check && engine.name == de.name && this.json(engine) == jsde) {
                check = false; continue;
            }
            if (this.excludeHiddenOneOffs && ex.includes(engine.name)) continue;
            var menuitem = df.appendChild(document.createXULElement("menuitem"));
            menuitem.engine = engine;
            menuitem.label = engine.name;
            menuitem.image = this.img(engine);
            menuitem.className = "menuitem-iconic";
        }
        this.upd = this.popup.append(df);
    },
    observe() {
        var engine = Services.search.defaultEngine;
        (self.icon || document.getAnonymousElementByAttribute(
            self, "class", "toolbarbutton-icon"
        )).src = this.img(engine);
        self.tooltipText = engine.name;
        this.upd = true;
    },
    pref: "browser.search.hiddenOneOffs",
    json: e => JSON.stringify(e.toJSON()),
    img: e => e.iconURI ? e.iconURI.spec : "chrome://browser/skin/search-engine-placeholder.png"
});


Dumby, после перезапуска браузера кнопка перестает работать.

P.S. В консоли пишет: "Something tried to use the search service before it's been properly intialized. Please examine the stack trace to figure out what and where to fix it"
Как временное решение пока сделал задержку, обернув ваш код: setTimeout (()=> { ..... }, 5000);

Отредактировано unter_officer (23-11-2019 18:57:33)

Отсутствует

 

№1388823-11-2019 17:26:21

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

Re: Custom Buttons

Mrakobes666

Т.к. ты зажал адресс сайта(для чего вы это делаете, люди??), то чеерз переменную будет. Т.е. либо засылай в ф-цию текст, либо нет. Тогба будет браццо название открытого документа.

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

Выделить код

Код:


let url = "Как чокнутые / Безумное веселье / La pazza gioia (Паоло Вирдзи / Paolo Virzì) [2016, Италия, Франция, драма, комедия, BDRip] MVO (СВ Студия) :: RuTracker.org";

 function getCurTitle(text){
  let title, titleRe, badSymbols = new RegExp(/(\w+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)/gi), rSym = "$1$2($4)($3)";
    if(text) { title = text; } else { title = content.document.title; };
      titleRe = title.replace(badSymbols, rSym);
   return titleRe.replace(/\//g, "-");
 };

 alert(getCurTitle(url));
// или без передачи  alert(getCurTitle());

Отсутствует

 

№1388923-11-2019 21:21:12

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 131
UA: Firefox 70.0

Re: Custom Buttons

mokujin сейчас постараюсь объяснить, качаю кино, соответственно с рутрекера (в оконцовке первой строки есть), задача такая, жмакнул на кнопку - попало в буфер обмена не адовая строка со слэшами и мусорной инфой, а красивенькое наименования кинца, которое я сразу ввожу из буфера по ctrl+V в utorrent, помоги пожалуста, друже

а адрес страницы https://rutracker.org/forum/viewtopic.php?t=5751922 для экспериментов

в общем название фильма всегда соответствует названию вкладки, ПКМ на табе - скопировать название вкладки - копирует именно название кино, намного удобнее конечно, чем выделять курсором

и еще, сабжем я пользовался до квантума, сейчас лиса 70.1, как впилить то сюда, подписи цифровые отключил по методу   https://forum.mozilla-russia.org/viewtopic.php?id=70326 все равно пишет "не могу установить, поврежден ваш кастомбаттон"

Отредактировано Mrakobes666 (23-11-2019 21:26:53)

Отсутствует

 

№1389023-11-2019 21:29:24

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

Re: Custom Buttons

unter_officer пишет:

В консоли пишет: "Something tried to use the search service before it's been properly intialized.

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

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

Выделить код

Код:

(async obj => {
    Services.search.isInitialized || await Services.search.init();

Отсутствует

 

№1389123-11-2019 21:45:16

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

Re: Custom Buttons

Mrakobes666: ну ф-цию мы тебе сделали по составленной тобой регулярке.
Алертит нужный тебе формат, соттв-но твоему RegEx-у. Вот пруф с той ссылки что ты дал
https://thumbs2.imagebam.com/f9/7c/c6/775f9c1326160613.jpg
Просто вставляй эту ф-ция в свою кнопку и пиши куда хочешь. В буфер если, то вместо alert() делай

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

Выделить код

Код:


 gClipboard.write( getCurTitle() );

 function getCurTitle(text){
  let title, titleRe, badSymbols = new RegExp(/(\w+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)/gi), rSym = "$1$2($4)($3)";
    if(text) { title = text; } else { title = content.document.title; };
      titleRe = title.replace(badSymbols, rSym);
   return titleRe.replace(/\//g, "-");
 };

// alert(getCurTitle());


зы. чтоб не было непоняток, можно ещёб проверкe добавить, чтоб только на рутрэкере работало. Дописать вначале ченить типа
скрытый текст

Выделить код

Код:

/* Код */
gt();

function gt(){
 if(getDom() == "rutracker.org") {gClipboard.write( getCurTitle() );}
   else { alert("Только для сайта RuTracker.org"); };

 function getCurTitle(text){
  let title, titleRe, badSymbols = new RegExp(/(\w+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)/gi), rSym = "$1$2($4)($3)";
    if(text) { title = text; } else { title = content.document.title; };
      titleRe = title.replace(badSymbols, rSym);
   return titleRe.replace(/\//g, "-");
 };

 function getDom(){ return Services.eTLD.getBaseDomain(Services.io.newURI(content.location, null, null)); }
 
 };



<куски кодов\ф-ций понатырены с этого сайта, сюда же и возвращены ;) >

... а как прикручивать CB это уж сам смотри. Здесь есть все инструкции и даже два, помойму, варианта есть.  благодарочка Dumby :rock:

Отредактировано mokujin (23-11-2019 22:08:25)

Отсутствует

 

№1389223-11-2019 21:50:23

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

Re: Custom Buttons

Dumby пишет:

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

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

Выделить код

Код:

(async obj => {
    Services.search.isInitialized || await Services.search.init();


Так всё отлично. Спасибо.

А возможно ли ещё поправить кнопку Удалить куки текущего сайта под [firefox] 68?

Отсутствует

 

№1389324-11-2019 09:41:31

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 131
UA: Firefox 70.0

Re: Custom Buttons

mokujin вижу с алертом у Вас пашет, а у меня нет!!!!!!!!! СВ прикрутил, установил самы последний пофиксенный Dumby мод custom_buttons-0.0.7.0.0.6-fx-paxmod
, жму кнопку - и ничего в буфер не попадает((((, может нет кода инициализации, или что я делаю не так? Не ругайся, если я чего то туплю

https://i111.fastpic.ru/thumb/2019/1124/a0/fcf9e56bc6be8cde9e7f1c6a415213a0.jpeg

Отсутствует

 

№1389424-11-2019 10:26:19

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

Re: Custom Buttons

Значит в "квантумах" нету gClipboard.write() или заменено на что-то другое. Звиняй, не знаю. Пусть подскажут другие кто.
Замени на alert() , смотри в Консоль какие ошибки, подсказки тама есть.

Отсутствует

 

№1389524-11-2019 10:44:52

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 131
UA: Firefox 70.0

Re: Custom Buttons

mokujin консоль при  нажатии на кнопку молчит((

посоны, помогите страждующему, поджимаю ногу и прищуриваю глаз для жалолсти

Отсутствует

 

№1389624-11-2019 13:12:47

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

Re: Custom Buttons

unter_officer пишет:

А возможно ли ещё поправить кнопку Удалить куки текущего сайта

Возможно, наверное, но я для этого совсем неподходящ.
Может Cookies Permissions поставь, или WebExtensions какой-нибудь поищи.
А то как бы с меня чего плохого не приключилось.

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

Выделить код

Код:

(obj => {
    this.setAttribute("context", "");
    this.onclick = e => obj[e.button < 2](e);
})({
    true(e) {
        var domain = this.domain();
        if (!domain) return;

        this.cookies(domain);
        this.webappstore(domain);
        this.macromedia();

        if (e.button) for(var br of gBrowser.browsers) try {
            this.domain(br) == domain && br.reload();
        } catch(ex) {}
    },
    false(e) {
        e.ctrlKey || e.shiftKey ? gShowPopup(self) : this.window();
    },
    domain(br = gBrowser.selectedBrowser, res) {
        try {
            res = new URL(br.currentURI.spec).hostname;
            res = res.includes(".")
                ? Services.eTLD.getBaseDomainFromHost(res)
                : undefined;
        } finally {return res;}
    },
    remove(...args) {
        (this.remove = Services.cookies.remove.length == 4
            ? Services.cookies.remove
            : (h, n, p, a) => Services.cookies.remove(h, n, p, false, a)
        )(...args);
    },
    cookies(domain, has) {
        for(var {host, name, path, originAttributes, rawHost} of (
            Services.cookies.enumerator || Services.cookies.cookies
        )) Services.eTLD.hasRootDomain(rawHost, domain)
            && this.remove(host, name, path, originAttributes);
    },
    webappstore(domain) {
        var db = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]);
        var conn = Services.storage.openDatabase(db);
        conn.executeSimpleSQL(`DELETE FROM webappsstore2 WHERE scope LIKE "%${
            domain.split("").reverse().join("") + "."
        }%"`);
        conn.close();
    },
    macromedia() {
        var dir = Services.dirsvc.get("AppData", Ci.nsIFile);
        dir.append("Macromedia");
        dir.exists() && dir.isDirectory() && dir.remove(true);
        dir.create(dir.DIRECTORY_TYPE, 0o755);
    },
    get sdm() {
        this.url = "chrome://browser/content/preferences/siteDataSettings.x" +
            (parseInt(Services.appinfo.platformVersion) <= 71 ? "ul" : "html");
        delete this.sdm;
        return this.sdm = ChromeUtils.import(
            "resource:///modules/SiteDataManager.jsm"
        ).SiteDataManager;
    },
    async window() {
        var domain = this.domain();
        var win = Services.wm.getMostRecentWindow("Browser:SiteDataSettings");
        win && win.close();

        await this.sdm.updateSites();
        win = openDialog(this.url, "_blank", "");
        if (!domain) return;

        await new Promise(resolve => 
            win.addEventListener("DOMContentLoaded", resolve, {once: true})
        );
        var list = win.document.getElementById("sitesList");
        list.clearSelection = () => {
            delete list.clearSelection;
            list.selectedIndex = 0;
            list.focus();
        }
        win.document.getElementById("searchBox").inputField.editor
            .QueryInterface(Ci.nsIPlaintextEditor).insertText(domain);
    }
});


mokujin пишет:

Значит в "квантумах" нету gClipboard.write()

gClipboard не лисий, а от Custom Buttons.
А вот content в "постквантумах" да, не слишком полезен.
Лучше бы так предложил

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

Выделить код

Код:

var {label} = gBrowser.selectedTab;
var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)/;
re.test(label) && gClipboard.write(
    label.replace(re, "$1 $2 ($4) ($3)").replace(/ \/ /g, " - ")
);

Отсутствует

 

№1389724-11-2019 14:07:55

Mrakobes666
Участник
 
Группа: Members
Зарегистрирован: 03-03-2011
Сообщений: 131
UA: Firefox 70.0

Re: Custom Buttons

Dumby спасибо, милый друг! Как то по педристически, но я очень рад, сколько я мучался с фоксреплейсом и прочими автозаменялками, пока меня не осенило, такая простая кнопка, я очень рад!

Отсутствует

 

№1389824-11-2019 16:23:52

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

Re: Custom Buttons

Dumby пишет:

Возможно, наверное, но я для этого совсем неподходящ.
Может Cookies Permissions поставь, или WebExtensions какой-нибудь поищи.
А то как бы с меня чего плохого не приключилось.

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

Выделить код

Код:

(obj => {
    this.setAttribute("context", "");
    this.onclick = e => obj[e.button < 2](e);
})({
    true(e) {
        var domain = this.domain();
        if (!domain) return;

        this.cookies(domain);
        this.webappstore(domain);
        this.macromedia();

        if (e.button) for(var br of gBrowser.browsers) try {
            this.domain(br) == domain && br.reload();
        } catch(ex) {}
    },
    false(e) {
        e.ctrlKey || e.shiftKey ? gShowPopup(self) : this.window();
    },
    domain(br = gBrowser.selectedBrowser, res) {
        try {
            res = new URL(br.currentURI.spec).hostname;
            res = res.includes(".")
                ? Services.eTLD.getBaseDomainFromHost(res)
                : undefined;
        } finally {return res;}
    },
    remove(...args) {
        (this.remove = Services.cookies.remove.length == 4
            ? Services.cookies.remove
            : (h, n, p, a) => Services.cookies.remove(h, n, p, false, a)
        )(...args);
    },
    cookies(domain, has) {
        for(var {host, name, path, originAttributes, rawHost} of (
            Services.cookies.enumerator || Services.cookies.cookies
        )) Services.eTLD.hasRootDomain(rawHost, domain)
            && this.remove(host, name, path, originAttributes);
    },
    webappstore(domain) {
        var db = FileUtils.getFile("ProfD", ["webappsstore.sqlite"]);
        var conn = Services.storage.openDatabase(db);
        conn.executeSimpleSQL(`DELETE FROM webappsstore2 WHERE scope LIKE "%${
            domain.split("").reverse().join("") + "."
        }%"`);
        conn.close();
    },
    macromedia() {
        var dir = Services.dirsvc.get("AppData", Ci.nsIFile);
        dir.append("Macromedia");
        dir.exists() && dir.isDirectory() && dir.remove(true);
        dir.create(dir.DIRECTORY_TYPE, 0o755);
    },
    get sdm() {
        this.url = "chrome://browser/content/preferences/siteDataSettings.x" +
            (parseInt(Services.appinfo.platformVersion) <= 71 ? "ul" : "html");
        delete this.sdm;
        return this.sdm = ChromeUtils.import(
            "resource:///modules/SiteDataManager.jsm"
        ).SiteDataManager;
    },
    async window() {
        var domain = this.domain();
        var win = Services.wm.getMostRecentWindow("Browser:SiteDataSettings");
        win && win.close();

        await this.sdm.updateSites();
        win = openDialog(this.url, "_blank", "");
        if (!domain) return;

        await new Promise(resolve => 
            win.addEventListener("DOMContentLoaded", resolve, {once: true})
        );
        var list = win.document.getElementById("sitesList");
        list.clearSelection = () => {
            delete list.clearSelection;
            list.selectedIndex = 0;
            list.focus();
        }
        win.document.getElementById("searchBox").inputField.editor
            .QueryInterface(Ci.nsIPlaintextEditor).insertText(domain);
    }
});


Dumby, ну почему же сразу плохого.
Протестировал на пяти-шести сайтах, пока всё нормально работает. Посмотрим, как будет дальше.
Большое спасибо.

Отсутствует

 

№1389924-11-2019 20:53:18

solombala
Участник
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 318
UA: Firefox 70.0

Re: Custom Buttons

Dumby
Здраво! Что с прокруткой можно сделать... Настройки не помогают. Пока не дернешь разок  так нема плавной, вечно рвет вниз со всей дури, потом плавная...
Приморила, конкретно...

Отсутствует

 

№1390025-11-2019 03:13:08

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 182
UA: Firefox 70.0

Re: Custom Buttons

Dumby, поздравляю с || Сообщений: 1000 || -_-

Отсутствует

 

Board footer

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