mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-04-23 17:06:16 -04:00
first-commit
This commit is contained in:
commit
325c322a27
207 changed files with 35989 additions and 0 deletions
134
doc/jsdoc-toolkit/app/frame/Opt.js
Normal file
134
doc/jsdoc-toolkit/app/frame/Opt.js
Normal file
|
@ -0,0 +1,134 @@
|
|||
/** @namespace */
|
||||
Opt = {
|
||||
/**
|
||||
* Get commandline option values.
|
||||
* @param {Array} args Commandline arguments. Like ["-a=xml", "-b", "--class=new", "--debug"]
|
||||
* @param {object} optNames Map short names to long names. Like {a:"accept", b:"backtrace", c:"class", d:"debug"}.
|
||||
* @return {object} Short names and values. Like {a:"xml", b:true, c:"new", d:true}
|
||||
*/
|
||||
get: function(args, optNames) {
|
||||
var opt = {"_": []}; // the unnamed option allows multiple values
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
var arg = new String(args[i]);
|
||||
var name;
|
||||
var value;
|
||||
if (arg.charAt(0) == "-") {
|
||||
if (arg.charAt(1) == "-") { // it's a longname like --foo
|
||||
arg = arg.substring(2);
|
||||
var m = arg.split("=");
|
||||
name = m.shift();
|
||||
value = m.shift();
|
||||
if (typeof value == "undefined") value = true;
|
||||
|
||||
for (var n in optNames) { // convert it to a shortname
|
||||
if (name == optNames[n]) {
|
||||
name = n;
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // it's a shortname like -f
|
||||
arg = arg.substring(1);
|
||||
var m = arg.split("=");
|
||||
name = m.shift();
|
||||
value = m.shift();
|
||||
if (typeof value == "undefined") value = true;
|
||||
|
||||
for (var n in optNames) { // find the matching key
|
||||
if (name == n || name+'[]' == n) {
|
||||
name = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (name.match(/(.+)\[\]$/)) { // it's an array type like n[]
|
||||
name = RegExp.$1;
|
||||
if (!opt[name]) opt[name] = [];
|
||||
}
|
||||
|
||||
if (opt[name] && opt[name].push) {
|
||||
opt[name].push(value);
|
||||
}
|
||||
else {
|
||||
opt[name] = value;
|
||||
}
|
||||
}
|
||||
else { // not associated with any optname
|
||||
opt._.push(args[i]);
|
||||
}
|
||||
}
|
||||
return opt;
|
||||
}
|
||||
}
|
||||
|
||||
/*t:
|
||||
plan(11, "Testing Opt.");
|
||||
|
||||
is(
|
||||
typeof Opt,
|
||||
"object",
|
||||
"Opt is an object."
|
||||
);
|
||||
|
||||
is(
|
||||
typeof Opt.get,
|
||||
"function",
|
||||
"Opt.get is a function."
|
||||
);
|
||||
|
||||
var optNames = {a:"accept", b:"backtrace", c:"class", d:"debug", "e[]":"exceptions"};
|
||||
var t_options = Opt.get(["-a=xml", "-b", "--class=new", "--debug", "-e=one", "-e=two", "foo", "bar"], optNames);
|
||||
|
||||
is(
|
||||
t_options.a,
|
||||
"xml",
|
||||
"an option defined with a short name can be accessed by its short name."
|
||||
);
|
||||
|
||||
is(
|
||||
t_options.b,
|
||||
true,
|
||||
"an option defined with a short name and no value are true."
|
||||
);
|
||||
|
||||
is(
|
||||
t_options.c,
|
||||
"new",
|
||||
"an option defined with a long name can be accessed by its short name."
|
||||
);
|
||||
|
||||
is(
|
||||
t_options.d,
|
||||
true,
|
||||
"an option defined with a long name and no value are true."
|
||||
);
|
||||
|
||||
is(
|
||||
typeof t_options.e,
|
||||
"object",
|
||||
"an option that can accept multiple values is defined."
|
||||
);
|
||||
|
||||
is(
|
||||
t_options.e.length,
|
||||
2,
|
||||
"an option that can accept multiple values can have more than one value."
|
||||
);
|
||||
|
||||
is(
|
||||
t_options.e[1],
|
||||
"two",
|
||||
"an option that can accept multiple values can be accessed as an array."
|
||||
);
|
||||
|
||||
is(
|
||||
typeof t_options._,
|
||||
"object",
|
||||
"the property '_' is defined for unnamed options."
|
||||
);
|
||||
|
||||
is(
|
||||
t_options._[0],
|
||||
"foo",
|
||||
"the property '_' can be accessed as an array."
|
||||
);
|
||||
*/
|
Loading…
Add table
Add a link
Reference in a new issue