new object $help_index: $has_name, $registry, $help_node;
var $db database = #[];
var $has_name name = ['prop, "Index", "Index"];
var $help_index dirty = 1;
var $help_node body = <$ctext_frob, [[], #[]]>;
var $help_node holder = 1;
var $help_node links = #[];
var $help_node nolist = 0;
var $root created_on = 796268969;
var $root flags = ['methods, 'code, 'variables, 'core];
var $root inited = 1;
var $root managed = [$help_index];
var $root manager = $help_index;
public method .add_help_node() {
arg node;
var part;
if ((caller() != $help_node) && (!(.is_writable_by(caller()))))
throw(~perm, "Permission denied.");
for part in ((node.name()).explode("|"))
.insert(part, node);
};
public method .body() {
var key, out, body, col, db;
body = pass();
if (dirty || (!body)) {
(| clear_var('dirty) |);
db = .database();
out = ["{table cols=25%,25%,25%,25%:"];
for key in ((db.keys()).sort()) {
if (!col)
out += ["{tr:"];
out += [((("{td:{link node=" + (db[key])) + ":") + key) + "}}"];
if (col == 3) {
out += ["}"];
col = 0;
} else {
col++;
}
}
if (col != 0)
out += ["}}"];
else
out += ["}"];
.set_body(out);
body = pass();
}
return body;
};
root method .core_help_index(): nooverride {
.set_body("");
dirty++;
};
public method .del_help_node() {
arg node;
var part;
if ((!(caller() in [$help_node, definer()])) && ((!(.is_writable_by(sender()))) && (sender() != this())))
throw(~perm, "Permission denied.");
for part in ((node.name()).explode("|"))
.remove(part);
};
public method .html_node_name() {
arg @args;
return .node_name();
};
root method .init_help_index() {
.add_trusted($help_node);
};
public method .insert() {
arg name, obj;
(> pass(name, obj) <);
dirty++;
};
public method .node_changed_name() {
arg old;
var node, part;
(> .perms(caller(), $help_node) <);
node = sender();
for part in (old.explode("|"))
(| .remove(part) |);
for part in ((node.name()).explode("|"))
(| .insert(part, node) |);
};
public method .node_going_away() {
(> .perms(caller(), $help_node) <);
.del_help_node(sender());
};
public method .node_name() {
return (.name()) + " INDEX";
};
public method .remove() {
arg name;
(> pass(name) <);
dirty++;
};
public method .reset_index() {
var v, part, dbv;
(> .perms(sender()) <);
dirty++;
dbv = ((.database()).values()).compress();
.set_database(#[]);
for v in (dbv) {
if (valid(v)) {
for part in ((v.name()).explode("|"))
(| .insert(part, v) |);
}
}
};
public method .strip_key() {
arg key;
anticipate_assignment();
return key.strip("!#$%^&*()");
};
root method .uninit_help_index() {
var key;
for key in ((.database()).keys())
(.match_exact(key)).index_going_away();
};