1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-01-01 03:32:31 +01:00

Only show "Waiting..." message if wed otherwise show items (should maybe do the same for context.message); prefix window functions with "window."; general cleanup.

This commit is contained in:
Kris Maglione
2008-12-01 07:37:35 +00:00
parent caa59fec00
commit 42bbfd2500
15 changed files with 235 additions and 226 deletions

View File

@@ -235,7 +235,7 @@ function Bookmarks() //{{{
"string", "google",
{
completer: function completer(context) completion.search(context, true),
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["preload"],
@@ -270,7 +270,7 @@ function Bookmarks() //{{{
"Show jumplist",
function ()
{
var sh = getWebNavigation().sessionHistory;
var sh = window.getWebNavigation().sessionHistory;
let entries = [sh.getEntryAtIndex(i, false) for (i in util.range(0, sh.count))];
let list = template.jumps(sh.index, entries);
@@ -516,8 +516,8 @@ function Bookmarks() //{{{
function process(resp)
{
let json = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON);
const json = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON);
let results = [];
try
{
@@ -557,7 +557,7 @@ function Bookmarks() //{{{
// did not :open <tab> once before
this.getSearchEngines();
url = getShortcutOrURI(searchString, aPostDataRef);
url = window.getShortcutOrURI(searchString, aPostDataRef);
if (url == searchString)
url = null;
@@ -642,12 +642,12 @@ function History() //{{{
{
if (args)
{
var sh = getWebNavigation().sessionHistory;
var sh = window.getWebNavigation().sessionHistory;
for (let i = sh.index - 1; i >= 0; i--)
{
if (sh.getEntryAtIndex(i, false).URI.spec == args)
{
getWebNavigation().gotoIndex(i);
window.getWebNavigation().gotoIndex(i);
return;
}
}
@@ -664,7 +664,7 @@ function History() //{{{
completer: function completer(context)
{
let filter = context.filter;
var sh = getWebNavigation().sessionHistory;
var sh = window.getWebNavigation().sessionHistory;
var completions = [];
for (let i in util.range(sh.index, 0, true))
{
@@ -694,12 +694,12 @@ function History() //{{{
{
if (args)
{
var sh = getWebNavigation().sessionHistory;
var sh = window.getWebNavigation().sessionHistory;
for (let i in util.range(sh.index + 1, sh.count))
{
if (sh.getEntryAtIndex(i, false).URI.spec == args)
{
getWebNavigation().gotoIndex(i);
window.getWebNavigation().gotoIndex(i);
return;
}
}
@@ -716,7 +716,7 @@ function History() //{{{
completer: function completer(context)
{
let filter = context.filter;
var sh = getWebNavigation().sessionHistory;
var sh = window.getWebNavigation().sessionHistory;
var completions = [];
for (let i in util.range(sh.index + 1, sh.count))
{
@@ -786,29 +786,29 @@ function History() //{{{
// TODO: better names and move to buffer.?
stepTo: function stepTo(steps)
{
let index = getWebNavigation().sessionHistory.index + steps;
if (index >= 0 && index < getWebNavigation().sessionHistory.count)
getWebNavigation().gotoIndex(index);
let index = window.getWebNavigation().sessionHistory.index + steps;
if (index >= 0 && index < window.getWebNavigation().sessionHistory.count)
window.getWebNavigation().gotoIndex(index);
else
liberator.beep();
},
goToStart: function goToStart()
{
let index = getWebNavigation().sessionHistory.index;
let index = window.getWebNavigation().sessionHistory.index;
if (index == 0)
return liberator.beep(); // really wanted?
getWebNavigation().gotoIndex(0);
window.getWebNavigation().gotoIndex(0);
},
goToEnd: function goToEnd()
{
let index = getWebNavigation().sessionHistory.index;
if (index == getWebNavigation().sessionHistory.count - 1)
let index = window.getWebNavigation().sessionHistory.index;
if (index == window.getWebNavigation().sessionHistory.count - 1)
return liberator.beep();
getWebNavigation().gotoIndex(max);
window.getWebNavigation().gotoIndex(max);
},
// if openItems is true, open the matching history items in tabs rather than display

View File

@@ -146,7 +146,10 @@ function Buffer() //{{{
"stringlist", "\\bprev|previous\\b,^<$,^(<<|«)$,^(<|«),(<|«)$");
options.add(["pageinfo", "pa"], "Desired info on :pa[geinfo]", "charlist", "gfm",
{ completer: function (filter) [[k, v[1]] for ([k, v] in Iterator(pageInfo))] });
{
completer: function (filter) [[k, v[1]] for ([k, v] in Iterator(pageInfo))],
validator: Option.validateCompleter
});
options.add(["scroll", "scr"],
"Number of lines to scroll with <C-u> and <C-d> commands",
@@ -162,7 +165,7 @@ function Buffer() //{{{
["1", "Show the link in the status line"],
["2", "Show the link in the command line"]
],
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["usermode", "um"],
@@ -173,7 +176,7 @@ function Buffer() //{{{
{
try
{
getMarkupDocumentViewer().authorStyleDisabled = value;
window.getMarkupDocumentViewer().authorStyleDisabled = value;
}
catch (e) {}
@@ -183,7 +186,7 @@ function Buffer() //{{{
{
try
{
return getMarkupDocumentViewer().authorStyleDisabled;
return window.getMarkupDocumentViewer().authorStyleDisabled;
}
catch (e) {}
}
@@ -217,7 +220,7 @@ function Buffer() //{{{
mappings.add(myModes, ["<C-c>"],
"Stop loading",
function () { BrowserStop(); });
function () { window.BrowserStop(); });
// scrolling
mappings.add(myModes, ["j", "<Down>", "<C-e>"],
@@ -517,7 +520,7 @@ function Buffer() //{{{
if (options["usermode"])
options["usermode"] = false;
stylesheetSwitchAll(window.content, args);
window.stylesheetSwitchAll(window.content, args);
},
{
completer: function (context) completion.alternateStylesheet(context),
@@ -567,9 +570,9 @@ function Buffer() //{{{
.getDocumentMetadata("content-disposition");
} catch (e) {}
internalSave(doc.location.href, doc, null, contentDisposition,
window.internalSave(doc.location.href, doc, null, contentDisposition,
doc.contentType, false, null, chosenData, doc.referrer ?
makeURI(doc.referrer) : null, true);
window.makeURI(doc.referrer) : null, true);
},
{
argCount: "?",
@@ -579,7 +582,7 @@ function Buffer() //{{{
commands.add(["st[op]"],
"Stop loading",
function () { BrowserStop(); },
function () { window.BrowserStop(); },
{ argCount: "0" });
commands.add(["vie[wsource]"],
@@ -671,7 +674,7 @@ function Buffer() //{{{
{
try
{
urlSecurityCheck(data.href, principal,
window.urlSecurityCheck(data.href, principal,
Components.interfaces.nsIScriptSecurityManager.DISALLOW_INHERIT_PRINCIPAL);
}
catch (e)
@@ -793,7 +796,7 @@ function Buffer() //{{{
get alternateStyleSheets()
{
var stylesheets = getAllStyleSheets(window.content);
var stylesheets = window.getAllStyleSheets(window.content);
return stylesheets.filter(
function (stylesheet) /^(screen|all|)$/i.test(stylesheet.media.mediaText) && !/^\s*$/.test(stylesheet.title)
@@ -1106,15 +1109,15 @@ function Buffer() //{{{
saveLink: function (elem, skipPrompt)
{
var doc = elem.ownerDocument;
var url = makeURLAbsolute(elem.baseURI, elem.href);
var url = window.makeURLAbsolute(elem.baseURI, elem.href);
var text = elem.textContent;
try
{
urlSecurityCheck(url, doc.nodePrincipal);
window.urlSecurityCheck(url, doc.nodePrincipal);
// we always want to save that link relative to the current working directory
options.setPref("browser.download.lastDir", io.getCurrentDirectory().path);
saveURL(url, text, null, true, skipPrompt, makeURI(url, doc.characterSet));
window.saveURL(url, text, null, true, skipPrompt, makeURI(url, doc.characterSet));
}
catch (e)
{

View File

@@ -635,7 +635,7 @@ function Commands() //{{{
// check for correct number of arguments
if (args.length == 0 && /^[1+]$/.test(argCount) ||
literal != null && /[+?]/.test(argCount) && !/\S/.test(args.literalArg || ""))
literal != null && /[1+]/.test(argCount) && !/\S/.test(args.literalArg || ""))
{
if (!complete)
{

View File

@@ -109,7 +109,7 @@ function CompletionContext(editor, name, offset)
this.message = null;
this.name = name || "";
this._completions = []; // FIXME
this.getKey = function (item, key) (typeof self.keys[key] == "function") ? self.keys[key].call(this, item) :
this.getKey = function (item, key) (typeof self.keys[key] == "function") ? self.keys[key].call(this, item.item) :
key in self.keys ? item.item[self.keys[key]]
: item.item[key];
}
@@ -225,17 +225,36 @@ CompletionContext.prototype = {
{
this.hasItems = true;
this._generate = arg;
liberator.dump(this.name + ": set generate()");
if (this.background && this.regenerate)
{
//**/ this.__i = (this.__i || 0) + 1;
//**/ let self = this;
//**/ function dump(msg) liberator.callInMainThread(function () liberator.dump(self.name + ":" + self.__i + ": " + msg));
//**/ dump("set generate() regenerating");
let lock = {};
this.cache.backgroundLock = lock;
this.incomplete = true;
liberator.callAsync(this, function () {
let items = this.generate();
let thread = this.getCache("backgroundThread", liberator.newThread);
//**/ dump(thread);
liberator.callAsync(thread, this, function () {
//**/ dump("In async");
if (this.cache.backgroundLock != lock)
{
//**/ dump("Lock !ok");
return;
}
let items = this.generate();
//**/ dump("Generated");
if (this.cache.backgroundLock != lock)
{
//**/ dump("Lock !ok");
return;
}
this.incomplete = false;
//**/ dump("completions=");
this.completions = items;
//**/ dump("completions==");
});
}
},
@@ -907,9 +926,9 @@ function Completion() //{{{
let compare = context.compare;
context.compare = function (a, b)
{
if (!isNaN(a.key) && !isNaN(b.key))
return a.key - b.key;
return isNaN(b.key) - isNaN(a.key) || compare(a, b);
if (!isNaN(a.item.key) && !isNaN(b.item.key))
return a.item.key - b.item.key;
return isNaN(b.item.key) - isNaN(a.item.key) || compare(a, b);
}
if (!context.anchored) // We've already listed anchored matches, so don't list them again here.
context.filters.push(function (item) util.compareIgnoreCase(item.text.substr(0, this.filter.length), this.filter));
@@ -1457,7 +1476,7 @@ function Completion() //{{{
let prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
context.title = ["Firefox Preference", "Value"];
context.keys = { text: function (item) item.item, description: function (item) options.getPref(item.item) };
context.keys = { text: function (item) item, description: function (item) options.getPref(item) };
context.completions = prefs.getChildList("", { value: 0 });
},

View File

@@ -49,7 +49,7 @@ function AutoCommands() //{{{
"stringlist", "",
{
completer: function () config.autocommands.concat([["all", "All events"]]),
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["focuscontent", "fc"],
@@ -808,7 +808,7 @@ function Events() //{{{
// make sure the page is stopped before starting to play the macro
try
{
getWebNavigation().stop(nsIWebNavigation.STOP_ALL);
window.getWebNavigation().stop(nsIWebNavigation.STOP_ALL);
}
catch (e) {}
@@ -1321,13 +1321,13 @@ function Events() //{{{
// {
// //alert(command_line.value.substring(0, command_line.selectionStart));
// command_line.value = command_line.value.substring(0, command_line.selectionStart) +
// readFromClipboard() +
// window.readFromClipboard() +
// command_line.value.substring(command_line.selectionEnd, command_line.value.length);
// alert(command_line.value);
// }
// //else
// // {
// // openURLs(readFromClipboard());
// // openURLs(window.readFromClipboard());
// // }
// return true;
// } }}}

View File

@@ -328,15 +328,15 @@ function Hints() //{{{
if (!followFirst)
return false; // no return hit; don't examine uniqueness
// OK. return hit. But there's more than one hint. And
// OK. return hit. But there's more than one hint, and
// there's no tab-selected current link. Do not follow in mode 2
if ((options["followhints"] == 2) && validHints.length > 1 && !hintNumber)
if (options["followhints"] == 2 && validHints.length > 1 && !hintNumber)
return liberator.beep();
}
if (!followFirst)
{
var firstHref = validHints[0].getAttribute("href") || null;
let firstHref = validHints[0].getAttribute("href") || null;
if (firstHref)
{
if (validHints.some(function (e) e.getAttribute("href") != firstHref))
@@ -551,7 +551,7 @@ function Hints() //{{{
"string", DEFAULT_HINTTAGS);
options.add(["hinttimeout", "hto"],
"Automatically follow non unique numerical hint",
"Timeout before automatically following a non-unique numerical hint",
"number", 0,
{ validator: function (value) value >= 0 });
@@ -560,7 +560,14 @@ function Hints() //{{{
// better one right now.
"Change the behaviour of <Return> in hint mode",
"number", 0,
{ validator: function (value) value >= 0 && value < 3 });
{
completer: function () [
["0", "Follow the first hint as soon as typed text uniquely identifies it. Follow the selected hint on [m]<Return>[m]."],
["1", "Follow the selected hint on [m]<Return>[m]."],
["2", "Follow the selected hint on [m]<Return>[m] only it's been [m]<Tab>[m]-selected."]
],
validator: function (value) Option.validateCompleter
});
options.add(["hintmatching", "hm"],
"How links are matched",
@@ -570,7 +577,7 @@ function Hints() //{{{
{
return [[m, ""] for each (m in ["contains", "wordstartswith", "firstletters", "custom"])];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["wordseparators", "wsp"],

View File

@@ -76,7 +76,7 @@ const liberator = (function () //{{{
}
catch (e)
{
toJavaScriptConsole();
window.toJavaScriptConsole();
liberator.reportError(e);
}
}
@@ -135,7 +135,7 @@ const liberator = (function () //{{{
["b", "Bookmark bar"]
].concat(!liberator.has("tabs") ? [] : tabopts);
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["helpfile", "hf"],
@@ -648,17 +648,18 @@ const liberator = (function () //{{{
return false; // so you can do: if (...) return liberator.beep();
},
callAsync: function (self, func)
newThread: function () threadManager.newThread(0),
callAsync: function (thread, self, func)
{
let thread = threadManager.newThread(0);
hread = thread || threadManager.newThread(0);
thread.dispatch(new Runnable(self, func, Array.slice(arguments, 2)), thread.DISPATCH_NORMAL);
},
// be sure to call GUI related methods like alert() or dump() ONLY in the main thread
callFunctionInThread: function (thread, func)
{
if (!thread)
thread = threadManager.newThread(0);
thread = thread || threadManager.newThread(0);
// DISPATCH_SYNC is necessary, otherwise strange things will happen
thread.dispatch(new Runnable(null, func, Array.slice(arguments, 2)), thread.DISPATCH_SYNC);
@@ -1026,54 +1027,54 @@ const liberator = (function () //{{{
if (urls.length == 0)
return false;
if (liberator.forceNewTab && liberator.has("tabs"))
where = liberator.NEW_TAB;
else if (!where || !liberator.has("tabs"))
where = liberator.CURRENT_TAB;
var url = typeof urls[0] == "string" ? urls[0] : urls[0][0];
var postdata = typeof urls[0] == "string" ? null : urls[0][1];
var whichwindow = window;
// decide where to load the first url
switch (where)
function open(urls, where)
{
case liberator.CURRENT_TAB:
getBrowser().loadURIWithFlags(url, null, null, null, postdata);
break;
let url = Array.concat(urls)[0];
let postdata = Array.concat(urls)[1];
let whichwindow = window;
case liberator.NEW_TAB:
var firsttab = getBrowser().addTab(url, null, null, postdata);
getBrowser().selectedTab = firsttab;
break;
// decide where to load the first url
switch (where)
{
case liberator.CURRENT_TAB:
getBrowser().loadURIWithFlags(url, null, null, null, postdata);
break;
case liberator.NEW_BACKGROUND_TAB:
getBrowser().addTab(url, null, null, postdata);
break;
case liberator.NEW_BACKGROUND_TAB:
case liberator.NEW_TAB:
if (!liberator.has("tabs"))
open(urls, liberator.NEW_WINDOW);
case liberator.NEW_WINDOW:
window.open();
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
whichwindow = wm.getMostRecentWindow("navigator:browser");
whichwindow.loadURI(url, null, postdata);
break;
let tab = getBrowser().addTab(url, null, null, postdata);
if (where == liberator.NEW_TAB)
getBrowser().selectedTab = tab;
break;
default:
liberator.echoerr("Exxx: Invalid 'where' directive in liberator.open(...)");
return false;
case liberator.NEW_WINDOW:
const wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
window.open();
whichwindow = wm.getMostRecentWindow("navigator:browser");
whichwindow.loadURI(url, null, postdata);
break;
default:
liberator.echoerr("Exxx: Invalid 'where' directive in liberator.open(...)");
return false;
}
}
// only load more than one url if we have tab support
if (!liberator.has("tabs"))
return true;
if (liberator.forceNewTab)
where = liberator.NEW_TAB;
else if (!where)
where = liberator.CURRENT_TAB;
// all other URLs are always loaded in background
for (let i = 1; i < urls.length; i++)
for (let [i, url] in Iterator(urls))
{
url = typeof urls[i] == "string" ? urls[i] : urls[i][0];
postdata = typeof urls[i] == "string" ? null : urls[i][1];
whichwindow.getBrowser().addTab(url, null, null, postdata);
open(url, where);
if (i == 0 && !liberator.has("tabs"))
break;
where = liberator.NEW_BACKGROUND_TAB;
}
return true;
@@ -1101,7 +1102,7 @@ const liberator = (function () //{{{
.getService(nsIAppStartup)
.quit(nsIAppStartup.eForceQuit);
else
goQuitApplication();
window.goQuitApplication();
},
reportError: function (error)

View File

@@ -218,7 +218,7 @@ function Mail() //{{{
return value;
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
/*options.add(["threads"],
@@ -271,7 +271,7 @@ function Mail() //{{{
mappings.add(myModes, ["d", "<Del>"],
"Move mail to Trash folder",
function () { goDoCommand("cmd_delete"); });
function () { window.goDoCommand("cmd_delete"); });
mappings.add(myModes, ["j", "<Right>"],
"Select next message",
@@ -351,19 +351,19 @@ function Mail() //{{{
mappings.add(myModes, ["r"],
"Reply to sender",
function () { goDoCommand("cmd_reply"); });
function () { window.goDoCommand("cmd_reply"); });
mappings.add(myModes, ["R"],
"Reply to all",
function () { goDoCommand("cmd_replyall"); });
function () { window.goDoCommand("cmd_replyall"); });
mappings.add(myModes, ["f"],
"Forward message",
function () { goDoCommand("cmd_forward"); });
function () { window.goDoCommand("cmd_forward"); });
mappings.add(myModes, ["F"],
"Forward message inline",
function () { goDoCommand("cmd_forwardInline"); });
function () { window.goDoCommand("cmd_forwardInline"); });
// SCROLLING
mappings.add(myModes, ["<Down>"],
@@ -526,11 +526,11 @@ function Mail() //{{{
mappings.add(myModes, ["zr", "zR"],
"Expand all threads",
function () { goDoCommand("cmd_expandAllThreads"); });
function () { window.goDoCommand("cmd_expandAllThreads"); });
mappings.add(myModes, ["zm", "zM"],
"Collapse all threads",
function () { goDoCommand("cmd_collapseAllThreads"); });
function () { window.goDoCommand("cmd_collapseAllThreads"); });
mappings.add(myModes, ["<C-i>"],
"Go forward",
@@ -728,7 +728,7 @@ function Mail() //{{{
commands.add(["empty[trash]"],
"Empty trash of the current account",
function () { goDoCommand("cmd_emptyTrash"); },
function () { window.goDoCommand("cmd_emptyTrash"); },
{ argCount: "0" });
commands.add(["get[messages]"],

View File

@@ -298,7 +298,7 @@ function Mappings() //{{{
addUserMap: function (modes, keys, description, action, extra)
{
keys = keys.map(function (key) expandLeader(key));
keys = keys.map(expandLeader);
var map = new Map(modes, keys, description || "User defined mapping", action, extra);
// remove all old mappings to this key sequence

View File

@@ -53,23 +53,23 @@ const config = { //{{{
dialogs: [
["about", "About Thunderbird",
function () { openAboutDialog(); }],
function () { window.openAboutDialog(); }],
["addons", "Manage Add-ons",
function () { openAddonsMgr(); }],
function () { window.openAddonsMgr(); }],
["addressbook", "Address book",
function () { toAddressBook(); }],
function () { window.toAddressBook(); }],
["checkupdates", "Check for updates",
function () { checkForUpdates(); }],
function () { window.checkForUpdates(); }],
/*["cleardata", "Clear private data",
function () { Components.classes[GLUE_CID].getService(Components.interfaces.nsIBrowserGlue).sanitize(window || null); }],*/
["console", "JavaScript console",
function () { toJavaScriptConsole(); }],
function () { window.toJavaScriptConsole(); }],
/*["customizetoolbar", "Customize the Toolbar",
function () { BrowserCustomizeToolbar(); }],*/
["dominspector", "DOM Inspector",
function () { inspectDOMDocument(content.document); }],
function () { window.inspectDOMDocument(content.document); }],
["downloads", "Manage Downloads",
function () { toOpenWindowByType('Download:Manager', 'chrome://mozapps/content/downloads/downloads.xul', 'chrome,dialog=no,resizable'); }],
function () { window.toOpenWindowByType('Download:Manager', 'chrome://mozapps/content/downloads/downloads.xul', 'chrome,dialog=no,resizable'); }],
/*["import", "Import Preferences, Bookmarks, History, etc. from other browsers",
function () { BrowserImport(); }],
["openfile", "Open the file selector dialog",
@@ -87,9 +87,9 @@ const config = { //{{{
["print", "Show print dialog",
function () { PrintUtils.print(); }],
["saveframe", "Save frame to disk",
function () { saveFrameDocument(); }],
function () { window.saveFrameDocument(); }],
["savepage", "Save page to disk",
function () { saveDocument(window.content.document); }],
function () { window.saveDocument(window.content.document); }],
/*["searchengines", "Manage installed search engines",
function () { openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }],
["selectionsource", "View selection source",
@@ -135,11 +135,11 @@ const config = { //{{{
mappings.add([modes.COMPOSE],
["y"], "Send message now",
function () { goDoCommand("cmd_sendNow"); });
function () { window.goDoCommand("cmd_sendNow"); });
mappings.add([modes.COMPOSE],
["Y"], "Send message later",
function () { goDoCommand("cmd_sendLater"); });
function () { window.goDoCommand("cmd_sendLater"); });
// FIXME: does not really work reliably
mappings.add([modes.COMPOSE],

View File

@@ -281,6 +281,16 @@ Option.prototype = {
return "E474: Invalid argument: " + values;
this.setValues(newValue, scope);
}
};
// TODO: Run this by default?
Option.validateCompleter = function (values)
{
let context = CompletionContext("");
let res = this.completer(context);
if (!res)
res = context.allItems.map(function (item) [item.text]);
return Array.concat(values).every(
function (value) res.some(function (item) item[0] == value));
}; //}}}
function Options() //{{{
@@ -504,7 +514,7 @@ function Options() //{{{
}
else
{
openPreferences();
window.openPreferences();
}
},
{
@@ -942,17 +952,6 @@ function Options() //{{{
return ret;
},
// TODO: Run this by default?
validateCompleter: function (values)
{
let context = CompletionContext("");
let res = this.completer(context);
if (!res)
res = context.allItems.map(function (item) [item.text]);
return Array.concat(values).every(
function (value) res.some(function (item) item[0] == value));
},
get store() storage.options,
getPref: function (name, forcedDefault)

View File

@@ -130,14 +130,12 @@ function Tabs() //{{{
{
tabStrip.collapsed = true;
}
else if (value == 1)
{
options.setPref("browser.tabStrip.autoHide", true);
tabStrip.collapsed = false;
}
else
{
options.setPref("browser.tabStrip.autoHide", false);
let pref = "browser.tabStrip.autoHide";
if (options.getPref(pref) == null)
pref = "browser.tabs.autoHide";
options.setPref(pref, value == 1);
tabStrip.collapsed = false;
}
@@ -151,7 +149,7 @@ function Tabs() //{{{
["2", "Always show tab bar"]
];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
if (config.name == "Vimperator")
@@ -169,7 +167,7 @@ function Tabs() //{{{
["paste", "P and gP mappings"]
];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["newtab"],
@@ -187,7 +185,7 @@ function Tabs() //{{{
["prefs", ":pref[erences]! or :prefs! command"]
];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["popups", "pps"],
@@ -217,7 +215,7 @@ function Tabs() //{{{
["4", "Open in the same tab unless it has a specific requested size"]
];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
// TODO: Add option, or only apply when go~=[nN]
styles.addSheet("tab-binding", "chrome://browser/content/browser.xul",
@@ -361,7 +359,7 @@ function Tabs() //{{{
},
{
argCount: "+",
completer: function (context) completion.ex(context.filter),
completer: function (context) completion.ex(context),
literal: 0
});
@@ -583,53 +581,37 @@ function Tabs() //{{{
function (args)
{
let count = args.count;
args = args.string;
args = args[0]
if (count < 1)
count = 1;
if (args)
{
let ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
let undoItems = eval("(" + ss.getClosedTabData(window) + ")");
let found = false;
for (let i = 0; i < undoItems.length; i++)
count = 0;
for (let [i, item] in Iterator(tabs.closedTabs))
{
if (undoItems[i].state.entries[0].url == args)
if (item.state.entries[0].url == args)
{
count = i + 1;
found = true;
break;
}
}
if (!found)
if (!count)
{
liberator.echoerr("Exxx: No matching closed tab");
return;
}
}
undoCloseTab(count - 1);
window.undoCloseTab(count - 1);
},
{
completer: function (context)
{
// get closed-tabs from nsSessionStore
var ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
var undoItems = eval("(" + ss.getClosedTabData(window) + ")");
var completions = [];
for (let i = 0; i < undoItems.length; i++)
{
var url = undoItems[i].state.entries[0].url;
var title = undoItems[i].title;
if (completion.match([url, title], context.filter, false))
completions.push([url, title]);
}
return [0, completions];
context.keys = { text: function (item) item.state.entries[0].url, description: "title" };
context.completions = tabs.closedTabs;
},
count: true,
literal: 0
@@ -639,12 +621,8 @@ function Tabs() //{{{
"Undo closing of all closed tabs",
function (args)
{
let ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
let undoItems = eval("(" + ss.getClosedTabData(window) + ")");
for (let i = 0; i < undoItems.length; i++)
undoCloseTab(); // doesn't work with i as the index to undoCloseTab
for (let i in Itarator(tabs.closedTabs))
window.undoCloseTab(0);
},
{ argCount: "0" });
@@ -739,6 +717,15 @@ function Tabs() //{{{
return getBrowser().mTabContainer.selectedItem;
},
get closedTabs()
{
const json = Components.classes["@mozilla.org/dom/json;1"]
.createInstance(Components.interfaces.nsIJSON);
const ss = Components.classes["@mozilla.org/browser/sessionstore;1"]
.getService(Components.interfaces.nsISessionStore);
return json.decode(ss.getClosedTabData(window));
},
list: function (filter)
{
completion.listCompleter("buffer", filter);
@@ -764,7 +751,7 @@ function Tabs() //{{{
else
{
if (buffer.URL != "about:blank" ||
getWebNavigation().sessionHistory.count > 0)
window.getWebNavigation().sessionHistory.count > 0)
{
liberator.open("about:blank", liberator.NEW_BACKGROUND_TAB);
getBrowser().removeTab(tab);

View File

@@ -480,7 +480,7 @@ function CommandLine() //{{{
return engines.map(function (engine) [engine.alias, engine.description]);
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
// TODO: these belong in ui.js
@@ -489,7 +489,7 @@ function CommandLine() //{{{
"charlist", "sfl",
{
completer: function completer(filter) [k for each (k in completion.urlCompleters)],
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["wildcase", "wic"],
@@ -501,7 +501,7 @@ function CommandLine() //{{{
["match", "Case is always significant"],
["ignore", "Case is never significant"]
],
validator: options.validateCompleter
validator: Option.validateCompleter
});
options.add(["wildignore", "wig"],
@@ -538,7 +538,7 @@ function CommandLine() //{{{
["list:longest", "List all and complete common string"]
];
},
validator: options.validateCompleter,
validator: Option.validateCompleter,
checkHas: function (value, val)
{
let [first, second] = value.split(":", 2);
@@ -557,7 +557,7 @@ function CommandLine() //{{{
["sort", "Always sort the completion list"]
];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
/////////////////////////////////////////////////////////////////////////////}}}
@@ -1422,7 +1422,7 @@ function ItemList(id) //{{{
let haveCompletions = false;
let off = 0;
let end = endIndex;
let end = startIndex + maxItems;
function getRows(context)
{
function fix(n) Math.max(0, Math.min(len, n));
@@ -1430,7 +1430,9 @@ function ItemList(id) //{{{
let len = context.items.length;
let start = off;
off += len;
return [fix(offset - start), fix(endIndex - start)];
let res = [fix(offset - start), fix(end - start)];
res[2] = (context.incomplete && res[1] >= offset && off - 1 < end);
return res;
}
items.contextList.forEach(function fill_eachContext(context) {
@@ -1439,17 +1441,17 @@ function ItemList(id) //{{{
return;
haveCompletions = true;
let root = nodes.root
let items = nodes.items;
let [start, end, waiting] = getRows(context);
if (context.message)
nodes.message.textContent = context.message;
nodes.message.style.display = context.message ? "block" : "none";
nodes.waiting.style.display = context.incomplete ? "block" : "none";
nodes.waiting.style.display = waiting ? "block" : "none";
nodes.up.style.opacity = "0";
nodes.down.style.display = "none";
let root = nodes.root
let items = nodes.items;
let [start, end] = getRows(context);
for (let [i, row] in Iterator(context.getRows(start, end, doc)))
nodes[i] = row;
for (let [i, row] in util.Array.iterator2(nodes))
@@ -1616,7 +1618,7 @@ function StatusLine() //{{{
["2", "Always display status line"]
];
},
validator: options.validateCompleter
validator: Option.validateCompleter
});
/////////////////////////////////////////////////////////////////////////////}}}
@@ -1671,7 +1673,7 @@ function StatusLine() //{{{
// when session information is available, add [+] when we can go backwards
if (config.name == "Vimperator")
{
let sh = getWebNavigation().sessionHistory;
let sh = window.getWebNavigation().sessionHistory;
let modified = "";
if (sh.index > 0)
modified += "+";

View File

@@ -465,30 +465,26 @@ const util = { //{{{
{
let urls = str.split(new RegExp("\s*" + options["urlseparator"] + "\s*"));
for (let url = 0; url < urls.length; url++)
{
return urls.map(function (url) {
try
{
let file = io.getFile(urls[url]);
let file = io.getFile(url);
if (file.exists() && file.isReadable())
{
urls[url] = file.path;
continue;
}
return file.path;
}
catch (e) {}
// removes spaces from the string if it starts with http:// or something like that
if (/^\w+:\/\//.test(urls[url]))
urls[url] = urls[url].replace(/\s+/g, "");
if (/^\w+:\/\//.test(url))
url = url.replace(/\s+/g, "");
// strip each 'URL' - makes things simpler later on
urls[url] = urls[url].replace(/^\s+/, "").replace(/\s+$/, "");
url = url.replace(/^\s+|\s+$/, "");
// if the string doesn't look like a valid URL (i.e. contains a space
// or does not contain any of: .:/) try opening it with a search engine
// or keyword bookmark
if (/\s/.test(urls[url]) || !/[.:\/]/.test(urls[url]))
if (/\s/.test(url) || !/[.:\/]/.test(url))
{
// TODO: it would be clearer if the appropriate call to
// getSearchURL was made based on whether or not the first word was
@@ -497,27 +493,22 @@ const util = { //{{{
// like the comments below ;-)
// check for a search engine match in the string
let searchURL = bookmarks.getSearchURL(urls[url], false);
let searchURL = bookmarks.getSearchURL(url, false);
if (searchURL)
{
urls[url] = searchURL;
continue;
return searchURL;
}
else // no search engine match, search for the whole string in the default engine
{
searchURL = bookmarks.getSearchURL(urls[url], true);
searchURL = bookmarks.getSearchURL(url, true);
if (searchURL)
{
urls[url] = searchURL;
continue;
}
return searchURL;
}
}
// if we are here let Firefox handle the url and hope it does
// something useful with it :)
}
return urls;
return url;
});
},
xmlToDom: function xmlToDom(node, doc, nodes)

View File

@@ -54,41 +54,41 @@ const config = { //{{{
dialogs: [
["about", "About Firefox",
function () { openDialog("chrome://browser/content/aboutDialog.xul", "_blank", "chrome,dialog,modal,centerscreen"); }],
function () { window.openDialog("chrome://browser/content/aboutDialog.xul", "_blank", "chrome,dialog,modal,centerscreen"); }],
["addbookmark", "Add bookmark for the current page",
function () { PlacesCommandHook.bookmarkCurrentPage(true, PlacesUtils.bookmarksRootId); }],
["addons", "Manage Add-ons",
function () { BrowserOpenAddonsMgr(); }],
function () { window.BrowserOpenAddonsMgr(); }],
["bookmarks", "List your bookmarks",
function () { openDialog("chrome://browser/content/bookmarks/bookmarksPanel.xul", "Bookmarks", "dialog,centerscreen,width=600,height=600"); }],
function () { window.openDialog("chrome://browser/content/bookmarks/bookmarksPanel.xul", "Bookmarks", "dialog,centerscreen,width=600,height=600"); }],
["checkupdates", "Check for updates",
function () { checkForUpdates(); }],
function () { window.checkForUpdates(); }],
["cleardata", "Clear private data",
function () { Components.classes[GLUE_CID].getService(Components.interfaces.nsIBrowserGlue).sanitize(window || null); }],
["cookies", "List your cookies",
function () { toOpenWindowByType("Browser:Cookies", "chrome://browser/content/preferences/cookies.xul", "chrome,dialog=no,resizable"); }],
function () { window.toOpenWindowByType("Browser:Cookies", "chrome://browser/content/preferences/cookies.xul", "chrome,dialog=no,resizable"); }],
["console", "JavaScript console",
function () { toJavaScriptConsole(); }],
function () { window.toJavaScriptConsole(); }],
["customizetoolbar", "Customize the Toolbar",
function () { BrowserCustomizeToolbar(); }],
function () { window.BrowserCustomizeToolbar(); }],
["dominspector", "DOM Inspector",
function () { try { inspectDOMDocument(content.document); } catch (e) { liberator.echoerr("DOM Inspector extension not installed"); } }],
function () { try { window.inspectDOMDocument(content.document); } catch (e) { liberator.echoerr("DOM Inspector extension not installed"); } }],
["downloads", "Manage Downloads",
function () { toOpenWindowByType("Download:Manager", "chrome://mozapps/content/downloads/downloads.xul", "chrome,dialog=no,resizable"); }],
function () { window.toOpenWindowByType("Download:Manager", "chrome://mozapps/content/downloads/downloads.xul", "chrome,dialog=no,resizable"); }],
["history", "List your history",
function () { openDialog("chrome://browser/content/history/history-panel.xul", "History", "dialog,centerscreen,width=600,height=600"); }],
function () { window.openDialog("chrome://browser/content/history/history-panel.xul", "History", "dialog,centerscreen,width=600,height=600"); }],
["import", "Import Preferences, Bookmarks, History, etc. from other browsers",
function () { BrowserImport(); }],
function () { window.BrowserImport(); }],
["openfile", "Open the file selector dialog",
function () { BrowserOpenFileWindow(); }],
function () { window.BrowserOpenFileWindow(); }],
["pageinfo", "Show information about the current page",
function () { BrowserPageInfo(); }],
function () { window.BrowserPageInfo(); }],
["pagesource", "View page source",
function () { BrowserViewSourceOfDocument(content.document); }],
function () { window.BrowserViewSourceOfDocument(content.document); }],
["places", "Places Organizer: Manage your bookmarks and history",
function () { PlacesCommandHook.showPlacesOrganizer(ORGANIZER_ROOT_BOOKMARKS); }],
["preferences", "Show Firefox preferences dialog",
function () { openPreferences(); }],
function () { window.openPreferences(); }],
["printpreview", "Preview the page before printing",
function () { PrintUtils.printPreview(onEnterPrintPreview, onExitPrintPreview); }],
["printsetup", "Setup the page size and orientation before printing",
@@ -96,11 +96,11 @@ const config = { //{{{
["print", "Show print dialog",
function () { PrintUtils.print(); }],
["saveframe", "Save frame to disk",
function () { saveFrameDocument(); }],
function () { window.saveFrameDocument(); }],
["savepage", "Save page to disk",
function () { saveDocument(window.content.document); }],
function () { window.saveDocument(window.content.document); }],
["searchengines", "Manage installed search engines",
function () { openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }],
function () { window.openDialog("chrome://browser/content/search/engineManager.xul", "_blank", "chrome,dialog,modal,centerscreen"); }],
["selectionsource", "View selection source",
function () { buffer.viewSelectionSource(); }]
],