mirror of
https://github.com/gryf/pentadactyl-pm.git
synced 2026-03-10 00:15:46 +01:00
Some housekeaping in ui.js
This commit is contained in:
@@ -38,7 +38,7 @@ function CommandLine() //{{{
|
|||||||
////////////////////// PRIVATE SECTION /////////////////////////////////////////
|
////////////////////// PRIVATE SECTION /////////////////////////////////////////
|
||||||
/////////////////////////////////////////////////////////////////////////////{{{
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
|
|
||||||
const UNINITIALIZED = -2; // notifies us, if we need to start history/tab-completion from the beginning
|
const UNINITIALIZED = {}; // notifies us, if we need to start history/tab-completion from the beginning
|
||||||
|
|
||||||
storage.newArray("history-search", true);
|
storage.newArray("history-search", true);
|
||||||
storage.newArray("history-command", true);
|
storage.newArray("history-command", true);
|
||||||
@@ -104,6 +104,7 @@ function CommandLine() //{{{
|
|||||||
self.reset();
|
self.reset();
|
||||||
};
|
};
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
this.editor = context.editor;
|
||||||
this.selected = null;
|
this.selected = null;
|
||||||
this.wildmode = options.get("wildmode");
|
this.wildmode = options.get("wildmode");
|
||||||
this.itemList = completionList;
|
this.itemList = completionList;
|
||||||
@@ -124,17 +125,16 @@ function CommandLine() //{{{
|
|||||||
},
|
},
|
||||||
set completion set_completion(completion)
|
set completion set_completion(completion)
|
||||||
{
|
{
|
||||||
previewClear();
|
this.previewClear();
|
||||||
let editor = commandWidget.inputField.editor;
|
|
||||||
|
|
||||||
// Change the completion text.
|
// Change the completion text.
|
||||||
// The second line is a hack to deal with some substring
|
// The second line is a hack to deal with some substring
|
||||||
// preview corner cases.
|
// preview corner cases.
|
||||||
commandWidget.value = this.prefix + completion + this.suffix;
|
commandWidget.value = this.prefix + completion + this.suffix;
|
||||||
editor.selection.focusNode.textContent = commandWidget.value;
|
this.editor.selection.focusNode.textContent = commandWidget.value;
|
||||||
|
|
||||||
// Reset the caret to one position after the completion.
|
// Reset the caret to one position after the completion.
|
||||||
let range = editor.selection.getRangeAt(0);
|
let range = this.editor.selection.getRangeAt(0);
|
||||||
range.setStart(range.startContainer, this.prefix.length + completion.length);
|
range.setStart(range.startContainer, this.prefix.length + completion.length);
|
||||||
range.collapse(true);
|
range.collapse(true);
|
||||||
},
|
},
|
||||||
@@ -154,6 +154,42 @@ function CommandLine() //{{{
|
|||||||
full: this.wildmode.checkHas(this.wildtype, "full")
|
full: this.wildmode.checkHas(this.wildtype, "full")
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
preview: function preview()
|
||||||
|
{
|
||||||
|
// This will only work with autocomplete.
|
||||||
|
if (!options.get("wildoptions").has("auto") || !completions)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (this.type.longest && !this.suffix)
|
||||||
|
{
|
||||||
|
let start = commandWidget.selectionStart;
|
||||||
|
let substring = this.substring;
|
||||||
|
|
||||||
|
// Don't show 1-character substrings unless we've just hit backspace
|
||||||
|
if (substring.length < 2 && (!this.lastSubstring || this.lastSubstring.indexOf(substring) != 0))
|
||||||
|
return;
|
||||||
|
this.lastSubstring = substring;
|
||||||
|
// Chop off the bits we already have.
|
||||||
|
substring = substring.substr(completions.value.length);
|
||||||
|
|
||||||
|
// highlight="Preview" won't work in the editor.
|
||||||
|
let node = util.xmlToDom(<span style={highlight.get("Preview").value}>{substring}</span>,
|
||||||
|
document);
|
||||||
|
this.editor.insertNode(node, this.editor.rootElement, 1);
|
||||||
|
commandWidget.selectionStart = commandWidget.selectionEnd = start;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
previewClear: function previewClear()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
let node = this.editor.rootElement;
|
||||||
|
this.editor.deleteNode(node.firstChild.nextSibling);
|
||||||
|
}
|
||||||
|
catch (e) {}
|
||||||
|
},
|
||||||
|
|
||||||
reset: function reset(show)
|
reset: function reset(show)
|
||||||
{
|
{
|
||||||
this.wildtypes = this.wildmode.values;
|
this.wildtypes = this.wildmode.values;
|
||||||
@@ -171,7 +207,7 @@ function CommandLine() //{{{
|
|||||||
this.wildIndex = 0;
|
this.wildIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
previewSubstring();
|
this.preview();
|
||||||
},
|
},
|
||||||
|
|
||||||
select: function select(idx)
|
select: function select(idx)
|
||||||
@@ -261,12 +297,9 @@ function CommandLine() //{{{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var completionList = new ItemList("liberator-completions");
|
/////////////////////////////////////////////////////////////////////////////}}}
|
||||||
var completions = null;
|
////////////////////// TIMERS //////////////////////////////////////////////////
|
||||||
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
var wildIndex = 0; // keep track how often we press <Tab> in a row
|
|
||||||
var startHints = false; // whether we're waiting to start hints mode
|
|
||||||
var lastSubstring = "";
|
|
||||||
|
|
||||||
var statusTimer = new util.Timer(5, 100, function statusTell() {
|
var statusTimer = new util.Timer(5, 100, function statusTell() {
|
||||||
if (completions.selected == null)
|
if (completions.selected == null)
|
||||||
@@ -274,6 +307,7 @@ function CommandLine() //{{{
|
|||||||
else
|
else
|
||||||
statusline.updateProgress("match " + (completions.selected + 1) + " of " + completions.items.length);
|
statusline.updateProgress("match " + (completions.selected + 1) + " of " + completions.items.length);
|
||||||
});
|
});
|
||||||
|
|
||||||
var autocompleteTimer = new util.Timer(201, 300, function autocompleteTell(tabPressed) {
|
var autocompleteTimer = new util.Timer(201, 300, function autocompleteTell(tabPressed) {
|
||||||
if (events.feedingKeys || !completions)
|
if (events.feedingKeys || !completions)
|
||||||
return;
|
return;
|
||||||
@@ -288,32 +322,9 @@ function CommandLine() //{{{
|
|||||||
completions.tab(event.shiftKey);
|
completions.tab(event.shiftKey);
|
||||||
});
|
});
|
||||||
|
|
||||||
// the containing box for the promptWidget and commandWidget
|
/////////////////////////////////////////////////////////////////////////////}}}
|
||||||
var commandlineWidget = document.getElementById("liberator-commandline");
|
////////////////////// CALLBACKS ///////////////////////////////////////////////
|
||||||
// the prompt for the current command, for example : or /. Can be blank
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
var promptWidget = document.getElementById("liberator-commandline-prompt");
|
|
||||||
// the command bar which contains the current command
|
|
||||||
var commandWidget = document.getElementById("liberator-commandline-command");
|
|
||||||
commandWidget.inputField.QueryInterface(Components.interfaces.nsIDOMNSEditableElement);
|
|
||||||
|
|
||||||
// the widget used for multiline output
|
|
||||||
var multilineOutputWidget = document.getElementById("liberator-multiline-output");
|
|
||||||
multilineOutputWidget.contentDocument.body.id = "liberator-multiline-output-content";
|
|
||||||
var outputContainer = multilineOutputWidget.parentNode;
|
|
||||||
|
|
||||||
// the widget used for multiline intput
|
|
||||||
var multilineInputWidget = document.getElementById("liberator-multiline-input");
|
|
||||||
|
|
||||||
// we need to save the mode which were in before opening the command line
|
|
||||||
// this is then used if we focus the command line again without the "official"
|
|
||||||
// way of calling "open"
|
|
||||||
var currentExtendedMode = null; // the extended mode which we last openend the command line for
|
|
||||||
var currentPrompt = null;
|
|
||||||
var currentCommand = null;
|
|
||||||
|
|
||||||
// save the arguments for the inputMultiline method which are needed in the event handler
|
|
||||||
var multilineRegexp = null;
|
|
||||||
var multilineCallback = null;
|
|
||||||
|
|
||||||
// callback for prompt mode
|
// callback for prompt mode
|
||||||
var promptSubmitCallback = null;
|
var promptSubmitCallback = null;
|
||||||
@@ -328,7 +339,18 @@ function CommandLine() //{{{
|
|||||||
if (options.get("wildoptions").has("auto"))
|
if (options.get("wildoptions").has("auto"))
|
||||||
autocompleteTimer.tell(false);
|
autocompleteTimer.tell(false);
|
||||||
else
|
else
|
||||||
completions.selected = completions.RESET;
|
completions.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
liberator.registerCallback("cancel", modes.PROMPT, closePrompt);
|
||||||
|
liberator.registerCallback("submit", modes.PROMPT, closePrompt);
|
||||||
|
liberator.registerCallback("change", modes.PROMPT, function (str) {
|
||||||
|
if (promptChangeCallback)
|
||||||
|
return promptChangeCallback(str);
|
||||||
|
});
|
||||||
|
liberator.registerCallback("complete", modes.PROMPT, function (context) {
|
||||||
|
if (promptCompleter)
|
||||||
|
promptCompleter(context);
|
||||||
});
|
});
|
||||||
|
|
||||||
function closePrompt(value)
|
function closePrompt(value)
|
||||||
@@ -340,12 +362,46 @@ function CommandLine() //{{{
|
|||||||
if (callback)
|
if (callback)
|
||||||
callback(value);
|
callback(value);
|
||||||
}
|
}
|
||||||
liberator.registerCallback("cancel", modes.PROMPT, closePrompt);
|
|
||||||
liberator.registerCallback("submit", modes.PROMPT, closePrompt);
|
/////////////////////////////////////////////////////////////////////////////}}}
|
||||||
liberator.registerCallback("change", modes.PROMPT,
|
////////////////////// VARIABLES ///////////////////////////////////////////////
|
||||||
function (str) { if (promptChangeCallback) return promptChangeCallback(str); });
|
/////////////////////////////////////////////////////////////////////////////{{{
|
||||||
liberator.registerCallback("complete", modes.PROMPT,
|
|
||||||
function (context) { if (promptCompleter) promptCompleter(context); });
|
const completionList = new ItemList("liberator-completions");
|
||||||
|
var completions = null;
|
||||||
|
|
||||||
|
var wildIndex = 0; // keep track how often we press <Tab> in a row
|
||||||
|
var startHints = false; // whether we're waiting to start hints mode
|
||||||
|
var lastSubstring = "";
|
||||||
|
|
||||||
|
// the containing box for the promptWidget and commandWidget
|
||||||
|
const commandlineWidget = document.getElementById("liberator-commandline");
|
||||||
|
// the prompt for the current command, for example : or /. Can be blank
|
||||||
|
const promptWidget = document.getElementById("liberator-commandline-prompt");
|
||||||
|
// the command bar which contains the current command
|
||||||
|
const commandWidget = document.getElementById("liberator-commandline-command");
|
||||||
|
|
||||||
|
commandWidget.inputField.QueryInterface(Components.interfaces.nsIDOMNSEditableElement);
|
||||||
|
|
||||||
|
// the widget used for multiline output
|
||||||
|
const multilineOutputWidget = document.getElementById("liberator-multiline-output");
|
||||||
|
const outputContainer = multilineOutputWidget.parentNode;
|
||||||
|
|
||||||
|
multilineOutputWidget.contentDocument.body.id = "liberator-multiline-output-content";
|
||||||
|
|
||||||
|
// the widget used for multiline intput
|
||||||
|
const multilineInputWidget = document.getElementById("liberator-multiline-input");
|
||||||
|
|
||||||
|
// we need to save the mode which were in before opening the command line
|
||||||
|
// this is then used if we focus the command line again without the "official"
|
||||||
|
// way of calling "open"
|
||||||
|
var currentExtendedMode = null; // the extended mode which we last openend the command line for
|
||||||
|
var currentPrompt = null;
|
||||||
|
var currentCommand = null;
|
||||||
|
|
||||||
|
// save the arguments for the inputMultiline method which are needed in the event handler
|
||||||
|
var multilineRegexp = null;
|
||||||
|
var multilineCallback = null;
|
||||||
|
|
||||||
function setHighlightGroup(group)
|
function setHighlightGroup(group)
|
||||||
{
|
{
|
||||||
@@ -369,44 +425,6 @@ function CommandLine() //{{{
|
|||||||
promptWidget.setAttributeNS(NS.uri, "highlight", highlightGroup || commandline.HL_NORMAL);
|
promptWidget.setAttributeNS(NS.uri, "highlight", highlightGroup || commandline.HL_NORMAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
function previewClear()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
let editor = commandWidget.inputField.editor;
|
|
||||||
let node = editor.rootElement;
|
|
||||||
editor.deleteNode(node.firstChild.nextSibling);
|
|
||||||
}
|
|
||||||
catch (e) {}
|
|
||||||
}
|
|
||||||
function previewSubstring()
|
|
||||||
{
|
|
||||||
// This will only work with autocomplete.
|
|
||||||
if (!options.get("wildoptions").has("auto") || !completions)
|
|
||||||
return;
|
|
||||||
|
|
||||||
let editor = commandWidget.inputField.editor;
|
|
||||||
|
|
||||||
if (completions.type.longest && !completions.suffix)
|
|
||||||
{
|
|
||||||
let start = commandWidget.selectionStart;
|
|
||||||
let substring = completions.substring;
|
|
||||||
|
|
||||||
// Don't show 1-character substrings unless we've just hit backspace
|
|
||||||
if (substring.length < 2 && lastSubstring.indexOf(substring) != 0)
|
|
||||||
return;
|
|
||||||
lastSubstring = substring;
|
|
||||||
// Chop off the bits we already have.
|
|
||||||
substring = substring.substr(completions.value.length);
|
|
||||||
|
|
||||||
// highlight="Preview" won't work in the editor.
|
|
||||||
let node = util.xmlToDom(<span style={highlight.get("Preview").value}>{substring}</span>,
|
|
||||||
document);
|
|
||||||
editor.insertNode(node, editor.rootElement, 1);
|
|
||||||
commandWidget.selectionStart = commandWidget.selectionEnd = start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// sets the command - e.g. 'tabopen', 'open http://example.com/'
|
// sets the command - e.g. 'tabopen', 'open http://example.com/'
|
||||||
function setCommand(cmd)
|
function setCommand(cmd)
|
||||||
{
|
{
|
||||||
@@ -889,7 +907,7 @@ function CommandLine() //{{{
|
|||||||
|
|
||||||
onEvent: function onEvent(event)
|
onEvent: function onEvent(event)
|
||||||
{
|
{
|
||||||
previewClear();
|
completions.previewClear();
|
||||||
let command = this.getCommand();
|
let command = this.getCommand();
|
||||||
|
|
||||||
if (event.type == "blur")
|
if (event.type == "blur")
|
||||||
@@ -916,7 +934,6 @@ function CommandLine() //{{{
|
|||||||
else if (event.type == "input")
|
else if (event.type == "input")
|
||||||
{
|
{
|
||||||
liberator.triggerCallback("change", currentExtendedMode, command);
|
liberator.triggerCallback("change", currentExtendedMode, command);
|
||||||
previewSubstring();
|
|
||||||
}
|
}
|
||||||
else if (event.type == "keypress")
|
else if (event.type == "keypress")
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user