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

На IRC-канале #mozilla-ru можно получить техническую консультацию онлайн и, конечно же, порцию общения.

№1395107-12-2019 13:27:37

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

Re: Custom Buttons

А куда подевался князь-анархист? Вроде он спец по about:addons . Теперь кнопка не работает "//Добавление на вкладке дополнения в меню расширений дополнительных пунктов" . Там в mozapps опять что-то рихтанули...
Да, а как независимо продублировать кнопку с одним параметром? Типа:

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

Выделить код

Код:

ps => {
    var s = "network.proxy.type";

    this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 1);

    var toggleImage = val => {
        this.icon.src = (val = ps.getIntPref(s, 1))
            ? this.image
            : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAADaElEQVR42pWTD0zUZRjHP7+fd3CAHhGFZInIQJ1/IKLWzMqh6eWIgQP/EC2RmXOuP+JMobCl2y3L2i3WIf5ZWI0xZWuizn8XmDP5oxxXrT9LvQYmIkOJDgWBH/frubu4EVubPduz3/s+7/v7vM/7fZ5X4f/bY+IPiLvFB0aDyuigksyXVJTI2wz0hTLB60UPrsk4SOlnWDcTavYw+H0JZ3/5F6ieV1an6199JsNo8Xvio3/q47JR/okZqXM3bX4hf7uN5nNjQRsFZKe8Ga72QPJkiDSBORTCQwKIIU1SE8alDsiZA+fbrmxd+/rbu2msDYK+JrdguV5TQW51KO29I2TMVHnUDHGRokaYD6DTP+T7KjjcGpZEI01/uLaUlhR/QtOZIOgIKwqy9MN7WPS5CVenTs5shXmxkBAFMRNBlW13BsUFdvKyRv7jBlo6Wt/ZtKX4AxocY0GFArITZTV19nbrj5ijFebI9eKlOA+Gg8kgymmB652+qvGRxUDvPVfphqISKxdOB0FHWVmYqR+yo5Sa6mjTFxMfqJhPI7MpkJHm9cMGejxa2IcZBqLDne+vKyrewflvxmu0xwf6mKYRCwlqvLRKGAbFgOpn9jHEXwzSwPXhlXmrjCTHtpSVWLe9xZn68RlVCMgoIOZLz8UQzkRCBGb0g7q5K7MJEjVqD2elGegfbq91nLBmU7M/CGqgYNN8vdKG8wYiIkyZFNDF3426L6azrwUWxCnkp+iim0LNT2C70HadvrKplNn8oE9ZuvjN36oq6e6P5sqt21KdHqLCIngmLk60CKHiok5lK2x7TqHgicABey/B1lO4PTevFeF4N/gM9CfLFxITobA2rYvXjqSTMWMdK+am+qv18mHavb1MW5IGB3NgeEROb/RKRmojHRzj8rdBkJiUiMFMkmYe/eLQbl5NzfRHu+5A7C6q+Zk8UwrssgQ6/7t2L+/VKVJl5Xf+vDYWFCF+186LqRt/PJjHvMmJMvfwpcvoXnNggYuuabnMAktS4Il0eDR21KvN3FCddP4wFvRfpj7L1OKdLLSmm2dAXjKsEZ2cUoA3jitn5dJ7abXfD4hEop4qZ1nVkofmJrEvC5bPhtpfIbsKGxdbNuMovC+Qz6YwaVU12dufT3l6OosSFBF6aD0nnPtx7ZTlc38DDl9EFHoV7LkAAAAASUVORK5CYII=";             
        this.tooltipText = val ? 'Все сайты через Socks5' : 'Без прокси'; 
    }
    toggleImage();
    ps.addObserver(s, toggleImage, false);
    addDestructor(() => ps.removeObserver(s, toggleImage));
})(Services.prefs);

this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() };


А другая с этим   this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 1);

Отредактировано solombala (07-12-2019 13:51:31)

Отсутствует

 

№1395207-12-2019 14:17:40

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

Re: Custom Buttons

□□□□□□□□□□□ пишет:

теперь бы дополнить строкой по замене двух запрещенных символов : и ? на ׃  и ‽ соответственно

Ну, я сейчас дополнил батарею реплейсов, вот так:

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

Выделить код

Код:

var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+ \((.+)\))( .+)?/;
var query = {active: true, currentWindow: true};

browser.browserAction.onClicked.addListener(async () => {
    var [tab] = await browser.tabs.query(query);
    var {title} = tab;
    re.test(title) && navigator.clipboard.writeText(
        title
            .replace(re, "$1 $2 ($4) ($3)")
            .replace(/ \/ /g, " - ")

            .replace(/: /g, "׃ ")
            .replace(/\? /g, "‽ ")
    );
});


и всё работает как и ожидалось.
Проверял на этих двух адресах:
скрытый текст

Выделить код

Код:

data:text/html;charset=utf-8,<title>Рэмбо: Последняя кровь / Rambo: Last Blood (Адриан Грюнберг / Adrian Grunberg) [2019, США, боевик, триллер, приключения, HDRip] Dub (iTunes) :: RuTracker.org</title>

data:text/html;charset=utf-8,<title>Куда ты пропала, Бернадетт? / Where'd You Go, Bernadette (Ричард Линклейтер / Richard Linklater) [2019, США, драма, комедия, детектив, BDRip] Dub (iTunes) :: RuTracker.org</title>


solombala пишет:

А другая с этим   this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 1);

Что значит «А»? Строка символ-в-символ точно такая же,
как и в коде под спойлером, не считая начальных пробелов.

Отсутствует

 

№1395307-12-2019 16:03:46

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

Re: Custom Buttons

Dumby
Извиняюсь  this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 2);
ручная настройка ...

Отсутствует

 

№1395407-12-2019 16:44:05

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

Re: Custom Buttons

Dumby все работает

вот расширение без подписи, иконки есть https://yadi.sk/d/ljDkR5awNv5OSQ

Отсутствует

 

№1395507-12-2019 23:32:07

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

Re: Custom Buttons

solombala, у меня работает, и путь примерно такой resource://FF/proxy.pac.
Правда в 73 не знаю, может и не пашет.

Задать путь к файлу в папке chrome

Выделить код

Код:

(()=>{ //Задать путь к файлу в папке chrome. .... - forum.mozilla-russia.org/viewtopic.php?pid=775488#p775488||775536#p775536
(({io,dirsvc,prefs})=>{
    var substitution="FF",dir="CurWorkD";
    var rph=io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
    addDestructor(reason=>reason[5]=="e"&&rph.hasSubstitution(substitution)&&rph.setSubstitution(substitution,null));
    if(rph.hasSubstitution(substitution))return;

    rph.setSubstitution(substitution,io.newFileURI(dirsvc.get(dir,Ci.nsIFile)));
})(Services);
})();


Dumby, нельзя как-то путь укоротить? примерно так resource://proxy.pac? и еще пути которые в .css, chrome:// не подойдут? если брать с папки chrome. Еще вопрос -_- обертку типа этого (()=>{ })(); можно убрать? так то я держу с другими кодами там их много.
Но мне показалось лишним так как он итак вроде завернут, или оставить?

Отредактировано func4ptch4 (08-12-2019 00:24:20)

Отсутствует

 

№1395608-12-2019 09:15:05

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

Re: Custom Buttons

solombala пишет:

Извиняюсь  this._handleClick = () => ps.setIntPref(s, ps.getIntPref(s, 0) ? 0 : 2);
ручная настройка ...

«ручная настройка» это 1
Хотелку объяснять, я так понимаю, не будешь.
Ну вот, например, нечто псевдоуниверсальное.

Задаёшь названия и иконки для всех вариантов,
затем правишь var config = […, …];
Два значения, между которыми переключаться.
Порядок важен: первое будет использоваться как то,
на которое пойдёт переключение, если текущее состояние
настройки какое-то другое третье (не первое и не второе).

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

Выделить код

Код:

(data => {
    var config = [0, 1];

    var pref = "network.proxy.type";
    var map = Object.create(null);
    for(var key in data) map[key[0]] = [key.slice(2), data[key]];
    var format = (now, to) => `Переключить на: ${map[to][0]}\nСейчас: ${map[now][0]}`;
    var to = val => val == config[0] ? config[1] : config[0];
    var getVal = () => {
        var val = Services.prefs.getIntPref(pref);
        return val in map ? val : 0;
    }
    var setState = () => {
        var val = getVal();
        this.icon.src = map[val][1];
        this.tooltipText = format(val, to(val));
    }
    this._handleClick = () => Services.prefs.setIntPref(pref, to(getVal()));
    setState();
    Services.prefs.addObserver(pref, setState);
    addDestructor(() => Services.prefs.removeObserver(pref, setState));
})({
    "0_direct": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "1_manual": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "2_pac": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "4_autodetect": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "5_system": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ=="
});


func4ptch4 пишет:

нельзя как-то путь укоротить? примерно так resource://proxy.pac?

Можно, если substitution будет "proxy.pac"
и в io.newFileURI() передать, собственно, сам файл, а не папку.

и еще пути которые в .css, chrome:// не подойдут?

Не понял.

Еще вопрос -_- обертку типа этого (()=>{ })(); можно убрать? так то я держу с другими кодами там их много.
Но мне показалось лишним так как он итак вроде завернут, или оставить?

Правильно показалось, можешь убрать.
И prefs (вместе с запятой перед ним) можешь удалить,
нигде в коде не используется.

Отсутствует

 

№1395708-12-2019 23:06:36

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

Re: Custom Buttons

Dumby
Заделал и это радует. прокси паки разные и их много. Папка в профиле , но не chrome , а просто папка Proxy///
Плюс используется network.proxy.type -1 , ну , тут сложнее , только один прокси Socks / Хотя, тоже можно кнопу сделать на разные , как с network.proxy.type -2
Да, но в 71 надо рихтануть в модулях ProxyScriptContext.jsm !

Отсутствует

 

№1395809-12-2019 01:11:04

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

Re: Custom Buttons

Garalf пишет:

kokoss
Вот тебе новое CB для 71 и не парься)

Сегодня обновился с 70 до 71 и CВ упал.

Скачал по ссылке из цитируемого поста, установил. СВ в дополнениях есть, но не работает.
Полистал форум по 71, СВ 0.0.7.0.0.8 вроде должен работать в этой 71 версии, но у меня не пашет.
Как оживить СВ?

Отредактировано leex (09-12-2019 01:14:40)

Отсутствует

 

№1395909-12-2019 01:28:41

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

Re: Custom Buttons

leex
У меня в [firefox] 71 работает эта версия CB


а та даже не устанавливается.

Отсутствует

 

№1396009-12-2019 03:20:04

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

Re: Custom Buttons

У меня не работает ни та, ни эта.
Но в дополнениях СВ есть
Может быть в конфиге что-то поменять?
На этом конфиге все прекрасно работало вплоть до 70 версии

Отредактировано leex (09-12-2019 03:20:58)

Отсутствует

 

№1396109-12-2019 12:28:59

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

Re: Custom Buttons

Dumby
Нет новой СВ ? В смысле, в 71 mozapps влепил от 70 , так ударило по СВ - не показывает настройки , может рихтануть что в Js или CSS самой СВ ?

Отсутствует

 

№1396209-12-2019 14:41:14

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

Re: Custom Buttons

leex пишет:

У меня не работает ни та, ни эта.
Но в дополнениях СВ есть
Может быть в конфиге что-то поменять?
На этом конфиге все прекрасно работало вплоть до 70 версии

Тогда эту версию:


и для установки использую этот способ: https://forum.mozilla-russia.org/viewtopic.php?id=70326

Отсутствует

 

№1396309-12-2019 14:49:14

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

Re: Custom Buttons

leex пишет:

установил. СВ в дополнениях есть, но не работает

А, при закрытом Firefox, папку startupCache
из Локального каталога профиля удалил?

solombala пишет:

в 71 mozapps влепил от 70 , так ударило по СВ - не показывает настройки , может рихтануть что в Js или CSS самой СВ ?

Да уж, на такие эскапады, определённо, не рассчитано.

скрытый текст
Ну попробуй. Три трёхстрочья. В каждом:

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

Если получится, этот пересобранный CB
в цепи версий, разумеется, не участвует.

Выделить код

Код:

\bootstrap.js
(this["about:addons"] = appVersion > 70
(this["about:addons"] = appVersion > 71


\chrome\custombuttons\content\addons\addons-prefs.js
var features = "chrome,titlebar,toolbar,centerscreen";
var features = "chrome,titlebar,toolbar,centerscreen,noopener";


\components\CustomButtonsService.js
openEditor: function (opener, uri, param) {
openEditor: function (opener, uri, param) { opener = opener && opener.windowRoot.ownerGlobal;

Отсутствует

 

№1396409-12-2019 15:37:21

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

Re: Custom Buttons

kokoss пишет:

Тогда эту версию:

И она не работает

и для установки использую этот способ.

Ну да, так и есть, в конфмгах дописаны данные из этих постов еще с 69 версии

Dumby пишет:

А, при закрытом Firefox, папку startupCache
из Локального каталога профиля удалил?

А у меня вообще нет такой папки в профиле

Отредактировано leex (09-12-2019 15:38:00)

Отсутствует

 

№1396509-12-2019 15:55:46

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

Re: Custom Buttons

leex пишет:

А у меня вообще нет такой папки в профиле

Ещё раз: имеется в виду «Локальный каталог», а не «Корневой каталог».
Открой вкладку с адресом about:profiles

Отсутствует

 

№1396609-12-2019 16:46:49

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

Re: Custom Buttons

Готово! Работает.
Большое спасибо, Dumby!

Отсутствует

 

№1396711-12-2019 17:27:14

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

Re: Custom Buttons

Dumby
В71 размер иконок СВ заманал... Как уменьшить?

скрытый текст
.card-heading-icon > .addon[type="custombuttons"] .icon (
  width: 16px !important;
  height: 16px !important;
)

Отсутствует

 

№1396811-12-2019 18:43:29

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

Re: Custom Buttons

solombala
Вот парочка вариантов, которые работают.
Может ещё как-нибудь можно. А вот как лучше — без понятия.

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

Выделить код

Код:

addon-card[addon-id^="custombutton://buttons/"] .addon-icon {
    width: 16px !important;
    height: 16px !important;
    /*
    padding-top: 3px !important;
    */
}
Выделить код

Код:

addon-list[type=custombuttons] .addon-icon {
    width: 16px !important;
    height: 16px !important;
    /*
    padding-top: 3px !important;
    */
}

Отсутствует

 

№1396911-12-2019 19:12:45

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

Re: Custom Buttons

Dumby
Если знать куда вставлять, то шикардос! Так, раз уж ты король кнопок , как тут выровнять? Значок могу шевелить , а текст то не опустится...Тако курвье будали ово мазиловци.
https://s19.directupload.net/images/191212/temp/fzn79br5.png

Отредактировано solombala (12-12-2019 11:48:41)

Отсутствует

 

№1397012-12-2019 14:01:48

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

Re: Custom Buttons

solombala пишет:

как тут выровнять? Значок могу шевелить , а текст то не опустится...

Попробуй так:

Выделить код

Код:

addon-list[type=custombuttons] .card-contents {
    padding-top: 3px !important;
}

Отредактировано unter_officer (12-12-2019 14:02:02)

Отсутствует

 

№1397112-12-2019 14:20:42

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

Re: Custom Buttons

unter_officer
Шикарно! Жаль размер текста никак...

Отсутствует

 

№1397212-12-2019 15:25:12

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

Re: Custom Buttons

solombala пишет:

Жаль размер текста никак...

addon-list[type=custombuttons] .addon-name {
    font-size: 22px !important;
}

Отсутствует

 

№1397312-12-2019 15:53:19

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

Re: Custom Buttons

unter_officer

unter_officer пишет:

addon-list[type=custombuttons] .addon-name {
    font-size: 22px !important;
}

Не срабатывает. И самих аддонов тоже не могу сделать.

Отсутствует

 

№1397412-12-2019 16:22:15

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

Re: Custom Buttons

solombala пишет:

И самих аддонов тоже не могу сделать.

В этом коде font-size не для всех аддонов, а только для СВ.

solombala пишет:

Не срабатывает.

Не срабатывает возможно из-за версии [firefox], я на 68 ESR проверял, там срабатывает. А [firefox] 71+ я пока не устанавливал, поэтому проверить не могу.

Отсутствует

 

№1397513-12-2019 08:37:08

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

Re: Custom Buttons

Dumby
В 71 отрихтованая Вами Flip-Close_Tab ....ПКМ -  на prev Tab - не пашет ( это я па правый переделал  , но сам код не трогал) В 70 - океу...

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

Выделить код

Код:

var {interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");

var flipclosetabStatic = {
    customjsm: false,
    initialized: false,
    get styleURI() {
        delete this.styleURI;
        return this.styleURI = Services.io.newURI("chrome://flip_close_tab/content/button.css", null, null);
    },
    get buttonStrings() {
        delete this.buttonStrings;
        return this.buttonStrings = Services.strings.createBundle("chrome://flip_close_tab/locale/button.properties");
    },
    get CustomizableUI() {
        delete this.CustomizableUI;
        var _CustomizableUI = null;
        try {
            _CustomizableUI = Cu.import("resource:///modules/CustomizableUI.jsm", {}).CustomizableUI;
        } catch(e) {
            try {
                _CustomizableUI = Cu.import("chrome://flip_close_tab/content/customizable.jsm", {}).CustomizableUI;
                this.customjsm = true;
            } catch(e) {}
        }
        return this.CustomizableUI = _CustomizableUI;
    },
    start: function(win) {
        var onLoad = () => {
            win.removeEventListener("load", onLoad);
            this.loadIntoWindow(win);
        };
        win.addEventListener("load", onLoad);
    },
    get loadIntoWindow() {
        delete this.loadIntoWindow;
        this.init();
        return this.loadIntoWindow = function(win) {
            var obj = new FlipCloseTab();
            obj.load(win);
            Object.defineProperty(win, "_Flip_Close_Tab_Prototype", {
                value: obj,
                writable: false,
                configurable: true,
                enumerable: false
            });
        };
    },
    init: function() {
        if (this.initialized || !this.CustomizableUI) return;
        this.initialized = true;
        var cWidget = {
            id: "f-flip-tabs",
            type: "custom",
            label: flipclosetabStatic.buttonStrings.GetStringFromName("f-flip-tabs.label"),
            tooltiptext: flipclosetabStatic.buttonStrings.GetStringFromName("f-flip-tabs.tooltip"),
            defaultArea: this.CustomizableUI.AREA_NAVBAR,
            onBuild: function(document) {
                var window = document.defaultView;
                flipclosetabStatic.stylifyButton(window, true);
                var toolbarbutton_0 = (document.createXULElement || document.createElement).call(document, "toolbarbutton");
                toolbarbutton_0.id = "f-flip-tabs";
                toolbarbutton_0.setAttribute("label", flipclosetabStatic.buttonStrings.GetStringFromName("f-flip-tabs.label"));
                toolbarbutton_0.setAttribute("tooltiptext", flipclosetabStatic.buttonStrings.GetStringFromName("f-flip-tabs.tooltip"));
                toolbarbutton_0.setAttribute("context", false);
                toolbarbutton_0.classList.add("toolbarbutton-1");
                toolbarbutton_0.classList.add("chromeclass-toolbar-additional");
                toolbarbutton_0.addEventListener("click", function(event) {
                    var gtBrowser = window.gBrowser;
                    if (event.button == 2) {
                        var old = gtBrowser.selectedTab;
                        var tabs = Array.filter(old.parentNode.getElementsByAttribute("flipselectedID", "*"), tab => !tab.hidden && !tab.closing);
                        var last  = 2;
                        var prevTab = null;
                        tabs.forEach((tab)=> {
                            let s = +tab.getAttribute("flipselectedID");
                            if (s && s > last && old != tab) {
                                prevTab = tab;
                                last = s;
                            }
                        });
                        if (prevTab !== null) 
                        gtBrowser.selectedTab = prevTab;
                    } else if (event.button == 1) {
                        gtBrowser.removeAllTabsBut(gtBrowser.selectedTab);
                    } else if (event.button == 0) {
                        event.preventDefault();
                        event.stopPropagation();
                        gtBrowser.removeTab(gtBrowser.selectedTab);
                    }
                }, false);
                return toolbarbutton_0;
            }
        };
        if (this.customjsm) {
            this.CustomizableUI.addListener();
            cWidget.onloadStylePalette = function(window) {
                flipclosetabStatic.stylifyButton(window, true);
            };
        }
        try {
            this.CustomizableUI.createWidget(cWidget);
        } catch(e) {}
    },
    getWindowUtils: function(window) {
        var has = "windowUtils" in window &&
            window.windowUtils instanceof Ci.nsIDOMWindowUtils;
        return (this.getWindowUtils = has
            ? window => window.windowUtils
            : window => window.QueryInterface(Ci.nsIInterfaceRequestor)
                .getInterface(Ci.nsIDOMWindowUtils)
        )(window);
    },
    stylifyButton: function(window, stylify) {
        var method = stylify ? "loadSheet" : "removeSheet";
        try {
            this.getWindowUtils(window)[method](
                this.styleURI, Ci.nsIDOMWindowUtils.USER_SHEET
            );
        } catch(ex) {
            Cu.reportError(ex);
        }
    },
    uninit: function() {
        if (!this.initialized) return;
        try {
            this.CustomizableUI.destroyWidget("f-flip-tabs");
        } catch(e) {}
        if (this.customjsm) {
            this.CustomizableUI.removeListener();
            Cu.unload("chrome://flip_close_tab/content/customizable.jsm");
        }
        var windows = Services.wm.getEnumerator("navigator:browser");
        while (windows.hasMoreElements()) {
            var win = windows.getNext();
            if (win.QueryInterface) win = win.QueryInterface(Ci.nsIDOMWindow);
            try {
                if ("_Flip_Close_Tab_Prototype" in win) {
                    win._Flip_Close_Tab_Prototype.unload(true);
                    delete win._Flip_Close_Tab_Prototype;
                }
                this.stylifyButton(win);
            } catch(e) {}
        }
    }
};

var filterTabs = node => {
    var func = tab => !tab.hidden && !tab.closing;
    return (filterTabs = "from" in Array
        ? node => Array.from(node.getElementsByAttribute("flipselectedID", "*")).filter(func)
        : node => Array.filter(node.getElementsByAttribute("flipselectedID", "*"), func)
    )(node);
}

function FlipCloseTab() {
    this.gtBrowser = null;
    this.removeListeners = null;
    this.blurTab = null;
    this.eventTabClose = false;
}

FlipCloseTab.prototype = {
    load: function(win) {
        var gtBrowser = this.gtBrowser = win.gBrowser || win.getBrowser();
        var tabid = 1;
        var TabSelect = (event) => {
            var tab = event.target;
            tab.setAttribute("flipselectedID", tabid++);
        };
        var TabClose = (event) => {
            var old = event.target;
            if (!old.selected) return;
            var tabs = filterTabs(old.parentNode);
            var last  = 0;
            var prevTab = null;
            tabs.forEach((tab) => {
                var s = +tab.getAttribute("flipselectedID");
                if (s && s > last && old != tab) {
                    prevTab = tab;
                    last = s;
                }
            });
            if (prevTab !== null && !prevTab.closing)
                gtBrowser.selectedTab = prevTab;
        };
        gtBrowser.tabContainer.addEventListener("TabSelect", TabSelect, false);
        if ("_blurTab" in gtBrowser) {
            var blurTab = this.blurTab = gtBrowser._blurTab;
            gtBrowser._blurTab = function _blurTab() {
                var old = arguments[0];
                if (!old.selected) return;
                var tabs = filterTabs(old.parentNode);
                var last  = 0;
                var prevTab = null;
                tabs.forEach((tab) => {
                    var s = +tab.getAttribute("flipselectedID");
                    if (s && s > last && old != tab) {
                        prevTab = tab;
                        last = s;
                    }
                });
                if (prevTab !== null && !prevTab.closing) {
                    this.selectedTab = prevTab;
                    return;
                }
                return blurTab.apply(this, arguments);
            };
        } else {
            gtBrowser.tabContainer.addEventListener("TabClose", TabClose, true);
            this.eventTabClose = true;
        }
        this.removeListeners = function() {
            gtBrowser.tabContainer.removeEventListener("TabSelect", TabSelect, false);
            if (this.eventTabClose)
                gtBrowser.tabContainer.removeEventListener("TabClose", TabClose, true);
        };
        var sel = gtBrowser.selectedTab;
        if (sel && !sel.hidden)
            sel.setAttribute("flipselectedID", tabid++);
    },
    unload: function(shutdown = false) {
        this.removeListeners();
        if (shutdown) {
            if (this.blurTab !== null)
                this.gtBrowser._blurTab = this.blurTab;
            var tabs = filterTabs(this.gtBrowser.tabContainer);
            tabs.forEach((tab) => {
                tab.removeAttribute("flipselectedID");
            });
        }
    }
};

var WindowListener = {
    onOpenWindow: function(aWindow) {
        var win = aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
        function onWindowLoad() {
            win.removeEventListener("load", onWindowLoad);
            if (win.document.documentElement.getAttribute("windowtype") == "navigator:browser")
                flipclosetabStatic.loadIntoWindow(win);
        }
        win.addEventListener("load", onWindowLoad);
    },
    onCloseWindow: function(aWindow) {
        var win = aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
        if (win.document.documentElement.getAttribute("windowtype") == "navigator:browser" && "_Flip_Close_Tab_Prototype" in win)
            win._Flip_Close_Tab_Prototype.unload();
    },
    onWindowTitleChange: function(aWindow, newTitle) { }
};

function startup(data, reason) {
    var wm = Services.wm;
    var windows = wm.getEnumerator(null);
    while (windows.hasMoreElements()) {
        var win = windows.getNext();
        if (win.QueryInterface) win = win.QueryInterface(Ci.nsIDOMWindow);
        try {
            var type = win.document.documentElement.getAttribute("windowtype");
            if (type == "navigator:browser")
                flipclosetabStatic.loadIntoWindow(win);
            else if (type == "navigator:blank")
                flipclosetabStatic.start(win);
        } catch(e) {}
    }
    wm.addListener(WindowListener);
}

function shutdown(data, reason) {
    if (reason == APP_SHUTDOWN)
        return;
    flipclosetabStatic.uninit();
    Services.wm.removeListener(WindowListener);
}

function install(data, reason) { }

function uninstall(data, reason) { }

Отсутствует

 

Board footer

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