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

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

№722616-12-2019 22:07:55

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1644
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

shadow_user
Здесь инструкция по установке - https://github.com/Aris-t2/CustomJSforFx

Отсутствует

 

№722717-12-2019 00:02:27

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

shadow_user пишет: По параметру для about:config тоже непонятно, такого, даже без .ХХХ, в нем нет.

Ну этот параметр скорее всего создаёт сам скрипт. Залил на диск Яндекса три комплекта с авто-стартом русифицированного окна загрузок с использованием скрипта для 68 версии.
Комплект на базе user_chrome_files с окном загрузок и кнопкой паузы. Огромное Спасибо Виталию за комплект, а также за раннее оказанную помощь в подключении скрипта и кнопки паузы к комплекту. Комплект сегодня обновил и пересобрал. Файл user_style теперь custom_style_user и перекочевал в папку custom_styles, поближе к импортируемым стилям, что наверное положительный момент. Присутствует снимки самого окна загрузок и окна нужных для его работы - включенных стиля и скриптов.
Комплект для запуска скрипта окна загрузок и само окно на базе скриптов Alice0775 для 68 версии. Для 71-ой версии уже требуется другие userChrome.js и userChrome.xml и конечно ucjsDownloadsManager.uc.js. Этот вариант мне не по душе, дюже уж громоздкий userChrome.js.
Комплект на базе второго метода от Aris-a с окном загрузок для 68 версии. Кнопку паузы к последним двум комплектам прикрутить естественно мне не удалось. Перед использованием комплектов скриптов, при их смене, добавлении новых скриптов, редактировании скриптов - обязательна очистка папки startupCache.

Скрин забыл добавить
0f29bfeb9385.png

Отредактировано sandro79 (17-12-2019 00:26:24)

Отсутствует

 

№722817-12-2019 00:06:38

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 72.0

Re: Настройка внешнего вида Firefox в userChrome.css

kokoss
возможно у вас какой то стиль переопределяет этот код

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

Выделить код

Код:

:root[sizemode="maximized"] .titlebar-buttonbox {
    margin-inline-end: 3px !important;
}


там должен быть отступ 3px или попробуйте 4px но может вначале вылезти

Отсутствует

 

№722917-12-2019 00:21:03

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

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

возможно у вас какой то стиль переопределяет этот код
скрытый текст

там должен быть отступ 3px или попробуйте 4px но может вначале вылезти

Проверял и без стилей, то же самое. Полностью не скрывает, как вы и указали, если убрать с левой стороны, вылазит с правой. Спасибо за помощь!


Win7

Отсутствует

 

№723017-12-2019 00:23:10

shadow_user
Участник
 
Группа: Members
Зарегистрирован: 14-02-2007
Сообщений: 244
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

Залил на диск Яндекса три комплекта с авто-стартом русифицированного окна загрузок

Спасибо огромное, пробую. До этого по инструкциям с обеих сайтов делал, но бесполезно, не получилось.

Добавлено 17-12-2019 00:34:58
Успел проверить второй комплект, как самый простой в реализации, заработал совершенно без вопросов. Заметил, если окно загрузок после предыдущей загрузки не закрыто, а в фоне, то при старте следующей загрузки оно не берет фокус. У вас тоже так?
Премного благодарен!

Отредактировано shadow_user (17-12-2019 00:36:15)

Отсутствует

 

№723117-12-2019 00:49:17

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

shadow_user пишет: Заметил, если окно загрузок после предыдущей загрузки не закрыто, а в фоне, то при старте следующей загрузки оно не берет фокус. У вас тоже так?

Аналогично, но хоть такой костыль. Предпочтительнее всё же первый или третий вариант реализации. Первый вообще может работать при перезапуске браузера в безопасный режим. И это очень круто, ИМХО. И перед использованием комплектов скриптов, при их смене, добавлении новых скриптов, редактировании скриптов - обязательна очистка папки startupCache.

shadow_user пишет: До этого по инструкциям с обеих сайтов делал, но бесполезно, не получилось.

Ну правильно, вы же наверно использовали код ucjsDownloadsManager.uc.js для 69-72 по ссылке из этого сообщения.

Русифицированный ucjsDownloadsManager.uc.js для firefox 69-72

Выделить код

Код:

if (location.href == "chrome://browser/content/browser.xhtml") {
  Cu.import("resource://gre/modules/Services.jsm");

  window.ucjs_downloadManager = {
    _summary: null,
    _list: null,

    createElement: function(localName, arryAttribute) {
      let elm = document.createXULElement(localName);
      for(let i = 0; i < arryAttribute.length; i++) {
        elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value);
      }
      return elm;
    },

    init: function() {
      window.addEventListener("unload", this, false);

      let ref = document.getElementById("menu_openDownloads");
      let menu = ref.parentNode.insertBefore(
        this.createElement("menuitem",
          [{attr: "label", value:"Менеджер загрузок"},
           {attr : "oncommand", value: "ucjs_downloadManager.openDownloadManager(true);"}
          ]), ref);

      XPCOMUtils.defineLazyModuleGetter(this, "Downloads",
                "resource://gre/modules/Downloads.jsm");
      // Ensure that the DownloadSummary object will be created asynchronously.
      if (!this._summary) {
        this.Downloads.getSummary(this.Downloads.ALL).then(summary => {
          this._summary = summary;
          return this._summary.addView(this);
        }).then(null, Cu.reportError);
      }

      if (!this._list) {
        this.Downloads.getList(this.Downloads.ALL).then(list => {
          this._list = list;
          return this._list.addView(this);
        }).then(null, Cu.reportError);
      }
    },

    uninit: function() {
      window.removeEventListener("unload", this, false);

      if (this._summary) {
        this._summary.removeView(this);
      }
      if (this._list) {
        this._list.removeView(this);
      }
    },

    handleEvent: function(event) {
      switch (event.type) {
        case "unload":
          this.uninit();
          break;
      }
    },

    openDownloadManager: function ucjs_openDownloadManager(aForceFocus) {
      var enumerator = Services.wm.getEnumerator(null);
      while(enumerator.hasMoreElements()) {
        var win = enumerator.getNext();
        if (win.location == "chrome://browser/content/downloads/contentAreaDownloadsView.xul"
          && PrivateBrowsingUtils.isWindowPrivate(window) ==
             PrivateBrowsingUtils.isWindowPrivate(win)) {
          if (aForceFocus)
            win.focus();
          return;
        }
      }

      try {
        var height = Math.max(100,Services.prefs.getIntPref("browser.download.manager.size.height"));
        var width  = Math.max(300,Services.prefs.getIntPref("browser.download.manager.size.width"));
        var screenX = Math.min(Math.max(0,Services.prefs.getIntPref("browser.download.manager.size.screenX")), screen.availWidth - width);
        var screenY = Math.min(Math.max(0,Services.prefs.getIntPref("browser.download.manager.size.screenY")), screen.availHeight - height);
      } catch(r){
        height = 300;
        width  = 600;
        screenX = 0;
        screenY = 0;
      }
      var win = window.open("chrome://browser/content/downloads/contentAreaDownloadsView.xul",
                            "Download" +
                              (PrivateBrowsingUtils.isWindowPrivate(window) ? " - Private Window"
                                                                            : ""),
                            "outerWidth=" + width + ",outerHeight=" + height +
                            ",left=" + screenX + ",top=" + screenY +
                            ",chrome,toolbar=yes,dialog=no,resizable");
    },

    closeDownloadManager: function ucjs_closeDownloadManager() {
      var enumerator = Services.wm.getEnumerator(null);
      while(enumerator.hasMoreElements()) {
        var win = enumerator.getNext();
        if (win.location == "chrome://browser/content/downloads/contentAreaDownloadsView.xul") {
          win.close();
          return;
        }
      }
    },

    onDownloadAdded: function (aDownload) {
      var showWhenStarting = true;
      try {
        showWhenStarting = Services.prefs.getBoolPref("browser.download.manager.showWhenStarting");
      } catch(e) {}
      var numDls = 0;
      if (showWhenStarting) {
        if (this._list) {
          this._list.getAll().then(downloads => {
            for (let download of downloads) {
              if (!download.stopped)
                numDls++;
            }
            if (numDls > 0)
              this.openDownloadManager(false);
          }).then(null, Cu.reportError);
        }
      }
    },

    onDownloadChanged: function (aDownload) {
      if (!this._list)
        return;
      this._list.getAll().then(downloads => {
        var num = 0;
        for (let download of downloads) {
          if (!download.succeeded)
            num++;
        }
        if (num == 0) {
          var closeWhenDone = false;
          try {
            closeWhenDone = Services.prefs.getBoolPref("browser.download.manager.closeWhenDone");
          } catch(e) {}
          if (closeWhenDone) {
            this.closeDownloadManager();
          }
        }
      }).then(null, Cu.reportError);
    }
  };
  ucjs_downloadManager.init();
}


if (window.opener && location.href == "chrome://browser/content/downloads/contentAreaDownloadsView.xul") {
  
  Cu.import("resource://gre/modules/Services.jsm");
  Cu.import("resource://gre/modules/DownloadIntegration.jsm");

  window.ucjs_downloadManagerMain = {
    originalTitle:"",
    _summary: null,
    _list: null,
    _wait:false,

    createElement: function(localName, arryAttribute) {
      let elm = document.createXULElement(localName);
      for(let i = 0; i < arryAttribute.length; i++) {
        elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value);
      }
      return elm;
    },

    createElementNS: function(NS, localName, arryAttribute) {
      let elm = document.createElementNS(NS, localName);
      for(let i = 0; i < arryAttribute.length; i++) {
        elm.setAttribute(arryAttribute[i].attr, arryAttribute[i].value);
      }
      return elm;
    },

    init: function() {
      window.addEventListener("unload", this, false);

      // xxx remove in-content css
      var elements = document.childNodes;
      for (var i = 0; i <= elements.length; i++) {
        var element = elements[i];
        if (element.nodeValue.indexOf("chrome://browser/skin/downloads/contentAreaDownloadsView.css") > -1) {
          document.removeChild(element);
          break;
        }
      }
      /*
      var style = ' \
        @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); \
        #contentAreaDownloadsView { \
          padding: 0 ; \
        } \
        #downloadsRichListBox:empty + #downloadsListEmptyDescription { \
          pointer-events: none; \
        } \
       '.replace(/\s+/g, " ");
      var sspi = document.createProcessingInstruction(
        'xml-stylesheet',
        'type="text/css" href="data:text/css,' + encodeURIComponent(style) + '"'
      );
      document.insertBefore(sspi, document.documentElement);
      sspi.getAttribute = function(name) {
        return document.documentElement.getAttribute(name);
      };
      */
      let ref = document.documentElement;
      ref = ref.appendChild(this.createElement("hbox", []));
      ref.appendChild(this.createElement("button",
        [{attr: "id", value: "ucjs_clearListButton"},
         {attr: "label", value: "Очистить загрузки"},
        ]));
      ref.appendChild(this.createElement("spacer",
        [{attr: "flex", value: "1"}]));
      ref.appendChild(this.createElementNS("http://www.w3.org/1999/xhtml", "input",
        [{attr: "id", value: "ucjs_downloadManagerMain_input"},
         {attr: "clickSelectsAll", value: "true"},
         {attr: "type", value: "search"},
         {attr: "placeholder", value: "Поиск..."},
         {attr: "aria-autocomplete", value: "list"}
        ]));

        document.getElementById("ucjs_clearListButton").addEventListener("command", function(event) {
            ucjs_downloadManagerMain.clearDownloads();
          });
        document.getElementById("ucjs_downloadManagerMain_input")
                .addEventListener("input", function(event) {
            ucjs_downloadManagerMain.doSearch(event.target.value);
          });

      this.originalTitle = document.title +
                           (PrivateBrowsingUtils.isWindowPrivate(window) ? " - Private Window"
                                                                         : "");

/*
      // xxx Bug 1279329 "Copy Download Link" of context menu in Library is grayed out
      var listBox = document.getElementById("downloadsRichListBox");
      var placesView = listBox._placesView;
      var place = placesView.place;
      placesView.place= null;
      placesView.place = place;
*/

      setTimeout(function(){this._wait = true}.bind(this), 0);

      // Ensure that the DownloadSummary object will be created asynchronously.
      if (!this._summary) {
        Downloads.getSummary(Downloads.ALL).then(summary => {
          this._summary = summary;
          return this._summary.addView(this);
        }).then(null, Cu.reportError);
      }

      if (!this._list) {
        Downloads.getList(Downloads.ALL).then(list => {
          this._list = list;
          return this._list.addView(this);
        }).then(null, Cu.reportError);
      }

      try {
        var showProgressInTaskButton = Services.prefs.getBoolPref("browser.download.manager.showProgressInTaskButton")
      } catch(ex) {
        showProgressInTaskButton = true; //default
      }
      if (showProgressInTaskButton)
        setTimeout(function() {
          try {
            let docShell = window.QueryInterface(Ci.nsIInterfaceRequestor)
                                  .getInterface(Ci.nsIWebNavigation)
                                  .QueryInterface(Ci.nsIDocShellTreeItem).treeOwner
                                  .QueryInterface(Ci.nsIInterfaceRequestor)
                                  .getInterface(Ci.nsIXULWindow).docShell;
            let gWinTaskbar = Components.classes["@mozilla.org/windows-taskbar;1"]
                                      .getService(Components.interfaces.nsIWinTaskbar);
            this._taskbarProgress = gWinTaskbar.getTaskbarProgress(docShell);
          } catch(ex) {
            this._taskbarProgress = null;
          }
        }.bind(this), 10);
    },

    uninit: function() {
      window.removeEventListener("unload", this, false);

      this._taskbarProgress = null;
      if (this._wait)
        this.saveSizePosition();

      if (this._summary) {
        this._summary.removeView(this);
      }
      if (this._list) {
        this._list.removeView(this);
      }
    },

    handleEvent: function(event) {
      switch (event.type) {
        case "unload":
          this.uninit();
          break;
      }
    },

    saveSizePosition: function() {
      if (window.windowState == 3) {
        Services.prefs.setIntPref("browser.download.manager.size.height", window.outerHeight);
        Services.prefs.setIntPref("browser.download.manager.size.width", window.outerWidth);
        Services.prefs.setIntPref("browser.download.manager.size.screenX", window.screenX);
        Services.prefs.setIntPref("browser.download.manager.size.screenY", window.screenY);
      }
    },

    onSummaryChanged: function () {
      if (!this._summary)
        return;
      if (this._summary.allHaveStopped || this._summary.progressTotalBytes == 0) {
        document.title = this.originalTitle;
        if (this._taskbarProgress) {
          this._taskbarProgress.setProgressState(
                                     Ci.nsITaskbarProgress.STATE_NO_PROGRESS, 0, 0);
        }
        Cu.import("resource://gre/modules/Services.jsm");
        var enumerator = Services.wm.getEnumerator("navigator:browser");
        while(enumerator.hasMoreElements()) {
          return;
        }

        var closeWhenDone = false;
        try {
          closeWhenDone = Services.prefs.getBoolPref("browser.download.manager.closeWhenDone");
        } catch(e) {}
        if (closeWhenDone) {
          DownloadIntegration._store.save();
          window.close();
        }

      } else {

        // If the last browser window has been closed, we have no indicator any more.
        if (this._taskbarProgress) {
          if (this._summary.allHaveStopped || this._summary.progressTotalBytes == 0) {
            this._taskbarProgress.setProgressState(
                                     Ci.nsITaskbarProgress.STATE_NO_PROGRESS, 0, 0);
          } else {
            // For a brief moment before completion, some download components may
            // report more transferred bytes than the total number of bytes.  Thus,
            // ensure that we never break the expectations of the progress indicator.
            let progressCurrentBytes = Math.min(this._summary.progressTotalBytes,
                                                this._summary.progressCurrentBytes);
            this._taskbarProgress.setProgressState(
                                     Ci.nsITaskbarProgress.STATE_NORMAL,
                                     progressCurrentBytes,
                                     this._summary.progressTotalBytes);
          }
        }

        // Update window title
        var numDls = 0;
        if (!this._list)
          return;
        this._list.getAll().then(downloads => {
          for (let download of downloads) {
            if (download.hasProgress && !download.succeeded)
              numDls++;
          }

          let progressCurrentBytes = Math.min(this._summary.progressTotalBytes,
                                            this._summary.progressCurrentBytes);
          let percent = Math.floor(progressCurrentBytes / this._summary.progressTotalBytes * 100);
          let text = percent + "% из " + numDls + (numDls < 2 ? " файла - " : " файлов - ") ;
          document.title = text + this.originalTitle;
        }).then(null, Cu.reportError);
      }
    },

    clearDownloads: function ucjs_clearDownloads() {
      var DO_NOT_DELETE_HISTORY = true; /* custmizable true or false */
      var richListBox = document.getElementById("downloadsRichListBox");

      var places = [];
      function addPlace(aURI, aTitle, aVisitDate) {
        places.push({
          uri: aURI,
          title: aTitle,
          visits: [{
            visitDate: (aVisitDate || Date.now()) * 1000,
            transitionType: Ci.nsINavHistoryService.TRANSITION_LINK
          }]
        });
      }
      function moveDownloads2History(d) {
        if (DO_NOT_DELETE_HISTORY &&
            !PrivateBrowsingUtils.isWindowPrivate(window)) {
          for (let element of richListBox.childNodes) {
            let download = element._shell.download;
            let aURI = makeURI(download.source.url);
            // let aTitle = document.getAnonymousElementByAttribute(element, "class", "downloadTarget").value
            let aTitle = download.target.path;
            aTitle = aTitle.match( /[^\\]+$/i )[0];
            aTitle = aTitle.match( /[^/]+$/i )[0];

            let aVisitDate = download.endTime || download.startTime;
            addPlace(aURI, aTitle, aVisitDate)
          }
        }

        // Clear List
        richListBox._placesView.doCommand('downloadsCmd_clearDownloads');

        if (DO_NOT_DELETE_HISTORY &&
            !PrivateBrowsingUtils.isWindowPrivate(window)) {
          if (places.length > 0) {
            var asyncHistory = Components.classes["@mozilla.org/browser/history;1"]
                     .getService(Components.interfaces.mozIAsyncHistory);
              asyncHistory.updatePlaces(places);
          }
        }
      }
      var btn = document.getElementById("ucjs_clearListButton");
      moveDownloads2History(0);
    },

    doSearch: function ucjs_doSearch(filterString) {
      var richListBox = document.getElementById("downloadsRichListBox");
      richListBox._placesView.searchTerm = filterString;
    }
  };
  ucjs_downloadManagerMain.init();
}

Отредактировано sandro79 (17-12-2019 09:19:37)

Отсутствует

 

№723217-12-2019 11:06:18

shadow_user
Участник
 
Группа: Members
Зарегистрирован: 14-02-2007
Сообщений: 244
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

И перед использованием комплектов скриптов, при их смене, добавлении новых скриптов, редактировании скриптов - обязательна очистка папки startupCache.

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

Отсутствует

 

№723317-12-2019 14:20:08

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

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Ну, вставил я кнопку Эта ? Кнопка установить появится тоже, если есть обнова..
mq7ujzoo.png
Иконки бы еще сдвинуть на этом popup  влево и т.д  , по отдельности неохота...

panel-item ----icon ? (
  margin-left: xx;
  margin-lright: xx;
  )
или
.more-options-menu ?

Отредактировано solombala (17-12-2019 15:21:21)

Отсутствует

 

№723417-12-2019 15:19:27

Ovod
Участник
 
Группа: Members
Зарегистрирован: 10-06-2015
Сообщений: 132
UA: Firefox 66.0

Re: Настройка внешнего вида Firefox в userChrome.css

shadow_user
https://www.upload.ee/files/10858219/chrome.zip.html
все кажись

Отсутствует

 

№723517-12-2019 15:56:56

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 71.0

Re: Настройка внешнего вида Firefox в userChrome.css

shadow_user пишет: А ваш второй комплект заработал без чистки.

Действительно, с этими скриптами чистка не требуется, видимо потому что скрипты запускаются не из директории установки Firefox, а из папки chrome профиля.
Этот метод имеет ещё особенность, - можно запустить нужный скрипт, просто поместив его в папку chrome, при этом не требуется прописывать никаких путей в скрипте userChrome.js. В 72+ уже этот метод работать не будет и требуется запуск из директории установки Firefox.

Ovod пишет: все кажись

Работает!? Значит всё!!!

Отредактировано sandro79 (17-12-2019 16:07:23)

Отсутствует

 

№723617-12-2019 16:23:01

shadow_user
Участник
 
Группа: Members
Зарегистрирован: 14-02-2007
Сообщений: 244
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

В 72+ уже этот метод работать не будет и требуется запуск из директории установки Firefox.

Думаю, я надолго на 68, слишком хлопотный процесс перехода. В 1 комплекте, видимо, нужно пути прописывать, поэтому я его не смог запустить. 3 комплект заработал без проблем, на нем и остановился.
Побочный эффект от экспериментов :D - имевшимися у меня файлами и вашими (2 + 2) смог оживить переставший работать родной прогресс загрузки, теперь тоже всплывает при каждой загрузке. Будет запасной вариант. Спасибо еще раз!

Ovod пишет

все кажись

Можно и так. В окне по звездочке можно отключить экран с превью и увеличить размер окна. Для первого https://forum.mozilla-russia.org/viewto … 19#p770819
для второго часть кода отсюда https://forum.mozilla-russia.org/viewto … 79#p728779

Отсутствует

 

№723717-12-2019 18:03:34

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

shadow_user пишет: В 1 комплекте, видимо, нужно пути прописывать, поэтому я его не смог запустить. 3 комплект заработал без проблем, на нем и остановился.

Да нет, всё уже прописано и готово к использованию, только птички расставить в настройках комплекта user_chrome_files(скрин есть в архиве) и перезапустить браузер через окно настроек. Если содержимое архива размещено как указано в инструкции, то проблем быть не должно. Может с профилем чего.
Да, третий вариант наверное самое то, если не требуются доп. панели и запуск специфических скриптов и стилей. Рад был помочь.
ucjsDownloadsManager.uc для 71 версии https://yadi.sk/d/hEdZ7lMUwFLrqg, упаковал  файл в архив, а то скачивался как txt.

На всякий случай
[img]06c2abeb9301.png

Отредактировано sandro79 (18-12-2019 00:22:34)

Отсутствует

 

№723817-12-2019 19:41:41

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 72.0

Re: Настройка внешнего вида Firefox в userChrome.css

del

Отредактировано Vitaliy V. (14-04-2022 01:30:30)

Отсутствует

 

№723917-12-2019 20:26:21

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 73.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. Благодарю! Проверил, вроде и придраться не к чему. Всё отлично, как по мне. Я понял, что в 72+ стало ещё сложнее привести about:addons к привычному виду, т.к. уже появились в коде - content: "Включить" !important; и content: "Отключить" !important;, ну т.е. приходится назначать уже вручную текст на кнопках. Немного рихтанул код - на всю ширину окна растянул --v-main-max-width: none !important;. Отлично, спасибо!

скрытый текст
a8948443c27a.png

Отсутствует

 

№724017-12-2019 20:38:13

shadow_user
Участник
 
Группа: Members
Зарегистрирован: 14-02-2007
Сообщений: 244
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

Да нет, всё уже прописано и готово к использованию, только птички расставить в настройках комплекта user_chrome_files(скрин есть в архиве)

Не смог я получить то, что на скрине.

Отсутствует

 

№724117-12-2019 20:39:12

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

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Как всегда, круто и в тему !
oonmascq.png

Отсутствует

 

№724217-12-2019 21:35:00

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 72.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79
нужно в custom_script_all_win.js добавить этот код

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

Выделить код

Код:

if (window.opener && location.href.startsWith("chrome://browser/content/downloads/contentAreaDownloadsView.x")) {
            try {
                Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/custom_scripts/places_win.js", window, "UTF-8");
            } catch(e) {}
        }


а в custom_script.js ничего и подключать не обязательно
это надо было раньше когда не было custom_script_all_win.js

Отредактировано Vitaliy V. (17-12-2019 21:35:34)

Отсутствует

 

№724317-12-2019 22:31:26

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

нужно в custom_script_all_win.js добавить этот код...

Да, да. У меня там несколько другой код, где // Здесь может быть ваш код который сработает по событию "load" не раньше

custom_script_all_win.js

Выделить код

Код:

try {
            Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/custom_scripts/ucjsDownloadsManager.uc.js", window, "UTF-8");
        } catch(e) {}


И я выложил немного другой вариант. Изначально здесь был ещё код для custom_script.js + places_win.js + стиль. И Вы мне помогли всё это собрать с кнопкой паузы именно в окне загрузок скрипта ucjsDownloadsManager.uc. Поэтому custom_script.js я использую. И этот вариант, по мне, даже предпочтительнее чем кнопка паузы в окне библиотек. А без custom_script.js кнопка паузы доступна только в окне библиотеки, а в авто-стартующем окне её нет.
custom_script.js (observer)

Выделить код

Код:

var observer = {
    observe: function(aSubject, aTopic, aData) {
        if (aTopic == "domwindowopened" && aSubject instanceof Ci.nsIDOMWindow) {
            aSubject.addEventListener("load", function domLoad() {
                aSubject.removeEventListener("load", domLoad, false);
                var loc = aSubject.location;
                if (loc && loc.href.startsWith("chrome://browser/content/downloads/contentAreaDownloadsView.x")) {
                    try {
                        Services.scriptloader.loadSubScript("chrome://user_chrome_files/content/custom_scripts/places_win.js", aSubject, "UTF-8");
                    } catch(e) {}
                }
            }, false);
        }
    }
};
Services.obs.addObserver(observer, "domwindowopened", false);

Отсутствует

 

№724418-12-2019 00:29:55

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 72.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

А без custom_script.js кнопка паузы доступна только в окне библиотеки, а в авто-стартующем окне её нет.

В [firefox] 68 всё работает без custom_script.js
а в [firefox] 71 могут не загрузится иконки (в окне загрузок вызываемом ucjsDownloadsManager.uc.js не важно с custom_script.js или без)
Content Security Policy: Параметры страницы заблокировали загрузку ресурса data:image/....
можно сделать отдельные иконки .svg или .png

sandro79 пишет

Да, да. У меня там несколько другой код

Вот именно, добавьте мой код и заработает

Отредактировано Vitaliy V. (18-12-2019 00:33:24)

Отсутствует

 

№724518-12-2019 10:00:13

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет: В [firefox] 68 всё работает без custom_script.js

Да, действительно, добавил код в конец скрипта и заработало без custom_script.js. Что-то я сразу не понял и начал его совать вместо того, что запускает ucjsDownloadsManager.uc.js с мыслью, - а разве так будет работать? Непонятно, вот переклинило меня именно заменить, а не добавить, хотя ясно было сказано - добавить. Спасибо. Виталий, ещё один момент хотел уточнить, по второму комплекту из этого сообщения, для расширения кругозора. Если удалить из скрипта ucjsDownloadsManager полностью шапку со всякими пояснениями и историей версий, то в окне загрузок пропадают кнопка очистки загрузок и фиктивная строка поиска, а также пункт в панели меню Инструменты? Но опытным путём было выяснено, что обязательно наличие четырёх строк с содержанием ниже. В чём причина, почему наличие именно этих строк обязательно для нормальной работы этого скрипта, может из-за того что не требуется прописывать пути к запускаемым скриптам в этом методе или другая причина? Скрипт, перезалитый уже третий раз, для 71 в сообщении чуть выше.
Да, в 71 иконка конечно отвалилась в окне ucjsDownloadsManager.uc.js, но хоть пауза при нажатии работает. Виталий, может сделаете стиль для иконок, если не сильно хлопотно, а иконки я сам попытаюсь сделать или может из omni.ja достану. Спасибо.

Наличие этих строк обязательно
// ==UserScript==
// @include        main
// @include        chrome://browser/content/downloads/contentAreaDownloadsView.xul
// ==/UserScript==

Отсутствует

 

№724618-12-2019 12:47:41

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 73.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
А можно в вашем стиле about:addons для 72+ вернуть кнопку с троеточием. У меня на нее кнопка с доп. параметрами завязана.

Отредактировано Garalf (18-12-2019 13:55:10)

Отсутствует

 

№724718-12-2019 13:09:04

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

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Подскажите пожалуйста, как в [firefox] 71: изменить форму (сделать квадратной или круглой) значка "Приватное окно"? Сделать так что бы значок менял цвет при нахождении в "Приватном окне"? И сдвинуть немного влево значок "Приватного окна"?

скрин
e007ffe97225.png

Отредактировано kokoss (18-12-2019 13:18:13)


Win7

Отсутствует

 

№724818-12-2019 20:09:58

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 72.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

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

Там сделано метаданные типа как в менеджерах скриптов Greasemonkey и т. д., короче лишний не нужный код который парсит эти данные в скриптах

sandro79 пишет

стиль для иконок, если не сильно хлопотно

Можно сделать не только стиль но и изменить код чтобы работало во всех этих окнах places и contentAreaDownloadsView

user_chrome_files/custom_scripts/custom_script_all_win.js

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

Выделить код

Код:

/* ************************************************ */

        // Здесь может быть ваш код который сработает по событию "load" не раньше
        setTimeout(() => {
            var loadScripts = ((name) => {
                try {
                    Services.scriptloader.loadSubScript(`chrome://user_chrome_files/content/custom_scripts/${name}`, window, "UTF-8");
                } catch(e) {}
            });
            var url = location.href;
            if (url.startsWith("chrome://browser/content/browser.x")) {
                    loadScripts("ucjsDownloadsManager.uc.js");
            } else if (url.startsWith("chrome://browser/content/places/places.x")) {
                    loadScripts("places_win.js");
            } else if (url.startsWith("chrome://browser/content/downloads/contentAreaDownloadsView.x")) {
                    loadScripts("ucjsDownloadsManager.uc.js");
                    loadScripts("places_win.js");
            }
        }, 0);
        /* ************************************************ */


стиль
user_chrome_files/custom_styles/custom_style_user.css или импортируемом файле
скрытый текст

Выделить код

Код:

@-moz-document url-prefix("chrome://browser/content/places/places.x"),
    url-prefix("chrome://browser/content/downloads/contentAreaDownloadsView.x") {
richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden]):-moz-any([state="0"],[state="4"])::after {
    display: -moz-box !important;
    content: "" !important;
    width: 56px !important;
    -moz-box-align: center !important;
    -moz-context-properties: fill !important;
    fill: currentColor !important;
    background-position: center !important;
    background-repeat: no-repeat !important;
    background-size: 16px !important;
}
richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden])[state="0"]::after {
    background-image: url("./svg/download-pause.svg") !important;
}
richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden])[state="4"]::after {
    background-image: url("./svg/download-resume.svg") !important;
}
richlistbox#downloadsRichListBox > richlistitem.download-state {
    -moz-box-direction: normal !important;
}
richlistbox#downloadsRichListBox > richlistitem.download-state:not([buttonhidden]) > button:last-of-type {
    -moz-box-ordinal-group: 100 !important;
    display: -moz-box !important;
    margin-inline-start: 0 !important;
}
}


иконки svg
user_chrome_files/custom_styles/svg/download-pause.svg
скрытый текст

Выделить код

Код:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16">
    <path fill="context-fill" d="M 4.5,1 C 3.67,1 3,1.67 3,2.49 V 13.5 C 3,14.4 3.67,15 4.5,15 5.33,15 6,14.4 6,13.5 V 2.49 C 6,1.67 5.33,1 4.5,1 Z M 10.5,1 C 9.7,1 9,1.66 9,2.49 V 13.5 C 9,14.4 9.7,15 10.5,15 11.3,15 12,14.4 12,13.5 V 2.49 C 12,1.66 11.3,1 10.5,1 Z"/>
</svg>


user_chrome_files/custom_styles/svg/download-resume.svg
скрытый текст

Выделить код

Код:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16">
    <path fill="context-fill" d="M 2,14.1 C 2,14.9 2.62,15.2 3.37,14.8 L 13.5,8.82 C 14.2,8.38 14.2,7.64 13.5,7.19 L 3.37,1.2 C 2.61,0.753 2,1.08 2,1.9 Z"/>
</svg>

Добавлено 18-12-2019 20:10:10

Garalf пишет

А можно в вашем стиле about:addons для 72+ вернуть кнопку с троеточием. У меня на нее кнопка с доп. параметрами завязана.

А для чего тогда вам этот стиль? он в основном это и делает

kokoss пишет

изменить форму (сделать квадратной или круглой) значка "Приватное окно"?

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

kokoss пишет

Сделать так что бы значок менял цвет при нахождении в "Приватном окне"? И сдвинуть немного влево значок "Приватного окна"?

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

Выделить код

Код:

#privatebrowsing-button image {
    fill: currentColor !important;
}

*|*:root[privatebrowsingmode="temporary"] #privatebrowsing-button image {
    fill: magenta !important;
}

#toolbar-menubar[autohide="true"] + #TabsToolbar .titlebar-spacer[type="post-tabs"] {
    display: -moz-box !important;
    width: 10px !important;
}

Отредактировано Vitaliy V. (18-12-2019 20:10:10)

Отсутствует

 

№724918-12-2019 20:44:22

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

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет

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

Имелось в виду, вот такой формы:

скрин
d9d70926c3ec.png

Добавлено: изменить форму получилось с помощью этого стиля;
скрытый текст

Выделить код

Код:

#privatebrowsing-button {
    list-style-image: url("chrome://browser/skin/privatebrowsing/favicon.svg") !important;
}


но теперь не работает ваш стиль по изменению цвета значка ...
скрытый текст

Выделить код

Код:

#privatebrowsing-button image {
    fill: currentColor !important;
}

Отредактировано kokoss (18-12-2019 23:21:56)


Win7

Отсутствует

 

№725018-12-2019 21:03:26

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V. пишет: Там сделано метаданные типа как в менеджерах скриптов Greasemonkey и т. д., короче лишний не нужный код который парсит эти данные в скриптах

Спасибо за разъяснение, не зря мне этот вариант не очень понравился.

Vitaliy V. пишет: Можно сделать не только стиль но и изменить код чтобы работало во всех этих окнах places и contentAreaDownloadsView

Виталий, ну это верх моих ожиданий, кнопки паузы в обоих окнах и работают исправно. Гениально! Верх совершенства.
Огромнейшее Вам Спасибо! :beer:

фотоотчёт
fe50b2606051.png

Обновлённый комплект на базе user_chrome_files перезалит, скрипт ucjsDownloadsManager.uc.js для 69-72 добавил в архив, при использовании комплекта в 71 закинуть в папку custom_scripts с заменой - https://forum.mozilla-russia.org/viewto … 91#p775991
Обновил комплек для автозапуска окна загрузок для ff 68 на базе второго метода от Aris, добавлена кнопка паузы с иконками и скрипт ucjsDownloadsManager.uc.js для 69-72, обновлена инструкция.
Обновил также комплект на скриптах от alice0775 для 68, добавлена также кнопка паузы https://yadi.sk/d/YZJHtKk4o-Wikg

Отредактировано sandro79 (19-12-2019 17:30:43)

Отсутствует

 

Board footer

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