Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.Manila.windowTypes.types.manilaSite.close
on close (adr) {
<<Close a Manila site outline, checking it in if necessary.
local (atts);
if not window.attributes.getAll (@atts) { //return false if no atts
return (false)};
if atts.flReadOnly { //can't be saved -- return true
return (true)};
local (adrinfo = atts.adrSiteInfo);
local (username, password);
if manila.windowTypes.getUsernameAndPassword (adrinfo, @username, @password) {
manila.windowTypes.setUsernameAndPassword (adrinfo, username, password)}
else { //the user cancelled the password dialog -- return false
return (false)};
local (siteInfoTable = adrinfo^);
siteInfoTable.username = username;
siteInfoTable.password = password;
try { //try to check in the outline -- NOTE: this is not foolproof; see notes below
<<Here's the problem:
<<If the editorial outline has never been saved, then the server will always fault when trying to check it in.
<<We're not keeping track of whether the outline has ever been saved, because there's too much potential confusion.
<<The correct fix is to make the server-side more friendly: Don't error if the outline doesn't exist -- but that's not always going to be there.
<<So the situation in which this strategy is trouble is when the outline has never been saved, and there's a network error or a timeout.
<<It's not a big problem, since a non-existant object can't be checked out, but we may need to look out for this situation in the future...
manila.editorialOutline.checkIn (@siteInfoTable)};
return (true)}
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.