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

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

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

Maz (09-05-2021 17:46): Расширения для Firefox | Mozilla Firefox Extensions. Часть 11  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

cannafu



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
// ==UserScript==
// @name            Extension Options Menu
// @include         main
// @startup         UC.extensionOptionsMenu.exec(win);
// @shutdown        UC.extensionOptionsMenu.destroy();
// @onlyonce
// ==/UserScript==
 
// original: https://addons.mozilla.org/en-US/firefox/addon/extension-options-menu/
 
(function () {
  'use strict';
 
  UC.extensionOptionsMenu = {
    exec: function (win) {
      var document = win.document;
      var sspi = document.createProcessingInstruction(
        'xml-stylesheet',
        'type="text/css" href="data:text/css,' + encodeURIComponent(UC.extensionOptionsMenu.style) + '"'
      );
      document.insertBefore(sspi, document.documentElement);
      UC.extensionOptionsMenu.styles.push(sspi);
    },
 
    // config
    showVersion:    true,
    showHidden:     false,
    showDisabled:   true,
    autoRestart:    false,
    enabledFirst:   true,
    blackListArray: [],
 
    populateMenu: function (event) {
      var prevState;
      var showItem = true;
      var popup = event.currentTarget;
      var document = event.view.document;
 
      while (popup.hasChildNodes())
        popup.removeChild(popup.firstChild);
 
      var addons;
      (async () => {
        addons = await AddonManager.getAddonsByTypes(['extension']);
      })();
 
      var thread = Services.tm.mainThread;
      while (addons === undefined)
        thread.processNextEvent(true);
 
      addons.sort((a, b) => {
        var enabledFirst = UC.extensionOptionsMenu.enabledFirst;
        var ka = (enabledFirst ? a.isActive ? '0' : '1' : '') + ' ' + a.name.toLowerCase();
        var kb = (enabledFirst ? b.isActive ? '0' : '1' : '') + ' ' + b.name.toLowerCase();
        return (ka < kb) ? -1 : 1;
      }).forEach(addon => {
        if (!addon.appDisabled && ((addon.isActive && addon.optionsURL)
            || ((addon.userDisabled && UC.extensionOptionsMenu.showDisabled)
            || (!addon.hidden || UC.extensionOptionsMenu.showHidden)))) {
          var state = addon.isActive;
          if (UC.extensionOptionsMenu.enabledFirst && (prevState && state !== prevState))
            popup.appendChild(document.createXULElement('menuseparator'));
          prevState = state;
 
          var mi = document.createXULElement('menuitem');
          var label = addon.name;
          if (UC.extensionOptionsMenu.showVersion)
            label = label += ' ' + addon.version;
          mi.setAttribute('label', label);
          mi.setAttribute('class', 'menuitem-iconic');
          mi.setAttribute('tooltiptext', addon.description + '\nID : ' + addon.id + '\n' + Math.floor(addon.size / 1024) + ' KB' + '\n\nLeft-Click: Options\nMiddle-Click: Open Homepage\nRight-Click: Enable/Disable\nCtrl + Left-Click: View Source\nCtrl + Middle-Click: Copy ID\nCtrl + Right-Click: Uninstall');
          var icon = addon.iconURL || addon.iconURL64 || UC.extensionOptionsMenu.iconURL || '';
          mi.setAttribute('image', icon);
          mi.addEventListener('click', UC.extensionOptionsMenu.handleClick);
          mi._Addon = addon;
 
          UC.extensionOptionsMenu.setDisable(mi, addon, 0);
 
          if (UC.extensionOptionsMenu.blackListArray) {
            for (var i = 0; i < UC.extensionOptionsMenu.blackListArray.length; i++) {
              if (UC.extensionOptionsMenu.blackListArray[i] == addon.id.toLowerCase()) {
                showItem = false;
                break;
              } else {
                showItem = true;
              }
            }
          }
          if (showItem)
            popup.appendChild(mi);
        }
      });
    },
 
    handleClick: function(event) {
      var win = event.view;
      var mi = event.currentTarget;
      if (!('_Addon' in mi)) {
        return;
      }
 
      var addon = mi._Addon;
      var pending = addon.pendingOperations & AddonManager.PENDING_UNINSTALL;
      var hasMdf = event.ctrlKey || event.shiftKey || event.altKey || event.metaKey;
 
      switch (event.button) {
        case 0:
          if (addon.optionsURL && !hasMdf)
            UC.extensionOptionsMenu.openAddonOptions(addon, win);
          else if (event.ctrlKey)
            UC.extensionOptionsMenu.browseDir(addon);
          break;
        case 1:
          if (addon.homepageURL && !hasMdf) {
            openURL(addon.homepageURL);
            closeMenus(mi);
          } else if (event.ctrlKey) {
            Cc['@mozilla.org/widget/clipboardhelper;1'].getService(Ci.nsIClipboardHelper).copyString(addon.id);
            closeMenus(mi);
          }
          break;
        case 2:
          if (!hasMdf) {
            if (addon.userDisabled)
              addon.enable();
            else
              addon.disable();
            UC.extensionOptionsMenu.setDisable(mi, addon, 1);
            if (addon.operationsRequiringRestart && UC.extensionOptionsMenu.autoRestart)
              if ('BrowserUtils' in window)
                BrowserUtils.restartApplication();
              else
                Application.restart();
          } else if (event.ctrlKey) {
            if (Services.prompt.confirm(null, null, 'Delete ' + addon.name + ' permanently?')) {
              if (pending)
                addon.cancelUninstall();
              else {
                addon.uninstall();
                return;
              }
              cls.remove('restartless');
              cls.remove('enabling');
              cls.remove('disabling');
              cls.add('uninstalling');
              cls.add('disabled');
            }
          }
      }
    },
 
    setDisable: function (mi, addon, toggling) {
      var cls = mi.classList;
       
      if (!addon.operationsRequiringRestart) {
        cls.add('restartless');
         
        if (toggling) {
          if (addon.isActive) {
            if (addon.optionsURL)
              cls.remove('noOptions');
            cls.remove('disabled');
            cls.remove('disabling');
            cls.add('enabling');
          } else {
            cls.remove('enabling');
            cls.add('disabling');
          }
        }
      } else {
        if (toggling)
          if (addon.userDisabled)
            if (addon.isActive)
              cls.add('disabling');
            else
              cls.remove('enabling');
          else
            if (addon.isActive)
              cls.remove('disabling');
            else
              cls.add('enabling');
        else if (addon.userDisabled && addon.isActive)
          cls.add('disabling');
        else if (!addon.userDisabled && !addon.isActive)
          cls.add('enabling');
      }
 
      if (!addon.isActive)
        cls.add('disabled');
 
      if (!addon.optionsURL)
        cls.add('noOptions');
    },
 
    openAddonOptions: function (addon, win) {
      var optionsURL = addon.optionsURL;
      if (!addon.isActive || !optionsURL)
        return;
 
      switch (Number(addon.optionsType)) {
        case 2:
        case 5:
          BrowserOpenAddonsMgr('addons://detail/' + encodeURIComponent(addon.id) + '/preferences');
          break;
        case 3:
          'switchToTabHavingURI' in win ? win.switchToTabHavingURI(optionsURL, true) : openTab('contentTab', { contentPage: optionsURL });
          break;
        default:
          openDialog(optionsURL, addon.name, 'chrome,titlebar,toolbar,resizable,scrollbars,centerscreen,dialog=no,modal=no');
      }
    },
 
    browseDir: function (addon) {
      var dir = Services.dirsvc.get('ProfD', Ci.nsIFile);
      var nsLocalFile = Components.Constructor('@mozilla.org/file/local;1', 'nsIFile', 'initWithPath');
      dir.append('extensions');
      dir.append(addon.id);
      if (!dir.exists()) {
          dir = dir.parent;
          dir.append(addon.id + '.xpi');
      }
      dir.launch();
    },
 
    iconURL:      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaUlEQVQ4y6WTW0sCQRiG/SEpVBDUVVfphbAEhWAlqYhrLWUlER2IIgrqYkEp6SBmudWiFf0SiSCwpAI7bJnprq6H/sTbGhJiEyt28fAN7zfz8DHDaABo/oPqBpovX7j4T1gOS6dNCcYiZbhOSrCHi2hugqNCwskVYNmXbxoSuPkCN3NWhCdahLLGKCfDcSBjOJiHeTeHPr8EyifCwGb9RMF0RIaHl+E+zoMJ5+AM5WALSBjaEWHayqLXm4GR/YB+Iw2iYIKTMB6WwIRE0EER9r0s+r1pGNZT6F55ReeigPb5F7TOPpMFTDCDkUAGA753GFYFdC08QedJEvkR2DbfzuntFBz+1K2ZFdCz9Ii2qQfo3Pck2MoZpVI/AqtXQAXjchIdk3fQMok/Ib6CaS0Z1c8pdlc8pqXjUOF7AqVSxDvQOq7RKERBi/UKdbDVnK3vkQWWS9Si1vstGIyxCqiBquZUXc429BfU+AL9Tqy8Q2Za8AAAAABJRU5ErkJggg==',
     
    style: `
      @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);
      .restartless label:after {content:"*"; }
      .enabling label:after { content:"+" !important; }
      .disabling label:after { content:"-" !important; }
      .uninstalling label:after { content: '!' !important; }
      .noOptions { color: gray; }
      .disabled { color: gray; font-style: italic; }
    `,
 
    styles: [],
 
    init: function() {
      CustomizableUI.createWidget({
        id: 'eom-button',
        type: 'custom',
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onBuild: function (aDocument) {
          var toolbaritem = aDocument.createXULElement('toolbarbutton');
          var props = {
            id: 'eom-button',
            label: 'Extension Options Menu',
            tooltiptext: 'Extension Options Menu',
            type: 'menu',
            class: 'toolbarbutton-1 chromeclass-toolbar-additional',
            style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABaUlEQVQ4y6WTW0sCQRiG/SEpVBDUVVfphbAEhWAlqYhrLWUlER2IIgrqYkEp6SBmudWiFf0SiSCwpAI7bJnprq6H/sTbGhJiEyt28fAN7zfz8DHDaABo/oPqBpovX7j4T1gOS6dNCcYiZbhOSrCHi2hugqNCwskVYNmXbxoSuPkCN3NWhCdahLLGKCfDcSBjOJiHeTeHPr8EyifCwGb9RMF0RIaHl+E+zoMJ5+AM5WALSBjaEWHayqLXm4GR/YB+Iw2iYIKTMB6WwIRE0EER9r0s+r1pGNZT6F55ReeigPb5F7TOPpMFTDCDkUAGA753GFYFdC08QedJEvkR2DbfzuntFBz+1K2ZFdCz9Ii2qQfo3Pck2MoZpVI/AqtXQAXjchIdk3fQMok/Ib6CaS0Z1c8pdlc8pqXjUOF7AqVSxDvQOq7RKERBi/UKdbDVnK3vkQWWS9Si1vstGIyxCqiBquZUXc429BfU+AL9Tqy8Q2Za8AAAAABJRU5ErkJggg==)',
            onclick: 'if (event.button === 1) BrowserOpenAddonsMgr("addons://list/extension");'
          };
          for (var p in props) {
            toolbaritem.setAttribute(p, props[p]);
          }
          var mp = toolbaritem.appendChild(document.createXULElement('menupopup'));
          mp.setAttribute('id', 'eom-button-popup');
          mp.setAttribute('onclick', 'event.preventDefault(); event.stopPropagation(); setTimeout(function () { document.getElementById("toolbar-context-menu").hidePopup(); }, 0);');
          mp.addEventListener('popupshowing', UC.extensionOptionsMenu.populateMenu);
 
          return toolbaritem;
        }
      });
    },
 
    destroy: function () {
      CustomizableUI.destroyWidget('eom-button');
      UC.extensionOptionsMenu.styles.forEach(s => s.parentNode.removeChild(s));
      delete UC.extensionOptionsMenu;
    }
  }
 
  UC.extensionOptionsMenu.init();
 
})()

Всего записей: 3723 | Зарегистр. 15-01-2013 | Отправлено: 19:43 31-01-2020 | Исправлено: cannafu, 19:52 31-01-2020
   

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

Компьютерный форум Ru.Board » Компьютеры » Программы » Расширения для Firefox | Mozilla Firefox Extensions
Maz (09-05-2021 17:46): Расширения для Firefox | Mozilla Firefox Extensions. Часть 11


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru