зеркало из https://github.com/mozilla/ubiquity.git
PrefKeys: Now a module. Added prefs for repeat-last-command.
This commit is contained in:
Родитель
faca891ef3
Коммит
f97392dd95
|
@ -11,7 +11,6 @@
|
|||
]>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<head>
|
||||
<title>&ubiquity.pagetitle.About;</title>
|
||||
|
||||
|
@ -20,13 +19,14 @@
|
|||
<link rel="stylesheet" type="text/css" media="all" href="web-content.css" />
|
||||
<link rel="icon" type="image/x-icon" id="favicon" href="chrome://ubiquity/skin/icons/favicon.ico" />
|
||||
|
||||
<script type="text/javascript" src="resource://ubiquity/scripts/jquery.js"></script>
|
||||
<script type="application/javascript;version=1.8" src="chrome://ubiquity/content/header.js"></script>
|
||||
<script type="application/javascript;version=1.8" src="chrome://ubiquity/content/tutorial.js"></script>
|
||||
<script type="text/javascript" src="prefkeys.js"></script>
|
||||
<script type="text/javascript"
|
||||
src="resource://ubiquity/scripts/jquery.js"></script>
|
||||
<script type="application/javascript;version=1.8"
|
||||
src="chrome://ubiquity/content/header.js"></script>
|
||||
<script type="application/javascript;version=1.8"
|
||||
src="chrome://ubiquity/content/tutorial.js"></script>
|
||||
</head>
|
||||
<body dir="&locale.dir;">
|
||||
|
||||
<div class="head">&ubiquity.tagline.About;</div>
|
||||
|
||||
<div id="nav-container"></div>
|
||||
|
@ -76,6 +76,5 @@
|
|||
</div>
|
||||
|
||||
<br clear="all" />
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -53,6 +53,7 @@ addEventListener("load", function onload() {
|
|||
Cu.import("resource://ubiquity/modules/setup.js", jsm);
|
||||
Cu.import("resource://ubiquity/modules/cmdmanager.js", jsm);
|
||||
Cu.import("resource://ubiquity/modules/msgservice.js", jsm);
|
||||
Cu.import("resource://ubiquity/modules/prefkeys.js", jsm);
|
||||
|
||||
function ubiquitySetup() {
|
||||
var services = jsm.UbiquitySetup.createServices();
|
||||
|
@ -106,27 +107,14 @@ addEventListener("load", function onload() {
|
|||
services.commandSource.onUbiquityLoad(window);
|
||||
}
|
||||
|
||||
function ubiquityKey(aEvent) {
|
||||
var keyCode = prefs.getValue("extensions.ubiquity.keycode",
|
||||
KeyEvent.DOM_VK_SPACE);
|
||||
// Toggle Ubiquity if the key pressed matches the shortcut key
|
||||
if (aEvent.keyCode === keyCode && ubiquityEventMatchesModifier(aEvent)) {
|
||||
gUbiquity.toggleWindow();
|
||||
aEvent.preventDefault();
|
||||
aEvent.stopPropagation();
|
||||
}
|
||||
}
|
||||
|
||||
const DEFAULT_KEY_MODIFIER = jsm.Utils.OS === "WINNT" ? "CTRL" : "ALT";
|
||||
function ubiquityEventMatchesModifier(aEvent) {
|
||||
var keyModifier = prefs.getValue("extensions.ubiquity.keymodifier",
|
||||
DEFAULT_KEY_MODIFIER);
|
||||
// Match only if the user is holding down the modifier key set for
|
||||
// Ubiquity AND NO OTHER modifier keys.
|
||||
return (aEvent.shiftKey === (keyModifier === "SHIFT") &&
|
||||
aEvent.ctrlKey === (keyModifier === "CTRL" ) &&
|
||||
aEvent.altKey === (keyModifier === "ALT" ) &&
|
||||
aEvent.metaKey === (keyModifier === "META" ));
|
||||
var toggleKeys = new jsm.PrefKeys(
|
||||
"",
|
||||
KeyEvent.DOM_VK_SPACE,
|
||||
jsm.Utils.OS === "WINNT" ? "CTRL" : "ALT");
|
||||
var repeatKeys = new jsm.PrefKeys("repeat");
|
||||
function ubiquityKey(event) {
|
||||
if (toggleKeys.match(event)) return gUbiquity.toggleWindow();
|
||||
if (repeatKeys.match(event)) return gUbiquity.execute("");
|
||||
}
|
||||
|
||||
jsm.UbiquitySetup.preload(function ubiquitySetupWrapper() {
|
||||
|
@ -139,6 +127,8 @@ addEventListener("load", function onload() {
|
|||
//errorToLocalize
|
||||
new jsm.AlertMessageService().displayMessage("Setup failed.");
|
||||
}
|
||||
if (gUbiquity) addEventListener("keydown", ubiquityKey, true);
|
||||
if (!gUbiquity) return;
|
||||
addEventListener("keydown", ubiquityKey, true);
|
||||
addEventListener("keypress", ubiquityKey, true);
|
||||
});
|
||||
}, false);
|
||||
|
|
|
@ -1,94 +0,0 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Ubiquity.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Abimanyu Raja <abimanyuraja@gmail.com>
|
||||
* Satoshi Murakami <murky.satyr@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
var PrefKeys = {
|
||||
KEYCODE_PREF : "extensions.ubiquity.keycode",
|
||||
KEYMODIFIER_PREF : "extensions.ubiquity.keymodifier",
|
||||
KEYCODE_DEFAULT: KeyEvent.DOM_VK_SPACE,
|
||||
KEYMODIFIER_DEFAULT: Utils.OS === "WINNT" ? "CTRL" : "ALT",
|
||||
CODE2TEXT: (function (dict) {
|
||||
for (var key in KeyEvent)
|
||||
dict[KeyEvent[key]] = key.slice(7); // strip DOM_VK_
|
||||
return dict;
|
||||
})({}),
|
||||
MODIFIER2TEXT: {16: "SHIFT", 17: "CTRL", 18: "ALT", 224: "META"},
|
||||
|
||||
_convertToText: function PK__convertToText(keyCode)
|
||||
this.CODE2TEXT[keyCode] || "[" + keyCode + "]",
|
||||
|
||||
isModifier: function PK_isModifier(keyCode) keyCode in this.MODIFIER2TEXT,
|
||||
|
||||
onLoad: function PK_onLoad() {
|
||||
var [mod, key] = this.getKeyCombo();
|
||||
$("#keyInputBox").val(
|
||||
mod + "+" + key + " (" + L("ubiquity.prefkeys.clickhere") + ")");
|
||||
},
|
||||
|
||||
onKeyChange: function PK_onKeyChange(aEvent) {
|
||||
aEvent.preventDefault();
|
||||
aEvent.stopPropagation();
|
||||
|
||||
var {keyCode} = aEvent;
|
||||
var keyModifier = (aEvent.altKey ? "ALT" :
|
||||
aEvent.ctrlKey ? "CTRL" :
|
||||
aEvent.shiftKey ? "SHIFT" :
|
||||
aEvent.metaKey ? "META" :
|
||||
"");
|
||||
if (!keyModifier) {
|
||||
PrefKeys.isModifier(keyCode) ||
|
||||
$("#keyNotify").text(L("ubiquity.prefkeys.notifybadmodifier"));
|
||||
return;
|
||||
}
|
||||
|
||||
Application.prefs.setValue(this.KEYCODE_PREF, keyCode);
|
||||
Application.prefs.setValue(this.KEYMODIFIER_PREF, keyModifier);
|
||||
|
||||
var comboText = keyModifier + "+" + PrefKeys._convertToText(keyCode);
|
||||
$("#keyInputBox").blur().val(
|
||||
comboText + " (" + L("ubiquity.prefkeys.clickhere") + ")");
|
||||
$("#keyNotify").html(
|
||||
L("ubiquity.prefkeys.confirmchange", comboText.bold()));
|
||||
},
|
||||
|
||||
getKeyCombo: function PK_getKeyCombo() {
|
||||
var keyCode = Application.prefs.getValue(this.KEYCODE_PREF,
|
||||
this.KEYCODE_DEFAULT);
|
||||
var keyModifier = Application.prefs.getValue(this.KEYMODIFIER_PREF,
|
||||
this.KEYMODIFIER_DEFAULT);
|
||||
return [keyModifier, this._convertToText(keyCode)];
|
||||
}
|
||||
}
|
|
@ -37,6 +37,7 @@
|
|||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
Cu.import("resource://ubiquity/modules/cmdmanager.js");
|
||||
Cu.import("resource://ubiquity/modules/prefkeys.js")
|
||||
|
||||
const PREF_NFE = "extensions.ubiquity.doNounFirstExternals";
|
||||
|
||||
|
@ -78,6 +79,9 @@ function onDocumentLoad() {
|
|||
CommandManager.maxSuggestions = this.value;
|
||||
this.value = CommandManager.maxSuggestions;
|
||||
}).val(CommandManager.maxSuggestions);
|
||||
|
||||
new PrefKeys().registerUI($("#keyInput")[0], $("#keyNotify")[0]);
|
||||
new PrefKeys("repeat").registerUI($("#repeatKeyInput")[0], {});
|
||||
}
|
||||
|
||||
function changeLanguageSettings() {
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
]>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<head>
|
||||
<title>&ubiquity.pagetitle.Settings;</title>
|
||||
|
||||
|
@ -24,13 +23,16 @@
|
|||
<script type="application/javascript;version=1.8" src="chrome://ubiquity/content/header.js"></script>
|
||||
|
||||
<script type="application/javascript;version=1.8" src="settings.js"></script>
|
||||
<script type="application/javascript;version=1.8" src="prefkeys.js"></script>
|
||||
|
||||
<style>.warning{ background-color: #FFFCBA; border: 1px solid #F09B9A; width: 740px; padding: 5px;}</style>
|
||||
|
||||
<style>
|
||||
.warning {
|
||||
width: 740px; padding: 5px; border: 1px solid #F09B9A;
|
||||
background-color: #FFFCBA;
|
||||
}
|
||||
.prefkeys { width: 88%; cursor: pointer; padding: 1px 1ex }
|
||||
</style>
|
||||
</head>
|
||||
<body dir="&locale.dir;">
|
||||
|
||||
<div class="head">&ubiquity.tagline.Settings;</div>
|
||||
<div id="nav-container"></div>
|
||||
|
||||
|
@ -57,30 +59,29 @@
|
|||
<legend>&ubiquity.settings.InvokingUbiquity;</legend>
|
||||
<div style="margin-left:10px;">
|
||||
<p>
|
||||
<input id="keyInputBox" type="text" size="42"
|
||||
style="cursor:pointer; padding:1px 1ex"
|
||||
onkeydown="return false"
|
||||
onkeyup="PrefKeys.onKeyChange(event)"
|
||||
onfocus="this.value = L('ubiquity.prefkeys.pressyourcombo')"
|
||||
onblur="PrefKeys.onLoad()"/>
|
||||
<br />
|
||||
<input type="text" id="keyInput" class="prefkeys"/><br />
|
||||
&ubiquity.settings.ChangeShortcut;
|
||||
<br />
|
||||
</p>
|
||||
<p id="keyNotify"></p>
|
||||
<p>
|
||||
<input type="text" id="repeatKeyInput" class="prefkeys"/><br />
|
||||
Additionally, you can specify a combo to repeat the last command.
|
||||
</p>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<script> PrefKeys.onLoad() </script>
|
||||
|
||||
<h2>&ubiquity.settings.LangSettings;</h2>
|
||||
<p>&ubiquity.settings.LangSettingsParagraph1;</p>
|
||||
<p><label for="use-new-parser-checkbox"><input type="checkbox" id="use-new-parser-checkbox" onchange="changeLanguageSettings();" /><strong>&ubiquity.settings.UseParser2;</strong></label></p>
|
||||
<p>&ubiquity.settings.SelectLanguage; <select id="language-select" onchange="changeLanguageSettings();"></select></p>
|
||||
|
||||
<h2>&ubiquity.settings.MiscSettings;</h2>
|
||||
<p>&ubiquity.settings.MaxSuggestions; <input type="text" id="max-suggestions" size="3" style="text-align:center" /></p>
|
||||
|
||||
<p>
|
||||
&ubiquity.settings.MaxSuggestions;
|
||||
<input type="text" id="max-suggestions"
|
||||
size="3" style="text-align:center"/>
|
||||
</p>
|
||||
|
||||
<fieldset class="parser2" style="display:none">
|
||||
<legend>&ubiquity.settings.Parser2Context;</legend>
|
||||
|
||||
|
@ -113,6 +114,5 @@
|
|||
<li><textarea rows="30" style="width:92%" id="skin-editor"></textarea></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -34,9 +34,9 @@
|
|||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
Cu.import("resource://ubiquity/modules/setup.js");
|
||||
Cu.import("resource://ubiquity/modules/utils.js");
|
||||
Cu.import("resource://ubiquity/modules/prefkeys.js");
|
||||
|
||||
var gPrefKeys = new PrefKeys;
|
||||
var T = LocalizationUtils.propertySelector(
|
||||
"chrome://ubiquity/locale/aboutubiquitytutorial.properties");
|
||||
|
||||
|
@ -227,7 +227,7 @@ function startUbiqTutorial() {
|
|||
}
|
||||
|
||||
function ubiqTutorialStage1() {
|
||||
var keyCombo = PrefKeys.getKeyCombo();
|
||||
var {keyCombo} = gPrefKeys;
|
||||
fadeInHtml(
|
||||
H2(T("tutorial.stage01h1")),
|
||||
P(T("tutorial.stage01p1")),
|
||||
|
@ -245,7 +245,7 @@ function ubiqTutorialStage2() {
|
|||
}
|
||||
|
||||
function ubiqTutorialStage3() {
|
||||
var keyCombo = PrefKeys.getKeyCombo();
|
||||
var {keyCombo} = gPrefKeys;
|
||||
fadeInHtml(
|
||||
H2(T("tutorial.stage03h1")),
|
||||
P(T("tutorial.stage03p1")),
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Ubiquity.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2007
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Abimanyu Raja <abimanyuraja@gmail.com>
|
||||
* Satoshi Murakami <murky.satyr@gmail.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
// = PrefKeys =
|
||||
|
||||
var EXPORTED_SYMBOLS = ["PrefKeys"];
|
||||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
||||
|
||||
Cu.import("resource://ubiquity/modules/utils.js");
|
||||
Cu.import("resource://ubiquity/modules/localization_utils.js");
|
||||
|
||||
var gPrefs = Utils.Application.prefs;
|
||||
var L = LocalizationUtils.propertySelector(
|
||||
"chrome://ubiquity/locale/aboutubiquity.properties");
|
||||
|
||||
function PrefKeys(path, defaultKey, defaultMod) {
|
||||
var pref = "extensions.ubiquity." + (path ? path + "." : "");
|
||||
return {
|
||||
__proto__: PrefKeysProto,
|
||||
KEYCODE_PREF: pref + "keycode",
|
||||
KEYCODE_DEFAULT: defaultKey || "",
|
||||
KEYMODIFIER_PREF: pref + "keymodifier",
|
||||
KEYMODIFIER_DEFAULT: defaultMod || "",
|
||||
};
|
||||
}
|
||||
Utils.defineLazyProperty(PrefKeys, function KeyEvent() {
|
||||
return Utils.currentChromeWindow.KeyEvent;
|
||||
});
|
||||
Utils.defineLazyProperty(PrefKeys, function CODE2TEXT() {
|
||||
var {KeyEvent} = this, dic = {__proto__: null};
|
||||
for (var key in KeyEvent)
|
||||
dic[KeyEvent[key]] = key.slice(7); // strip DOM_VK_
|
||||
return dic;
|
||||
});
|
||||
PrefKeys.MODIFIER2TEXT = {16: "SHIFT", 17: "CTRL", 18: "ALT", 224: "META"};
|
||||
|
||||
var PrefKeysProto = {
|
||||
constructor: PrefKeys,
|
||||
|
||||
registerUI: function PK_registerUI(textInput, notifier) {
|
||||
var pk = this;
|
||||
function prompt() {
|
||||
textInput.value =
|
||||
pk.keyComboText + " (" + L("ubiquity.prefkeys.clickhere") + ")";
|
||||
}
|
||||
prompt();
|
||||
textInput.addEventListener("blur", prompt, false);
|
||||
textInput.addEventListener("focus", onInputFocus, false);
|
||||
textInput.addEventListener("keydown", haltEvent, true);
|
||||
textInput.addEventListener("keyup", function onInputKeyUp(ev) {
|
||||
haltEvent(ev);
|
||||
|
||||
var {keyCode} = ev;
|
||||
var keyModifier = (
|
||||
ev.altKey ? "ALT" :
|
||||
ev.ctrlKey ? "CTRL" :
|
||||
ev.shiftKey ? "SHIFT" :
|
||||
ev.metaKey ? "META" :
|
||||
"");
|
||||
if (!keyModifier) {
|
||||
isModifier(keyCode) ||
|
||||
(notifier.textContent = L("ubiquity.prefkeys.notifybadmodifier"));
|
||||
return;
|
||||
}
|
||||
|
||||
gPrefs.setValue(pk.KEYCODE_PREF, keyCode);
|
||||
gPrefs.setValue(pk.KEYMODIFIER_PREF, keyModifier);
|
||||
textInput.blur();
|
||||
notifier.innerHTML =
|
||||
L("ubiquity.prefkeys.confirmchange", pk.keyComboText.bold());
|
||||
}, true);
|
||||
},
|
||||
|
||||
match: function PK_match(event) {
|
||||
if (event.type !== "keydown") {
|
||||
if (this._lastKeysOk) haltEvent(event);
|
||||
return false;
|
||||
}
|
||||
this._lastKeysOk = false;
|
||||
|
||||
var code = gPrefs.getValue(this.KEYCODE_PREF,
|
||||
this.KEYCODE_DEFAULT);
|
||||
if (code !== event.keyCode) return false;
|
||||
|
||||
var mod = gPrefs.getValue(this.KEYMODIFIER_PREF,
|
||||
this.KEYMODIFIER_DEFAULT);
|
||||
// Match only if the user is holding down the modifier key set for
|
||||
// Ubiquity AND NO OTHER modifier keys.
|
||||
if (event.shiftKey !== (mod === "SHIFT") ||
|
||||
event.ctrlKey !== (mod === "CTRL" ) ||
|
||||
event.altKey !== (mod === "ALT" ) ||
|
||||
event.metaKey !== (mod === "META" )) return false;
|
||||
|
||||
haltEvent(event);
|
||||
return this._lastKeysOk = true;
|
||||
},
|
||||
|
||||
get keyCombo PK_getKeyCombo() {
|
||||
var keyCode = gPrefs.getValue(this.KEYCODE_PREF,
|
||||
this.KEYCODE_DEFAULT);
|
||||
return [
|
||||
gPrefs.getValue(this.KEYMODIFIER_PREF,
|
||||
this.KEYMODIFIER_DEFAULT),
|
||||
PrefKeys.CODE2TEXT[keyCode] || "[" + keyCode + "]"];
|
||||
},
|
||||
|
||||
get keyComboText PK_getKeyComboText() this.keyCombo.join("+"),
|
||||
}
|
||||
|
||||
function isModifier(keyCode) keyCode in PrefKeys.MODIFIER2TEXT;
|
||||
|
||||
function onInputFocus() {
|
||||
this.value = L("ubiquity.prefkeys.pressyourcombo");
|
||||
}
|
||||
|
||||
function haltEvent(event) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
Загрузка…
Ссылка в новой задаче