1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2025-12-23 09:17:59 +01:00

Sort methods in liberator.js, a bit

This commit is contained in:
Kris Maglione
2008-11-17 23:00:07 +00:00
parent 8cf49a0665
commit 36a2b4157c

View File

@@ -624,6 +624,34 @@ const liberator = (function () //{{{
return false; // so you can do: if (...) return liberator.beep(); return false; // so you can do: if (...) return liberator.beep();
}, },
// be sure to call GUI related methods like alert() or dump() ONLY in the main thread
callFunctionInThread: function (thread, func)
{
function CallbackEvent(func, args)
{
return {
QueryInterface: function (iid)
{
if (iid.equals(Components.interfaces.nsIRunnable) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_ERROR_NO_INTERFACE;
},
run: function ()
{
func.apply(window, args);
}
};
}
if (!thread)
thread = threadManager.newThread(0);
// DISPATCH_SYNC is necessary, otherwise strange things will happen
thread.dispatch(new CallbackEvent(func, Array.slice(arguments, 2)), thread.DISPATCH_SYNC);
},
// NOTE: "browser.dom.window.dump.enabled" preference needs to be set // NOTE: "browser.dom.window.dump.enabled" preference needs to be set
dump: function (message) dump: function (message)
{ {
@@ -639,6 +667,39 @@ const liberator = (function () //{{{
liberator.dump((msg || "") + (new Error()).stack); liberator.dump((msg || "") + (new Error()).stack);
}, },
echo: function (str, flags)
{
commandline.echo(str, commandline.HL_NORMAL, flags);
},
// TODO: Vim replaces unprintable characters in echoerr/echomsg
echoerr: function (str, flags)
{
flags |= commandline.APPEND_TO_MESSAGES;
if (typeof str == "object" && "echoerr" in str)
str = str.echoerr;
else if (str instanceof Error)
str = str.fileName + ":" + str.lineNumber + ": " + str;
if (options["errorbells"])
liberator.beep();
commandline.echo(str, commandline.HL_ERRORMSG, flags);
},
// TODO: add proper level constants
echomsg: function (str, verbosity, flags)
{
flags |= commandline.APPEND_TO_MESSAGES | commandline.FORCE_SINGLELINE;
if (verbosity == null)
verbosity = 0; // verbosity level is exclusionary
if (options["verbose"] >= verbosity)
commandline.echo(str, commandline.HL_INFOMSG, flags);
},
eval: function (str) eval: function (str)
{ {
const fileName = "chrome://liberator/content/liberator.js"; const fileName = "chrome://liberator/content/liberator.js";
@@ -665,6 +726,58 @@ const liberator = (function () //{{{
} }
}, },
// partial sixth level expression evaluation
// TODO: what is that really needed for, and where could it be used?
// Or should it be removed? (c) Viktor
// Better name? See other liberator.eval()
// I agree, the name is confusing, and so is the
// description --Kris
evalExpression: function (string)
{
string = string.toString().replace(/^\s*/, "").replace(/\s*$/, "");
var matches = string.match(/^&(\w+)/);
if (matches)
{
var opt = this.options.get(matches[1]);
if (!opt)
{
this.echoerr("E113: Unknown option: " + matches[1]);
return;
}
var type = opt.type;
var value = opt.getter();
if (type != "boolean" && type != "number")
value = value.toString();
return value;
}
// String
else if (matches = string.match(/^(['"])([^\1]*?[^\\]?)\1/))
{
if (matches)
return matches[2].toString();
else
{
this.echoerr("E115: Missing quote: " + string);
return;
}
}
// Number
else if (matches = string.match(/^(\d+)$/))
{
return parseInt(match[1], 10);
}
var reference = this.variableReference(string);
if (!reference[0])
this.echoerr("E121: Undefined variable: " + string);
else
return reference[0][reference[1]];
return;
},
// Execute an Ex command like str=":zoom 300" // Execute an Ex command like str=":zoom 300"
execute: function (str, modifiers) execute: function (str, modifiers)
{ {
@@ -731,115 +844,6 @@ const liberator = (function () //{{{
elem.focus(); elem.focus();
}, },
// partial sixth level expression evaluation
// TODO: what is that really needed for, and where could it be used?
// Or should it be removed? (c) Viktor
// Better name? See other liberator.eval()
evalExpression: function (string)
{
string = string.toString().replace(/^\s*/, "").replace(/\s*$/, "");
var matches = string.match(/^&(\w+)/);
if (matches)
{
var opt = this.options.get(matches[1]);
if (!opt)
{
this.echoerr("E113: Unknown option: " + matches[1]);
return;
}
var type = opt.type;
var value = opt.getter();
if (type != "boolean" && type != "number")
value = value.toString();
return value;
}
// String
else if (matches = string.match(/^(['"])([^\1]*?[^\\]?)\1/))
{
if (matches)
return matches[2].toString();
else
{
this.echoerr("E115: Missing quote: " + string);
return;
}
}
// Number
else if (matches = string.match(/^(\d+)$/))
{
return parseInt(match[1], 10);
}
var reference = this.variableReference(string);
if (!reference[0])
this.echoerr("E121: Undefined variable: " + string);
else
return reference[0][reference[1]];
return;
},
variableReference: function (string)
{
if (!string)
return [null, null, null];
var matches = string.match(/^([bwtglsv]):(\w+)/);
if (matches) // Variable
{
// Other variables should be implemented
if (matches[1] == "g")
{
if (matches[2] in this.globalVariables)
return [this.globalVariables, matches[2], matches[1]];
else
return [null, matches[2], matches[1]];
}
}
else // Global variable
{
if (string in this.globalVariables)
return [this.globalVariables, string, "g"];
else
return [null, string, "g"];
}
},
echo: function (str, flags)
{
commandline.echo(str, commandline.HL_NORMAL, flags);
},
// TODO: Vim replaces unprintable characters in echoerr/echomsg
echoerr: function (str, flags)
{
flags |= commandline.APPEND_TO_MESSAGES;
if (typeof str == "object" && "echoerr" in str)
str = str.echoerr;
else if (str instanceof Error)
str = str.fileName + ":" + str.lineNumber + ": " + str;
if (options["errorbells"])
liberator.beep();
commandline.echo(str, commandline.HL_ERRORMSG, flags);
},
// TODO: add proper level constants
echomsg: function (str, verbosity, flags)
{
flags |= commandline.APPEND_TO_MESSAGES | commandline.FORCE_SINGLELINE;
if (verbosity == null)
verbosity = 0; // verbosity level is exclusionary
if (options["verbose"] >= verbosity)
commandline.echo(str, commandline.HL_INFOMSG, flags);
},
// does this liberator extension have a certain feature? // does this liberator extension have a certain feature?
has: function (feature) config.features.indexOf(feature) >= 0, has: function (feature) config.features.indexOf(feature) >= 0,
@@ -1053,14 +1057,14 @@ const liberator = (function () //{{{
return true; return true;
}, },
pluginFiles: {},
// namespace for plugins/scripts. Actually (only) the active plugin must/can set a // namespace for plugins/scripts. Actually (only) the active plugin must/can set a
// v.plugins.mode = <str> string to show on v.modes.CUSTOM // v.plugins.mode = <str> string to show on v.modes.CUSTOM
// v.plugins.stop = <func> hooked on a v.modes.reset() // v.plugins.stop = <func> hooked on a v.modes.reset()
// v.plugins.onEvent = <func> function triggered, on keypresses (unless <esc>) (see events.js) // v.plugins.onEvent = <func> function triggered, on keypresses (unless <esc>) (see events.js)
plugins: plugins, plugins: plugins,
pluginFiles: {},
// quit liberator, no matter how many tabs/windows are open // quit liberator, no matter how many tabs/windows are open
quit: function (saveSession, force) quit: function (saveSession, force)
{ {
@@ -1243,6 +1247,32 @@ const liberator = (function () //{{{
while (flush && mainThread.hasPendingEvents()); while (flush && mainThread.hasPendingEvents());
}, },
variableReference: function (string)
{
if (!string)
return [null, null, null];
var matches = string.match(/^([bwtglsv]):(\w+)/);
if (matches) // Variable
{
// Other variables should be implemented
if (matches[1] == "g")
{
if (matches[2] in this.globalVariables)
return [this.globalVariables, matches[2], matches[1]];
else
return [null, matches[2], matches[1]];
}
}
else // Global variable
{
if (string in this.globalVariables)
return [this.globalVariables, string, "g"];
else
return [null, string, "g"];
}
},
get windows() get windows()
{ {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
@@ -1252,36 +1282,7 @@ const liberator = (function () //{{{
while (enumerator.hasMoreElements()) while (enumerator.hasMoreElements())
wa.push(enumerator.getNext()); wa.push(enumerator.getNext());
return wa; return wa;
},
// be sure to call GUI related methods like alert() or dump() ONLY in the main thread
callFunctionInThread: function (thread, func)
{
function CallbackEvent(func, args)
{
return {
QueryInterface: function (iid)
{
if (iid.equals(Components.interfaces.nsIRunnable) ||
iid.equals(Components.interfaces.nsISupports))
return this;
throw Components.results.NS_ERROR_NO_INTERFACE;
},
run: function ()
{
func.apply(window, args);
}
};
}
if (!thread)
thread = threadManager.newThread(0);
// DISPATCH_SYNC is necessary, otherwise strange things will happen
thread.dispatch(new CallbackEvent(func, Array.slice(arguments, 2)), thread.DISPATCH_SYNC);
} }
}; };
//}}} //}}}
})(); //}}} })(); //}}}