1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-13 10:25:46 +01:00

Merge branch 'master' of kmaglione@git.vimperator.org:/git/vimperator/liberator

This commit is contained in:
Kris Maglione
2009-08-27 12:29:00 -04:00
50 changed files with 336 additions and 529 deletions

View File

@@ -2,17 +2,17 @@
#### configuration
ASCIIDOC = asciidoc
AWK = awk
ASCIIDOC = asciidoc
AWK = awk
LOCALE = $(shell basename `pwd`)
DOCLANG = $(shell basename `pwd` | $(AWK) -F- '{ print ($$1 ~ /^[a-z][a-z]$$/) ? $$1 : "en" }')
LOCALE = $(shell basename `pwd`)
DOCLANG = $(shell basename `pwd` | $(AWK) -F- '{ print ($$1 ~ /^[a-z][a-z]$$/) ? $$1 : "en" }')
SRC_FILES = $(wildcard *.txt)
FILES = $(SRC_FILES:%.txt=%.html)
DEPS = $(wildcard asciidoc.conf lang-$(DOCLANG).conf)
DEPS = $(wildcard lang-$(DOCLANG).conf) ${BASE}/asciidoc.conf $(BASE)/Makefile.doc
DOC_FILES = $(FILES) version.html
DOC_FILES = $(FILES) version.html
.SILENT:
@@ -50,7 +50,9 @@ check-asciidoc:
@$(ASCIIDOC) --version | $(AWK) '{ exit $$2 !~ /^8\.4\./ }' || \
echo >&2 "Warning: asciidoc versions other than 8.4.x are unsupported"
version.html: ../../NEWS $(BASE)/Makefile.doc $(DEPS)
all.html: $(SRC_FILES)
version.html: ../../NEWS $(DEPS)
@echo "DOC locale/$(LOCALE)/$@"
# NOTE: asciidoc doesn't source the conf file implicitly when processing stdin
sed -e '1i\
@@ -60,7 +62,7 @@ heading:Version{nbsp}information[version-information]' \
/' ../../NEWS | \
${ASCIIDOC} -f $(BASE)/asciidoc.conf -a doctitle=version.html -o version.html -
$(FILES): %.html: %.txt $(BASE)/Makefile.doc $(DEPS)
$(FILES): %.html: %.txt $(DEPS)
@echo "DOC locale/$(LOCALE)/$@"
$(ASCIIDOC) -f $(BASE)/asciidoc.conf -a configname=$(NAME) --unsafe -a linkcss -a quirks! -a lang=$(DOCLANG) -a doctitle="$$(basename $@)" -o $@ $<

File diff suppressed because one or more lines are too long

View File

@@ -92,9 +92,9 @@ function Bookmarks() //{{{
this.__defineGetter__("bookmarks", function () this.load());
this.__defineGetter__("keywords",
function () [new Keyword(k.keyword, k.title, k.icon, k.url) for ([,k] in Iterator(self.bookmarks)) if (k.keyword)]);
function () [new Keyword(k.keyword, k.title, k.icon, k.url) for ([, k] in Iterator(self.bookmarks)) if (k.keyword)]);
this.__iterator__ = function () (val for ([,val] in Iterator(self.bookmarks)));
this.__iterator__ = function () (val for ([, val] in Iterator(self.bookmarks)));
function loadBookmark(node)
{
@@ -502,7 +502,7 @@ function Bookmarks() //{{{
let engine = services.get("browserSearch").getEngineByAlias(name);
if (!engine)
return;
let [,word] = /^\s*(\S+)/.exec(context.filter) || [];
let [, word] = /^\s*(\S+)/.exec(context.filter) || [];
if (!kludge && word == name) // FIXME: Check for matching keywords
return;
let ctxt = context.fork(name, 0);
@@ -534,10 +534,6 @@ function Bookmarks() //{{{
process: [template.icon, template.bookmarkDescription]
}),
// if "bypassCache" is true, it will force a reload of the bookmarks database
// on my PC, it takes about 1ms for each bookmark to load, so loading 1000 bookmarks
// takes about 1 sec
// Huh? --djk
// TODO: why is this a filter? --djk
get: function get(filter, tags, maxItems, extra)
{
@@ -654,7 +650,7 @@ function Bookmarks() //{{{
getSearchEngines: function getSearchEngines()
{
let searchEngines = [];
for (let [,engine] in Iterator(services.get("browserSearch").getVisibleEngines({})))
for (let [, engine] in Iterator(services.get("browserSearch").getVisibleEngines({})))
{
let alias = engine.alias;
if (!alias || !/^[a-z0-9_-]+$/.test(alias))
@@ -1211,7 +1207,7 @@ function QuickMarks() //{{{
{
let pattern = RegExp("[" + filter.replace(/\s+/g, "") + "]");
for (let [qmark,] in qmarks)
for (let [qmark, ] in qmarks)
{
if (pattern.test(qmark))
qmarks.remove(qmark);

View File

@@ -774,7 +774,7 @@ function Buffer() //{{{
// put feeds rss into pageFeeds[]
let nFeed = 0;
for (let [,link] in Iterator(doc.getElementsByTagName("link")))
for (let [, link] in Iterator(doc.getElementsByTagName("link")))
{
if (!link.href)
return;
@@ -1167,7 +1167,7 @@ function Buffer() //{{{
// TODO: this should probably use the default 'hinttags' value. --djk
let res = buffer.evaluateXPath(options["hinttags"], frame.document);
for (let [,regex] in Iterator(regexes))
for (let [, regex] in Iterator(regexes))
{
for (let i in util.range(res.snapshotLength, 0, -1))
{
@@ -1667,7 +1667,7 @@ function Marks() //{{{
if (localmark)
{
let win = window.content;
for (let [i,] in Iterator(localmark))
for (let [i, ] in Iterator(localmark))
{
if (localmark[i].location == win.location.href)
{
@@ -1697,7 +1697,7 @@ function Marks() //{{{
function localMarkIter()
{
for (let [mark, value] in localMarks)
for (let [,val] in Iterator(value))
for (let [, val] in Iterator(value))
yield [mark, val];
}
@@ -1825,7 +1825,7 @@ function Marks() //{{{
// FIXME: Line/Column doesn't make sense with %
context.title = ["Mark", "Line Column File"];
context.keys.description = function ([,m]) percent(m.position.y) + "% " + percent(m.position.x) + "% " + m.location;
context.keys.description = function ([, m]) percent(m.position.y) + "% " + percent(m.position.x) + "% " + m.location;
context.completions = marks.all;
};
@@ -1903,17 +1903,17 @@ function Marks() //{{{
if (special)
{
// :delmarks! only deletes a-z marks
for (let [mark,] in localMarks)
for (let [mark, ] in localMarks)
removeLocalMark(mark);
}
else
{
for (let [mark,] in urlMarks)
for (let [mark, ] in urlMarks)
{
if (filter.indexOf(mark) >= 0)
removeURLMark(mark);
}
for (let [mark,] in localMarks)
for (let [mark, ] in localMarks)
{
if (filter.indexOf(mark) >= 0)
removeLocalMark(mark);
@@ -1965,7 +1965,7 @@ function Marks() //{{{
let win = window.content;
let slice = localMarks.get(mark) || [];
for (let [,lmark] in Iterator(slice))
for (let [, lmark] in Iterator(slice))
{
if (win.location.href == lmark.location)
{
@@ -2006,7 +2006,7 @@ function Marks() //{{{
Math.round(mark[1].position.x * 100) + "%",
Math.round(mark[1].position.y * 100) + "%",
mark[1].location]
for ([,mark] in Iterator(marks))));
for ([, mark] in Iterator(marks))));
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
}

View File

@@ -71,7 +71,7 @@ function Command(specs, description, action, extraInfo) //{{{
let longNames = [];
let shortNames = [];
for (let [,spec] in Iterator(specs))
for (let [, spec] in Iterator(specs))
{
let matches = spec.match(/(\w+)\[(\w+)\](\w*)/);
@@ -204,7 +204,7 @@ Command.prototype = {
return;
args.count = count;
args.bang = bang;
self.action.call(self, args, bang, count, modifiers);
self.action.call(self, args, modifiers);
}
if (this.hereDoc)
@@ -229,7 +229,7 @@ Command.prototype = {
*/
hasName: function (name)
{
for (let [,spec] in Iterator(this.specs))
for (let [, spec] in Iterator(this.specs))
{
let fullName = spec.replace(/\[(\w+)]$/, "$1");
let index = spec.indexOf("[");
@@ -515,7 +515,7 @@ function Commands() //{{{
opt += char + quote(val)
res.push(opt);
}
for (let [,arg] in Iterator(args.arguments || []))
for (let [, arg] in Iterator(args.arguments || []))
res.push(quote(arg));
let str = args.literalArg;
@@ -562,6 +562,9 @@ function Commands() //{{{
// : it might be nice to be able to specify that certain quoting
// should be disabled E.g. backslash without having to resort to
// using literal etc.
// : error messages should be configurable or else we can ditch
// Vim compatibility but it actually gives useful messages
// sometimes rather than just "Invalid arg"
// : I'm not sure documenting the returned object here, and
// elsewhere, as type Args rather than simply Object makes sense,
// especially since it is further augmented for use in
@@ -712,9 +715,9 @@ function Commands() //{{{
var optname = "";
if (!onlyArgumentsRemaining)
{
for (let [,opt] in Iterator(options))
for (let [, opt] in Iterator(options))
{
for (let [,optname] in Iterator(opt[0]))
for (let [, optname] in Iterator(opt[0]))
{
if (sub.indexOf(optname) == 0)
{
@@ -1009,6 +1012,7 @@ function Commands() //{{{
}
// TODO: offer completion.ex?
// : make this config specific
var completeOptionMap = {
abbreviation: "abbreviation", altstyle: "alternateStyleSheet",
bookmark: "bookmark", buffer: "buffer", color: "colorScheme",
@@ -1058,7 +1062,7 @@ function Commands() //{{{
}
catch (e)
{
// FIXME: should be pushed to the MOW
liberator.echo(":" + this.name + " ...");
liberator.echoerr("E117: Unknown function: " + completeOpt);
liberator.log(e);
return undefined;
@@ -1107,7 +1111,7 @@ function Commands() //{{{
cmd.count ? "0c" : "",
completerToString(cmd.completer),
cmd.replacementText || "function () { ... }"]
for ([,cmd] in Iterator(cmds))));
for ([, cmd] in Iterator(cmds))));
commandline.echo(str, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
}

View File

@@ -471,13 +471,13 @@ CompletionContext.prototype = {
let filter = fixCase(this.filter);
if (this.anchored)
{
function compare (text, s) text.substr(0, s.length) == s;
function compare(text, s) text.substr(0, s.length) == s;
substrings = util.map(util.range(filter.length, text.length + 1),
function (end) text.substring(0, end));
}
else
{
function compare (text, s) text.indexOf(s) >= 0;
function compare(text, s) text.indexOf(s) >= 0;
substrings = [];
let start = 0;
let idx;
@@ -527,7 +527,7 @@ CompletionContext.prototype = {
cancelAll: function ()
{
for (let [,context] in Iterator(this.contextList))
for (let [, context] in Iterator(this.contextList))
{
if (context.cancel)
context.cancel();
@@ -1006,7 +1006,7 @@ function Completion() //{{{
// Find any complete statements that we can eval before we eval our object.
// This allows for things like: let doc = window.content.document; let elem = doc.createElement...; elem.<Tab>
let prev = 0;
for (let [,v] in Iterator(get(0)[FULL_STATEMENTS]))
for (let [, v] in Iterator(get(0)[FULL_STATEMENTS]))
{
let key = str.substring(prev, v + 1);
if (checkFunction(prev, v, key))
@@ -1123,14 +1123,14 @@ function Completion() //{{{
}
// TODO: Make this a generic completion helper function.
let filter = key + (string || "");
for (let [,obj] in Iterator(objects))
for (let [, obj] in Iterator(objects))
{
this.context.fork(obj[1], top[OFFSET], this, fill,
obj[0], obj[1], compl, compl != orig, filter, last, key.length);
}
if (orig)
return;
for (let [,obj] in Iterator(objects))
for (let [, obj] in Iterator(objects))
{
obj[1] += " (substrings)";
this.context.fork(obj[1], top[OFFSET], this, fill,
@@ -1283,7 +1283,7 @@ function Completion() //{{{
setFunctionCompleter: function setFunctionCompleter(funcs, completers)
{
funcs = Array.concat(funcs);
for (let [,func] in Iterator(funcs))
for (let [, func] in Iterator(funcs))
{
func.liberatorCompleter = function liberatorCompleter(context, func, obj, args) {
let completer = completers[args.length - 1];

View File

@@ -78,12 +78,12 @@ function Editor() //{{{
let keyword = "[^" + nonkw + "]";
let nonkeyword = "[" + nonkw + "]";
let full_id = keyword + "+";
let end_id = nonkeyword + "+" + keyword;
let non_id = "\\S*" + nonkeyword;
let fullId = keyword + "+";
let endId = nonkeyword + "+" + keyword;
let nonId = "\\S*" + nonkeyword;
// Used in addAbbrevation and expandAbbreviation
var abbrevmatch = full_id + "|" + end_id + "|" + non_id;
var abbrevmatch = fullId + "|" + endId + "|" + nonId;
function getEditor() liberator.focus;
@@ -186,7 +186,7 @@ function Editor() //{{{
function abbrevs()
{
for (let [lhs, abbr] in Iterator(abbreviations))
for (let [,rhs] in Iterator(abbr))
for (let [, rhs] in Iterator(abbr))
yield [lhs, rhs];
}
@@ -206,7 +206,7 @@ function Editor() //{{{
liberator.echoerr("E474: Invalid argument");
return false;
}
let [,lhs,rhs] = matches;
let [, lhs, rhs] = matches;
if (rhs)
editor.addAbbreviation(mode, lhs, rhs);
else

View File

@@ -122,55 +122,58 @@ function AutoCommands() //{{{
options: [[["-javascript", "-js"], commands.OPTION_NOARG]]
});
// TODO: expand target to all buffers
commands.add(["doauto[all]"],
"Apply the autocommands matching the specified URL pattern to all buffers",
function (args)
[
{
commands.get("doautocmd").action.call(this, args);
name: "do[autocmd]",
description: "Apply the autocommands matching the specified URL pattern to the current buffer"
},
{
completer: function (context) completion.autocmdEvent(context),
literal: 0
name: "doautoa[ll]",
description: "Apply the autocommands matching the specified URL pattern to all buffers"
}
);
// TODO: restrict target to current buffer
commands.add(["do[autocmd]"],
"Apply the autocommands matching the specified URL pattern to the current buffer",
function (args)
{
args = args.string;
if (/^\s*$/.test(args))
].forEach(function (command) {
commands.add([command.name],
command.description,
// TODO: Perhaps this should take -args to pass to the command?
function (args)
{
liberator.echomsg("No matching autocommands");
return;
}
// Vim compatible
if (args.length == 0)
return void liberator.echomsg("No matching autocommands");
let [, event, url] = args.match(/^(\S+)(?:\s+(\S+))?$/);
url = url || buffer.URL;
let [event, url] = args;
let defaultURL = url || buffer.URL;
let validEvents = config.autocommands.map(function (e) e[0]);
let validEvents = config.autocommands.map(function (e) e[0]);
// TODO: add command validators
if (event == "*")
return void liberator.echoerr("E217: Can't execute autocommands for ALL events");
else if (validEvents.indexOf(event) == -1)
return void liberator.echoerr("E216: No such group or event: " + args);
else if (!autocommands.get(event).some(function (c) c.pattern.test(defaultURL)))
return void liberator.echomsg("No matching autocommands");
if (event == "*")
liberator.echoerr("E217: Can't execute autocommands for ALL events");
else if (validEvents.indexOf(event) == -1)
liberator.echoerr("E216: No such group or event: " + args);
else
{
// TODO: perhaps trigger could return the number of autocmds triggered
// TODO: Perhaps this should take -args to pass to the command?
if (!autocommands.get(event).some(function (c) c.pattern.test(url)))
liberator.echomsg("No matching autocommands");
if (this.name == "doautoall" && liberator.has("tabs"))
{
let current = tabs.index();
for (let i = 0; i < tabs.count; i++)
{
tabs.select(i);
// if no url arg is specified use the current buffer's URL
autocommands.trigger(event, { url: url || buffer.URL });
}
tabs.select(current);
}
else
autocommands.trigger(event, { url: url });
}
},
{
completer: function (context) completion.autocmdEvent(context),
literal: 0
}
);
autocommands.trigger(event, { url: defaultURL });
},
{
argCount: "*", // FIXME: kludged for proper error message should be "1".
completer: function (context) completion.autocmdEvent(context)
});
});
/////////////////////////////////////////////////////////////////////////////}}}
////////////////////// COMPLETIONS /////////////////////////////////////////////
@@ -306,7 +309,7 @@ function AutoCommands() //{{{
let lastPattern = null;
let url = args.url || "";
for (let [,autoCmd] in Iterator(autoCmds))
for (let [, autoCmd] in Iterator(autoCmds))
{
if (autoCmd.pattern.test(url))
{
@@ -439,10 +442,6 @@ function Events() //{{{
window.addEventListener("DOMMenuBarInactive", exitMenuMode, true);
window.addEventListener("resize", onResize, true);
// window.document.addEventListener("DOMTitleChanged", function (event) {
// liberator.log("titlechanged");
// }, null);
// NOTE: the order of ["Esc", "Escape"] or ["Escape", "Esc"]
// matters, so use that string as the first item, that you
// want to refer to within liberator's source code for
@@ -472,7 +471,7 @@ function Events() //{{{
if (k in keyTable)
names = keyTable[k];
code_key[v] = names[0];
for (let [,name] in Iterator(names))
for (let [, name] in Iterator(names))
key_code[name.toLowerCase()] = v;
}
@@ -581,7 +580,7 @@ function Events() //{{{
if (dirs.length > 0)
{
for (let [,dir] in Iterator(dirs))
for (let [, dir] in Iterator(dirs))
{
liberator.echomsg('Searching for "macros/*" in "' + dir.path + '"', 2);
@@ -846,7 +845,7 @@ function Events() //{{{
{
let re = RegExp(filter);
for (let [item,] in macros)
for (let [item, ] in macros)
{
if (re.test(item) || !filter)
macros.remove(item);
@@ -882,7 +881,7 @@ function Events() //{{{
{
liberator.threadYield(1, true);
for (let [,evt_obj] in Iterator(events.fromString(keys)))
for (let [, evt_obj] in Iterator(events.fromString(keys)))
{
let elem = liberator.focus || window.content;
let evt = events.create(doc, "keypress", evt_obj);
@@ -922,7 +921,7 @@ function Events() //{{{
{
let duringFeed = this.duringFeed;
this.duringFeed = [];
for (let [,evt] in Iterator(duringFeed))
for (let [, evt] in Iterator(duringFeed))
evt.target.dispatchEvent(evt);
}
}
@@ -1021,8 +1020,8 @@ function Events() //{{{
while (match = re.exec(input))
{
let evt_str = match[0];
let evt_obj = {ctrlKey:false, shiftKey:false,altKey:false, metaKey: false,
keyCode: 0, charCode: 0, type: "keypress"};
let evt_obj = { ctrlKey: false, shiftKey: false, altKey: false, metaKey: false,
keyCode: 0, charCode: 0, type: "keypress" };
if (evt_str.length > 1) // <.*?>
{

View File

@@ -66,26 +66,26 @@ function Hints() //{{{
function images() "//img | //xhtml:img";
const hintModes = {
";": Mode("Focus hint", function (elem) buffer.focusElement(elem), extended),
"?": Mode("Show information for hint", function (elem) buffer.showElementInfo(elem), extended),
s: Mode("Save hint", function (elem) buffer.saveLink(elem, true)),
a: Mode("Save hint with prompt", function (elem) buffer.saveLink(elem, false)),
f: Mode("Focus frame", function (elem) elem.ownerDocument.defaultView.focus(), function () "//body | //xhtml:body"),
o: Mode("Follow hint", function (elem) buffer.followLink(elem, liberator.CURRENT_TAB)),
t: Mode("Follow hint in a new tab", function (elem) buffer.followLink(elem, liberator.NEW_TAB)),
b: Mode("Follow hint in a background tab", function (elem) buffer.followLink(elem, liberator.NEW_BACKGROUND_TAB)),
w: Mode("Follow hint in a new window", function (elem) buffer.followLink(elem, liberator.NEW_WINDOW), extended),
F: Mode("Open multiple hints in tabs", followAndReshow),
O: Mode("Generate an ':open URL' using hint", function (elem, loc) commandline.open(":", "open " + loc, modes.EX)),
T: Mode("Generate a ':tabopen URL' using hint",function (elem, loc) commandline.open(":", "tabopen " + loc, modes.EX)),
W: Mode("Generate a ':winopen URL' using hint",function (elem, loc) commandline.open(":", "winopen " + loc, modes.EX)),
v: Mode("View hint source", function (elem, loc) buffer.viewSource(loc, false), extended),
V: Mode("View hint source in external editor", function (elem, loc) buffer.viewSource(loc, true), extended),
y: Mode("Yank hint location", function (elem, loc) util.copyToClipboard(loc, true)),
Y: Mode("Yank hint description", function (elem) util.copyToClipboard(elem.textContent || "", true), extended),
c: Mode("Open context menu", function (elem) buffer.openContextMenu(elem), extended),
i: Mode("Show image", function (elem) liberator.open(elem.src), images),
I: Mode("Show image in a new tab", function (elem) liberator.open(elem.src, liberator.NEW_TAB), images)
";": Mode("Focus hint", function (elem) buffer.focusElement(elem), extended),
"?": Mode("Show information for hint", function (elem) buffer.showElementInfo(elem), extended),
s: Mode("Save hint", function (elem) buffer.saveLink(elem, true)),
a: Mode("Save hint with prompt", function (elem) buffer.saveLink(elem, false)),
f: Mode("Focus frame", function (elem) elem.ownerDocument.defaultView.focus(), function () "//body | //xhtml:body"),
o: Mode("Follow hint", function (elem) buffer.followLink(elem, liberator.CURRENT_TAB)),
t: Mode("Follow hint in a new tab", function (elem) buffer.followLink(elem, liberator.NEW_TAB)),
b: Mode("Follow hint in a background tab", function (elem) buffer.followLink(elem, liberator.NEW_BACKGROUND_TAB)),
w: Mode("Follow hint in a new window", function (elem) buffer.followLink(elem, liberator.NEW_WINDOW), extended),
F: Mode("Open multiple hints in tabs", followAndReshow),
O: Mode("Generate an ':open URL' using hint", function (elem, loc) commandline.open(":", "open " + loc, modes.EX)),
T: Mode("Generate a ':tabopen URL' using hint", function (elem, loc) commandline.open(":", "tabopen " + loc, modes.EX)),
W: Mode("Generate a ':winopen URL' using hint", function (elem, loc) commandline.open(":", "winopen " + loc, modes.EX)),
v: Mode("View hint source", function (elem, loc) buffer.viewSource(loc, false), extended),
V: Mode("View hint source in external editor", function (elem, loc) buffer.viewSource(loc, true), extended),
y: Mode("Yank hint location", function (elem, loc) util.copyToClipboard(loc, true)),
Y: Mode("Yank hint description", function (elem) util.copyToClipboard(elem.textContent || "", true), extended),
c: Mode("Open context menu", function (elem) buffer.openContextMenu(elem), extended),
i: Mode("Show image", function (elem) liberator.open(elem.src), images),
I: Mode("Show image in a new tab", function (elem) liberator.open(elem.src, liberator.NEW_TAB), images)
};
/**
@@ -163,7 +163,7 @@ function Hints() //{{{
return [elem.value, false];
else
{
for (let [,option] in Iterator(options["hintinputs"].split(",")))
for (let [, option] in Iterator(options["hintinputs"].split(",")))
{
if (option == "value")
{
@@ -435,7 +435,7 @@ function Hints() //{{{
setClass(imgspan, activeHint == hintnum);
}
span.setAttribute("number", showtext ? hintnum + ": " + text.substr(0,50): hintnum);
span.setAttribute("number", showtext ? hintnum + ": " + text.substr(0, 50) : hintnum);
if (imgspan)
imgspan.setAttribute("number", hintnum);
else
@@ -449,7 +449,7 @@ function Hints() //{{{
{
let css = [];
// FIXME: Broken for imgspans.
for (let [,{ doc: doc }] in Iterator(docs))
for (let [, { doc: doc }] in Iterator(docs))
{
for (let elem in buffer.evaluateXPath("//*[@liberator:highlight and @number]", doc))
{
@@ -560,7 +560,7 @@ function Hints() //{{{
*
* @param {Event} event The keypress event.
*/
function onInput (event)
function onInput(event)
{
prevInput = "text";
@@ -712,7 +712,7 @@ function Hints() //{{{
function stringsAtBeginningOfWords(strings, words, allowWordOverleaping)
{
let strIdx = 0;
for (let [,word] in Iterator(words))
for (let [, word] in Iterator(words))
{
if (word.length == 0)
continue;

View File

@@ -45,7 +45,7 @@ function Script(file)
this.__context__ = this;
// This belongs elsewhere
for (let [,dir] in Iterator(io.getRuntimeDirectories("plugin")))
for (let [, dir] in Iterator(io.getRuntimeDirectories("plugin")))
{
if (dir.contains(file, false))
plugins[this.NAME] = this;
@@ -230,7 +230,7 @@ function IO() //{{{
let dirs = getPathsFromPathList(options["cdpath"]);
let found = false;
for (let [,dir] in Iterator(dirs))
for (let [, dir] in Iterator(dirs))
{
dir = joinPaths(dir, arg);
@@ -467,7 +467,7 @@ function IO() //{{{
let dirNames = services.get("environment").get("PATH").split(RegExp(liberator.has("Win32") ? ";" : ":"));
let commands = [];
for (let [,dirName] in Iterator(dirNames))
for (let [, dirName] in Iterator(dirNames))
{
let dir = io.getFile(dirName);
if (dir.exists() && dir.isDirectory())
@@ -743,7 +743,7 @@ function IO() //{{{
}
else
return []; // XXX: or should it throw an error, probably yes?
// Yes --djk
// Yes, though frankly this should be a precondition so... --djk
},
/**
@@ -884,7 +884,7 @@ function IO() //{{{
dirs = [io.getCurrentDirectory().path].concat(dirs);
lookup:
for (let [,dir] in Iterator(dirs))
for (let [, dir] in Iterator(dirs))
{
file = joinPaths(dir, program);
try
@@ -897,7 +897,7 @@ lookup:
if (WINDOWS)
{
let extensions = services.get("environment").get("PATHEXT").split(";");
for (let [,extension] in Iterator(extensions))
for (let [, extension] in Iterator(extensions))
{
file = joinPaths(dir, program + extension);
if (file.exists())
@@ -942,9 +942,9 @@ lookup:
liberator.echomsg("Searching for \"" + paths.join(" ") + "\" in \"" + options["runtimepath"] + "\"", 2);
outer:
for (let [,dir] in Iterator(dirs))
for (let [, dir] in Iterator(dirs))
{
for (let [,path] in Iterator(paths))
for (let [, path] in Iterator(paths))
{
let file = joinPaths(dir, path);
@@ -1028,13 +1028,15 @@ lookup:
let heredocEnd = null; // the string which ends the heredoc
let lines = str.split(/\r\n|[\r\n]/);
function execute(args) { command.execute(args, special, count, { setFrom: file }); }
for (let [i, line] in Iterator(lines))
{
if (heredocEnd) // we already are in a heredoc
{
if (heredocEnd.test(line))
{
command.execute(heredoc, special, count);
execute(heredoc);
heredoc = "";
heredocEnd = null;
}
@@ -1057,9 +1059,6 @@ lookup:
{
let lineNumber = i + 1;
// TODO: messages need to be able to specify
// whether they can be cleared/overwritten or
// should be appended to and the MOW opened
liberator.echoerr("Error detected while processing " + file.path, commandline.FORCE_MULTILINE);
commandline.echo("line " + lineNumber + ":", commandline.HL_LINENR, commandline.APPEND_TO_MESSAGES);
liberator.echoerr("E492: Not an editor command: " + line);
@@ -1079,15 +1078,11 @@ lookup:
heredocEnd = RegExp("^" + matches[2] + "$", "m");
if (matches[1])
heredoc = matches[1] + "\n";
continue;
}
else
command.execute(args, special, count);
}
else
{
// execute a normal liberator command
liberator.execute(line, null, true);
}
execute(args);
}
}
}
@@ -1095,7 +1090,7 @@ lookup:
// if no heredoc-end delimiter is found before EOF then
// process the heredoc anyway - Vim compatible ;-)
if (heredocEnd)
command.execute(heredoc, special, count);
execute(heredoc);
}
if (scriptNames.indexOf(file.path) == -1)

View File

@@ -111,7 +111,7 @@ const liberator = (function () //{{{
{
function addChildren(node, parent)
{
for (let [,item] in Iterator(node.childNodes))
for (let [, item] in Iterator(node.childNodes))
{
if (item.childNodes.length == 0 && item.localName == "menuitem"
&& !/rdf:http:/.test(item.getAttribute("label"))) // FIXME
@@ -163,7 +163,7 @@ const liberator = (function () //{{{
opts: config.guioptions,
setter: function (opts)
{
for (let [opt, [,ids]] in Iterator(this.opts))
for (let [opt, [, ids]] in Iterator(this.opts))
{
ids.map(function (id) document.getElementById(id))
.forEach(function (elem)
@@ -220,7 +220,7 @@ const liberator = (function () //{{{
{
setter: function (value)
{
for (let [,group] in Iterator(groups))
for (let [, group] in Iterator(groups))
group.setter(value);
return value;
},
@@ -351,7 +351,7 @@ const liberator = (function () //{{{
// TODO: why are these sorts of properties arrays? --djk
let dialogs = config.dialogs;
for (let [,dialog] in Iterator(dialogs))
for (let [, dialog] in Iterator(dialogs))
{
if (util.compareIgnoreCase(arg, dialog[0]) == 0)
{
@@ -387,7 +387,7 @@ const liberator = (function () //{{{
if (!items.some(function (i) i.fullMenuPath == arg))
return void liberator.echoerr("E334: Menu not found: " + arg);
for (let [,item] in Iterator(items))
for (let [, item] in Iterator(items))
{
if (item.fullMenuPath == arg)
item.doCommand();
@@ -539,7 +539,7 @@ const liberator = (function () //{{{
/* XXX: Inline style. */
e.enabled ? <span style="color: blue;">enabled</span>
: <span style="color: red;">disabled</span>,
e.description] for ([,e] in Iterator(extensions)))
e.description] for ([, e] in Iterator(extensions)))
);
commandline.echo(list, commandline.HL_NORMAL, commandline.FORCE_MULTILINE);
@@ -794,6 +794,31 @@ const liberator = (function () //{{{
literal: 0
});
commands.add(["verb[ose]"],
"Execute a command with 'verbose' set",
function (args)
{
let vbs = options.get("verbose");
let value = vbs.value;
try
{
vbs.set(args.count > -1 ? args.count : 1);
vbs.setFrom = null;
liberator.execute(args[0], null, true);
}
finally
{
vbs.set(value);
}
},
{
argCount: "+",
completer: function (context) completion.ex(context),
count: true,
literal: 0
});
commands.add(["ve[rsion]"],
"Show version information",
function (args)
@@ -962,9 +987,9 @@ const liberator = (function () //{{{
/** @property An RC file to use rather than the default. */
rcFile: null,
/** @property An Ex command to run before any initialization is performed. */
preCommand: null,
preCommands: null,
/** @property An Ex command to run after all initialization has been performed. */
postCommand: null
postCommands: null
},
registerObserver: registerObserver,
@@ -979,7 +1004,7 @@ const liberator = (function () //{{{
triggerObserver: function (type)
{
let args = Array.slice(arguments, 1);
for (let [,func] in Iterator(observers[type] || []))
for (let [, func] in Iterator(observers[type] || []))
func.apply(null, args);
},
@@ -1455,7 +1480,7 @@ const liberator = (function () //{{{
}
liberator.echomsg('Searching for "plugin/**/*.{js,vimp}" in "'
+ [dir.path.replace(/.plugin$/, "") for ([,dir] in Iterator(dirs))].join(",") + '"', 2);
+ [dir.path.replace(/.plugin$/, "") for ([, dir] in Iterator(dirs))].join(",") + '"', 2);
dirs.forEach(function (dir) {
liberator.echomsg("Searching for \"" + (dir.path + "/**/*.{js,vimp}") + "\"", 3);
@@ -1584,7 +1609,7 @@ const liberator = (function () //{{{
else if (!where)
where = liberator.CURRENT_TAB;
for (let [,url] in Iterator(urls))
for (let [, url] in Iterator(urls))
{
open(url, where);
where = liberator.NEW_BACKGROUND_TAB;

View File

@@ -168,7 +168,7 @@ function Mappings() //{{{
{
let maps = stack[mode] || [];
for (let [,map] in Iterator(maps))
for (let [, map] in Iterator(maps))
{
if (map.hasName(cmd))
return map;
@@ -297,7 +297,7 @@ function Mappings() //{{{
args = args[0];
let found = false;
for (let [,mode] in Iterator(modes))
for (let [, mode] in Iterator(modes))
{
if (mappings.hasMap(mode, args))
{
@@ -413,9 +413,9 @@ function Mappings() //{{{
let map = new Map(modes, keys, description || "User defined mapping", action, extra);
// remove all old mappings to this key sequence
for (let [,name] in Iterator(map.names))
for (let [, name] in Iterator(map.names))
{
for (let [,mode] in Iterator(map.modes))
for (let [, mode] in Iterator(map.modes))
removeMap(mode, name);
}
@@ -461,9 +461,9 @@ function Mappings() //{{{
let mappings = user[mode].concat(main[mode]);
let matches = [];
for (let [,map] in Iterator(mappings))
for (let [, map] in Iterator(mappings))
{
for (let [,name] in Iterator(map.names))
for (let [, name] in Iterator(map.names))
{
if (name.indexOf(prefix) == 0 && name.length > prefix.length)
{

View File

@@ -216,6 +216,7 @@ const modes = (function () //{{{
},
// TODO: Deprecate this in favor of addMode? --Kris
// Ya --djk
setCustomMode: function (modestr, oneventfunc, stopfunc)
{
// TODO this.plugin[id]... ('id' maybe submode or what..)

View File

@@ -111,18 +111,24 @@ function Option(names, description, type, defaultValue, extraInfo) //{{{
* @see #has
*/
this.checkHas = extraInfo.checkHas || null;
/**
* @property {boolean} Set to true whenever the option is first set. This
* is useful to see whether it was changed from its default value
* interactively or by some RC file.
*/
this.hasChanged = false;
/**
* @property {nsIFile} The script in which this option was last set. null
* implies an interactive command.
*/
this.setFrom = null;
// add no{option} variant of boolean {option} to this.names
if (this.type == "boolean")
{
this.names = []; // reset since order is important
for (let [,name] in Iterator(names))
for (let [, name] in Iterator(names))
{
this.names.push(name);
this.names.push("no" + name);
@@ -550,7 +556,7 @@ function Options() //{{{
if (!args.length)
args[0] = "";
for (let [,arg] in args)
for (let [, arg] in args)
{
if (bang)
{
@@ -572,6 +578,7 @@ function Options() //{{{
}
if (name == "all" && reset)
// TODO: Why? --djk
liberator.echoerr("You can't reset all options, it could make " + config.hostApplication + " unusable.");
else if (name == "all")
options.listPrefs(onlyNonDefault, "");
@@ -620,7 +627,10 @@ function Options() //{{{
option.reset();
}
else
{
option.setFrom = modifiers.setFrom || null;
option.reset();
}
}
// read access
else if (opt.get)
@@ -630,9 +640,15 @@ function Options() //{{{
else
{
if (option.type == "boolean")
liberator.echo((opt.optionValue ? " " : "no") + option.name);
var msg = (opt.optionValue ? " " : "no") + option.name;
else
liberator.echo(" " + option.name + "=" + opt.optionValue);
msg = " " + option.name + "=" + opt.optionValue;
if (options["verbose"] > 0 && option.setFrom)
msg += "\n Last set from " + option.setFrom.path;
// FIXME: Message highlight group wrapping messes up the indent up for multi-arg verbose :set queries
liberator.echo(<span highlight="CmdOutput">{msg}</span>);
}
}
// write access
@@ -640,6 +656,8 @@ function Options() //{{{
// improved. i.e. Vim's behavior is pretty sloppy to no real benefit
else
{
option.setFrom = modifiers.setFrom || null;
if (opt.option.type == "boolean")
{
if (opt.valueGiven)
@@ -832,9 +850,10 @@ function Options() //{{{
commands.add(["setl[ocal]"],
"Set local option",
function (args)
function (args, modifiers)
{
return setAction(args, { scope: options.OPTION_SCOPE_LOCAL });
modifiers.scope = options.OPTION_SCOPE_LOCAL;
setAction(args, modifiers);
},
{
bang: true,
@@ -849,9 +868,10 @@ function Options() //{{{
commands.add(["setg[lobal]"],
"Set global option",
function (args)
function (args, modifiers)
{
return setAction(args, { scope: options.OPTION_SCOPE_GLOBAL });
modifiers.scope = options.OPTION_SCOPE_GLOBAL;
setAction(args, modifiers);
},
{
bang: true,
@@ -866,10 +886,7 @@ function Options() //{{{
commands.add(["se[t]"],
"Set an option",
function (args)
{
return setAction(args);
},
function (args, modifiers) { setAction(args, modifiers); },
{
bang: true,
completer: function (context, args)
@@ -891,12 +908,7 @@ function Options() //{{{
"Delete a variable",
function (args)
{
//let names = args.split(/ /);
//if (typeof names == "string") names = [names];
//let length = names.length;
//for (let i = 0, name = names[i]; i < length; name = names[++i])
for (let [,name] in args)
for (let [, name] in args)
{
let reference = liberator.variableReference(name);
if (!reference[0])
@@ -1180,7 +1192,7 @@ function Options() //{{{
let prefArray = services.get("pref").getChildList("", { value: 0 });
prefArray.sort();
let prefs = function () {
for (let [,pref] in Iterator(prefArray))
for (let [, pref] in Iterator(prefArray))
{
let userValue = services.get("pref").prefHasUserValue(pref);
if (onlyNonDefault && !userValue || pref.indexOf(filter) == -1)

View File

@@ -142,7 +142,7 @@ function Highlights(name, store)
let styles = storage.styles;
const Highlight = Struct("class", "selector", "filter", "default", "value");
Highlight.defaultValue("filter", function () "chrome://liberator/content/buffer.xhtml" + "," + config.styleableChrome);
Highlight.defaultValue("filter", function () ["chrome://liberator/content/buffer.xhtml"].concat(config.styleableChrome).join(","));
Highlight.defaultValue("selector", function () self.selector(this.class));
Highlight.defaultValue("value", function () this.default);
Highlight.prototype.toString = function () "Highlight(" + this.class + ")\n\t" + [k + ": " + util.escapeString(v || "undefined") for ([k, v] in this)].join("\n\t");
@@ -395,7 +395,7 @@ function Styles(name, store)
if (matches.length == 0)
return;
for (let [,sheet] in Iterator(matches.reverse()))
for (let [, sheet] in Iterator(matches.reverse()))
{
if (name)
{
@@ -509,7 +509,7 @@ let (array = util.Array)
catch (e) {}
context.fork("others", 0, this, function (context) {
context.title = ["Site"];
context.completions = [[s, ""] for ([,s] in Iterator(styles.sites))];
context.completions = [[s, ""] for ([, s] in Iterator(styles.sites))];
});
}
});
@@ -729,7 +729,7 @@ liberator.registerObserver("load_completion", function () {
});
context.title = ["Color Scheme", "Runtime Path"];
context.completions = [[c.leafName.replace(/\.vimp$/, ""), c.parent.path] for ([,c] in Iterator(colors))]
context.completions = [[c.leafName.replace(/\.vimp$/, ""), c.parent.path] for ([, c] in Iterator(colors))]
};
// FIXME: extract from :highlight

View File

@@ -1014,7 +1014,7 @@ function Tabs() //{{{
*/
stopAll: function ()
{
for (let [,browser] in this.browsers)
for (let [, browser] in this.browsers)
browser.stop();
},
@@ -1072,7 +1072,7 @@ function Tabs() //{{{
let lowerBuffer = buffer.toLowerCase();
let first = tabs.index() + (reverse ? 0 : 1);
let nbrowsers = getBrowser().browsers.length;
for (let [i,] in tabs.browsers)
for (let [i, ] in tabs.browsers)
{
let index = (i + first) % nbrowsers;
let url = getBrowser().getBrowserAtIndex(index).contentDocument.location.href;

View File

@@ -398,7 +398,7 @@ function CommandLine() //{{{
try
{
this.waiting = true;
for (let [,context] in Iterator(list))
for (let [, context] in Iterator(list))
{
function done() !(idx >= n + context.items.length || idx == -2 && !context.items.length);
while (context.incomplete && !done())
@@ -871,7 +871,7 @@ function CommandLine() //{{{
////////////////////// COMMANDS ////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////{{{
var echoCommands = [
[
{
name: "ec[ho]",
description: "Echo the expression",
@@ -887,9 +887,7 @@ function CommandLine() //{{{
description: "Echo the expression as an informational message",
action: liberator.echomsg
}
];
echoCommands.forEach(function (command) {
].forEach(function (command) {
commands.add([command.name],
command.description,
function (args)
@@ -991,8 +989,7 @@ function CommandLine() //{{{
triggerCallback: function (type, mode, data)
{
if (callbacks[type] && callbacks[type][mode])
return callbacks[type][mode].call(this, data);
return false;
callbacks[type][mode].call(this, data);
},
runSilently: function (func, self)
@@ -1017,8 +1014,10 @@ function CommandLine() //{{{
// completion preview.
return commandWidget.inputField.editor.rootElement.firstChild.textContent;
}
catch (e) {}
return commandWidget.value;
catch (e)
{
return commandWidget.value;
}
},
set command(cmd) commandWidget.value = cmd,
@@ -1278,10 +1277,10 @@ function CommandLine() //{{{
if (completions)
completions.previewClear();
if (!currentExtendedMode)
return true;
return;
// user pressed ENTER to carry out a command
// user pressing ESCAPE is handled in the global onEscape
// user pressed <Enter> to carry out a command
// user pressing <Esc> is handled in the global onEscape
// FIXME: <Esc> should trigger "cancel" event
if (events.isAcceptKey(key))
{
@@ -1289,10 +1288,9 @@ function CommandLine() //{{{
keepCommand = true;
currentExtendedMode = null; // Don't let modes.pop trigger "cancel"
modes.pop(!this.silent);
return commandline.triggerCallback("submit", mode, command);
commandline.triggerCallback("submit", mode, command);
}
// user pressed UP or DOWN arrow to cycle history completion
// user pressed <Up> or <Down> arrow to cycle history completion
else if (/^(<Up>|<Down>|<S-Up>|<S-Down>|<PageUp>|<PageDown>)$/.test(key))
{
// prevent tab from moving to the next field
@@ -1303,9 +1301,8 @@ function CommandLine() //{{{
history.select(/Up/.test(key), !/(Page|S-)/.test(key));
else
liberator.beep();
return false;
}
// user pressed TAB to get completions of a command
// user pressed <Tab> to get completions of a command
else if (key == "<Tab>" || key == "<S-Tab>")
{
// prevent tab from moving to the next field
@@ -1313,7 +1310,6 @@ function CommandLine() //{{{
event.stopPropagation();
tabTimer.tell(event);
return false;
}
else if (key == "<BS>")
{
@@ -1331,7 +1327,7 @@ function CommandLine() //{{{
{
//this.resetCompletions();
}
return true; // allow this event to be handled by the host app
// allow this event to be handled by the host app
}
else if (event.type == "keyup")
{
@@ -2087,7 +2083,8 @@ function StatusLine() //{{{
var value = aURI.spec;
// Try to decode as UTF-8 if there's no encoding sequence that we would break.
if (!/%25(?:3B|2F|3F|3A|40|26|3D|2B|24|2C|23)/i.test(value))
try {
try
{
value = decodeURI(value)
// 1. decodeURI decodes %25 to %, which creates unintended
// encoding sequences. Re-encode it, unless it's part of
@@ -2098,7 +2095,8 @@ function StatusLine() //{{{
// by the location bar (bug 410726).
.replace(/%(?!3B|2F|3F|3A|40|26|3D|2B|24|2C|23)|[\r\n\t]/ig,
encodeURIComponent);
} catch (e) {}
}
catch (e) {}
// Encode invisible characters (soft hyphen, zero-width space, BOM,
// line and paragraph separator, word joiner, invisible times,

View File

@@ -817,13 +817,13 @@ util.Array.uniq = function uniq(ary, unsorted)
let ret = [];
if (unsorted)
{
for (let [,item] in Iterator(ary))
for (let [, item] in Iterator(ary))
if (ret.indexOf(item) == -1)
ret.push(item);
}
else
{
for (let [,item] in Iterator(ary.sort()))
for (let [, item] in Iterator(ary.sort()))
{
if (item != last || !ret.length)
ret.push(item);
@@ -889,8 +889,8 @@ Struct.prototype = {
// Add no-sideeffect array methods. Can't set new Array() as the prototype or
// get length() won't work.
for (let [,k] in Iterator(["concat", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf",
"map", "reduce", "reduceRight", "reverse", "slice", "some", "sort"]))
for (let [, k] in Iterator(["concat", "every", "filter", "forEach", "indexOf", "join", "lastIndexOf",
"map", "reduce", "reduceRight", "reverse", "slice", "some", "sort"]))
Struct.prototype[k] = Array.prototype[k];
// vim: set fdm=marker sw=4 ts=4 et: