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

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

№137612-06-2016 18:06:04

yup
Участник
 
Группа: Members
Зарегистрирован: 15-04-2016
Сообщений: 1086
UA: Seamonkey 2.40

Re: Обсуждение кнопок CB

Ferguss114 пишет:

Подскажите если мне надо узнать скрыт ли элемент как лучше написать

Выделить код

Код:

getComputedStyle(element, null).display

или

getComputedStyle(element, null).getPropertyValue('display')

Зависит от цели написания. "Печальное зрелище" (как сказал бы ослик Иа), связанное именно с этим вопросом, находится здесь: http://blogs.msmvps.com/luisabreu/blog/ … -at-first/

Ferguss114 пишет:

И в чем принципиальная разница?

Чаще всего, разницы между "element.attribute" и "element.getValue('attribute')" нет никакой. Хотя встречаются и исключения.

Отсутствует

 

№137713-06-2016 02:10:56

Ferguss114
Участник
 
Группа: Members
Зарегистрирован: 31-03-2012
Сообщений: 200
UA: Firefox 31.0

Re: Обсуждение кнопок CB

yup
Спасибо за разъяснение

Отсутствует

 

№137813-06-2016 18:53:40

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

Re: Обсуждение кнопок CB

turbot
Насчёт кнопки Sidebar Sites.

скрытый текст
Правильно ли я понимаю, что при клике по #sidebar'у,
вроде, не требуется исполнять дальнейшую обработку,
если кликнуто ПКМ, СКМ, или ЛКМ с модификаторами?

Правильно ли я понимаю, что «&& link.src» это на тот случай,
если ссылка, а в ней картинка? А если ссылка сделана как-то иначе,
то она будет открываться во вкладке. Типа какая-нибудь такая.

Ну, и чисто для шутки, зацени вариант. Код хамский и зависимый,
но задуман, наверно, более по-перформансу и с уважением
к атрибуту target, если таковой имеется.

Выделить код

Код:

((browser, listener, br) => { if (browser) {
    addEventListener("DOMFrameContentLoaded", listener, true, browser);
    var getBr = () => browser.contentDocument.querySelector(listener.selector);
    if ((br = getBr())) br.window = {parent: listener.parent};
    addDestructor(() => {
        if ((br = getBr())) delete br.window;
    });
}})(SidebarUI.browser, {
    selector: "browser#web-panels-browser",
    handleEvent(e) {
        if (e.target.matches(this.selector) && !("window" in e.target))
            e.target.window = {parent: this.parent};
    },
    get parent() {
        delete this.parent;
        var parent = {};
        parent.contentAreaClick = eval(`(${
            contentAreaClick.toString().replace(
                'linkNode.getAttribute("onclick")',
                "!target && this.shouldLoadInPanelBrowser(linkNode) || $&"
            )
        })`);
        parent.shouldLoadInPanelBrowser = link => {
            // Здесь можно что-нибудь проверить
                Services.console.logStringMessage([
                    "CB" + _id.slice(20),
                    "LINK:\t" + link,
                    "DOC:\t" + link.ownerDocument.location
                ].map(item => String(item).slice(0, 200)).join("\n"));

            return true;
        }
        return this.parent = parent;
    }
});

Отредактировано Dumby (13-06-2016 19:11:31)

Отсутствует

 

№137913-06-2016 19:51:48

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 186
UA: Firefox 47.0

Re: Обсуждение кнопок CB

Dumby
На [firefox] 47 перестал работать код №8074. Не посмотришь?

Отсутствует

 

№138013-06-2016 21:52:54

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Dumby

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

Правильно ли я понимаю, что «&& link.src» это на тот случай,

Угу. Я подозревал, что с этим проблемы будут. :)

Правильно ли я понимаю, что при клике по #sidebar'у,
вроде, не требуется исполнять дальнейшую обработку,
если кликнуто ПКМ, СКМ, или ЛКМ с модификаторами?

Что-то затупил. Было не надо. Но я там уже ужас-ужас наваял в попытке восстановить работу контекстной навигации и теперь нужно. :)

За код спасибо.Поздно заметил. Попытаюсь потом перенести наваянное в него. Если разберусь. :D

Отсутствует

 

№138114-06-2016 01:13:50

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

Re: Обсуждение кнопок CB

thrower пишет:

На [firefox] 47 перестал работать код №8074. Не посмотришь?

Чем, собственно, расширение не угодило :rolleyes:. Может так :/

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

Выделить код

Код:

({
    id: _id + "-torrent-observer",
    topic: "http-on-examine-response",
    cd: "Content-Disposition",
    re: /^\s*attachment/i,
    find() {
        var en = Services.obs.enumerateObservers(this.topic);
        while(en.hasMoreElements()) {
            var obs = en.getNext().wrappedJSObject;
            if (obs && obs.id == this.id) return obs;
        }
    },
    init() {
        this.wrappedJSObject = this;
        addDestructor(reason => {
            if (reason[5] != "e") return;
            var obs = this.find();
            obs && Services.obs.removeObserver(obs, this.topic);
        }, this);
        var obs = this.find();
        obs || Services.obs.addObserver(this, this.topic, false);
    },
    observe(channel) {
        try {
            channel.QueryInterface(Ci.nsIHttpChannel);
            var disp = channel.getResponseHeader(this.cd);
            channel.loadFlags & channel.LOAD_DOCUMENT_URI
                && channel.contentType == "application/x-bittorrent"
                && this.re.test(disp)
                && channel.setResponseHeader(this.cd, disp.replace(this.re, "inline"), false);
        } catch(ex) {}
    }
}).init();

Отсутствует

 

№138214-06-2016 16:40:28

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 186
UA: Firefox 47.0

Re: Обсуждение кнопок CB

Dumby
Супер! Спасибо!


//
Кнопка, в отличие от аналогичных расширений, воздействует точечно, именно там, где необходимо.

Отредактировано thrower (14-06-2016 17:18:14)

Отсутствует

 

№138314-06-2016 16:50:23

Dook
Участник
 
Группа: Members
Зарегистрирован: 05-06-2016
Сообщений: 16
UA: Firefox 48.0

Re: Обсуждение кнопок CB

как можно избавиться от тормозов Source Editor? невозможно работать.

Отсутствует

 

№138414-06-2016 22:16:35

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

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

Выделить код

Код:

// Открывать ссылки длинным кликом, от 21.01.2014. ..............................................................
(function func() {
   
   const time = 500;            // время удержания в мс
   const background = true;    // открывать в фоновой вкладке
   const nextToCurrent = true;  // открывать рядом с текущей вкладкой
 
   function handleLongPress(e) { 
      window.clearTimeout( func.timer );
      setTimeout(function() { try { func.removeListener() } catch(ev) {} }, 0);
      
      var lab = XULBrowserWindow.overLink;
    
      if ( e.button == 1 || !lab || lab.startsWith("javascript") ) return;
   
      if ( e.type == "mousedown" && !e.target.className.startsWith("ui-slider-handle") ) {
           func.timer = setTimeout(function() {
                function c(e) { e.preventDefault(); e.stopPropagation() };
                addEventListener('click', c, true);
                func.removeListener = function() { removeEventListener('click', c, true) }; 
                
                e.button == 0
                ? gBrowser.loadOneTab( lab, {relatedToCurrent: nextToCurrent, inBackground: background, referrerURI: makeURI(content.location.href)} )
                : gBrowser.loadURI( lab, makeURI(content.location.href) );
                
           }, time );  
           }
      else 
           clearTimeout( func.timer );
   };
   ["mouseup", "mousedown", "dragstart"]
   .forEach(function(type) { addEventListener(type, handleLongPress, true, gBrowser) });
})();

Отсутствует

 

№138515-06-2016 05:37:33

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Dumby

скрытый текст
Спасибо еще раз. Переделал Sidebar Sites под предложенный тобой код. :)

Можно еще пару тупых вопросов:
Почему у меня там ругается, если сделать вместо for of - [...self.Help.split("\n\n")].forEach, либо for (var item of  self.Help.split("\n\n")) Array.push(item)?
И как сделать из params строку(? (не уверен в терминологии)), чтобы не устанавливать с "' + params + '" (т.е., с кавычками)? И вообще, что он мне отдает? Как это правильно назвать?
Можно ли там обойтись без encodeURIComponent?

Подозреваю, что все эти вопросы связаны. Чертовы строки и массивы... https://lh6.ggpht.com/-BPqO8QcVT8c/VE0D6nMiIyI/AAAAAAAAaFU/iZ6s_YMuino/s0/shuffle.gif

Отсутствует

 

№138615-06-2016 09:33:36

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4780
UA: Firefox 24.0

Re: Обсуждение кнопок CB

broker пишет:

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

Какой у тебя браузер?

Отсутствует

 

№138715-06-2016 14:14:31

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

Re: Обсуждение кнопок CB

turbot пишет:

Можно еще пару тупых вопросов

Конечно можно, но вопросы сформулированы так,
что для меня затруднительно их понять.

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

Почему у меня там ругается, если сделать вместо for of - [...self.Help.split("\n\n")].forEach

Вроде не должен никто ругаться. А если кто-то ругается,
мол зачем ты уже готовый массив spread operator'ом в новый массив перегоняешь,
то сам знаешь что ему ответить.

И как сделать из params строку

У тебя params это массив образованый из строки методом split,
соединить обратно в строку можно методом join.

Остальное не понял. Но вот, вариант

Выделить код

Код:

var menuPopup = appendChild("menupopup", self, {context: ""});
var menugroup = appendChild("menugroup", menuPopup, {
    orient: "vertical",
    oncommand: "openPage(event.target);",
    oncontextmenu: "removePage(event.target);"
});
var sep = "\n\n", items = self.Help.split(sep);
items.forEach((item, index) => {
    var [title, url, icon] = item.split("\n");
    appendChild("menuitem", menugroup, {
        tooltiptext: url,
        class: "menuitem-iconic",
        label: title || "Untitled",
        image: icon || "chrome://mozapps/skin/places/defaultFavicon.png"
    }).index = index;
});
menugroup.openPage = ({index}) => openWebPanel(...items[index].split("\n"));
menugroup.removePage = ({index}) => items.splice(index, 1) && installButton(items.join(sep));

function installButton(help) {
    var link = custombuttons.makeButtonLink("edit", _id);
    var param = custombuttons.cbService.getButtonParameters(link);
    param = param.wrappedJSObject || param;
    param.help = help;
    custombuttons.cbService.installButton(param);
}
function appendChild(type, parent, attrs) {
    var node = parent.appendChild(document.createElement(type));
    for(var name in attrs) node.setAttribute(name, attrs[name]);
    return node;
}
// и так далее ...

Отсутствует

 

№138815-06-2016 14:53:28

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

bunda1 пишет:

broker пишет: Здравствуйте. Не работает кнопка должным образом, если нажать на силку то загружается страница на которой сейчас нахожусь.Какой у тебя браузер?

[firefox]48:( на 45 все хорошо.

Отредактировано broker (15-06-2016 14:57:10)

Отсутствует

 

№138915-06-2016 23:52:51

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Dumby
Спасибо. Немного, что-то, яснее стало. :)

И за код тоже. Попробую присобачить. :)

Отсутствует

 

№139016-06-2016 19:34:19

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4780
UA: Firefox 24.0

Re: Обсуждение кнопок CB

broker пишет:

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

Я сейчас проверил код на Firefox 48 и у меня всё работает. Код никак не может загружать текущую страницу при нажатии на ссылку. Похоже у тебя установлено какое то расширение которое меняет сплывающую подсказку которая появляется при наведении курсора на ссылку:
http://i75.fastpic.ru/big/2016/0616/4e/a890b3fed4d34dd3d09c99fcbc1bd94e.png
Эта подсказка должна показывать адрес ссылки, а не текущей страницы, потому что код берёт адрес ссылки от подсказки.

Отсутствует

 

№139116-06-2016 23:06:22

broker
Участник
 
Группа: Members
Зарегистрирован: 23-06-2015
Сообщений: 98
UA: unknown 0.0

Re: Обсуждение кнопок CB

bunda1
Я как бы не правильно написал саму проблему:blush: Проблема в том что если я сейчас на етой странице нажму "Форумы" то у меня грузится новая вкладка  "Форумы" и в том числе и та на которой сейчас нахожусь загружается "Форумы". На 45 все те само разширения и кнопки что ина 48 мозилке чет ребята разработчики  накрутили:mad:

Отредактировано broker (16-06-2016 23:16:10)

Отсутствует

 

№139217-06-2016 09:56:18

gyra
Участник
 
Группа: Members
Зарегистрирован: 05-11-2013
Сообщений: 42
UA: Firefox 47.0

Re: Обсуждение кнопок CB

bunda1
Нашел такое обсуждение по кнопке Autocopy+3, но вот исправленную кнопку найти не удалось. По этой ссылке лежит кнопка в которой getBrowserSelection() не исправлено. Подскажите пожалуйста где можно взять исправленную версию.

Отсутствует

 

№139317-06-2016 10:35:15

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

gyra

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

Выделить код

Код:

// Функции автоматически копирует выделенный текст на странице, если это разрешено в 'about:config' ................................
({
        PREF_ROOT: "Autocopy",
        PREF_BLINK: "Autocopy.selectingTextBlink",
        get blinkMenuitem() {
                delete this.blinkMenuitem;
                return this.blinkMenuitem = menuPopup.querySelector('[onclick*="' + this.PREF_BLINK + '"]');
        },
        init: function() {
                gPrefService.addObserver(this.PREF_ROOT, this, false);
                addDestructor(() => gPrefService.removeObserver(this.PREF_ROOT, this));
 
                if (!gPrefService.getBoolPref(this.PREF_ROOT)) return;
                this.blink = gPrefService.getBoolPref(this.PREF_BLINK);
                this.setAutocopy(true);
        },
        observe: function(subj, topic, data) {
                if (data == this.PREF_ROOT)
                        this.setAutocopy(gPrefService.getBoolPref(data));
                else if (data == this.PREF_BLINK) setTimeout(() =>
                        this.blinkMenuitem.setAttribute("checked", this.blink = gPrefService.getBoolPref(data))
                , 100);
        },
        setAutocopy: function(set) {
                var method = set ? addEventListener : removeEventListener;
                for(var type of ["mousedown", "mouseup"]) method(type, this, false, gBrowser);
        },
        handleEvent: function(e) {
                if (e.button || e.target instanceof Ci.nsIDOMNSEditableElement) return;
                var win = e.target.ownerDocument.defaultView;
                if (win.top != content) return;
 
                var sel = win.getSelection().toString();
                if (e.type == "mousedown") {this.sel = sel; return;}
                if (!sel || sel == this.sel) return;
 
                goDoCommand("cmd_copy");
 
                if (!this.blink) return;
                gBrowser.selectedBrowser.blur();
                setTimeout(() => gBrowser.selectedBrowser.focus(), 300);
        }
}).init();


Код Dumby из того поста.

Отредактировано turbot (17-06-2016 10:35:49)

Отсутствует

 

№139417-06-2016 11:13:13

gyra
Участник
 
Группа: Members
Зарегистрирован: 05-11-2013
Сообщений: 42
UA: Firefox 47.0

Re: Обсуждение кнопок CB

turbot
Спасибо!

Отсутствует

 

№139517-06-2016 12:33:11

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

Re: Обсуждение кнопок CB

citehala пишет:

Есть программа-переводчик, лучшая в своём роде - Qtranslate так вот, задумалось мне поженить её с Фоксом, да не абы-как, а самым интересным способом..
Опять же, из экспериментов выяснилось, что из-под Фокса нельзя послать ей клавиатурную комбинацию

У меня это сработало

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

Выделить код

Код:

// See https://gist.github.com/Noitidart/0de3be2442a0295eb386
// vk codes: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731%28v=vs.85%29.aspx

// Double Ctrl [Ctrl-Down, Ctrl-Up, Ctrl-Down, Ctrl-Up]
var data = [[0x11, false], [0x11, true], [0x11, false], [0x11, true]];

// Ctrl+Q [Ctrl-Down, Q-Down, Q-Up, Ctrl-Up]
//var data = [[0x11, false], [0x51, false], [0x51, true], [0x11, true]];

var {ctypes} = Cu.import("resource://gre/modules/ctypes.jsm", {});
var KEYBDINPUT = ctypes.StructType("tagKEYBDINPUT", [
    {wVk: ctypes.unsigned_short},
    {wScan: ctypes.unsigned_short},
    {dwFlags: ctypes.unsigned_long},
    {time: ctypes.unsigned_long},
    {dwExtraInfo: ctypes.voidptr_t.size == 8 ? ctypes.uint64_t : ctypes.unsigned_long},
    {padding0: ctypes.uint8_t.array(8)}
]);
var INPUT = ctypes.StructType("tagINPUT", [{type: ctypes.unsigned_long}, {ki: KEYBDINPUT}]);
var pInputs = INPUT.array()(data.map(([vkCode, keyup]) => 
    INPUT(1, KEYBDINPUT(vkCode, 0, keyup ? 2 : 0, 0, 0, ctypes.uint8_t.array(8)()))
));
var user32 = ctypes.open("user32"); try {
    var SendInput = user32.declare("SendInput", ctypes.winapi_abi, ctypes.unsigned_int, ctypes.unsigned_int, INPUT.ptr, ctypes.int);
    SendInput(pInputs.length, pInputs, INPUT.size);
} finally {
    user32.close();
}

Отсутствует

 

№139617-06-2016 20:58:07

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 358
UA: Firefox 47.0

Re: Обсуждение кнопок CB

На последней лисе перестал работать этот код:

Выделить код

Код:

// закладка в последнюю папку
(({panel}, prefName) => {

    cbu.isPref(prefName, PlacesUtils.unfiledBookmarksFolderId);
    addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(prefName));

    var popupshownFolderId = Services.prefs.getIntPref(prefName);
    var handler = e => {
        if (e.target != panel) return;
        var id = PlacesUtils.bookmarks.getFolderIdForItem(StarUI._itemId);
        if (e.type == "popupshown") {
            popupshownFolderId = id;
            return;
        }
        if (StarUI._actionOnHide || popupshownFolderId == id) return;
        Services.prefs.setIntPref(prefName, id);
    }
    for(var type of ["popupshown", "popuphiding"]) addEventListener(type, handler, false, panel);

    var src = BookmarkingUI.onCommand.toString();
    var res = src.replace("e(isBookmarked", `$&, isBookmarked || Services.prefs.getIntPref("${prefName}")`);
    var func = eval(`(${res})`).bind(BookmarkingUI);

    addEventListener("command", e => {
        e.stopPropagation();
        func(e);
    }, true, document.getElementById("bookmarks-menu-button"));

})(StarUI, "CB.lastEditBookmarkPanelFolderId");

Как исправить?


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Как бы хотелось однажды проснуться, а тебе 8 лет и вся эта херня просто приснилась…

Отсутствует

 

№139718-06-2016 00:48:54

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

Re: Обсуждение кнопок CB

KOT040188
:/

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

Выделить код

Код:

(({panel}, prefName, btn) => {

    var showEditUIIfNotBookmarked = true;

    if (!btn) return;
    cbu.isPref(prefName, PlacesUtils.unfiledBookmarksFolderId);
    addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(prefName));

    var popupshownFolderId = Services.prefs.getIntPref(prefName);
    var handler = e => {
        if (e.target != panel) return;
        var id = PlacesUtils.bookmarks.getFolderIdForItem(StarUI._itemId);
        if (e.type == "popupshown") {
            popupshownFolderId = id;
            return;
        }
        if (StarUI._actionOnHide || popupshownFolderId == id) return;
        Services.prefs.setIntPref(prefName, id);
    }
    for(var type of ["popupshown", "popuphiding"]) addEventListener(type, handler, false, panel);

    var src = BookmarkingUI.onCommand.toString();
    var res = src.replace("true", `${showEditUIIfNotBookmarked || "isBookmarked"}, isBookmarked || Services.prefs.getIntPref("${prefName}")`);
    if (!showEditUIIfNotBookmarked) res = res.replace(
        'widget.node.removeAttribute("closemenu")',
        'isBookmarked ? $& : widget.node.setAttribute("closemenu", "none")'
    );
    var func = eval(`(${res})`).bind(BookmarkingUI);
    addEventListener("command", e => e.stopPropagation() || func(e), true, btn);
})(StarUI, "CB.lastEditBookmarkPanelFolderId", document.getElementById("bookmarks-menu-button"));

Отсутствует

 

№139818-06-2016 13:46:39

dimoniam
Участник
 
Группа: Members
Зарегистрирован: 26-12-2009
Сообщений: 12
UA: Firefox 47.0

Re: Обсуждение кнопок CB

Здравствуйте ! Не работает кнопка Переключить язык интерфейса( Firefox ) (Отредактировано bunda1 (24-10-2013 18:52:48))
http://ipic.su/img/img7/fs/kiss_1kb.1466246514.png
Отремонтируйте пожалуйста !



Как ни странно, и эта не работает : Сохранить ярлык страницы на ...( Firefox24+ ) от 09.06.2016
http://ipic.su/img/img7/fs/kiss_2kb.1466248545.png
:::: Mozilla/5.0 (Windows NT 6.1; rv:47.0) Gecko/20100101 Firefox/47.0

p.s. Проверил на Firefox 28.0 + 0.0.5.8.1-signed.1-let-fixed = не работает.
Хотя, например, расширение lcwmcfpon легко создаёт ярлыки и на 47.

Отредактировано dimoniam (18-06-2016 15:27:46)

Отсутствует

 

№139918-06-2016 16:29:43

KOT040188
Участник
 
Группа: Members
Зарегистрирован: 07-11-2012
Сообщений: 358
UA: Firefox 47.0

Re: Обсуждение кнопок CB

Dumby
Спасибо, работает. А можно сделать прокрутку к выбранной папке, а то прокрутка всегда вверху, а папка бывает внизу?
Ещё бы это исправить…
Этот код на последней лисе также не работает:

Выделить код

Код:

// Открывать библиотеку во вкладке и последнюю активную папку библиотеки, от 08.08.2014. ................................
   --------------------------------------------------------------------------- */
   (function () {
   var historyFolderNum = 1;     // папка истории которую откроет код
   var sortHistoryFolder = true; // сортировать папку истории которую откроет код
      
   var command;
   const pn = "CB.lastUsedLibraryFolder";
   const library = "chrome://browser/content/places/places.xul";

   
   // Перехватывать открытие библиотеки и открывать её в вкладке рядом с текущей ....
   function libraryInTab(e) {
      command = e.target.getAttribute("oncommand");

      if ( !/showPlacesOrganizer|DownloadsUI|DownloadsPanel/.test( command ) ) return;
      if ( /UnfiledBookmarks/.test( command ) && e.type == 'click' ) return; 
           e.stopPropagation();
     
      // закрыть все вкладки библиотеки кроме первой ....
      var libTab = null;
      Array.slice( gBrowser.tabs ).forEach(function(tab) {
            if ( tab.linkedBrowser.currentURI.spec !== library ) return;
            !libTab ? libTab = tab : gBrowser.removeTab( tab );
      });
   
      // переместить или открыть библиотеку рядом с текущей вкладкой ....
      var selTab = gBrowser.selectedTab;
      if ( libTab !== selTab ) {
           if ( libTab && gBrowser.visibleTabs.indexOf( libTab ) == -1 )
                TabView.moveTabTo( libTab, TabView._window.GroupItems._activeGroupItem.id );
           libTab = libTab || gBrowser.addTab( library );          
           var pos = selTab._tPos + ( libTab._tPos > selTab._tPos );
           gBrowser.moveTabTo( libTab, pos );
           gBrowser.selectedTab = libTab;
           
           // если уже открытая библиотека была перемещена
           if ( !libTab.hasAttribute('busy') ) openLastUsedFolder();                          
           }
       else       
           openLastUsedFolder();  // если библиотека уже в текущей вкладке      
   };
   addEventListener("command", libraryInTab, true, window );
   addEventListener("click", libraryInTab, true, document.getElementById('appmenuSecondaryPane') );

   
   // Открывать и запоминать последнюю активную папку если библиотека открыта как вкладка ....
   function openLastUsedFolder( e ) {
      var win = e ? e.target.defaultView : content.document.defaultView;
      if ( win.location != library ) return;

      // получить нужную папку
      try { var value = cbu.getPrefs( pn ) } catch(e) { value = '' }; 
      if ( /DownloadsUI|DownloadsPanel/.test( command ) ) value = 'place:transition=7&sort=4';
      if ( /UnfiledBookmarks/.test( command ) ) value = 'place:folder=UNFILED_BOOKMARKS&excludeItems=1&expandQueries=0';

      // закрыть меню большой кнопки и кнопки загрузок
      setTimeout(function() { 
         try { document.getElementById("appmenu-popup").hidePopup();
               document.getElementById("downloadsPanel").hidePopup();
             } catch(e) {} 
      }, 10 );
           
      // открыть нужную папку используя рекурсию   
      (function f() { 
         if ( win.location != library ) return;
         try {
             if ( /'History'/.test( command ) ) {
                  var doc = win.document;        
                  var view = doc.getElementById('placesList').view;                  
                  
                  if ( view ) view.selection.select( historyFolderNum ); // открыть указанную папку
                 
                  // сортировать папку истории по адресу
                  if ( sortHistoryFolder && view ) {                  
                       doc.getElementById('viewMenu').open = true;
                       doc.getElementById('viewSort').open = true;
                       doc.getElementById('viewMenu').open = false;
                       doc.getElementById('menucol_placesContentUrl').doCommand();
                       }
                  }
             else  
                  {         
                  win.PlacesOrganizer.location = value;
                  win.PlacesOrganizer._places.focus(); 
                  }                       
             }
         catch(e) { setTimeout(function() f(), 0) };
          
      })();
      
      // запоминать последнюю папку при закрытии библиотеки
      if ( e == undefined ) return;
      win.addEventListener("unload", function f(e) {        
          win.removeEventListener( e.type, f);
          
          var loc = win.PlacesOrganizer.location;
          /place:folder|place:sort/.test( loc ) && cbu.setPrefs( pn, loc );                
      });
   };
   addEventListener("DOMContentLoaded", openLastUsedFolder, false, gBrowser );
})();

Отредактировано KOT040188 (18-06-2016 23:29:23)


Вы думаете у котов лёгкая жизнь? А вы попробуйте целый день лизать меховую шапку!
Как бы хотелось однажды проснуться, а тебе 8 лет и вся эта херня просто приснилась…

Отсутствует

 

№140019-06-2016 13:42:28

tom911
Участник
 
Группа: Members
Зарегистрирован: 20-05-2011
Сообщений: 163
UA: Firefox 47.0

Re: Обсуждение кнопок CB

Перестала работать кнопка Перезапуск браузера из контекстного меню

скрытый текст
// Добавить свои пункты в контекстное меню, от 09.02.2016. ...............   
(contextMenu=> {
   var menuItem1 = contextMenu.insertBefore(document.createElement("menuitem"), contextMenu.children[2]);
   addDestructor(()=> menuItem1.remove() );
   menuItem1.setAttribute("label", "Открыть about:config");
   menuItem1.setAttribute("oncommand", "gBrowser.selectedTab = gBrowser.addTab('about:config')");
   
   var menuItem2 = contextMenu.insertBefore(document.createElement("menuitem"), contextMenu.children[2]);
   addDestructor(()=> menuItem2.remove() );
   menuItem2.setAttribute("label", "Перезапуск");
   menuItem2.setAttribute("oncommand", "Application.restart()");
   }
)(document.getElementById("contentAreaContextMenu"));

Поправьте кто умеет это:)

Отсутствует

 

Board footer

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