Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.Frontier.tools.windowTypes.commands.revert
on revert (adr = nil) { <<Revert a window. <<Changes: <<03/24/00; 7:24:20 PM by PBS <<This command was seriously broken -- now it's fixed. It works again for advanced items and stories. <<Fri, Jul 7, 2000 at 11:00:09 PM by AR <<Call any scripts in user.pike.commandCallbacks.revert <<If one of the scripts returns true, we're done <<07/24/00; 12:37:39 PM by PBS <<Handle reverting local XML outline documents. <<10/03/00; 6:39:09 PM by PBS <<Callbacks can be addresses. <<11/30/00; 12:17:04 AM by JES <<Dereference callback addresses in a try block in case a tool's odb is not opened if adr == nil { try { adr = window.frontmost ()} else { return (false)}}; on askForConfirmation (s) { return (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel"))}; on runCallbacks (adrcallbacks) { if defined (adrcallbacks^) { local (adrcallback); for adrcallback in adrcallbacks { try { //11/30/00 JES while typeOf (adrcallback^) == addressType { //follow addresses adrcallback = adrcallback^}; flConsumed = adrcallback^ (adr)}; if flConsumed { return (true)}}}; return (false)}; if runCallbacks (@user.tools.commandCallbacks.revert) { return (true)}; if system.environment.isRadio { if defined (user.pike.commandCallbacks) { if runCallbacks (@user.pike.commandCallbacks.revert) { return (true)}}}; bundle { //run the windowType script if it exists local (type); if window.attributes.getOne ("type", @type, adr) { local (adrtype); if Frontier.tools.windowTypes.findWindowType (type, @adrtype, adr) { if defined (adrtype^.revert) { if Frontier.tools.windowTypes.isWindowDirty (adr) { local (title = window.getTitle (adr)); window.attributes.getOne ("title", @title, adr); //we don't care if this doesn't work if askForConfirmation (title) { local (adrNewWindow); if adrtype^.revert (adr, @adrNewWindow) { <<lastSaved may already have been set by the windowType, but we do it here too just in case. window.attributes.setOne ("lastSaved", timeModified (adrNewWindow), adrNewWindow); return (true)}}}}}}}; return (false); }; <<bundle //old code for reverting Manila windows <<if adrItem!= nil <<local (flConsumed = false) <<if defined (user.pike.commandCallbacks.revert) <<local (adrcallback) <<for adrcallback in @user.pike.commandCallbacks.revert <<try //11/30/00 JES <<while typeOf (adrcallback^) == addressType //follow addresses <<adrcallback = adrcallback^ <<flConsumed = adrcallback^ (adrItem) <<if flConsumed <<break <<if not flConsumed <<on askForConfirmation (s) <<return (dialog.twoWay ("Discard all changes made to " + s + "?", "Discard", "Cancel")) << <<bundle //PBS 07/24/00: handle local outlines <<if pike.isLocalOutline (adrItem) <<local (adrTable = parentOf (adrItem^)) <<if defined (adrTable^.f) <<if file.exists (adrTable^.f) <<local (title = adrTable^.title) <<if askForConfirmation (title) <<window.close (adrItem) <<pike.commands.open (adrTable^.f) <<fileMenu.save () <<return (true) << <<local (windowType = pike.getWindowType (adrItem)) <<if windowType != "" <<local (adrTable = parentOf (adrItem^)) <<case windowType //can't revert "newStories" <<"advancedItems" <<if not askForConfirmation ("the " + adrTable^.iteminfo.type) <<return (false) <<local (handlerName = pike.advancedItemToHandlerName (adrTable^.itemInfo.type)) <<local (t = manila.[handlerName].get (@adrTable^.siteInfo)) <<adrTable^.itemInfo.body = string (t.body) <<pike.commands.editAdvancedItem (adrTable^.siteInfo, adrTable^.itemInfo, false) <<"savedStories" <<local (adrStory = @adrTable^.storyinfo) <<if not askForConfirmation ("\"" + adrStory^.subject + "\"") <<return (false) <<adrStory^ = manila.message.get (@adrTable^.siteinfo, adrStory^.msgnum) <<if defined (adrStory^.bodyType) <<if string.lower (adrStory^.bodyType) == "text/x-outline-tabbed" <<adrStory^.body = string (adrStory^.outline) <<pike.commands.editStory (adrTable^.siteInfo, adrTable^.storyInfo, false) << <<fileMenu.save () << <<return (true) bundle { //debugging revert (window.frontmost ())}
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.