FF: hotkeys dialog
This commit is contained in:
		
							parent
							
								
									ff9e37ec5f
								
							
						
					
					
						commit
						e80efa7604
					
				| 
						 | 
					@ -37,6 +37,12 @@ window.API_METHODS = Object.assign(window.API_METHODS || {}, {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    return KEEP_CHANNEL_OPEN;
 | 
					    return KEEP_CHANNEL_OPEN;
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  optionsCustomizeHotkeys() {
 | 
				
			||||||
 | 
					    return browser.runtime.openOptionsPage()
 | 
				
			||||||
 | 
					      .then(() => new Promise(resolve => setTimeout(resolve, 100)))
 | 
				
			||||||
 | 
					      .then(() => sendMessage({method: 'optionsCustomizeHotkeys'}));
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// eslint-disable-next-line no-var
 | 
					// eslint-disable-next-line no-var
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,6 +79,11 @@ var prefs = new function Prefs() {
 | 
				
			||||||
    // last color
 | 
					    // last color
 | 
				
			||||||
    'editor.colorpicker.color': '',
 | 
					    'editor.colorpicker.color': '',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Firefox-only chrome.commands.update
 | 
				
			||||||
 | 
					    'hotkey._execute_browser_action': '',
 | 
				
			||||||
 | 
					    'hotkey.openManage': '',
 | 
				
			||||||
 | 
					    'hotkey.styleDisableAll': '',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    'iconset': 0,                   // 0 = dark-themed icon
 | 
					    'iconset': 0,                   // 0 = dark-themed icon
 | 
				
			||||||
                                    // 1 = light-themed icon
 | 
					                                    // 1 = light-themed icon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,7 +58,10 @@ function initGlobalEvents() {
 | 
				
			||||||
  installed = $('#installed');
 | 
					  installed = $('#installed');
 | 
				
			||||||
  installed.onclick = handleEvent.entryClicked;
 | 
					  installed.onclick = handleEvent.entryClicked;
 | 
				
			||||||
  $('#manage-options-button').onclick = () => chrome.runtime.openOptionsPage();
 | 
					  $('#manage-options-button').onclick = () => chrome.runtime.openOptionsPage();
 | 
				
			||||||
  $('#manage-shortcuts-button').onclick = () => openURL({url: URLS.configureCommands});
 | 
					  {
 | 
				
			||||||
 | 
					    const btn = $('#manage-shortcuts-button');
 | 
				
			||||||
 | 
					    btn.onclick = btn.onclick || (() => openURL({url: URLS.configureCommands}));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
  $$('#header a[href^="http"]').forEach(a => (a.onclick = handleEvent.external));
 | 
					  $$('#header a[href^="http"]').forEach(a => (a.onclick = handleEvent.external));
 | 
				
			||||||
  // show date installed & last update on hover
 | 
					  // show date installed & last update on hover
 | 
				
			||||||
  installed.addEventListener('mouseover', handleEvent.lazyAddEntryTitle);
 | 
					  installed.addEventListener('mouseover', handleEvent.lazyAddEntryTitle);
 | 
				
			||||||
| 
						 | 
					@ -690,4 +693,10 @@ function usePrefsDuringPageLoad() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  $$('#header select').forEach(el => el.adjustWidth());
 | 
					  $$('#header select').forEach(el => el.adjustWidth());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (FIREFOX && 'update' in (chrome.commands || {})) {
 | 
				
			||||||
 | 
					    const btn = $('#manage-shortcuts-button');
 | 
				
			||||||
 | 
					    btn.classList.remove('chromium-only');
 | 
				
			||||||
 | 
					    btn.onclick = API.optionsCustomizeHotkeys;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,7 @@
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "commands": {
 | 
					  "commands": {
 | 
				
			||||||
 | 
					    "_execute_browser_action": {},
 | 
				
			||||||
    "openManage": {
 | 
					    "openManage": {
 | 
				
			||||||
    "description": "__MSG_openManage__"
 | 
					    "description": "__MSG_openManage__"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,15 @@ if (!FIREFOX && !OPERA) {
 | 
				
			||||||
  block.classList.add('collapsible', 'collapsed');
 | 
					  block.classList.add('collapsible', 'collapsed');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if (FIREFOX && 'update' in (chrome.commands || {})) {
 | 
				
			||||||
 | 
					  $('[data-cmd="open-keyboard"]').classList.remove('chromium-only');
 | 
				
			||||||
 | 
					  chrome.runtime.onMessage.addListener(msg => {
 | 
				
			||||||
 | 
					    if (msg.method === 'optionsCustomizeHotkeys') {
 | 
				
			||||||
 | 
					      customizeHotkeys();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// actions
 | 
					// actions
 | 
				
			||||||
document.onclick = e => {
 | 
					document.onclick = e => {
 | 
				
			||||||
  const target = e.target.closest('[data-cmd]');
 | 
					  const target = e.target.closest('[data-cmd]');
 | 
				
			||||||
| 
						 | 
					@ -37,7 +46,11 @@ document.onclick = e => {
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    case 'open-keyboard':
 | 
					    case 'open-keyboard':
 | 
				
			||||||
      openURL({url: URLS.configureCommands});
 | 
					      if (FIREFOX) {
 | 
				
			||||||
 | 
					        customizeHotkeys();
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        openURL({url: URLS.configureCommands});
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
      e.preventDefault();
 | 
					      e.preventDefault();
 | 
				
			||||||
      break;
 | 
					      break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,3 +140,62 @@ function splitLongTooltips() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function customizeHotkeys() {
 | 
				
			||||||
 | 
					  // command name -> i18n id
 | 
				
			||||||
 | 
					  const hotkeys = new Map([
 | 
				
			||||||
 | 
					    ['_execute_browser_action', 'optionsCustomizePopup'],
 | 
				
			||||||
 | 
					    ['openManage', 'openManage'],
 | 
				
			||||||
 | 
					    ['styleDisableAll', 'disableAllStyles'],
 | 
				
			||||||
 | 
					  ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  messageBox({
 | 
				
			||||||
 | 
					    title: t('shortcutsNote'),
 | 
				
			||||||
 | 
					    contents: [
 | 
				
			||||||
 | 
					      $create('table',
 | 
				
			||||||
 | 
					        [...hotkeys.entries()].map(([cmd, i18n]) =>
 | 
				
			||||||
 | 
					          $create('tr', [
 | 
				
			||||||
 | 
					            $create('td', t(i18n)),
 | 
				
			||||||
 | 
					            $create('td',
 | 
				
			||||||
 | 
					              $create('input', {
 | 
				
			||||||
 | 
					                id: 'hotkey.' + cmd,
 | 
				
			||||||
 | 
					                //placeholder: t('helpKeyMapHotkey'),
 | 
				
			||||||
 | 
					              })),
 | 
				
			||||||
 | 
					          ]))),
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    className: 'center',
 | 
				
			||||||
 | 
					    buttons: [t('confirmClose')],
 | 
				
			||||||
 | 
					    onshow(box) {
 | 
				
			||||||
 | 
					      const ids = [];
 | 
				
			||||||
 | 
					      for (const cmd of hotkeys.keys()) {
 | 
				
			||||||
 | 
					        const id = 'hotkey.' + cmd;
 | 
				
			||||||
 | 
					        ids.push(id);
 | 
				
			||||||
 | 
					        $('#' + id).oninput = onInput;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      setupLivePrefs(ids);
 | 
				
			||||||
 | 
					      $('button', box).insertAdjacentElement('beforebegin',
 | 
				
			||||||
 | 
					        $createLink(
 | 
				
			||||||
 | 
					          'https://developer.mozilla.org/Add-ons/WebExtensions/manifest.json/commands#Key_combinations',
 | 
				
			||||||
 | 
					          t('helpAlt')));
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  function onInput() {
 | 
				
			||||||
 | 
					    const hotkey = this.value.trim();
 | 
				
			||||||
 | 
					    if (!hotkey) {
 | 
				
			||||||
 | 
					      this.setCustomValidity('');
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      browser.commands.update({
 | 
				
			||||||
 | 
					        name: this.id.split('.')[1],
 | 
				
			||||||
 | 
					        shortcut: hotkey,
 | 
				
			||||||
 | 
					      }).then(
 | 
				
			||||||
 | 
					        () => this.setCustomValidity(''),
 | 
				
			||||||
 | 
					        err => this.setCustomValidity(err)
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    } catch (err) {
 | 
				
			||||||
 | 
					      this.setCustomValidity(err);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -456,7 +456,6 @@ body.blocked .actions > .main-controls {
 | 
				
			||||||
  min-width: 4em;
 | 
					  min-width: 4em;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.firefox #popup-options button:nth-last-child(2),
 | 
					 | 
				
			||||||
#popup-options button:last-child {
 | 
					#popup-options button:last-child {
 | 
				
			||||||
  margin-right: 0;
 | 
					  margin-right: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -100,6 +100,13 @@ function initPopup() {
 | 
				
			||||||
  shortcutsButton.dataset.href = URLS.configureCommands;
 | 
					  shortcutsButton.dataset.href = URLS.configureCommands;
 | 
				
			||||||
  shortcutsButton.onclick = handleEvent.openURLandHide;
 | 
					  shortcutsButton.onclick = handleEvent.openURLandHide;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (FIREFOX && 'update' in (chrome.commands || {})) {
 | 
				
			||||||
 | 
					    shortcutsButton.classList.remove('chromium-only');
 | 
				
			||||||
 | 
					    shortcutsButton.onclick = () => API.optionsCustomizeHotkeys().then(window.close);
 | 
				
			||||||
 | 
					  } else if (FIREFOX) {
 | 
				
			||||||
 | 
					    shortcutsButton.remove();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!prefs.get('popup.stylesFirst')) {
 | 
					  if (!prefs.get('popup.stylesFirst')) {
 | 
				
			||||||
    document.body.insertBefore(
 | 
					    document.body.insertBefore(
 | 
				
			||||||
      $('body > .actions'),
 | 
					      $('body > .actions'),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user