new object $help_node: $has_name; var $foundation edit_types = ["help"]; var $has_name name = ['uniq, "help_node", "the help_node"]; var $help_node body = 0; var $help_node group = 0; var $help_node holder = 0; var $help_node index = 0; var $help_node links = 0; var $help_node nolist = 1; var $root created_on = 796268969; var $root defined_settings = #[["nolist", #[['get, ['nolist]], ['set, ['set_nolist]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["group", #[['get, ['group]], ['set, ['set_group]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]], ["index", #[['get, ['get_index_setting]], ['set, ['set_index_setting]], ['parse, ['parse_index_setting]], ['format, ['format_index]]]], ["holder", #[['get, ['get_holder_setting]], ['set, ['set_holder_setting]], ['parse, ['is_boolean]], ['format, ['format_boolean]]]]]; var $root fertile = 1; var $root flags = ['methods, 'code, 'variables, 'core]; var $root help_node = $help_obj_help_node; var $root inited = 1; var $root managed = [$help_node]; var $root manager = $help_node; var $root trusted_by = [$help_index_driver, $help_index_core, $help_index_cmds, $help_index_subsystem, $help_index_function, $help_index_objects, $help_updates, $help_sys_weather, $help_sys_weather_attributes, $help_sys_climate, $help_weather_system]; public method ._edit_help_callback() { arg text, client_data; (> .perms(caller(), $editor_reference) <); .set_body(text); return ['success, ["Help node body set."]]; }; protected method ._set_index() { arg i; if (index) (| index.del_help_node(this()) |); if (!i) { clear_var('index); return; } index = i; (> index.add_help_node(this()) <); }; public method .body() { return body; }; public method .edit_help() { var p; (> .perms(sender()) <); p = (.body()).uncompile(); (> sender().invoke_editor(this(), '_edit_help_callback, p, []) <); }; public method .format_index() { arg value; if (!value) return ""; return (((value.name()) + " INDEX (") + value) + ")"; }; protected method .get_holder_setting() { arg @args; return holder; }; protected method .get_index_setting() { arg @args; return index || 0; }; public method .group() { arg @args; return !group; }; public method .holder() { return holder; }; public method .html_node_name() { arg @this; var name, index, hname; if (this() == definer()) return ""; name = ((.parents())[1]).html_node_name(); if (this) hname = (.name()).word(1, "|"); else if (holder) hname = ("<i>" + ((.name()).word(1, "|"))) + "</i>"; else hname = ((("<a href=\"/bin/help?node=" + this()) + "\">") + ((.name()).word(1, "|"))) + "</a>"; if (!name) return hname; return (name + ": ") + hname; }; public method .index() { return index; }; public method .index_going_away() { (> .perms(caller(), $help_index) <); (| clear_var('index) |); }; root method .init_help_node() { links = #[]; .set_body(["This node isn't written yet"]); }; public method .links() { return links || #[]; }; public method .node_going_away() { var node; (> .perms(caller(), $help_node) <); node = sender(); // do something intelligent with the text body as well links = links.del(node); }; public method .node_name() { var name; if (this() == definer()) return ""; name = ((.parents())[1]).node_name(); if (!name) return (.name()).word(1, "|"); return (name + ": ") + ((.name()).word(1, "|")); }; public method .nolist() { arg @args; return nolist; // whether or not this node should be listed as a 'descendant' node of // its parent. }; protected method .parse_index_setting() { arg value, @args; var i; if (!value) return 0; if ((value[1]) == "$") { i = (> $object_lib.to_dbref(value) <); if (!(i.has_ancestor($help_index))) throw(~bad, ("\"" + (i.namef('ref))) + "\" is not a help index."); } else { value = strsed(value, " *index *", ""); if (!(i = $help_index.match_children(value))) throw(~bad, ("\"" + value) + "\" is not a help index."); } return i; }; public method .set_body() { arg new_body; var new_body, anchors, key, keys, values, value; (> .perms(sender()) <); // Compile a string into help ctext new_body = $compiler.compile_cml(new_body); body = new_body; anchors = (| new_body.get_var('links) |) || #[]; body = (<$ctext_frob, [body._ctext(), (| (body.vars()).del('links) |) || (body.vars())]>); keys = anchors.keys(); values = anchors.values(); links = #[]; for key in (keys) links = links.add(key, $object_lib.to_dbref(anchors[key])); if ((!(.has_ancestor($help_index))) && (!(this() == $help_updates))) $help_updates.touched(); }; protected method .set_group() { arg name, definer, value, @args; // invert it, more db friendly this way since 99% of the nodes want groups value = !value; if (value) group = value; else (| clear_var('group) |); }; protected method .set_holder_setting() { arg name, definer, value, @args; if (value) holder = 1; else if (holder) clear_var('holder); }; public method .set_index() { arg index; (> .perms(sender()) <); return (> ._set_index(index) <); }; protected method .set_index_setting() { arg name, definer, value, @args; ._set_index(value); }; public method .set_name() { arg new, @ignore; var old; if ("=" in new) throw(~perm, "You cannot have \"=\" in a help node name."); old = .name(); (> pass(new, 'prop) <); if (index) index.node_changed_name(old); }; protected method .set_nolist() { arg name, definer, value, @args; nolist = value; }; public method .small_name() { return ((.name()).word(1, "|")).word(1); }; public method .top_of_help_heirarchy() { return definer() == this(); }; public method .traverse() { var n, out; // traverse the higherarchy with a depth-first priority rather than width out = [this()]; for n in (children()) out += n.traverse(); return out; }; root method .uninit_help_node() { var obj; if (index) (| index.node_going_away() |); links = #[]; body = []; $help_updates.touched(); };