From 73886642bf9ab431765afd9f102a54e4739d50f6 Mon Sep 17 00:00:00 2001 From: FelisCatus Date: Mon, 22 Dec 2014 19:34:24 +0800 Subject: [PATCH] Add option to enable/disable inspection in context menu. Fix #83. --- omega-i18n/en/messages.json | 3 +++ omega-i18n/zh_CN/messages.json | 3 +++ omega-i18n/zh_HK/messages.json | 3 +++ omega-i18n/zh_TW/messages.json | 3 +++ omega-target-chromium-extension/background.coffee | 4 +--- .../src/inspect.coffee | 12 +++++++++++- .../src/options.coffee | 9 +++++++++ omega-target/src/default_options.coffee | 1 + omega-target/src/options.coffee | 15 +++++++++++++++ omega-web/src/partials/ui.jade | 4 ++++ 10 files changed, 53 insertions(+), 4 deletions(-) diff --git a/omega-i18n/en/messages.json b/omega-i18n/en/messages.json index ae00f20..4c2d9ed 100644 --- a/omega-i18n/en/messages.json +++ b/omega-i18n/en/messages.json @@ -157,6 +157,9 @@ "options_refreshOnProfileChange": { "message": "Refresh current tab on profile change." }, + "options_showInspectMenu": { + "message": "Allow inspecting proxy used for page elements via context menu." + }, "options_group_switchOptions": { "message": "Switch Options" }, diff --git a/omega-i18n/zh_CN/messages.json b/omega-i18n/zh_CN/messages.json index c217d6c..5f4860f 100644 --- a/omega-i18n/zh_CN/messages.json +++ b/omega-i18n/zh_CN/messages.json @@ -157,6 +157,9 @@ "options_refreshOnProfileChange": { "message": "当更改情景模式时刷新当前标签" }, + "options_showInspectMenu": { + "message": "右键菜单中,可检查网页元素所使用的代理。" + }, "options_group_switchOptions": { "message": "切换选项" }, diff --git a/omega-i18n/zh_HK/messages.json b/omega-i18n/zh_HK/messages.json index aca0fc6..917c6be 100644 --- a/omega-i18n/zh_HK/messages.json +++ b/omega-i18n/zh_HK/messages.json @@ -157,6 +157,9 @@ "options_refreshOnProfileChange": { "message": "當更改情景模式時更新當前標籤" }, + "options_showInspectMenu": { + "message": "右鍵選單中,可檢查網頁元素所使用的代理。" + }, "options_group_switchOptions": { "message": "切換選項" }, diff --git a/omega-i18n/zh_TW/messages.json b/omega-i18n/zh_TW/messages.json index bf5692c..6ae11e3 100644 --- a/omega-i18n/zh_TW/messages.json +++ b/omega-i18n/zh_TW/messages.json @@ -157,6 +157,9 @@ "options_refreshOnProfileChange": { "message": "當更改情景模式時重新整理當前標籤" }, + "options_showInspectMenu": { + "message": "右鍵選單中,可檢查網頁元素所使用的代理。" + }, "options_group_switchOptions": { "message": "切換選項" }, diff --git a/omega-target-chromium-extension/background.coffee b/omega-target-chromium-extension/background.coffee index f4e1f46..7cc9b21 100644 --- a/omega-target-chromium-extension/background.coffee +++ b/omega-target-chromium-extension/background.coffee @@ -143,7 +143,7 @@ if chrome.runtime.id != OmegaTargetCurrent.SwitchySharp.extId tabs = new OmegaTargetCurrent.ChromeTabs(actionForUrl) tabs.watch() -inspect = new OmegaTargetCurrent.Inspect (url, tab) -> +options._inspect = new OmegaTargetCurrent.Inspect (url, tab) -> if url == tab.url options.clearBadge() tabs.processTab(tab) @@ -167,8 +167,6 @@ inspect = new OmegaTargetCurrent.Inspect (url, tab) -> color: action.resultColor }) -inspect.register() - options.setProxyNotControllable(null) timeout = null diff --git a/omega-target-chromium-extension/src/inspect.coffee b/omega-target-chromium-extension/src/inspect.coffee index 5f5e0be..edc80b4 100644 --- a/omega-target-chromium-extension/src/inspect.coffee +++ b/omega-target-chromium-extension/src/inspect.coffee @@ -3,14 +3,16 @@ OmegaPac = OmegaTarget.OmegaPac Promise = OmegaTarget.Promise module.exports = class Inspect + _enabled: false constructor: (@onInspect) -> - register: -> + enable: -> # We don't need this API. However its presence indicates that Chrome >= 35, # which provides the menuItemId we need in contextMenu callback. # https://developer.chrome.com/extensions/contextMenus return unless chrome.i18n.getUILanguage? + return if @_enabled webResource = [ "http://*/*" @@ -56,6 +58,14 @@ module.exports = class Inspect targetUrlPatterns: webResource }) + @_enabled = true + + disable: -> + return unless @_enabled + for own menuId of @propForMenuItem + try chrome.contextMenus.remove(menuId) + @_enabled = false + propForMenuItem: 'inspectPage': 'pageUrl' 'inspectFrame': 'frameUrl' diff --git a/omega-target-chromium-extension/src/options.coffee b/omega-target-chromium-extension/src/options.coffee index 97cc81f..b6e5879 100644 --- a/omega-target-chromium-extension/src/options.coffee +++ b/omega-target-chromium-extension/src/options.coffee @@ -9,6 +9,7 @@ parseExternalProfile = require('./parse_external_profile') ProxyAuth = require('./proxy_auth') class ChromeOptions extends OmegaTarget.Options + _inspect: null parseExternalProfile: (details) -> parseExternalProfile(details, @_options, @_fixedProfileConfig.bind(this)) @@ -178,6 +179,14 @@ class ChromeOptions extends OmegaTarget.Options chrome.browserAction.setPopup({popup: 'popup.html'}) Promise.resolve() + setInspect: (settings) -> + if @_inspect + if settings.showMenu + @_inspect.enable() + else + @_inspect.disable() + return Promise.resolve() + _alarms: null schedule: (name, periodInMinutes, callback) -> name = 'omega.' + name diff --git a/omega-target/src/default_options.coffee b/omega-target/src/default_options.coffee index 4a093f8..6bae674 100644 --- a/omega-target/src/default_options.coffee +++ b/omega-target/src/default_options.coffee @@ -6,6 +6,7 @@ module.exports = -> "-quickSwitchProfiles": [] "-revertProxyChanges": false "-confirmDeletion": true + "-showInspectMenu": true "-downloadInterval": 1440 "+proxy": bypassList: [ diff --git a/omega-target/src/options.coffee b/omega-target/src/options.coffee index e0ade70..39ea426 100644 --- a/omega-target/src/options.coffee +++ b/omega-target/src/options.coffee @@ -263,6 +263,12 @@ class Options if changes['-downloadInterval']? @schedule 'updateProfile', @_options['-downloadInterval'], => @updateProfile() + if changes['-showInspectMenu']? or changes == @_options + showMenu = @_options['-showInspectMenu'] + if not showMenu? + showMenu = true + @_setOptions({'-showInspectMenu': true}, {persist: true}) + @setInspect(showMenu: showMenu) handler() @_storage.watch null, handler @@ -281,6 +287,15 @@ class Options else @setQuickSwitch(null) + ###* + # Apply the settings related to element proxy inspection. + # In base class, this method is not implemented and will not do anything. + # @param {{}} settings + # @param {boolean} settings.showMenu Whether to show the menu or not + # @returns {Promise} A promise which is fulfilled when the settings apply + ### + setInspect: -> Promise.resolve() + ###* # @callback watchCallback # @param {Object.} changes A map from keys to values. diff --git a/omega-web/src/partials/ui.jade b/omega-web/src/partials/ui.jade index 5ea392f..0f4aff0 100644 --- a/omega-web/src/partials/ui.jade +++ b/omega-web/src/partials/ui.jade @@ -10,6 +10,10 @@ section.settings-group label input#refresh-on-profile-change(type='checkbox' ng-model='options["-refreshOnProfileChange"]') span {{'options_refreshOnProfileChange' | tr}} + div.checkbox + label + input(type='checkbox' ng-model='options["-showInspectMenu"]') + span {{'options_showInspectMenu' | tr}} section.settings-group h3 {{'options_group_switchOptions' | tr}} div.form-group