We can share worldoutline templates and glossaries, now we can share collections of menus. They all work the same way.
There's a new table at config.worldoutline.menuPaths. It has one initial item path001 which points to this menu collection.
Over the couple of years this was in development, we tried a lot of ways to specify a menu for a worldoutline web page. They should all still work. The new paths-based way is the futuristic one, but we're still supporting the old ways.
Suppose we're searching for a menu named bullsmenu.
1. First we look for a root named "menus" on the current server. If we find it, we look at the top level of that outline for a headline with the text bullsmenu. If we find it, that's the outline we use for the menu.
2. We see if the menu name begins with http://. If it does, that's the url of the OPML file we look in.
3. We look for a root on the current machine whose name is bullsmenu. If we find it, the url of the OPML file is the one we look in.
4. If we have the url of an OPML file, we read the file and look for a top-level item with the text bullsmenu.
5. Finally, we loop over the menuPaths table, reading each OPML file and looking for a top-level item with the text bullsmenu. This is the step that was just added.
If all these methods fail we fail with a scripterror.
It allows you to create menus that can be accessed from outlines on all your servers. If you only have one server, this means that if you should ever add a second, you won't have to replicate all your menus. We already have these features for templates and glossaries.
It pays, if you're thinking long-term, to systematize the management of these resources. And as a platform provider I like it because it's easy for me to broadcast new features and still allow sysops and users to override them. It's a layered approach to development.
Further, it has stood the test of time. We did naming in Frontier this way, many years ago -- and it's efficient, and I can say I've never wanted anything more from it than it does. That's where you like to get to with this stuff. :-)
worldOutlineSuite.init
worldOutlineSuite.roots.viewMenu