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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№1447615-03-2020 20:29:43

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Custom Buttons

Dumby
Вот это класс!

Отсутствует

 

№1447715-03-2020 22:38:47

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

Re: Custom Buttons

Andrey_Krropotkin пишет

в function saveFavicon() вместо строчки - saveImageURL(gBrowser.selectedTab.image, getSiteName(), null, false, false, null, window.document);

А можешь целиком исправленный этот блок выложить
// Сохранить иконку текущего сайта с диалогом сохранения .............  ?
а то я видать что-то не то меняю, она у меня не заводится.

Отредактировано voqabuhe (15-03-2020 22:39:36)

Отсутствует

 

№1447816-03-2020 07:56:41

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

Re: Custom Buttons

voqabuhe пишет

А можешь целиком исправленный этот блок выложить

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

Выделить код

Код:

// Сохранить иконку текущего сайта с диалогом сохранения .............
function saveFavicon() {
       var uri = gBrowser.currentURI;
       function getSiteName() {
                  try { var domain = uri.host.split('.') } catch(e) { return "" };
                   domain = (domain.length == 2) ? domain[0] : domain[1]
                   return domain.charAt(0).toUpperCase() + domain.slice(1).split('.')[0] + " ";  
            };
       var url = gBrowser.selectedTab.image;
       url && saveImageURL(
        url, getSiteName(), null, false, false, null, null,
        /^data:(image\/[^;,]+)/i.test(url) ? RegExp.$1.toLowerCase() : Cc["@mozilla.org/mime;1"]
            .getService(Ci.nsIMIMEService).getTypeFromURI(Services.io.newURI(url)),
        null, PrivateBrowsingUtils.isContentWindowPrivate(content || window), document.nodePrincipal
    );
};

Отсутствует

 

№1447916-03-2020 15:41:49

VitaR
Участник
 
Группа: Members
Зарегистрирован: 05-03-2005
Сообщений: 277
UA: Firefox 60.0

Re: Custom Buttons

Какую версию (и, главное, откуда) ставить на текущий Waterfox-Classic (+e10s, +Classic Theme Restorer), то бишь, как я понимаю, 56.3?
Ставил из CAA 0.5.8.9/2016 г, после рестарта внизу окна давно забытая панель неправильного XUL, аж на ностальгию пробило. На МозДеве вообще 0.0.5.5/2011.

Отредактировано VitaR (16-03-2020 17:29:32)

Отсутствует

 

№1448016-03-2020 18:16:03

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

Re: Custom Buttons

Andrey_Krropotkin
Спасибо.

Отсутствует

 

№1448116-03-2020 20:26:34

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

Re: Custom Buttons

VitaR пишет

Какую версию (и, главное, откуда) ставить на текущий Waterfox-Classic (+e10s, +Classic Theme Restorer), то бишь, как я понимаю, 56.3?

Ох, разве вспомнишь. Есть свидетельство от kokoss.
Точно вычислить самую оптимальную не возьмусь.
Скажем так: последняя оверлейная версия, похоже, здесь.

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

А так-то, поставил на Waterfox Classic 2020.03.1 и, на первый взгляд, в основном, всё работает.
Если в папке профиля осталась папка custombuttons c <parsererror>'ами от «неправильного XUL»,
то, после установки, следует закрыть Waterfox и удалить эту папку.

Отсутствует

 

№1448217-03-2020 00:38:40

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

Re: Custom Buttons

Dumby а этот код можно подправить

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

Выделить код

Код:

//Показать адрес существующей закладки при наведении на звездочку
BookmarkingUI.star.onmouseenter =e=> {
   var {bookmarks, placesRootId, tagsFolderId} = PlacesUtils, result = []; 
   for( var id of BookmarkingUI._itemIds ) {
        var arr = [];
        while((id = bookmarks.getFolderIdForItem(id)) != placesRootId) {
              if (id == tagsFolderId) { arr = []; break; }
              arr.unshift(bookmarks.getItemTitle(id) || "(без заголовка)");
              }
   arr.length && result.push(arr.join("\\"));
   }
   if (result.join()) e.target.tooltipText = "Адрес закладки:\n" + result.join("\n"); 
};

Отсутствует

 

№1448317-03-2020 16:45:54

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

Re: Custom Buttons

Andrey_Krropotkin пишет

а этот код можно подправить

Не знаю, можно, наверно

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

Выделить код

Код:

((bu, bm, {star} = bu) => addEventListener("mouseenter", {
    async handleEvent() {
        if (!this.starred) return;
        star.tooltipText = "\u3164";
        var result = [];
        await this.fetch();
        for(var guid of this.guids) {
            var arr = [];
            while(true) {
                if (!this.hover) return;
                var res = await bm.fetch(guid);
                if ((guid = res.parentGuid) == bm.rootGuid) {
                    arr.unshift(bm.getLocalizedTitle(res));
                    break;
                }
                arr.unshift(res.title || "[Безымянная папка]");
            }
            result.push(arr.join("\\"));
        }
        this.hover && this.setTooltip(result);
    },
    get fetch() {
        addDestructor(() => this.starred && document.l10n.translateElements([star]));
        var set = this.guids = new Set();
        var args = [b => set.add(b.parentGuid), {concurrent: true}];
        delete this.fetch; return this.fetch = () => set.clear()
            || bm.fetch({url: gBrowser.currentURI.spec}, ...args);
    },
    setTooltip(arr) {
        var m = arr.length > 1;
        var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`;
        document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text;
    },
    get tt() {
        var list = InspectorUtils.getChildrenForNode(document.documentElement, true);
        delete this.tt; return this.tt = list.item(list.length - 1);
    },
    get starred() {return bu._itemGuids.size;},
    get hover() {return star.matches(":hover");}
}, false, star || 1))(BookmarkingUI, PlacesUtils.bookmarks);

Отсутствует

 

№1448417-03-2020 17:31:26

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

Re: Custom Buttons

Dumby пишет

Не знаю, можно, наверно

А можешь ещё добавить, если вкладка не в закладках, чтобы при наведение на звёздочку показывало последнюю папку куда добавлялась закладка?

Отредактировано voqabuhe (17-03-2020 17:48:15)

Отсутствует

 

№1448517-03-2020 20:13:31

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

Re: Custom Buttons

Dumby спасибо

Отсутствует

 

№1448617-03-2020 22:44:52

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 957
UA: Firefox 74.0

Re: Custom Buttons

Dumby

Dumby пишет

Не знаю, можно, наверно

а можно ли этот код адаптировать для custom_script.js по аналогии как было с кодом для middlemouse.paste (Dumby > 13-02-2020 09:33:35)

Отсутствует

 

№1448718-03-2020 20:34:06

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

Re: Custom Buttons

voqabuhe пишет

А можешь ещё добавить, если вкладка не в закладках, чтобы при наведение на звёздочку показывало последнюю папку куда добавлялась закладка?

Не, я не знаю откуда взять об этом информацию.
Можно попробовать подрядить обсёрвер, чтобы он это дело пас,
но изначально всё равно неоткуда, со всеми вытекающими

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

Выделить код

Код:

((g, id, bm, bu, {star} = bu) => {
    addDestructor(r => r[5] == "e" && id in g && g[id].observe(r));
    var bobs = g[id];
    if (!bobs) {
        var fGuid = id + "Guid", pref = "CB." + fGuid;
        var {obs, prefs} = Services, pobs = PlacesObservers;
        var mk = PlacesUIUtils.LAST_USED_FOLDERS_META_KEY;
        bobs = g[id] = {
            async init() {
                bm.addObserver(this);
                pobs.addListener(["bookmark-added"], this.added = this.added.bind(this));
                obs.addObserver(this, "quit-application-granted", false);
                var guid = g[fGuid] || prefs.getStringPref(pref, "");
                if (!guid) try {var [guid] = await PlacesUtils.metadata.get(mk, []);}
                catch(ex) {guid = bm.unfiledGuid;}
                this.guids.length || this.guids.push(guid);
            },
            observe(arg) {
                delete g[id];
                bm.removeObserver(this);
                pobs.removeListener(["bookmark-added"], this.added);
                obs.removeObserver(this, "quit-application-granted");
                var [guid] = this.guids;
                if (!arg) return prefs.setStringPref(pref, guid);
                if (arg[0] == "u") return g[fGuid] = guid;
                prefs.clearUserPref(pref); delete g[fGuid];
            },
            guids: [],
            skipTags: true,
            skipDescendantsOnItemRemoval: true,
            QueryInterface: g.ChromeUtils.generateQI([Ci.nsINavBookmarkObserver]),
            record(type, src, guid) {
                if (type == bm.TYPE_BOOKMARK && src == bm.SOURCES.DEFAULT) this.guids[0] = guid;
            },
            added(events) {
                for(var e of events) this.record(e.itemType, e.source, e.parentGuid);
            },
            onItemMoved(a, b, c, d, e, itemType, f, oldParentGuid, newParentGuid, source) {
                newParentGuid != oldParentGuid && this.record(itemType, source, newParentGuid);
            }
        };
        var ps = ["onBeginUpdateBatch", "onEndUpdateBatch", "onItemRemoved", "onItemChanged", "onItemVisited"];
        var noop = () => {}; for(var p of ps) bobs[p] = noop; bobs.init();
    }
    addEventListener("mouseenter", {
        async handleEvent() {
            var starred = bu._itemGuids.size;
            star.tooltipText = this.char;
            starred && await this.fetch();
            var result = [];
            for(var guid of (starred ? this : bobs).guids) {
                var arr = [];
                while(true) {
                    if (!this.hover) return;
                    var res = await bm.fetch(guid);
                    if ((guid = res.parentGuid) == bm.rootGuid) {
                        arr.unshift(bm.getLocalizedTitle(res));
                        break;
                    }
                    arr.unshift(res.title || "[Безымянная папка]");
                }
                result.push(arr.join("\\"));
            }
            this.hover && this.setTooltip(result, starred);
        },
        get fetch() {
            var set = this.guids = new Set();
            var args = [b => set.add(b.parentGuid), {concurrent: true}];
            delete this.fetch; return this.fetch = () => set.clear()
                || bm.fetch({url: gBrowser.currentURI.spec}, ...args);
        },
        setTooltip(arr, starred) {
            var text = arr.join("\n");
            if (starred) {
                var m = arr.length > 1;
                text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${text}`;
            }
            document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text;
        },
        get char() {
            addDestructor(() => document.l10n.translateElements([star]));
            delete this.char; return this.char = "\u3164";
        },
        get tt() {
            var list = InspectorUtils.getChildrenForNode(document.documentElement, true);
            delete this.tt; return this.tt = list.item(list.length - 1);
        },
        get hover() {return star.matches(":hover");}
    }, false, star || 1);
})(
    Cu.getGlobalForObject(Cu), "CBStarTooltipBookmarkAddedListener", PlacesUtils.bookmarks, BookmarkingUI
);

Inko7 пишет

а можно ли этот код адаптировать для custom_script.js

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

Иначе, проще и логичнее адаптировать код для custom_script_win.js

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

Выделить код

Код:

try {((bu, bm, {star} = bu) => {
    var listener = {
        async handleEvent() {
            if (!bu._itemGuids.size) return;
            star.tooltipText = "\u3164";
            var result = [];
            await this.fetch();
            for(var guid of this.guids) {
                var arr = [];
                while(true) {
                    if (!this.hover) return;
                    var res = await bm.fetch(guid);
                    if ((guid = res.parentGuid) == bm.rootGuid) {
                        arr.unshift(bm.getLocalizedTitle(res));
                        break;
                    }
                    arr.unshift(res.title || "[Безымянная папка]");
                }
                result.push(arr.join("\\"));
            }
            this.hover && this.setTooltip(result);
        },
        get fetch() {
            var set = this.guids = new Set();
            var args = [b => set.add(b.parentGuid), {concurrent: true}];
            delete this.fetch; return this.fetch = () => set.clear()
                || bm.fetch({url: gBrowser.currentURI.spec}, ...args);
        },
        setTooltip(arr) {
            var m = arr.length > 1;
            var text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${arr.join("\n")}`;
            document.tooltipNode == star ? this.tt.label = text : star.tooltipText = text;
        },
        get tt() {
            var list = InspectorUtils.getChildrenForNode(document.documentElement, true);
            delete this.tt; return this.tt = list.item(list.length - 1);
        },
        get hover() {return star.matches(":hover");}
    };
    star.addEventListener("mouseenter", listener);
    addEventListener("unload",
        () => star.removeEventListener("mouseenter", listener)
    , {once: true});
})(BookmarkingUI, PlacesUtils.bookmarks);} catch(ex) {Cu.reportError(ex);}

Отсутствует

 

№1448818-03-2020 21:05:20

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Custom Buttons

Dumby
Это Ваш код (очистить историю закрытых вкладок)

скрытый текст
var closedTabCount = SessionStore.getClosedTabCount(window);
  while(closedTabCount--) SessionStore.forgetClosedTab(window,0);

Жаль кнопка Undoclose не тухнет , пока мышкой не наведешь...Чтобы еще приделать к коду, чтоб видно было , что тухнет?

Отсутствует

 

№1448918-03-2020 22:25:45

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

Re: Custom Buttons

Dumby пишет

Не, я не знаю откуда взять об этом информацию.

А в том же окне звёздочки из строки Папка никак нельзя взять, там же как раз остаётся последняя папка в которую добавлялась закладка?

Dumby пишет

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

  Не, так ничего к сожалению не показывает.  А не, вру, извините, вроде всё показывает, буду посмотреть. Спасибо большое.

Отредактировано voqabuhe (18-03-2020 22:34:26)

Отсутствует

 

№1449018-03-2020 23:45:23

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 957
UA: Firefox 74.0

Re: Custom Buttons

Dumby

Dumby пишет

Можно, но хотелось бы услышать обоснование

я бы объяснил, если бы понимал все отличия между custom_script.js | custom_script_all_win.js | custom_script_win.js (инфу толком не нашел)
просто, я как-то надолго задержался на старом FF52esr и теперь, когда решил обновиться, отчасти не понимаю, что тут теперь  да как
даже не смог запустить само расширение CB
ткните пожалуйста меня носом, где взять РАБОЧИЙ комплект раскладок файлов по папкам и само дополнение

Добавлено:
спасибо, код для звездочки работает

Отредактировано Inko7 (18-03-2020 23:48:28)

Отсутствует

 

№1449119-03-2020 00:35:19

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

Re: Custom Buttons

Dumby
можно поправить пожалуйста эту кнопку для [firefox] 74.0

Инициализация

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

Выделить код

Код:

// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ........................


var icon = this.icon ||document.getAnonymousElementByAttribute( this, 'class', 'toolbarbutton-icon');
icon.style.width = '16px', icon.style.height = '16px';

this.bottomPanel = function(aURL) {
  var prefBranch = "custombuttons.bottomPanel."

  if(!aURL && aURL != "") {
    try {
      aURL = gPrefService.getCharPref(prefBranch + "url");
    } catch(ex) {
      aURL = "";
    }
  }
  if(aURL == "") return;

  if(aURL == gURLBar.value && !aURL.match(/^\w+?\:/)) aURL = "http://" + aURL;

  var panelID = "bottom-panel";
  var gPanel = document.getElementById(panelID);
  var height;
  try {
    height = gPrefService.getIntPref(prefBranch + "height");
  } catch(ex) {
    height = 400;
  }

  if(gPanel) {

    var src = gPanel.firstChild.nextSibling.getAttribute("src");
    if(aURL != src) {
      gPanel.firstChild.nextSibling.setAttribute("src", aURL);
      //gPanel.firstChild.nextSibling.loadURI(aURL);
    } else {
      gPrefService.setIntPref(prefBranch + "height", gPanel.height);
      gPanel.parentNode.removeChild(gPanel.previousSibling);
      gPanel.parentNode.removeChild(gPanel);
    }

  } else {

    var appContent = document.getElementById("appcontent");

    var spl = appContent.appendChild(document.createXULElement("splitter"));
        spl.setAttribute("collapse", "after");
        spl.style.border = "none";
        spl.style.borderTop = "1px solid threedhighlight";
        spl.setAttribute("onclick", "this.setAttribute('state', '');");

    var box = appContent.appendChild(document.createXULElement("hbox"));
        box.id = panelID;
        box.height = height;
        box.orient = "vertical";

    var tbr = box.appendChild(document.createXULElement("toolbar"));
        tbr.setAttribute("fullscreentoolbar", true);

    var spr = tbr.appendChild(document.createXULElement("spacer"));
        spr.setAttribute("flex", 1);

    var btn = tbr.appendChild(document.createXULElement("toolbarbutton"));
        btn.style.listStyleImage = "url(chrome://global/skin/icons/Minimize.gif)";
        btn.minimize = function() {
          var gPanel = document.getElementById("bottom-panel");
          gPanel.previousSibling.setAttribute("state", "collapsed");
        }
        btn.setAttribute("oncommand", "this.minimize()");

    var btc = tbr.appendChild(document.createXULElement("toolbarbutton"));
        btc.className = "tabs-closebutton";        
        btc.closePanel = function() {
          var gPanel = document.getElementById("bottom-panel");
         // gPrefService.setIntPref(prefBranch + "height", gPanel.height);
          gPanel.parentNode.removeChild(gPanel.previousSibling);
          gPanel.parentNode.removeChild(gPanel);
        }
        btc.setAttribute("id", "closeBottomPanel");
        btc.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII=)";
        btc.setAttribute("oncommand", "this.closePanel()");

    var ifr = box.appendChild(document.createXULElement("browser"));
        ifr.setAttribute("type", "content");
        ifr.setAttribute("flex", 1);
        ifr.setAttribute("src", aURL);
        ifr.setAttribute("tooltip", "aHTMLTooltip");
        ifr.setAttribute("onclick", "return contentAreaClick(event, true)");
        ifr.setAttribute("autocompletepopup", "PopupAutoComplete");
        ifr.setAttribute("contextmenu", "contentAreaContextMenu");
        ifr.setAttribute("contentcontextmenu", "contentAreaContextMenu");
  }

  gPrefService.setCharPref(prefBranch + "url", aURL);

}  
//------------------------------------

function addMenuitem(aLabel, aURL, aNode, aObjString) {
  var mItem = aNode.appendChild(document.createXULElement("menuitem"));
  mItem.setAttribute("label", aLabel);
  mItem.setAttribute("oncommand",
                     aObjString + ".bottomPanel('" + aURL + "');");
}


function addSeparator(aNode, aNum) {
  var separator = aNode.appendChild(document.createXULElement("menuseparator"));
  separator.id = "bottom-panel-button-separator" + aNum;
}

var mPopup = document.createXULElement("menupopup");
mPopup.setAttribute("oncommand", "event.stopPropagation()");
mPopup.setAttribute("onpopupshowing", "this.parentNode.popupShowing(this)");



objString = "this.parentNode.parentNode";
addMenuitem("about:about", "about:about", mPopup, objString);
addMenuitem("about:config", "about:config", mPopup, objString);
addMenuitem("about:support", "about:support", mPopup, objString);
addMenuitem("about:memory", "about:memory", mPopup, objString);
addMenuitem("about:cache", "about:cache", mPopup, objString);
addMenuitem("about:networking", "about:networking", mPopup, objString);
addMenuitem("about:performance", "about:performance", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Настройки", "about:preferences", mPopup, objString);
addMenuitem("Менеджер Паролей", "chrome://passwordmgr/content/passwordManager.xhtml", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Загрузки", "about:downloads", mPopup, objString);
addMenuitem("Управление закладками", "chrome://browser/content/places/places.xhtml", mPopup, objString);
addMenuitem("Куки", "chrome://browser/content/preferences/siteDataSettings.xhtml", mPopup, objString);
addMenuitem("История", "chrome://browser/content/places/historySidebar.xhtml", mPopup, objString);
addMenuitem("О Firefox", "chrome://browser/content/aboutDialog.xhtml", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Домашняя страница", "about:newtab", mPopup, objString);
addMenuitem("Текущая страница", "' + gBrowser.currentURI.spec + '", mPopup, objString);



this.appendChild(mPopup);
this.type = "menu";
this.orient = "horizontal";


function handleKeydown(e) { 
  if ( !e.shiftKey && !e.altKey && !e.ctrlKey && e.keyCode == 27 ) {
       if ( !document.getElementById('closeBottomPanel') ) return;
            e.preventDefault();
            e.stopPropagation();
            document.getElementById('closeBottomPanel').click();
       };  
}
window.addEventListener('keydown', handleKeydown, false);


Код
скрытый текст

Выделить код

Код:

this.bottomPanel();


Справка
null

Отредактировано egorsemenov06 (19-03-2020 01:22:03)

Отсутствует

 

№1449219-03-2020 14:44:45

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

Re: Custom Buttons

solombala пишет

Чтобы еще приделать к коду, чтоб видно было , что тухнет?

Ну, например

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

Выделить код

Код:

document.querySelector(
    "#mainPopupSet > tooltip[onpopupshowing*=undoCloseTabsList]"
)?.undoCloseTabsList.updUI();

voqabuhe пишет

А в том же окне звёздочки из строки Папка никак нельзя взять, там же как раз остаётся последняя папка в которую добавлялась закладка?

Может и взял бы, если бы после «показывало последнюю папку куда добавлялась закладка»
было бы так и написано « посредством окна звёздочки».

Inko7 пишет

если бы понимал все отличия между custom_script.js | custom_script_all_win.js | custom_script_win.js (инфу толком не нашел)

скрытый текст
custom_script.js исполняется один раз,
при запуске браузера, асинхронно, после топика "profile-after-change".
Загружается в [System Principal] Sandbox (отдельный глобальный объект).
Предустановлены ссылки на объекты, экспортируемые популярными
модулями Services.jsm и CustomizableUI.jsm

custom_script_win.js исполняется в каждом окне браузера (browser.xhtml)
по событию "DOMContentLoaded".

custom_script_all_win.js исполняется так же, как и custom_script_win.js,
но во всех top-level (не контент вкладок, не сайдбар) окнах документов
с адресами по протоколу chrome:// , включая окна браузера.
Например: «Библиотека», «Информация о странице», «О Mozilla Firefox»,
и даже окошки алертов.

Inko7 пишет

даже не смог запустить само расширение CB
ткните пожалуйста меня носом, где взять РАБОЧИЙ комплект раскладок файлов по папкам и само дополнение

скрытый текст
Ну, раз библиотека user_chrome_files подключена,
значит сам конфигурационный файл работает.

Здесь необходимый конфигурационный код (второй спойлер).
Состоит из двух частей, антиподписячей и запускатора CB,
чтобы запускался раньше, чем запустился бы без него.

Позволяет устанавливать на релиз и бету paxmod'ы (WebExtensions Experiments)
и неподписанные WebExtensions, при наличии id в манифесте.

Задумайся! Оно тебе надо?
Типа внешний или внутренний «синдром кота», и всё такое.
Если да, тогда добавь код в начало своего config.js. Рестарт.

Само дополнение? Ну, могу предложить попробовать такой вариант:
вот длинная текстовая data-ссылка на простую HTML страницу.
Выделить всё, скопировать в адресную строку, нажать Enter.
Со страницы скачать custom_buttons-0.0.7.0.0.10-fx-paxmod.xpi

Ещё раз задумайся. Всё подвешено на очень тоненьком волоске,
расползается под пальцами, нуждается в постоянном уходе.
Не стоит строить на CB какую-либо стратегию, и уже очень давно.

Но если хочешь просто завести ностальгическую игрушку,
тогда добро пожаловать.

egorsemenov06 пишет

можно поправить пожалуйста эту кнопку для [firefox] 74.0

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

Отредактировано Dumby (19-03-2020 14:46:47)

Отсутствует

 

№1449319-03-2020 15:34:15

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

Re: Custom Buttons

Dumby пишет
egorsemenov06 пишет

можно поправить пожалуйста эту кнопку для [firefox] 74.0

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

Ну что ж теперь сделаешь может у кого есть рабочая

Отсутствует

 

№1449419-03-2020 16:06:52

Grishanenko
Участник
 
Группа: Members
Зарегистрирован: 02-04-2014
Сообщений: 7
UA: Chrome 78.0

Re: Custom Buttons

Хочу при помощи CB исправить баг, который не устранен и в свежих версиях MyPal.
Подробно здесь:
https://bugzilla.mozilla.org/show_bug.cgi?id=754623
Здесь суть:
https://hg.mozilla.org/mozilla-central/rev/6763cbc32e3e
С программированием дружу весьма поверхностно, но понимаю что в browser-places.js нужно просто заместить функцию gBrowser.visibleTabs.forEach
Все же увидел что это не описание функции, а передача ей параметров. Так что ее трогать не нужно. Тогда есть шанс просто заменить пару строк в browser-places.js ?

Отредактировано Grishanenko (19-03-2020 20:22:05)

Отсутствует

 

№1449519-03-2020 18:15:13

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 957
UA: Firefox 52.0

Re: Custom Buttons

Dumby
спасибо за информацию!

скрытый текст
в принципе я уже как-то адаптировался без кнопок, но все равно кое-чего не хватает, к хорошему привыкаешь быстро

а библиотека user_chrome_files имеет больше шансов на существование?
критично чего не хватает, так это кнопки Switch Keyboard Layout
пожалуйста портируй ее для  user_chrome_files, чтоб работала везде

Отредактировано Inko7 (19-03-2020 18:17:53)

Отсутствует

 

№1449620-03-2020 10:45:15

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 74.0

Re: Custom Buttons

Dumby

Dumby пишет

Ну, например

Это класс! А нельзя код tooltiptext  на  .bookmark-item[container][query] ?
7f5shmco.jpg

Отсутствует

 

№1449720-03-2020 10:51:04

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

Re: Custom Buttons

egorsemenov06 дальше сам с пунктами меню

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

Выделить код

Код:

// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ........................


var icon = this.icon ||document.getAnonymousElementByAttribute( this, 'class', 'toolbarbutton-icon');
icon.style.width = '16px', icon.style.height = '16px';

this.bottomPanel = function(aURL) {
  var prefBranch = "custombuttons.bottomPanel."

  if(!aURL && aURL != "") {
    try {
      aURL = Services.prefs.getCharPref(prefBranch + "url");
    } catch(ex) {
      aURL = "";
    }
  }
  if(aURL == "") return;

  if(aURL == gURLBar.value && !aURL.match(/^\w+?\:/)) aURL = "http://" + aURL;

  var panelID = "bottom-panel";
  var gPanel = document.getElementById(panelID);
  var height;
  try {
    height = Services.prefs.getIntPref(prefBranch + "height");
  } catch(ex) {
    height = 400;
  }

  if(gPanel) {

    var src = gPanel.firstChild.nextSibling.getAttribute("src");
    if(aURL != src) {
      gPanel.firstChild.nextSibling.setAttribute("src", aURL);
      //gPanel.firstChild.nextSibling.loadURI(aURL);
    } else {
      Services.prefs.setIntPref(prefBranch + "height", gPanel.height);
      gPanel.parentNode.removeChild(gPanel.previousSibling);
      gPanel.parentNode.removeChild(gPanel);
    }

  } else {

    var appContent = document.getElementById("appcontent");

    var spl = appContent.appendChild(document.createXULElement("splitter"));
        spl.setAttribute("collapse", "after");
        spl.style.border = "none";
        spl.style.borderTop = "1px solid threedhighlight";
        spl.setAttribute("onclick", "this.setAttribute('state', '');");

    var box = appContent.appendChild(document.createXULElement("vbox"));
        box.id = panelID;
        box.height = height;
        box.orient = "vertical";

    var tbr = box.appendChild(document.createXULElement("toolbar"));
        tbr.setAttribute("fullscreentoolbar", true);
    var labelButton = tbr.appendChild(document.createXULElement("label"));
        labelButton.setAttribute("value", "Нижняя панель");
    var spr = tbr.appendChild(document.createXULElement("spacer"));
        spr.setAttribute("flex", 1);

    var btc = tbr.appendChild(document.createXULElement("toolbarbutton"));
        btc.className = "tabs-closebutton";
        btc.closePanel = function() {
          var gPanel = document.getElementById("bottom-panel");
          gPanel.parentNode.removeChild(gPanel.previousSibling);
          gPanel.parentNode.removeChild(gPanel);
        }
        btc.setAttribute("id", "closeBottomPanel");
        btc.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII=)";
        btc.setAttribute("oncommand", "this.closePanel()");

    var ifr = box.appendChild(document.createXULElement("browser"));
        ifr.setAttribute("type", "content");
        ifr.setAttribute("flex", 1);
        ifr.setAttribute("src", aURL);
        ifr.setAttribute("tooltip", "aHTMLTooltip");
        ifr.setAttribute("onclick", "return contentAreaClick(event, true)");
        ifr.setAttribute("autocompletepopup", "PopupAutoComplete");
        ifr.setAttribute("contextmenu", "contentAreaContextMenu");
        ifr.setAttribute("contentcontextmenu", "contentAreaContextMenu");
  }

  Services.prefs.setCharPref(prefBranch + "url", aURL);

}  
//------------------------------------

function addMenuitem(aLabel, aURL, aNode, aObjString) {
  var mItem = aNode.appendChild(document.createXULElement("menuitem"));
  mItem.setAttribute("label", aLabel);
  mItem.setAttribute("oncommand",
                     aObjString + ".bottomPanel('" + aURL + "');");
}


function addSeparator(aNode, aNum) {
  var separator = aNode.appendChild(document.createXULElement("menuseparator"));
  separator.id = "bottom-panel-button-separator" + aNum;
}

var mPopup = document.createXULElement("menupopup");
mPopup.setAttribute("oncommand", "event.stopPropagation()");
mPopup.setAttribute("onpopupshowing", "this.parentNode.popupShowing(this)");



objString = "this.parentNode.parentNode";
addMenuitem("about:about", "about:about", mPopup, objString);
addMenuitem("about:config", "about:config", mPopup, objString);
addMenuitem("about:support", "about:support", mPopup, objString);
addMenuitem("about:memory", "about:memory", mPopup, objString);
addMenuitem("about:debugging", "about:debugging", mPopup, objString);
addMenuitem("about:cache", "about:cache", mPopup, objString);
addMenuitem("about:networking", "about:networking", mPopup, objString);
addMenuitem("about:performance", "about:performance", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Настройки", "about:preferences", mPopup, objString);
addMenuitem("Дополнения", "chrome://mozapps/content/extensions/extensions.xhtml?type=extensions", mPopup, objString);
addMenuitem("Менеджер Паролей", "chrome://passwordmgr/content/passwordManager.xhtml", mPopup, objString);
addMenuitem("DOM Inspector", "chrome://inspector/content/", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Загрузки", "about:downloads", mPopup, objString);
addMenuitem("Управление закладками", "chrome://browser/content/places/places.xhtml", mPopup, objString);
addMenuitem("Куки", "chrome://browser/content/preferences/siteDataSettings.xhtml", mPopup, objString);
addMenuitem("История", "chrome://browser/content/places/historySidebar.xhtml", mPopup, objString);
addMenuitem("О Firefox", "chrome://browser/content/aboutDialog.xhtml", mPopup, objString);




this.appendChild(mPopup);
this.type = "menu";
this.orient = "horizontal";


function handleKeydown(e) { 
  if ( !e.shiftKey && !e.altKey && !e.ctrlKey && e.keyCode == 27 ) {
       if ( !document.getElementById('closeBottomPanel') ) return;
            e.preventDefault();
            e.stopPropagation();
            document.getElementById('closeBottomPanel').click();
       };  
}
window.addEventListener('keydown', handleKeydown, false);

Отсутствует

 

№1449820-03-2020 11:25:51

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

Re: Custom Buttons

Andrey_Krropotkin пишет

egorsemenov06 дальше сам с пунктами меню

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

Выделить код

Код:

// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ........................


var icon = this.icon ||document.getAnonymousElementByAttribute( this, 'class', 'toolbarbutton-icon');
icon.style.width = '16px', icon.style.height = '16px';

this.bottomPanel = function(aURL) {
  var prefBranch = "custombuttons.bottomPanel."

  if(!aURL && aURL != "") {
    try {
      aURL = Services.prefs.getCharPref(prefBranch + "url");
    } catch(ex) {
      aURL = "";
    }
  }
  if(aURL == "") return;

  if(aURL == gURLBar.value && !aURL.match(/^\w+?\:/)) aURL = "http://" + aURL;

  var panelID = "bottom-panel";
  var gPanel = document.getElementById(panelID);
  var height;
  try {
    height = Services.prefs.getIntPref(prefBranch + "height");
  } catch(ex) {
    height = 400;
  }

  if(gPanel) {

    var src = gPanel.firstChild.nextSibling.getAttribute("src");
    if(aURL != src) {
      gPanel.firstChild.nextSibling.setAttribute("src", aURL);
      //gPanel.firstChild.nextSibling.loadURI(aURL);
    } else {
      Services.prefs.setIntPref(prefBranch + "height", gPanel.height);
      gPanel.parentNode.removeChild(gPanel.previousSibling);
      gPanel.parentNode.removeChild(gPanel);
    }

  } else {

    var appContent = document.getElementById("appcontent");

    var spl = appContent.appendChild(document.createXULElement("splitter"));
        spl.setAttribute("collapse", "after");
        spl.style.border = "none";
        spl.style.borderTop = "1px solid threedhighlight";
        spl.setAttribute("onclick", "this.setAttribute('state', '');");

    var box = appContent.appendChild(document.createXULElement("vbox"));
        box.id = panelID;
        box.height = height;
        box.orient = "vertical";

    var tbr = box.appendChild(document.createXULElement("toolbar"));
        tbr.setAttribute("fullscreentoolbar", true);
    var labelButton = tbr.appendChild(document.createXULElement("label"));
        labelButton.setAttribute("value", "Нижняя панель");
    var spr = tbr.appendChild(document.createXULElement("spacer"));
        spr.setAttribute("flex", 1);

    var btc = tbr.appendChild(document.createXULElement("toolbarbutton"));
        btc.className = "tabs-closebutton";
        btc.closePanel = function() {
          var gPanel = document.getElementById("bottom-panel");
          gPanel.parentNode.removeChild(gPanel.previousSibling);
          gPanel.parentNode.removeChild(gPanel);
        }
        btc.setAttribute("id", "closeBottomPanel");
        btc.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII=)";
        btc.setAttribute("oncommand", "this.closePanel()");

    var ifr = box.appendChild(document.createXULElement("browser"));
        ifr.setAttribute("type", "content");
        ifr.setAttribute("flex", 1);
        ifr.setAttribute("src", aURL);
        ifr.setAttribute("tooltip", "aHTMLTooltip");
        ifr.setAttribute("onclick", "return contentAreaClick(event, true)");
        ifr.setAttribute("autocompletepopup", "PopupAutoComplete");
        ifr.setAttribute("contextmenu", "contentAreaContextMenu");
        ifr.setAttribute("contentcontextmenu", "contentAreaContextMenu");
  }

  Services.prefs.setCharPref(prefBranch + "url", aURL);

}  
//------------------------------------

function addMenuitem(aLabel, aURL, aNode, aObjString) {
  var mItem = aNode.appendChild(document.createXULElement("menuitem"));
  mItem.setAttribute("label", aLabel);
  mItem.setAttribute("oncommand",
                     aObjString + ".bottomPanel('" + aURL + "');");
}


function addSeparator(aNode, aNum) {
  var separator = aNode.appendChild(document.createXULElement("menuseparator"));
  separator.id = "bottom-panel-button-separator" + aNum;
}

var mPopup = document.createXULElement("menupopup");
mPopup.setAttribute("oncommand", "event.stopPropagation()");
mPopup.setAttribute("onpopupshowing", "this.parentNode.popupShowing(this)");



objString = "this.parentNode.parentNode";
addMenuitem("about:about", "about:about", mPopup, objString);
addMenuitem("about:config", "about:config", mPopup, objString);
addMenuitem("about:support", "about:support", mPopup, objString);
addMenuitem("about:memory", "about:memory", mPopup, objString);
addMenuitem("about:debugging", "about:debugging", mPopup, objString);
addMenuitem("about:cache", "about:cache", mPopup, objString);
addMenuitem("about:networking", "about:networking", mPopup, objString);
addMenuitem("about:performance", "about:performance", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Настройки", "about:preferences", mPopup, objString);
addMenuitem("Дополнения", "chrome://mozapps/content/extensions/extensions.xhtml?type=extensions", mPopup, objString);
addMenuitem("Менеджер Паролей", "chrome://passwordmgr/content/passwordManager.xhtml", mPopup, objString);
addMenuitem("DOM Inspector", "chrome://inspector/content/", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Загрузки", "about:downloads", mPopup, objString);
addMenuitem("Управление закладками", "chrome://browser/content/places/places.xhtml", mPopup, objString);
addMenuitem("Куки", "chrome://browser/content/preferences/siteDataSettings.xhtml", mPopup, objString);
addMenuitem("История", "chrome://browser/content/places/historySidebar.xhtml", mPopup, objString);
addMenuitem("О Firefox", "chrome://browser/content/aboutDialog.xhtml", mPopup, objString);




this.appendChild(mPopup);
this.type = "menu";
this.orient = "horizontal";


function handleKeydown(e) { 
  if ( !e.shiftKey && !e.altKey && !e.ctrlKey && e.keyCode == 27 ) {
       if ( !document.getElementById('closeBottomPanel') ) return;
            e.preventDefault();
            e.stopPropagation();
            document.getElementById('closeBottomPanel').click();
       };  
}
window.addEventListener('keydown', handleKeydown, false);

Спасибо большое

Отсутствует

 

№1449920-03-2020 17:21:44

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

Re: Custom Buttons

Dumby пишет

Может и взял бы, если бы после «показывало последнюю папку куда добавлялась закладка»
было бы так и написано « посредством окна звёздочки».

Да ладно, зачем бы я пытался ограничить творческий процесс мастера какими-то рамками. Эт я так, больше для себя спросил. А кнопка замечательно работает, ещё раз спасибо.

Отсутствует

 

№1450020-03-2020 23:16:56

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

Re: Custom Buttons

Dumby подскажи вот только сейчас заметил ошибку, она правда не на что не влияет, но все таки - this.parentNode.popupShowing в строчке - mPopup.setAttribute("onpopupshowing", "this.parentNode.popupShowing(this)"); Это как то можно исправить в коде

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

Выделить код

Код:

// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ........................


var icon = this.icon ||document.getAnonymousElementByAttribute( this, 'class', 'toolbarbutton-icon');
icon.style.width = '16px', icon.style.height = '16px';

this.bottomPanel = function(aURL) {
  var prefBranch = "custombuttons.bottomPanel."

  if(!aURL && aURL != "") {
    try {
      aURL = Services.prefs.getCharPref(prefBranch + "url");
    } catch(ex) {
      aURL = "";
    }
  }
  if(aURL == "") return;

  if(aURL == gURLBar.value && !aURL.match(/^\w+?\:/)) aURL = "http://" + aURL;

  var panelID = "bottom-panel";
  var gPanel = document.getElementById(panelID);
  var height;
  try {
    height = Services.prefs.getIntPref(prefBranch + "height");
  } catch(ex) {
    height = 400;
  }

  if(gPanel) {

    var src = gPanel.firstChild.nextSibling.getAttribute("src");
    if(aURL != src) {
      gPanel.firstChild.nextSibling.setAttribute("src", aURL);
      //gPanel.firstChild.nextSibling.loadURI(aURL);
    } else {
      Services.prefs.setIntPref(prefBranch + "height", gPanel.height);
      gPanel.parentNode.removeChild(gPanel.previousSibling);
      gPanel.parentNode.removeChild(gPanel);
    }

  } else {

    var appContent = document.getElementById("appcontent");

    var spl = appContent.appendChild(document.createXULElement("splitter"));
        spl.setAttribute("collapse", "after");
        spl.style.border = "none";
        spl.style.borderTop = "1px solid threedhighlight";
        spl.setAttribute("onclick", "this.setAttribute('state', '');");

    var box = appContent.appendChild(document.createXULElement("vbox"));
        box.id = panelID;
        box.height = height;
        box.orient = "vertical";

    var tbr = box.appendChild(document.createXULElement("toolbar"));
        tbr.setAttribute("fullscreentoolbar", true);
    var labelButton = tbr.appendChild(document.createXULElement("label"));
        labelButton.setAttribute("value", "Нижняя панель");
    var spr = tbr.appendChild(document.createXULElement("spacer"));
        spr.setAttribute("flex", 1);

    var btc = tbr.appendChild(document.createXULElement("toolbarbutton"));
        btc.className = "tabs-closebutton";
        btc.closePanel = function() {
          var gPanel = document.getElementById("bottom-panel");
          gPanel.parentNode.removeChild(gPanel.previousSibling);
          gPanel.parentNode.removeChild(gPanel);
        }
        btc.setAttribute("id", "closeBottomPanel");
        btc.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII=)";
        btc.setAttribute("oncommand", "this.closePanel()");

    var ifr = box.appendChild(document.createXULElement("browser"));
        ifr.setAttribute("type", "content");
        ifr.setAttribute("flex", 1);
        ifr.setAttribute("src", aURL);
        ifr.setAttribute("tooltip", "aHTMLTooltip");
        ifr.setAttribute("onclick", "return contentAreaClick(event, true)");
        ifr.setAttribute("autocompletepopup", "PopupAutoComplete");
        ifr.setAttribute("contextmenu", "contentAreaContextMenu");
        ifr.setAttribute("contentcontextmenu", "contentAreaContextMenu");
  }

  Services.prefs.setCharPref(prefBranch + "url", aURL);

}  
//------------------------------------

function addMenuitem(aLabel, aURL, aNode, aObjString) {
  var mItem = aNode.appendChild(document.createXULElement("menuitem"));
  mItem.setAttribute("label", aLabel);
  mItem.setAttribute("oncommand",
                     aObjString + ".bottomPanel('" + aURL + "');");
}


function addSeparator(aNode, aNum) {
  var separator = aNode.appendChild(document.createXULElement("menuseparator"));
  separator.id = "bottom-panel-button-separator" + aNum;
}

var mPopup = document.createXULElement("menupopup");
mPopup.setAttribute("oncommand", "event.stopPropagation()");
mPopup.setAttribute("onpopupshowing", "this.parentNode.popupShowing(this)");



objString = "this.parentNode.parentNode";
addMenuitem("about:about", "about:about", mPopup, objString);
addMenuitem("about:config", "about:config", mPopup, objString);
addMenuitem("about:support", "about:support", mPopup, objString);
addMenuitem("about:memory", "about:memory", mPopup, objString);
addMenuitem("about:debugging", "about:debugging", mPopup, objString);
addMenuitem("about:cache", "about:cache", mPopup, objString);
addMenuitem("about:networking", "about:networking", mPopup, objString);
addMenuitem("about:performance", "about:performance", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Настройки", "about:preferences", mPopup, objString);
addMenuitem("Дополнения", "chrome://mozapps/content/extensions/extensions.xhtml?type=extensions", mPopup, objString);
addMenuitem("Менеджер Паролей", "chrome://passwordmgr/content/passwordManager.xhtml", mPopup, objString);
addMenuitem("DOM Inspector", "chrome://inspector/content/", mPopup, objString);
addSeparator(mPopup, 0);
addMenuitem("Загрузки", "about:downloads", mPopup, objString);
addMenuitem("Управление закладками", "chrome://browser/content/places/places.xhtml", mPopup, objString);
addMenuitem("Куки", "chrome://browser/content/preferences/siteDataSettings.xhtml", mPopup, objString);
addMenuitem("История", "chrome://browser/content/places/historySidebar.xhtml", mPopup, objString);
addMenuitem("О Firefox", "chrome://browser/content/aboutDialog.xhtml", mPopup, objString);




this.appendChild(mPopup);
this.type = "menu";
this.orient = "horizontal";


function handleKeydown(e) { 
  if ( !e.shiftKey && !e.altKey && !e.ctrlKey && e.keyCode == 27 ) {
       if ( !document.getElementById('closeBottomPanel') ) return;
            e.preventDefault();
            e.stopPropagation();
            document.getElementById('closeBottomPanel').click();
       };  
}
window.addEventListener('keydown', handleKeydown, false);

Отсутствует

 

Board footer

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