Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox/Mozilla Firefox Extensions (часть 9)

Модерирует : gyra, Maz

Maz (02-04-2019 17:51): Переезжаем: Расширения для Firefox/Mozilla Firefox Extensions (часть 10)  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

rubel



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
// Открывать ссылки в новой вкладке длинным кликом, от 03.12.2013. ................................
(code => {
    var delay = 300;              // время удержания в мс
    var inBackground = true;      // открывать в фоновой вкладке
    var relatedToCurrent = false;  // открывать рядом с related вкладкой
 
    var p = "CB" + _id.slice(20) + ":LongPressHandler:";
    var msgDestroy = p + "Destroy", msgResponse = p + "Response";
    code = code.replace(/%MD%/g, msgDestroy).replace("%MR%", msgResponse)
        .replace("%DL%", delay).replace("%BG%", inBackground);
 
    var url = "data:," + encodeURIComponent(code);
    var mm = window.getGroupMessageManager("browsers");
    mm.loadFrameScript(url, true);
 
    function handleLongPress(msg) {
        var [link, ref, ctrl] = msg.data;
        var bg = inBackground != null ? inBackground
            : Services.prefs.getBoolPref("browser.tabs.loadInBackground");
        gBrowser.loadOneTab(link, {
            relatedToCurrent, inBackground: ctrl != bg, //referrerURI: makeURI(ref)
        });
    }
    mm.addMessageListener(msgResponse, handleLongPress);
 
    addDestructor(() => {
        mm.removeDelayedFrameScript(url);
        mm.broadcastAsyncMessage(msgDestroy);
        mm.removeMessageListener(msgResponse, handleLongPress);
    });
})(`({
    init() {
        addEventListener("mousedown", this, false);
        addMessageListener("%MD%", this);
    },
    receiveMessage() {
        removeEventListener("mousedown", this, false);
        removeMessageListener("%MD%", this);
    },
    handleEvent(e) {
        if (e.type == "mousedown") {
            if (e.button || e.shiftKey || e.altKey || e.detail != 1) return;
 
            var a = e.originalTarget.closest("a[href]");
            if (!a || a.href.startsWith("javascript:")) return;
 
            this.ctrl = e.ctrlKey;
            this.initLongPress(a);
        } else {
            if (e.type == "click" && !this.link) e.preventDefault();
            this.destroyLongPress();
        }
    },
    get timer() {
        delete this.timer;
        return this.timer = Components.classes["@mozilla.org/timer;1"]
            .createInstance(Components.interfaces.nsITimer);
    },
    notify() {
        sendSyncMessage("%MR%", [this.link.href, this.link.ownerDocument.URL, this.ctrl]);
        this.link = null;
        if (!%BG%) this.destroyLongPress();
    },
    initLongPress(a) {
        addEventListener("click", this, true);
        addEventListener("dragstart", this, false);
        this.timer.initWithCallback(this, %DL%, this.timer.TYPE_ONE_SHOT);
        this.link = a;
    },
    destroyLongPress() {
        removeEventListener("click", this, true);
        removeEventListener("dragstart", this, false);
        this.link && this.timer.cancel();
        this.link = null;
    }
}).init();`);
 
// Открывать всё в новых вкладках, от 16.12.2013. ......................................
(function () {
   // открывать всё из ниже перечисленного в новых вкладках, если пустая страница открывать в текущей ....
   const where = whereToOpenLink;
   eval("whereToOpenLink = " + where.toString()
   .replace('return "current";\n}', (function() {
      switch ( e.originalTarget.id ) {
        case "bookmarksMenuPopup":
        case "goPopup":
        case "appmenu_bookmarksPopup":
        case "appmenu_historyMenupopup":
        case "personal-bookmarks":
        case "bookmarks-menu-button":
        case "historymenu_history":
        case "home-button":
        case "page-proxy-stack":
        case "go-button":
        case "urlbar-go-button":
        case "PopupAutoCompleteRichResult":
        case "searchbar":
        case "PopupAutoComplete":
        return "tab";
         
        default: return "current";  
      }
   }).toString().replace(/^.*{|}$/g, "")+"}"));
     
   // открывать закладки и историю в новых вкладках, если букмарклети или пустая страница в текущей ....
   const openNode = PlacesUIUtils._openNodeIn;
   eval("PlacesUIUtils._openNodeIn = " + openNode.toString().replace(') {', '){\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) aWhere = "current";\n aWhere = (aWhere == "tab" || aNode.uri.startsWith("javascript:") ) ? "current" : "tab";\n')
   );
 
   // если JavaScript ссылка или пустая страница открывать в текущей ....
   const linkIn = openLinkIn;
   eval("openLinkIn = " + linkIn.toString().replace(';', ';;\n if ( url.startsWith("javascript:") ) where = "current";\n if (["about:newtab", "about:blank"].indexOf(content.location.href)!= -1 ) where = "current";')
   );
 
   // команды адресной строки открывают всё связанное с адресной строкой в новых вкладках, если alt+ в текущей ....
   const handle = gURLBar.handleCommand;
   eval("gURLBar.handleCommand = " + handle.toString().replace('aTriggeringEvent.altKey;', 'aTriggeringEvent.altKey == false;'));
   
   // 'Вставить и перейти' из адресной строки  открывает в новых вкладках ....
   addEventListener("popupshowing", function(e) {
      var menupopup = e.originalTarget;
      var pasteAndGo = menupopup.getElementsByAttribute("anonid", "paste-and-go")[0];
      if ( !pasteAndGo ) return;
      pasteAndGo.setAttribute("oncommand", "event.preventDefault(); gURLBar.select(); goDoCommand('cmd_paste'); gURLBar.handleCommand(event);")
   }, false, document.getElementById("urlbar") );
   
   // удалять изменения из внутренних функций Firefox ....
   addDestructor(function() {
      eval("whereToOpenLink = " + where);
      eval("PlacesUIUtils._openNodeIn = " + openNode);
      eval("openLinkIn = " + linkIn);
      eval("gURLBar.handleCommand = " + handle);
   });
   
})();
 
// при закрытии вкладки - переход тоже на последнюю посещенную....
const tc = gBrowser.tabContainer;
let tabs = [];
function onTabSelect(e) {
    for (let i = 0; i < tabs.length; i++) {
        if (e.target.linkedPanel != tabs[i])
            continue;
        tabs.splice(i, 1);
        break;
    }
    tabs.push(e.target.linkedPanel);
}
function onTabClose(e) {
    let allTabs = Array.slice(tc.childNodes);
    let allTabsLP = allTabs.map(function(tab) {
        return tab.linkedPanel;
    });
    if (e.target == gBrowser.selectedTab &&
            tabs.length >= 1) {
        let tab;
        let lp = tabs[tabs.length - (tabs.length == 1 ? 1 : 2)];
        for (let i = 0; i < allTabsLP.length; i++) {
            if (lp != allTabsLP[i])
                continue;
            tab = allTabs[i];
            break;
        }
        if (tab)
            gBrowser.selectedTab = tab;
    }
    if (tabs.length != 0) {
        tabs = tabs.filter(function(tab) {
            return allTabsLP.indexOf(tab) != -1 ? true : false;
        });
        tabs.splice(tabs.length - (tabs.length == 1 ? 1 : 2), 1);
    }
}
addEventListener("TabSelect", onTabSelect, false, tc);
addEventListener("TabClose", onTabClose, false, tc);

Всего записей: 1422 | Зарегистр. 12-07-2004 | Отправлено: 11:59 17-11-2017
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox/Mozilla Firefox Extensions (часть 9)
Maz (02-04-2019 17:51): Переезжаем: Расширения для Firefox/Mozilla Firefox Extensions (часть 10)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru