1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. aborix

Beiträge von aborix

  • Anzahl Unterordner und Lesezeichen im Ordner anzeigen.

    • aborix
    • 22. November 2021 um 08:36

    Bei z.B. 3 Ordnern und 5 Lesezeichen lautet jetzt die letzte Zeile:

     5 <- Alle in Tabs öffnen

    Wo soll stehen, dass es 3 Ordner gibt?

  • Anzahl Unterordner und Lesezeichen im Ordner anzeigen.

    • aborix
    • 21. November 2021 um 08:48

    Nimm das Skript aus #36 anstatt dem aus #24, das bewirkt das gleiche. Zusammen mit dem obigen funktionieren beide bei mir.



  • Anzahl Unterordner und Lesezeichen im Ordner anzeigen.

    • aborix
    • 20. November 2021 um 22:32

    :) :)

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 20. November 2021 um 22:21

    Die Änderung braucht man anscheinend nur für das Menü mit den geschlossenen Tabs, das sich per Linksklick öffnet.

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 20. November 2021 um 22:00

    Wenn ich in den Zeilen 27 und 45 die Funktion JSON.parse weglasse, funktioniert es.

    Also:

    let data = SessionStore.getClosedTabData(window);

    und

    data = SessionStore.getClosedWindowData();

  • Anzahl Unterordner und Lesezeichen im Ordner anzeigen.

    • aborix
    • 20. November 2021 um 09:51

    Teste mal:

    JavaScript
    (function() {
    
      if (!window.gBrowser)
        return;
    
      function setFunction() {
    
        PlacesViewBase.prototype._onPopupShowing = function PVB__onPopupShowing(aEvent) {
    
          let popup = aEvent.originalTarget;
          this._ensureMarkers(popup);
          if ("_delayedRemovals" in popup) {
            while (popup._delayedRemovals.length) {
              popup.removeChild(popup._delayedRemovals.shift());
            }
          }
          if (popup._placesNode && PlacesUIUtils.getViewForNode(popup) == this) {
            if (!popup._placesNode.containerOpen) {
              popup._placesNode.containerOpen = true;
            }
            if (!popup._built) {
              this._rebuildPopup(popup);
            }
            this._mayAddCommandsItems(popup);
          }
    
          /* original function end */
    
          for (let item of popup.children) {
            if (item.localName != 'menu' || item.id?.startsWith('history'))
              continue;
            setTimeout(() => {
              let itemPopup = item.menupopup;
              itemPopup.openPopup();
              itemPopup.hidePopup();
              let menuitemCount = 0;
              let menuCount = 0;
              for (let subitem of itemPopup.children) {
                if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                  if (subitem.localName == 'menuitem') {
                    menuitemCount++;
                  } else if (subitem.localName == 'menu') {
                    menuCount++;
                  }
                }
              }
              if (!item.labelOriginal) {
                item.labelOriginal = item.label;
              }
              item.labelSuffix = '  ' + menuitemCount + ' / ' + menuCount;
              item.label = item.labelOriginal + item.labelSuffix;
            }, 100);
          }
    
          popup.addEventListener('popuphidden', function onPopuphidden(event) {
            if (event.target != this)
              return;
            popup.removeEventListener('popuphidden', onPopuphidden);
            for (let item of popup.children) {
              if (item.localName == 'menu') {
                if (item.labelOriginal) {
                  item.label = item.labelOriginal;
                  item.labelOriginal = undefined;
                }
              }
            }
          });
    
        }
    
      }
    
      let intId = setInterval(() => {
        if (window.PlacesViewBase) {
          clearInterval(intId);
          setFunction();
        }
      }, 500);
    
    })();
    Alles anzeigen
  • BackupProfile.uc.js - div. Fragen dazu

    • aborix
    • 2. November 2021 um 08:17
    Zitat von FuchsFan
    Zitat von milupo

    Der einfache Doppelpunkt ist, zumindest unter Windows, nicht in Dateinamen erlaubt. Deswegen habe ich \u2236 genommen, das ist der Unicode-Code für den Doppelpunkt als mathematischen Operator.

    Ja, milupo, das habe ich auch so von dir übernommen. Ich hatte aborix das Script in der Form ohne Sekunden vorgelegt, er war der Meinung, dass dann jedes beliebige Zeichen dort eingefügt werden könnte.

    Ich hatte vergessen, dass es bei Dateinamen Einschränkungen gibt. Milupo hat recht.

  • Warnung beim Beenden vom Fx mit nur einem Tab

    • aborix
    • 31. Oktober 2021 um 20:24

    Teste bitte:

    JavaScript
    (function() {
    
      if (window.__SSi != 'window0')
        return;
    
      const { BrowserGlue } = ChromeUtils.import('resource:///modules/BrowserGlue.jsm');
    
      BrowserGlue.prototype._onQuitRequest = function BG__onQuitRequest(aCancelQuit, aQuitType) {
        if (aCancelQuit instanceof Ci.nsISupportsPRBool && aCancelQuit.data) {
          return;
        }
        if (aQuitType == "restart" || aQuitType == "os-restart") {
          return;
        }
        var windowcount = 0;
        var pagecount = 0;
        let pinnedcount = 0;
        for (let win of BrowserWindowTracker.orderedWindows) {
          if (win.closed) {
            continue;
          }
          windowcount++;
          let tabbrowser = win.gBrowser;
          if (tabbrowser) {
            pinnedcount += tabbrowser._numPinnedTabs;
            pagecount +=
              tabbrowser.browsers.length -
              tabbrowser._numPinnedTabs -
              tabbrowser._removingTabs.length;
          }
        }
        if (!aQuitType) {
          aQuitType = "quit";
        }
        if (!Services.prefs.getBoolPref("browser.warnOnQuit")) {
          return;
        }
        let sessionWillBeRestored =
          Services.prefs.getIntPref("browser.startup.page") == 3 ||
          Services.prefs.getBoolPref("browser.sessionstore.resume_session_once");
        if (sessionWillBeRestored) {
          if (
            !Services.prefs.getBoolPref("browser.sessionstore.warnOnQuit", false)
          ) {
            return;
          }
        } else if (!Services.prefs.getBoolPref("browser.tabs.warnOnClose")) {
          return;
        }
        let win = BrowserWindowTracker.getTopWindow();
        win.gDialogBox.replaceDialogIfOpen();
        let warningMessage;
        if (windowcount > 1) {
          let tabSubstring = gTabBrowserBundle.GetStringFromName(
            "tabs.closeWarningMultipleWindowsTabSnippet"
          );
          tabSubstring = PluralForm.get(pagecount, tabSubstring).replace(
            /#1/,
            pagecount
          );
          let stringID = sessionWillBeRestored
            ? "tabs.closeWarningMultipleWindowsSessionRestore3"
            : "tabs.closeWarningMultipleWindows2";
          let windowString = gTabBrowserBundle.GetStringFromName(stringID);
          windowString = PluralForm.get(windowcount, windowString).replace(
            /#1/,
            windowcount
          );
          warningMessage = windowString.replace(/%(?:1\$)?S/i, tabSubstring);
        } else {
          let stringID = sessionWillBeRestored
            ? "tabs.closeWarningMultipleTabsSessionRestore"
            : "tabs.closeWarningMultipleTabs";
          warningMessage = gTabBrowserBundle.GetStringFromName(stringID);
          warningMessage = PluralForm.get(pagecount, warningMessage).replace(
            "#1",
            pagecount
          );
        }
        let warnOnClose = { value: true };
        let titleId =
          AppConstants.platform == "win"
            ? "tabs.closeTabsAndQuitTitleWin"
            : "tabs.closeTabsAndQuitTitle";
        let flags =
          Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 +
          Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1;
        let checkboxLabel = !sessionWillBeRestored
          ? gTabBrowserBundle.GetStringFromName("tabs.closeWarningPrompt")
          : null;
        let buttonPressed;
        if (pagecount < 2) {
          let url = win.gBrowser.currentURI.spec;
          if (url == 'about:newtab' || url == 'about:home') {
            return;
          } else {
            buttonPressed = Services.prompt.confirmEx(
              win,
              "Firefox und diesen Tab schließen?",
              "Du bist dabei, Firefox und diesen Tab zu schließen. " +
                "Soll dieser Vorgang fortgesetzt werden?",
              flags,
              "Firefox schließen",
              null,
              null,
              null,
              warnOnClose
            );
          }
        } else {
          buttonPressed = Services.prompt.confirmEx(
            win,
            gTabBrowserBundle.GetStringFromName(titleId),
            warningMessage,
            flags,
            gTabBrowserBundle.GetStringFromName("tabs.closeButtonMultiple"),
            null,
            null,
            checkboxLabel,
            warnOnClose
          );
        }
        Services.telemetry.setEventRecordingEnabled("close_tab_warning", true);
        let warnCheckbox = warnOnClose.value ? "checked" : "unchecked";
        if (!checkboxLabel) {
          warnCheckbox = "not-present";
        }
        Services.telemetry.recordEvent(
          "close_tab_warning",
          "shown",
          "application",
          null,
          {
            source: this._quitSource,
            button: buttonPressed == 0 ? "close" : "cancel",
            warn_checkbox: warnCheckbox,
            closing_wins: "" + windowcount,
            closing_tabs: "" + (pagecount + pinnedcount),
            will_restore: sessionWillBeRestored ? "yes" : "no",
          }
        );
        this._quitSource = "unknown";
        if (!sessionWillBeRestored && buttonPressed == 0 && !warnOnClose.value) {
          Services.prefs.setBoolPref("browser.tabs.warnOnClose", false);
        }
        aCancelQuit.data = buttonPressed != 0;
      }
    
    })();
    Alles anzeigen
  • Elemente in der Seitenleiste untersuchen?

    • aborix
    • 27. Oktober 2021 um 19:31

    Bin da eher pessimistisch, an den treechildren hab ich mich schon ein paar Mal erfolglos versucht. Wir werden sehen.

  • Icons in Hamburger-Menü und den anderen Menüs einbauen.

    • aborix
    • 26. Oktober 2021 um 20:58

    Teste mal:

    JavaScript
     (function() {
    
      if (!window.gBrowser)
        return;
    
      function importBM() {
        let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
        let fpCallback = function(aResult) {
          if (aResult != Ci.nsIFilePicker.returnCancel && fp.fileURL) {
            ChromeUtils.import("resource://gre/modules/BookmarkHTMLUtils.jsm")
              .BookmarkHTMLUtils
              .importFromURL(fp.fileURL.spec).catch(Cu.reportError);
          }
        }
        fp.init(
          window,
          PlacesUIUtils.getString("SelectImport"),
          Ci.nsIFilePicker.modeOpen
        );
        fp.appendFilters(Ci.nsIFilePicker.filterHTML);
        fp.open(fpCallback);
      }
    
      function exportBM() {
        let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
        let fpCallback = function(aResult) {
          if (aResult != Ci.nsIFilePicker.returnCancel) {
            ChromeUtils.import("resource://gre/modules/BookmarkHTMLUtils.jsm")
              .BookmarkHTMLUtils
              .exportToFile(fp.file.path).catch(Cu.reportError);
          }
        }
        fp.init(
          window,
          PlacesUIUtils.getString("EnterExport"),
          Ci.nsIFilePicker.modeSave
        );
        fp.appendFilters(Ci.nsIFilePicker.filterHTML);
        fp.defaultString = "bookmarks.html";
        fp.open(fpCallback);
      }
    
      let importItem = document.createXULElement('menuitem');
      importItem.id = 'importBookmarks';
      importItem.label = 'Lesezeichen von HTML importieren…';
      importItem.setAttribute('oncommand', '(' + importBM.toString() + ')()');
    
      let exportItem = document.createXULElement('menuitem');
      exportItem.id = 'exportBookmarks';
      exportItem.label = 'Lesezeichen nach HTML exportieren…';
      exportItem.setAttribute('oncommand', '(' + exportBM.toString() + ')()');
    
      document.getElementById('organizeBookmarksSeparator').after(importItem);
      importItem.after(exportItem);
      exportItem.after(document.createXULElement('menuseparator'));
    
    })();
    Alles anzeigen
  • Selektor für "Neu" gesucht

    • aborix
    • 25. Oktober 2021 um 21:50

    Es gibt eine umfangreiche Dokumentation zu den Entwicklerwerkzeugen:

    MDN - Firefox Developer Tools ff.

  • Bilderrätsel

    • aborix
    • 22. Oktober 2021 um 23:43

    Nur geraten: Michael Steinbrecher?

  • TAB selected => TAB neu laden

    • aborix
    • 19. Oktober 2021 um 22:40

    Teste mal:

    JavaScript
    (function() {
    
      if (!window.gBrowser)
        return;
    
      var tab_hover = {
        tid: null,
        getTab: function(element) {
          while (element.localName != 'tab' && element != gBrowser.tabContainer) {
            element = element.parentNode;
          };
          return element.localName == 'tab' ? element : null;
        },
        onLoad: function() {
          gBrowser.tabContainer.addEventListener('mouseover', tab_hover.onMouseOver, false);
          gBrowser.tabContainer.addEventListener('mouseout', tab_hover.onMouseOut, false);
        },
        onMouseOver: function(event) {
          tab_hover.tid = setTimeout(function() {
            let tab = tab_hover.getTab(event.target);
            if (tab) {
              gBrowser.selectedTab = tab;
              BrowserReload();
            }
          }, 250);
        },
        onMouseOut: function() {
          clearTimeout(tab_hover.tid);
        }
      };
      tab_hover.onLoad();
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 16. September 2021 um 00:11
    Zitat von David44
    Zitat von aborix

    Das ist mit dem Style Sheet Service möglich.

    Damit habe ich inzwischen wieder Stunden verbracht, aber ohne Erfolg und ich gebe erst mal auf. Lediglich wenn die usercontent.css beim Start nicht existiert, klappt das Aktivieren per Button und auch zurück. Sonst nicht.

    Vielleicht genügt ein anderer Name der Datei. Denn wenn eine userContent.css beim Start existiert, wird das CSS darin auf jeden Fall auf das erste Fenster angewendet und lässt sich vielleicht auch nicht deaktivieren.

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 15. September 2021 um 00:30

    Das ist mit dem Style Sheet Service möglich.

    Siehe dazu:

    CSS Switch

    css_loader_author.uc.js

    nsIStyleSheetService

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 14. September 2021 um 10:40

    Deine Codes waren beide teilweise richtig. So geht's:

    JavaScript
    var css = Services.dirsvc.get('UChrm', Ci.nsIFile);
    css.append('userContent.css');
    if (css.exists()) ...

    Eine Dokumentation dazu:

    nsIFile

    Oder, mit moderneren Methoden:

    JavaScript
    (async () => {
      var profDir = await PathUtils.getProfileDir();
      var file = PathUtils.join(profDir, 'chrome', 'userContent.css');
      var fileExists = await IOUtils.exists(file);
      console.log(fileExists);
    })();

    PathUtils

    IOUtils

  • Script Warnung beim Beenden funktioniert im Nightly 94 nicht mehr

    • aborix
    • 14. September 2021 um 09:09

    Folgendes Skript funktioniert mit den letzten paar Nightlies. Da die Texte bei mehreren Tabs jetzt kürzer sind, habe ich auch hier die Texte kürzer gemacht. Sie stehen in den Zeilen 143 und 144.

    JavaScript
    (function() {
    
      if (window.__SSi != 'window0')
        return;
    
      const { BrowserGlue } = ChromeUtils.import('resource:///modules/BrowserGlue.jsm');
    
      BrowserGlue.prototype._onQuitRequest =
      function BG__onQuitRequest(aCancelQuit, aQuitType) {
        // If user has already dismissed quit request, then do nothing
        if (aCancelQuit instanceof Ci.nsISupportsPRBool && aCancelQuit.data) {
          return;
        }
    
        // There are several cases where we won't show a dialog here:
        // 1. There is only 1 tab open in 1 window
        // 2. browser.warnOnQuit == false
        // 3. The browser is currently in Private Browsing mode
        // 4. The browser will be restarted.
        // 5. The user has automatic session restore enabled and
        //    browser.sessionstore.warnOnQuit is not set to true.
        // 6. The user doesn't have automatic session restore enabled
        //    and browser.tabs.warnOnClose is not set to true.
        //
        // Otherwise, we will show the "closing multiple tabs" dialog.
        //
        // aQuitType == "lastwindow" is overloaded. "lastwindow" is used to indicate
        // "the last window is closing but we're not quitting (a non-browser window is open)"
        // and also "we're quitting by closing the last window".
    
        if (aQuitType == "restart" || aQuitType == "os-restart") {
          return;
        }
    
        // browser.warnOnQuit is a hidden global boolean to override all quit prompts.
        if (!Services.prefs.getBoolPref("browser.warnOnQuit")) {
          return;
        }
    
        var windowcount = 0;
        var pagecount = 0;
        let pinnedcount = 0;
        for (let win of BrowserWindowTracker.orderedWindows) {
          if (win.closed) {
            continue;
          }
          windowcount++;
          let tabbrowser = win.gBrowser;
          if (tabbrowser) {
            pinnedcount += tabbrowser._numPinnedTabs;
            pagecount +=
              tabbrowser.browsers.length -
              tabbrowser._numPinnedTabs -
              tabbrowser._removingTabs.length;
          }
        }
    
        // No windows open so no need for a warning.
        if (!windowcount) {
          return;
        }
    
        // browser.warnOnQuitShortcut is checked when quitting using the shortcut key.
        // The warning will appear even when only one window/tab is open. For other
        // methods of quitting, the warning only appears when there is more than one
        // window or tab open.
        if (this._quitSource == "shortcut") {
          if (!Services.prefs.getBoolPref("browser.warnOnQuitShortcut")) {
            return;
          }
        } else if (
          //pagecount < 2 ||
          !Services.prefs.getBoolPref("browser.tabs.warnOnClose")
        ) {
          return;
        }
    
        if (!aQuitType) {
          aQuitType = "quit";
        }
    
        let win = BrowserWindowTracker.getTopWindow();
    
        // Our prompt for quitting is most important, so replace others.
        win.gDialogBox.replaceDialogIfOpen();
    
        let title, buttonLabel;
        const gTabbrowserBundle = gTabBrowserBundle;
        // More than 1 window. Compose our own message.
        if (windowcount > 1) {
          title = gTabbrowserBundle.GetStringFromName("tabs.closeWindowsTitle");
          title = PluralForm.get(windowcount, title).replace(/#1/, windowcount);
          buttonLabel =
            AppConstants.platform == "win"
              ? "tabs.closeWindowsButtonWin"
              : "tabs.closeWindowsButton";
          buttonLabel = gTabbrowserBundle.GetStringFromName(buttonLabel);
        } else {
          title = gTabbrowserBundle.GetStringFromName("tabs.closeTabsTitle");
          title = PluralForm.get(pagecount, title).replace("#1", pagecount);
          if (this._quitSource == "shortcut") {
            let productName = gBrandBundle.GetStringFromName("brandShorterName");
            title = gTabbrowserBundle.formatStringFromName(
              "tabs.closeTabsWithKeyTitle",
              [productName]
            );
            buttonLabel = gTabbrowserBundle.formatStringFromName(
              "tabs.closeTabsWithKeyButton",
              [productName]
            );
          } else {
            title = gTabbrowserBundle.GetStringFromName("tabs.closeTabsTitle");
            title = PluralForm.get(pagecount, title).replace("#1", pagecount);
            buttonLabel = gTabbrowserBundle.GetStringFromName(
              "tabs.closeButtonMultiple"
            );
          }
        }
    
        // The checkbox label is different depending on whether the shortcut
        // was used to quit or not.
        let checkboxLabel;
        if (this._quitSource == "shortcut") {
          let quitKeyElement = win.document.getElementById("key_quitApplication");
          let quitKey = ShortcutUtils.prettifyShortcut(quitKeyElement);
          checkboxLabel = gTabbrowserBundle.formatStringFromName(
            "tabs.closeTabsWithKeyConfirmCheckbox",
            [quitKey]
          );
        } else {
          checkboxLabel = gTabbrowserBundle.GetStringFromName(
            "tabs.closeTabsConfirmCheckbox"
          );
        }
    
        let warnOnClose = { value: true };
        let flags =
          Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 +
          Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1;
    
        // 1 Fenster mit höchstens 1 nicht angehefteter Tab
        if (windowcount == 1 && pagecount < 2 && this._quitSource != "shortcut") {
          title = "Fenster schließen?";
          buttonLabel = "Schließen";
          checkboxLabel = null;
        }
    
        // buttonPressed will be 0 for closing, 1 for cancel (don't close/quit)
        let buttonPressed = Services.prompt.confirmEx(
          win,
          title,
          null,
          flags,
          buttonLabel,
          null,
          null,
          checkboxLabel,
          warnOnClose
        );
    
        Services.telemetry.setEventRecordingEnabled("close_tab_warning", true);
        let warnCheckbox = warnOnClose.value ? "checked" : "unchecked";
    
        let sessionWillBeRestored =
          Services.prefs.getIntPref("browser.startup.page") == 3 ||
          Services.prefs.getBoolPref("browser.sessionstore.resume_session_once");
        Services.telemetry.recordEvent(
          "close_tab_warning",
          "shown",
          "application",
          null,
          {
            source: this._quitSource,
            button: buttonPressed == 0 ? "close" : "cancel",
            warn_checkbox: warnCheckbox,
            closing_wins: "" + windowcount,
            closing_tabs: "" + (pagecount + pinnedcount),
            will_restore: sessionWillBeRestored ? "yes" : "no",
          }
        );
    
        // If the user has unticked the box, and has confirmed closing, stop showing
        // the warning.
        if (buttonPressed == 0 && !warnOnClose.value) {
          if (this._quitSource == "shortcut") {
            Services.prefs.setBoolPref("browser.warnOnQuitShortcut", false);
          } else {
            Services.prefs.setBoolPref("browser.tabs.warnOnClose", false);
          }
        }
    
        this._quitSource = "unknown";
    
        aCancelQuit.data = buttonPressed != 0;
      }
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • aborix
    • 14. September 2021 um 01:03

    Versuche es damit:

    JavaScript
    var css = Services.dirsvc.get('UChrm', Ci.nsIFile);
    css.append('userContent.css');
    css.moveTo(null, 'userContent.temp');
  • Script Warnung beim Beenden funktioniert im Nightly 94 nicht mehr

    • aborix
    • 9. September 2021 um 09:19

    Als ich das Skript geändert habe, war dieser Nightly der aktuelle:

    2021-09-08-09-47-02-mozilla-central/

    Hier funktioniert es bei mir.

    Jetzt ist dieser Nightly aktuell:

    2021-09-08-21-39-05-mozilla-central/

    Hier ist der relevante Quellcode anders und und das Skript funktioniert nicht. Die Warnungen kommen bei mir auch ohne Skript nicht.

    Ich warte zumindest den nächsten Nightly ab.

  • Script Warnung beim Beenden funktioniert im Nightly 94 nicht mehr

    • aborix
    • 8. September 2021 um 23:46

    Testet bitte:

    JavaScript
    (function() {
    
      if (window.__SSi != 'window0')
        return;
    
      const { BrowserGlue } = ChromeUtils.import('resource:///modules/BrowserGlue.jsm');
    
      BrowserGlue.prototype._onQuitRequest = function BG__onQuitRequest(aCancelQuit, aQuitType) {
        if (aCancelQuit instanceof Ci.nsISupportsPRBool && aCancelQuit.data) {
          return;
        }
        if (aQuitType == "restart" || aQuitType == "os-restart") {
          return;
        }
        var windowcount = 0;
        var pagecount = 0;
        let pinnedcount = 0;
        for (let win of BrowserWindowTracker.orderedWindows) {
          if (win.closed) {
            continue;
          }
          windowcount++;
          let tabbrowser = win.gBrowser;
          if (tabbrowser) {
            pinnedcount += tabbrowser._numPinnedTabs;
            pagecount +=
              tabbrowser.browsers.length -
              tabbrowser._numPinnedTabs -
              tabbrowser._removingTabs.length;
          }
        }
        if (!aQuitType) {
          aQuitType = "quit";
        }
        if (!Services.prefs.getBoolPref("browser.warnOnQuit")) {
          return;
        }
        let sessionWillBeRestored =
          Services.prefs.getIntPref("browser.startup.page") == 3 ||
          Services.prefs.getBoolPref("browser.sessionstore.resume_session_once");
        if (sessionWillBeRestored) {
          if (
            !Services.prefs.getBoolPref("browser.sessionstore.warnOnQuit", false)
          ) {
            return;
          }
        } else if (!Services.prefs.getBoolPref("browser.tabs.warnOnClose")) {
          return;
        }
        let win = BrowserWindowTracker.getTopWindow();
        win.gDialogBox.replaceDialogIfOpen();
        let warningMessage;
        if (windowcount > 1) {
          let tabSubstring = gTabBrowserBundle.GetStringFromName(
            "tabs.closeWarningMultipleWindowsTabSnippet"
          );
          tabSubstring = PluralForm.get(pagecount, tabSubstring).replace(
            /#1/,
            pagecount
          );
          let stringID = sessionWillBeRestored
            ? "tabs.closeWarningMultipleWindowsSessionRestore3"
            : "tabs.closeWarningMultipleWindows2";
          let windowString = gTabBrowserBundle.GetStringFromName(stringID);
          windowString = PluralForm.get(windowcount, windowString).replace(
            /#1/,
            windowcount
          );
          warningMessage = windowString.replace(/%(?:1\$)?S/i, tabSubstring);
        } else {
          let stringID = sessionWillBeRestored
            ? "tabs.closeWarningMultipleTabsSessionRestore"
            : "tabs.closeWarningMultipleTabs";
          warningMessage = gTabBrowserBundle.GetStringFromName(stringID);
          warningMessage = PluralForm.get(pagecount, warningMessage).replace(
            "#1",
            pagecount
          );
        }
        let warnOnClose = { value: true };
        let titleId =
          AppConstants.platform == "win"
            ? "tabs.closeTabsAndQuitTitleWin"
            : "tabs.closeTabsAndQuitTitle";
        let flags =
          Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0 +
          Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1;
        let checkboxLabel = !sessionWillBeRestored
          ? gTabBrowserBundle.GetStringFromName("tabs.closeWarningPrompt")
          : null;
        let buttonPressed;
        if (pagecount < 2) {
          buttonPressed = Services.prompt.confirmEx(
            win,
            "Firefox und diesen Tab schließen?",
            "Du bist dabei, Firefox und diesen Tab zu schließen. " +
              "Soll dieser Vorgang fortgesetzt werden?",
            flags,
            "Firefox schließen",
            null,
            null,
            null,
            warnOnClose
          );
        } else {
          buttonPressed = Services.prompt.confirmEx(
            win,
            gTabBrowserBundle.GetStringFromName(titleId),
            warningMessage,
            flags,
            gTabBrowserBundle.GetStringFromName("tabs.closeButtonMultiple"),
            null,
            null,
            checkboxLabel,
            warnOnClose
          );
        }
        Services.telemetry.setEventRecordingEnabled("close_tab_warning", true);
        let warnCheckbox = warnOnClose.value ? "checked" : "unchecked";
        if (!checkboxLabel) {
          warnCheckbox = "not-present";
        }
        Services.telemetry.recordEvent(
          "close_tab_warning",
          "shown",
          "application",
          null,
          {
            source: this._quitSource,
            button: buttonPressed == 0 ? "close" : "cancel",
            warn_checkbox: warnCheckbox,
            closing_wins: "" + windowcount,
            closing_tabs: "" + (pagecount + pinnedcount),
            will_restore: sessionWillBeRestored ? "yes" : "no",
          }
        );
        this._quitSource = "unknown";
        if (!sessionWillBeRestored && buttonPressed == 0 && !warnOnClose.value) {
          Services.prefs.setBoolPref("browser.tabs.warnOnClose", false);
        }
        aCancelQuit.data = buttonPressed != 0;
      }
    
    })();  
    Alles anzeigen

Unterstütze uns!

Jährlich (2025)

67,1 %

67,1% (435,86 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon