Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.bookmarksMenu.init
if not defined (user.bookmarksMenu) { new (tableType, @user.bookmarksMenu)}; bundle { //init callbacks if not defined (user.callbacks.addBookmark) { new (tableType, @user.callbacks.addBookmark)}}; <<if system.environment.isRadio <<This should really be initted by ported Manila editing code, but since that hasn't happened yet, I'm doing it here. <<local (adrScript = @user.callbacks.addBookmark.manilaWindow) <<if not defined (adrScript^) <<local (s = "on manila (adr, adrLogic, adrTitle)") <<s = s + "\r\ttry {return (suites.playlist.manila.addBookmark (adr, adrLogic, adrTitle))}" <<s = s + "\r\treturn (false)" <<script.newScriptObject (s, adrScript) bundle { //init boilerplate if not defined (user.bookmarksMenu.boilerplate) { if defined (user.playlist.boilerplate.outlines) { user.bookmarksMenu.boilerplate = user.playlist.boilerplate.outlines} else { new (tableType, @user.bookmarksMenu.boilerplate)}}}; bundle { //init menu local (flOpmlEditor = false); if defined (system.environment.isOpmlEditor) { flOpmlEditor = system.environment.isOpmlEditor}; if flOpmlEditor { if not defined (user.bookmarksMenu.menu) { user.bookmarksMenu.menu = bookmarksMenu.virginMenu}} else { local (flPatchBookmarkScripts = false, flFreshMenus = false, adrOriginalMenu); bundle { //copy the original menu and set flags for fresh menus and script patching if defined (user.menus.bookmark) { if typeOf (user.menus.bookmark) == menuBarType { adrOriginalMenu = @user.menus.bookmark}}; if defined (user.menus.bookmarkMenu) { if typeOf (user.menus.bookmarkMenu) == menuBarType { adrOriginalMenu = @user.menus.bookmarkMenu}}; if adrOriginalMenu != nil { //copy original menu to user.bookmarksMenu.menu, and make a backup at scratchpad.backupBookmarksMenu user.bookmarksMenu.menu = adrOriginalMenu^; scratchpad.backupBookmarksMenu = adrOriginalMenu^; delete (adrOriginalMenu); user.menus.bookmark = @user.bookmarksMenu.menu; flPatchBookmarkScripts = true; flFreshMenus = true}; if not defined (user.bookmarksMenu.data) { new (tableType, @user.bookmarksMenu.data)}; if not defined (user.bookmarksMenu.data.flInstalled) { user.bookmarksMenu.data.flInstalled = false}; if not user.bookmarksMenu.data.flInstalled { flPatchBookmarkScripts = true}}; if not defined (user.bookmarksMenu.menu) { user.bookmarksMenu.menu = bookmarksMenu.virginMenu; flFreshMenus = true}; if not defined (user.menus.bookmark) { user.menus.bookmark = @user.bookmarksMenu.menu; flFreshMenus = true}; if flPatchBookmarkScripts { on patchScript (s) { local (call = string.lower (string.trimWhiteSpace (string.nthField (s, '(', 1)))); case call { "playlist.bookmark.openobject" { s = string.replace (s, "playlist.bookmark.openObject", "bookmarksMenu.openObject", false)}; "playlist.manila.openmessageforediting" { s = string.replace (s, "playlist.manila.openMessageForEditing", "Frontier.tools.windowTypes.commands.openManilaMessage", false)}; "playlist.manila.commands.openmanilasite" { s = string.replace (s, "playlist.manila.commands.openManilaSite", "Frontier.tools.windowTypes.commands.openManilaSite", false)}; "playlist.manila.opentemplateforediting" { s = string.replace (s, "playlist.manila.openTemplateForEditing", "Frontier.tools.windowTypes.commands.openManilaTemplate", false)}; "playlist.bookmark.openfile" { s = string.replace (s, "playlist.bookmark.openFile", "bookmarksMenu.openFile", false)}; "playlist.bookmark.insertboilerplateinoutline" { s = string.replace (s, "playlist.bookmark.insertBoilerplateInOutline", "bookmarksMenu.insertBoilerplateInOutline", false)}; "playlist.manila.openhomepageforediting" { s = string.replace (s, "playlist.manila.openHomePageForEditing", "Frontier.tools.windowTypes.commands.openManilaSite", false)}; "system.menus.scripts.addbookmarkcommand"; //the Frontier version of the add command "playlist.bookmark.add" { //the Radio version of the add command s = "bookmarksMenu.add ()"}; "edit" { //edit the menu local (param = string.nthField (string.nthField (s, '(', 2), ')', 1)); case string.lower (param) { "@user.menus.bookmarkmenu"; "@user.menus.bookmark" { s = "edit (@user.bookmarksMenu.menu)"}}}; "playlist.bookmark.addboilerplateitem" { //add bolierplate command s = "bookmarksMenu.addBoilerplateItem ()"}}; <<bundle //old code <<s = string.replace (s, "user.menus.bookmark", "user.bookmarksMenu.menu", false) <<s = string.replace (s, "playlist.bookmark", "bookmarksMenu", false) return (s)}; local (oldTarget = target.set (@user.bookmarksMenu.menu)); op.firstSummit (); op.fullExpand (); loop { //loop over the menu, and patch all the scripts local (localScript); if menu.getScript (@localScript) { //patch the script script.newScriptObject (patchScript (string (localScript)), @localScript); menu.setScript (@localScript)}; if not op.go (flatdown, 1) { break}}; target.set (oldTarget)}; if flFreshMenus { menu.noSuite ()}; user.bookmarksMenu.data.flInstalled = true; if defined (user.bookmarksMenu.flInstalled) { delete (@user.bookmarksMenu.flInstalled)}}}; <<bundle //copy opRightClickCallback <<if not defined (user.bookmarksMenu.flInstalled) <<user.bookmarksMenu.flInstalled = true <<if not user.bookmarksMenu.flInstalled <<Frontier.tools.opRightClickCallback will be released separately once builtins.bookmarksMenu is in distribution. Then this whole bundle should be deleted. <<Frontier.tools.opRightClickCallback = bookmarksMenu.data.["for Frontier.tools"].opRightClickCallback return (@user.bookmarksMenu.menu)
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.