pX3Vܹ^UV  4 @x ^X authorEvectors authorEmailstaff@evectors.it description4Share instant outlines with other community members. homePageUrlhttp://radiotools.evectors.it/name SharedOutline releaseDateversion1.0b1VGeneva A< .G0MRics#Dics#ics4ics4ics8ics8:BMP BM66(  f3f3̙f3fffff3ff333f3333f3f3f3̙f3fffff3ff333f3333f3f3̙̙̙f̙3̙̙̙f3fffff3ff333f3333f3fffff3fffffff3fff̙ffff3fffffffffff3ffff3f3f3ff3f33f3ffffff3ff333f3333333f33333̙33f3333f3f3f3ff33f3f3333333f3333333333f3333f3f3̙f3fffff3ff333f3333f3wUD"wUD"wUD"wwwUUUDDD""":LH$F macwindowsLFCharcoal ST| _LANDmac Right-click menu = SharedOutlineSuite.menuScripts.displayOwner () - p Geneva !pT$Tn  icon `rightClickMenu VGeneva z2*j.K4MRics#Dics#ics4ics4033033330333<3<ics8ics8:BMP BM66(  f3f3̙f3fffff3ff333f3333f3f3f3̙f3fffff3ff333f3333f3f3̙̙̙f̙3̙̙̙f3fffff3ff333f3333f3fffff3fffffff3fff̙ffff3fffffffffff3ffff3f3f3ff3f33f3ffffff3ff333f3333333f33333̙33f3333f3f3f3ff33f3f3333333f3333333333f3333f3f3̙f3fffff3ff333f3333f3wUD"wUD"wUD"wwwUUUDDD""":LH$K mac windows LFCharcoal ST _LANDmac Right-click menu = SharedOutlineSuite.menuScripts.displayOwner () - pGeneva !pXT$S  icon9rightClickMenumXGeneva 㬪㬲_LANDmac op.deleteSubs () Geneva V㰿LANDmac local (atts) op.attributes.getAll (@atts) bundle //if we aren't subscribed yet, ask whether we should do so now local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[atts.url]) if not defined (adrsub^) if window.frontmost () == @adrdata^.projectListOutline if op.level () == 1 if dialog.confirm ("You are not currently subscribed to this outline. Subscribe now?") SharedOutlineSuite.subscribeUrl (atts.url) else return local (olddisplay = op.getDisplay ()) op.setDisplay (false) Frontier.tools.data.nodeTypes.link.expand () bundle //get cloud info from cache local (adrcloud) if radio.outliner.getCloudInfoFromCache (atts.url, @adrcloud) local (adrdata = SharedOutlineSuite.init ()) adrdata^.subscriptions.[atts.url].cloudInfo = adrcloud^ if atts.bold //un-bold if neccessary local (s = op.getLineText ()) s = string.replace (s, "", "") s = string.replace (s, "", "") op.setLineText (s) op.attributes.setOne ("bold", false) op.setDisplay (olddisplay) X$Geneva ո_LANDmac op.attributes.getAll (@atts) if defined (atts.url) local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[atts.url]) if defined (adrsub^) edit (adrsub) X.09MRics#Dics#? P H$D&|$ !!!   ???????????????ics4ics4ics8ics8++++++:BMP BM66(  f3f3̙f3fffff3ff333f3333f3f3f3̙f3fffff3ff333f3333f3f3̙̙̙f̙3̙̙̙f3fffff3ff333f3333f3fffff3fffffff3fff̙ffff3fffffffffff3ffff3f3f3ff3f33f3ffffff3ff333f3333333f33333̙33f3333f3f3f3ff33f3f3333333f3333333333f3333f3f3̙f3fffff3ff333f3333f3wUD"wUD"wUD"wwwUUUDDD"""++++++:LH$0 macvwindowsL+Geneva T/B_LANDmac SharedOutlineSuite.commands.editOutline () LGeneva T&(_LANDmac local (url) if op.attributes.getOne ("url", @url) clipboard.putValue (url) 6Geneva TCN_LANDmac SharedOutlineSuite.commands.unsubscribeFromOutline () <4Charcoal ޸S_LANDmac Right-Click Menu Edit Copy URL Unsubscribe... - $= $ %p&DGeneva  pBk 0  ( 0< AM \collapse Mexpand getInfo icon #rightClickMenu '.ٸ $ >J aitCanEditOutlineElement itProtectedOutlineElement itSharedOutlineElement ( MGeneva ݸ_LANDmac on outlineChanged (url) return (SharedOutlineSuite.rpcOutlineChanged (url)) 9㹸 outlineChangedL)qVGeneva y2V MGeneva ݸ _LANDmac on outlineChanged (url) return (SharedOutlineSuite.rpcOutlineChanged (url)) =9㹸 outlineChanged*=Geneva ݝo|BLANDmac on boldenOutline (url) local (adrdata = SharedOutlineSuite.init ()) local (adroutline = @adrdata^.projectListOutline) local (adrsub = @adrdata^.subscriptions.[url]) local (oldTarget = target.set (adroutline)) local (oldCursor = op.getcursor ()) local (oldDisplay = op.getdisplay ()) op.setDisplay (false) op.firstSummit () loop local (atts) op.attributes.getAll (@atts) if defined (atts.type) if atts.type == "itSharedOutlineElement" if atts.url == url if not atts.bold op.setlinetext ("" + adrsub^.title + "") op.attributes.setOne ("bold", true) FIXME: play sound break if not op.go (down, 1) break op.setCursor (oldCursor) op.setDisplay (oldDisplay) target.set (oldTarget) r Geneva ʓO4;LANDmac local (localMenu = SharedOutlineSuite.virginServerMenu) local (oldTarget = target.set (@localMenu)) local (adrdata = SharedOutlineSuite.init ()) local (adrServersTable = @adrdata^.servers) local (i, ct = sizeOf (adrServersTable^), adrServer, name, logic) for i = 1 to ct adrServer = @adrServersTable^ [i] if typeOf (adrServer^) != tableType continue name = nameOf (adrServer^) local (menuItem = "=SharedOutlineSuite.menuScripts.displayServerName (\"" +name + "\")") logic = "SharedOutlineSuite.commands.setCurrentServer (\"" + name + "\")" menu.addMenuCommand (@localMenu, "Set Current Server", menuItem, logic) menu.addSubMenu (@SharedOutlineSuite.menu, "SharedOutline", @localmenu) try {target.set (oldTarget)} Frontier.tools.installSubMenu (@SharedOutlineSuite.menu) @Geneva VX _LANDmac thread.callScript (@SharedOutlineSuite.commands.newOutline, {}) +Geneva VJ _LANDmac SharedOutlineSuite.commands.editOutline () 2Geneva Vq _LANDmac SharedOutlineSuite.commands.subscribeToOutline () ?Geneva WθX_LANDmac thread.callScript (@SharedOutlineSuite.commands.editPrefs, {}) 8VǸ[  *6 LX g00001000 New... 4 00002000 Edit 400003000 Subscribe... 500004000 Prefs 6O<8VV  projectWindow7< ۹=& <Geneva  _LANDmac on startup () SharedOutlineSuite.startup () return (true) 62۹ startup8K6RN$۸  fileMenu8user9R 7\ cGeneva M8>Z' ^LANDmac try SharedOutlineSuite.rdcutils.maintain() else SharedOutlineSuite.rdcutils.openURL ("http://127.0.0.1:5335/SharedOutline/startTrial") return local (oldCursor = op.getCursor ()) local (oldDisplay = op.getDisplay ()) op.setDisplay (false) local (atts) loop op.attributes.getAll (@atts) if defined (atts.url) op.setDisplay (oldDisplay) op.collapse () break if not op.go (left, 1) op.setCursor (oldCursor) op.setDisplay (oldDisplay) speaker.beep () return local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[atts.url]) bundle //if we aren't subscribed yet, ask whether we should do so now if not defined (adrsub^) if window.frontmost () == @adrdata^.projectListOutline if op.level () == 1 if dialog.confirm ("You are not currently subscribed to this outline. Subscribe now?") SharedOutlineSuite.subscribeUrl (atts.url) else return local (adrserver) bundle //make sure we have a usernum and password if not SharedOutlineSuite.findCommunityServer (@adrsub^.cloudInfo, @adrserver) if not dialog.confirm ("Before you can edit outlines on " + adrsub^.cloudInfo.domain + ", you have to enter your usernum and password.") return local (url = "http://127.0.0.1:5335/SharedOutline/addServer") url = url + "?n=" + string.urlEncode (adrsub^.cloudInfo.domain) //FIXME: what to do if the name is not unique? url = url + "&d=" + string.urlEncode (adrsub^.cloudInfo.domain) url = url + "&po=" + string.urlEncode (adrsub^.cloudInfo.port) url = url + "&pa=" + string.urlEncode (adrsub^.cloudInfo.path) url = url + "&pr=" + string.urlEncode (adrsub^.cloudInfo.protocol) url = url + "&rp=" + string.urlEncode (adrsub^.cloudInfo.registerProcedure) webBrowser.openURL (url) webBrowser.bringToFront () return bundle //old code local (usernum = user.radio.prefs.usernum) if not dialog.ask ("Usernum for " + adrsub^.cloudInfo.domain + "?", @usernum) return local (passwordName = "default") if not dialog.ask ("Password name for " + adrsub^.cloudInfo.domain + "?", @passwordName) return local (adrserver = @adrdata^.servers.[adrsub^.domain]) //FIXME: what to do if the name is not unique? table.assign (adrserver, adrsub^.cloudInfo) adrserver^.usernum = usernum adrserver^.passwordName = passwordName SharedOutlineSuite.buildServerMenu () SharedOutlineSuite.edit (adrsub^.url, adrserver)  7 qGeneva 7ȮZ*# y? LANDmac SharedOutlineSuite.init () SharedOutlineSuite.rdcutils.openURL ("http://127.0.0.1:5335/SharedOutline/editPrefs")  oGeneva LwZ* a2LANDmac SharedOutlineSuite.init () SharedOutlineSuite.rdcutils.openURL ("http://127.0.0.1:5335/SharedOutline/servers") -TaGeneva $Z(fU;WrLANDmac try SharedOutlineSuite.rdcutils.maintain() else SharedOutlineSuite.rdcutils.openURL ("http://127.0.0.1:5335/SharedOutline/startTrial") return local (adrdata = SharedOutlineSuite.init ()) local (title) if dialog.ask ("Title for new outline?", @title) if system.environment.isMac title = string.macToLatin (title) local (adrserver = @adrdata^.servers.[adrdata^.prefs.currentServer]) local (response = SharedOutlineSuite.rpcCall ("SharedOutlineServer.create", {title}, adrserver)) SharedOutlineSuite.openSharedOutlineWindow (response.url, response.opmltext, adrserver, flNewOutline:true) return (true) -_$Geneva a!Z) pcLANDmac try SharedOutlineSuite.rdcutils.maintain() else SharedOutlineSuite.rdcutils.openURL ("http://127.0.0.1:5335/SharedOutline/startTrial") return SharedOutlineSuite.openProjectWindow (true, true) _*WGeneva ʘ$  LANDmac on setCurrentServer (serverName) local (adrdata = SharedOutlineSuite.init ()) if not defined (adrdata^.servers.[serverName]) SharedOutlineSuite.buildServerMenu () scriptError ("Can't set \"" + serverName + "\" as community server because there are no settings for this server.") adrdata^.prefs.currentServer = serverName return (true) rGeneva a4Z)$IyLANDmac try SharedOutlineSuite.rdcutils.maintain() else SharedOutlineSuite.rdcutils.openURL ("http://127.0.0.1:5335/SharedOutline/startTrial") return local (url = "http://") local (clipboardValue = clipboard.getValue (stringType)) if string.lower (clipboardValue) beginsWith "http://" url = clipboardValue if dialog.ask ("Enter URL of a shared outline to subscribe to:", @url) local (lowerUrl = string.lower (url)) if not (lowerUrl beginsWith "http://") url = "http://" + url local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[url]) if not defined (adrsub^) SharedOutlineSuite.subscribeUrl (url) SharedOutlineSuite.openProjectWindow (true, true) return (true) *Geneva 8㸭 T]$LANDmac local (atts) op.attributes.getAll (@atts) local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[atts.url]) if dialog.confirm ("Are you sure you want to unsubscribe from this outline?") try { delete (adrsub) } op.deleteLine () @<`$Z(P  ". :F Q] my editOutline9 editPrefsE editServersF newOutlineGopenProjectListJ9setCurrentServerKsubscribeToOutlineMunsubscribeFromOutlineQ]@2Geneva BGB bLANDmac
2TGeneva BZ'G!G5/LANDmac
Email:
First Name:
Surname:
Notes:
V$GK_X9C  " saveSerialT[ startTrialUVGeneva 2@x H޹Z ]GNG regPageUrl0http://register.xml-rpc.it/itstories/story$num=1VGeneva 2@x \ GKAY  > S w    0 :k x& 9 3 > askLicensePurchase##toolname## trial period expired, to continue using it you need to purchase a license, do you want to go to registration page now?askRegistrationConfirmDo you want to connect to the registration site to get a serial number? If you already have a serial number, click the "Register" button.askTrialRegistrationh##toolname## use is free for the first month, you just need to register it, do you want to register now?noLicenseRegistration##toolname## hasn't been registered and the tool is currently disabled. To register the tool and enable it go to http://127.0.0.1:5335/##toolname##/saveSerialNotRegisteredAlert\You need to register this tool in order to download updates. Do you want to register it now?noTrialRegistration##toolname## trial hasn't been started and the tool is currently disabled. To register the tool and enable it go to http://127.0.0.1:5335/##toolname##/startTrial regNumNotify+Your ##toolname## serial number is ##num##.serialokD##toolname##has been registered (sn: ##serial##). Thanks.
serialPut-Insert your serial number in the field below. trialExpiredThe trial period of ##toolname## is expired, you can purchase a license here. You will receive by mail a serial number to insert in the field below.trialNotRegisteredv##toolname## use is free for the first month, you just need to register it, just fill in the form below and submit it. trialstartedo##toolname## has been activated. It will work for a month, after that date you will have to purchase a license. wrongemailA problem occurred registering the tool. The email saved in radio (##email##) doesn't match the one provided when the serial was purchased. Please either go to your user identity pref page, change the email address saved in Radio and repeat registration, or contact customer care service by replyng to the email containig the serial number you received.
wrongserialdThe provided serial (##serial##) seems wrong or invalid, please check it's typed properly
VGeneva 2T \8GK4H  $ *6 <guiY-objectsYprefsZtextsZV Lucida Grande&2cB-XGeneva YùYm4'LANDmac gui saveSerial startTrial objects prefs texts askLicensePurchase askRegistrationConfirm askTrialRegistration noLicenseRegistration trialstarted NotRegisteredAlert noTrialRegistration regNumNotify serialok serialPut trialExpired wrongemail wrongserial trialNotRegistered Rl%RlskTRlskTRl%Rl%Rl%RlRlRlRlRlRlRlRlRlRlRlRlRlRl2.I1>Zc rdcd@2q<Geneva KDMBu'S@LANDmac on edit (url, adrserver) local (adrWindow, atts) new (tableType, @atts) atts.type = "itEditSharedOutline" atts.url = url if Frontier.tools.windowTypes.findWindowWithMatchingAtts (@atts, @adrWindow) window.bringToFront (adrWindow) return (true) local (response = SharedOutlineSuite.rpcCall ("SharedOutlineServer.open", {url}, adrserver)) return (SharedOutlineSuite.openSharedOutlineWindow (response.url, response.opmltext, adrserver)) qgHGeneva ܍&LANDmac on findCommunityServer (adrcloudinfo, adradrserver) local (adrdata = SharedOutlineSuite.init ()) local (adrserver) for adrserver in @adrdata^.servers try if adrserver^.domain == adrcloudinfo^.domain if adrserver^.port == adrcloudinfo^.port if adrserver^.path == adrcloudinfo^.path if adrserver^.protocol == adrcloudinfo^.protocol adradrserver^ = adrserver return (true) return (false) gGxWGeneva JKJS\nLANDmac on getIndexCache (adrdata, adrserver, flrefresh) local (adrcache) if not defined (adrserver^.indexFileURL) local (response = SharedOutlineSuite.rpcCall ("SharedOutlineServer.getInfo", {}, adrserver)) adrserver^.indexFileURL = response.indexFileURL if adrserver^.indexFileURL != "" if not defined (temp.SharedOutline) new (tableType, @temp.SharedOutline) if not defined (temp.SharedOutline.indexCache) new (tableType, @temp.SharedOutline.indexCache) adrcache = @temp.SharedOutline.indexCache.[adrserver^.indexFileURL] if not defined (adrcache^) or flrefresh or (clock.now () - timeModified (adrcache)) > 5*60 local (urlList = string.urlsplit (adrserver^.indexFileURL)) local (httpResponse = tcp.httpClient (server:urlList[2], path:urlList[3], ctFollowRedirects:5)) local (code = string.nthField (httpResponse, " ", 2)) local (headers, xmlText = string.httpResultSplit (httpResponse, @headers)) if code == "200" if defined (headers.["Content-Type"]) and string.trimWhiteSpace (headers.["Content-Type"]) == "text/xml" xml.compile (xmlText, adrcache) return (adrcache) GF-Geneva JFH^DLANDmac on createServer () try SharedOutlineSuite.rdcutils.maintain() else return "" on selected (fl) if fl return (" selected") else return ("") local (adrdata = SharedOutlineSuite.init ()) local (pta = html.getPageTableAddress ()) local (servername, domain, port="80", path="/RPC2", protocol="xml-rpc", registerProcedure="xmlStorageSystem.requestNotification", usernum="", passwordName="") local (message="") if string.upper (pta^.method) == "POST" if defined (pta^.requestHeaders.["Content-type"]) if string.lower (pta^.requestHeaders.["Content-type"]) == "application/x-www-form-urlencoded" local (postargs); new (tableType, @postargs) webserver.parseArgs (pta^.requestBody, @postargs) local (adrserver = @adrdata^.servers.[postargs.n]) if defined (adrserver^) //already exists pta^.code = 302 pta^.responseHeaders.Location = "http://127.0.0.1:5335/SharedOutline/servers?n=" + string.urlEncode (nameOf (adrserver^)) return ("") new (tableType, adrserver) adrserver^.domain = postargs.d adrserver^.path = postargs.pa adrserver^.port = postargs.po adrserver^.protocol = postargs.pr adrserver^.registerProcedure = postargs.rp adrserver^.usernum = postargs.u adrserver^.passwordName = postargs.pn adrserver^.flBehindFirewall = defined (postargs.fw) local (response) if defined (postargs.cr) local (params = {user.prefs.mailaddress, user.prefs.name, string.hashmd5 (user.radio.prefs.passwords.[adrserver^.passwordName]), user.inetd.config.http.port, "Radio UserLand"}) try response = betty.rpc.client (adrserver^.domain, adrserver^.port, "xmlStorageSystem.registerUser", @params, rpcPath:adrserver^.path) else message = tryerror if defined (response.usernum) adrserver^.usernum = response.usernum else local (userinfo); new (tableType, @userinfo) local (params = {adrserver^.usernum, string.hashmd5 (user.radio.prefs.passwords.[adrserver^.passwordName]), 0, user.inetd.config.http.port, userinfo}) try response = betty.rpc.client (adrserver^.domain, adrserver^.port, "xmlStorageSystem.ping", @params, rpcPath:adrserver^.path) else message = tryerror if defined (response.flError) if not response.flError //done, redirect to servers page SharedOutlineSuite.buildServerMenu () fileMenu.saveMyRoot (adrdata) pta^.code = 302 pta^.responseHeaders.Location = "http://127.0.0.1:5335/SharedOutline/servers?n=" + string.urlEncode (nameOf (adrserver^)) return ("") else message = "Sorry, the community server returned an error: " + response.message servername = nameOf (adrserver^) domain = adrserver^.domain port = adrserver^.port path = adrserver^.path protocol = adrserver^.protocol registerProcedure = adrserver^.registerProcedure passwordName = adrserver^.passwordName usernum = adrserver^.usernum delete (adrserver) else local (argtable); new (tableType, @argtable) webserver.parseArgs (pta^.searchArgs, @argtable) if defined (argtable.n) servername = argtable.n if defined (argtable.d) domain = argtable.d if defined (argtable.po) port = argtable.po if defined (argtable.pa) path = argtable.pa if defined (argtable.pr) protocol = argtable.pr if defined (argtable.rp) registerProcedure = argtable.rp local (formText = string (SharedOutlineSuite.gui.servers.createform)) local (passwordPopupText = "") for adr in @user.radio.prefs.passwords passwordPopupText = passwordPopupText + "" formText = string.replaceAll (formText, "##name##", servername) formText = string.replaceAll (formText, "##domain##", domain) formText = string.replaceAll (formText, "##port##", port) formText = string.replaceAll (formText, "##path##", path) formText = string.replaceAll (formText, "##protocol##", protocol) formText = string.replaceAll (formText, "##registerProcedure##", registerProcedure) formText = string.replaceAll (formText, "##password##", passwordPopupText) formText = string.replaceAll (formText, "##usernum##", usernum) formText = string.replaceAll (formText, "##message##", message) formText = string.replaceAll (formText, "##thispage##", nameOf (adrObject^)) return (formText) Geneva  Z$U _DLANDmac on editPreferences () try SharedOutlineSuite.rdcutils.maintain() else return "" on checked (fl) if fl return (" checked") else return ("") local (adrdata = SharedOutlineSuite.init ()) local (pta = html.getPageTableAddress ()) if string.upper (pta^.method) == "POST" scratchpad.paramTable = pta^ if defined (pta^.requestHeaders.["Content-type"]) if string.lower (pta^.requestHeaders.["Content-type"]) == "application/x-www-form-urlencoded" local (postargs); new (tableType, @postargs) webserver.parseArgs (pta^.requestBody, @postargs) adrdata^.prefs.ctSecsBetweenPolls = number (postargs.ctSecsBetweenPolls) adrdata^.prefs.timeOutSecs = number (postargs.timeOutSecs) adrdata^.prefs.flLogNotificationRequests = defined (postargs.flLogNotificationRequests) adrdata^.prefs.flLogNotifications = defined (postargs.flLogNotifications) adrdata^.prefs.flDebug = defined (postargs.flDebug) fileMenu.saveMyRoot (adrdata) local (formText = string (SharedOutlineSuite.gui.preferences.form)) formText = string.replaceAll (formText, "##thispage##", nameOf (adrObject^)) formText = string.replaceAll (formText, "##ctSecsBetweenPolls##", adrdata^.prefs.ctSecsBetweenPolls) formText = string.replaceAll (formText, "##timeOutSecs##", adrdata^.prefs.timeOutSecs) formText = string.replaceAll (formText, "##checkedLogNotificationRequests##", checked (adrdata^.prefs.flLogNotificationRequests)) formText = string.replaceAll (formText, "##checkedLogNotifications##", checked (adrdata^.prefs.flLogNotifications)) formText = string.replaceAll (formText, "##checkedDebug##", checked (adrdata^.prefs.flDebug)) return (formText)  `Geneva M,Z$J5=LANDmac on editSubscriptions () try SharedOutlineSuite.rdcutils.maintain() else return "" local (adrdata = SharedOutlineSuite.init ()) local (pta = html.getPageTableAddress ()) if string.upper (pta^.method) == "POST" if defined (pta^.requestHeaders.["Content-type"]) if string.lower (pta^.requestHeaders.["Content-type"]) == "application/x-www-form-urlencoded" local (postargs); new (tableType, @postargs) webserver.parseArgs (pta^.requestBody, @postargs) scratchpad.postargs = postargs if defined (postargs.remove) on unsubscribe (url) if defined (adrdata^.subscriptions.[url]) delete (@adrdata^.subscriptions.[url]) bundle //delete summit from Shared Outlines window local (oldTarget = target.set (@adrdata^.projectListOutline)) local (oldCursor = op.getcursor ()) local (oldDisplay = op.getdisplay ()) op.setDisplay (false) op.firstSummit () loop local (atts) op.attributes.getAll (@atts) if defined (atts.type) if atts.type == "itSharedOutlineElement" if atts.url == url op.deleteLine () break if not op.go (down, 1) break op.setCursor (oldCursor) op.setDisplay (oldDisplay) target.set (oldTarget) return if typeOf (postargs.url) == listType local (url) for url in postargs.url unsubscribe (url) else unsubscribe (postargs.url) fileMenu.saveMyRoot (adrdata) if defined (postargs.add) on subscribe (url) SharedOutlineSuite.subscribeUrl (url) SharedOutlineSuite.openProjectWindow (false, false) return if typeOf (postargs.url) == listType local (url) for url in postargs.url subscribe (url) else subscribe (postargs.url) fileMenu.saveMyRoot (adrdata) local (adrsub, sortTable) new (tableType, @sortTable) local (oldTarget = target.set (@sortTable)) table.sortBy ("Value") target.set (oldTarget) for adrsub in @adrdata^.subscriptions sortTable.[nameOf (adrsub^)] = adrsub^.whenLastChanged local (i, rowsText="") for i = sizeOf (sortTable) downTo 1 adrsub = @adrdata^.subscriptions.[nameOf (sortTable[i])] local (rowText = string (SharedOutlineSuite.gui.subscriptions.formRow)) if defined (activeRendererSuite) rowText = string.replaceAll (rowText, "##name##", "" + adrsub^.title + "") else rowText = string.replaceAll (rowText, "##name##", adrsub^.title) rowText = string.replaceAll (rowText, "##xml##", "") rowText = string.replaceAll (rowText, "##source##", adrsub^.url) rowText = string.replaceAll (rowText, "##moddate##", adrsub^.whenLastChanged) rowsText = rowsText + (rowText + cr) local (formText = string (SharedOutlineSuite.gui.subscriptions.form)) formText = string.replaceAll (formText, "##rows##", rowsText) formText = string.replaceAll (formText, "##thispage##", nameOf (adrObject^)) return (formText)   `Geneva عJ F'LANDmac on imageRef (imgpath, height="", width="", flFileUrl=user.radio.prefs.flUseFileUrls, usemap="", align="", hspace="", vspace="", alt="") Changes: 1/28/02; 10:17:22 AM by DW Added optional alt parameter, if non-empty, add an alt attribute to the image that's generated. 11/25/01; 3:17:27 AM by JES Implemented a workaround for the character-case issue on Windows, since converting to a filespec doesn't fix the character-case of the filename. 11/22/01; 12:27:38 AM by JES Commented out some debugging code. 10/13/01; 3:56:07 AM by JES When generating image URLs, preserve the case of the files on disk: Clients don't care about case, but the static server does, so make sure that the case of the file path in the img tag matches the actual case of the file that's upstreamed. 7/26/01; 3:07:42 PM by JES Added a leading slash character to the non-file URL, so images will work on sub-pages when accessing the site remotely. 4/18/01; 4:10:59 PM by DW Moved from myUserLandSuite. if imgpath beginswith "/" imgpath = string.delete (imgpath, 1, 1) local (f = user.radio.prefs.wwwfolder+ "SharedOutlineTemp" + file.getpathChar() + "images" + file.getpathChar() + string.replaceall (imgpath, "/", file.getpathchar ())) bundle //correct the case -- the static server is case-sensitive local (pc = file.getPathChar ()) if system.environment.isMac //MacOS -- convert to a filespec to fix the filename's character-case f = string (filespec (f)) else //workaround for windows: use fileloop (f in f) {} to fix the filename's character-case if system.environment.isRadio fileloop (f in f) {} imgpath = string.replaceAll (string.delete (f, 1, sizeOf (user.radio.prefs.wwwfolder+ "SharedOutlineTemp" + file.getpathChar() + "images" + file.getpathChar())), pc, "/") if usemap != "" usemap = " usemap=\"#" + usemap + "\"" if align != "" align = " align=\"" + align + "\"" if hspace != "" hspace = " hspace=\"" + hspace + "\"" if vspace != "" vspace = " vspace=\"" + vspace + "\"" if alt != "" alt = " alt=\"" + alt + "\"" local (hw = "") hw = " width=\"" + width + "\" height=\"" + height + "\"" local (url) if flFileUrl url = html.getfileurl (f) else url = "/SharedOutlineTemp/images/" + imgpath return ("") imageRef ("Service/REhead.gif", 50, 161)  JGeneva عt)}LANDmac on imageUrl (imgpath, flFileUrl=true) Changes: 1/28/02; 10:17:22 AM by DW Added optional alt parameter, if non-empty, add an alt attribute to the image that's generated. 11/25/01; 3:17:27 AM by JES Implemented a workaround for the character-case issue on Windows, since converting to a filespec doesn't fix the character-case of the filename. 11/22/01; 12:27:38 AM by JES Commented out some debugging code. 10/13/01; 3:56:07 AM by JES When generating image URLs, preserve the case of the files on disk: Clients don't care about case, but the static server does, so make sure that the case of the file path in the img tag matches the actual case of the file that's upstreamed. 7/26/01; 3:07:42 PM by JES Added a leading slash character to the non-file URL, so images will work on sub-pages when accessing the site remotely. 4/18/01; 4:10:59 PM by DW Moved from myUserLandSuite. if imgpath beginswith "/" imgpath = string.delete (imgpath, 1, 1) local (f = user.radio.prefs.wwwfolder+ "SharedOutlineTemp" + file.getpathChar() + "images" + file.getpathChar() + string.replaceall (imgpath, "/", file.getpathchar ())) bundle //correct the case -- the static server is case-sensitive local (pc = file.getPathChar ()) if system.environment.isMac //MacOS -- convert to a filespec to fix the filename's character-case f = string (filespec (f)) else //workaround for windows: use fileloop (f in f) {} to fix the filename's character-case if system.environment.isRadio fileloop (f in f) {} imgpath = string.replaceAll (string.delete (f, 1, sizeOf (user.radio.prefs.wwwfolder+ "RssDistillerTemp" + file.getpathChar() + "images" + file.getpathChar())), pc, "/") local (url) if flFileUrl url = html.getfileurl (f) else url = "/SharedOutlineTemp/images/" + imgpath return (url) imageRef ("Service/REhead.gif", 50, 161) 6JGeneva M=MD LANDmac

##title##

collapse all / expand all

##xml##
##outline##
##subscribe####edit####refresh##
73LƕMDg template70Geneva 7171*fLANDmac

Seconds between polls:

Seconds till timeout while polling:

Check this box to log notification requests

Check this box to log notifications

3/71 form3 _ c Geneva L͞^..rLANDmac
Name:
Domain:
Port:
Path:
Protocol:
Register Procedure:
Usernum:
Password name: [add password]
  Check this box if you want a new account to be created on the server. If this box is checked, you can leave the Usernum field empty since a value will be assigned by the server.
  Check this box if there is a firewall between your machine and the server.
 
##message## _J Geneva L^xL8LANDmac
Select a Community Server or add a new Community Server
Name:##name##
Domain:
Port:
Path:
Protocol:
Register Procedure:
Usernum:
Password name: [add password]
  Check this box if there is a firewall between your machine and the server
 

##message##

Outlines hosted on this Community Server:
##outlineRows##
 TitleChanged 
;Geneva ="J?WKLANDmac tTGeneva J[N1oKz^LANDmac ##subscribeCheckbox## ##title## ##moddate## ##xml## t8ӹN0  ( 2> I createFormform: optionRow outlineRowқVGeneva 2Xp Geneva N.ZN0D LANDmac
##rows##
 TitleChanged 
Add Outline:
TGeneva M4M- O LANDmac ##name## ##moddate## ##xml## M$ӹN/  formformRow٢VGeneva 2X<Geneva bdLANDmac \
{SharedOutlineSuite.gui.imageRef ("TabOffStart.gif", 19, 5)}##text## {SharedOutlineSuite.gui.imageRef ("TabOffEnd.gif", 19, 5)} {SharedOutlineSuite.gui.imageRef ("TabBak.gif", 19, 2)}
<!Geneva z1 LANDmac \
{SharedOutlineSuite.gui.imageRef ("TabOffStart.gif", 19, 5)}##text## {SharedOutlineSuite.gui.imageRef ("TabOffEnd.gif", 19, 5)} {SharedOutlineSuite.gui.imageRef ("TabBak.gif", 19, 2)}
]Geneva bCjLANDmac {SharedOutlineSuite.gui.imageRef ("tabsStart.gif", 19, 8)} ##labels## \{SharedOutlineSuite.gui.imageRef ("spacer.gif", 5, 5)} <Geneva b!kLANDmac \
{SharedOutlineSuite.gui.imageRef ("TabSelStart.gif", 19, 5)}##text## {SharedOutlineSuite.gui.imageRef ("TabSelEnd.gif", 19, 5)} {SharedOutlineSuite.gui.imageRef ("TabBak.gif", 19, 2)}
!Geneva b,LANDmac {SharedOutlineSuite.gui.imageRef ("spacer.gif", 5, 1)} !B)2z  ". 7C NZ d backLabel4 dimmedLabelfirstRow frontLabel secondRowVGeneva 2,  5Pm0Geneva 7(oeLANDmac on row (theList = nil) if theList == nil if typeOf(labelsList)==listtype tList = labelsList else tList = labelsTab^.[labelsList] else tList = theList tHtml="" tLabels = "" theCols = sizeOf(tList) if theCols !=0 tHtml=tHtml+"" scratchpad.list={} for tCell in tList scratchpad.list = scratchpad.list + {tCell} local tFront = (tCell [2] == "") if !tFront try tFront = tFront or (nameOf(adrObject^)==tCell [3]) try local tpagepath = tCell [2] if !(tpagePath beginswith "http://") tpagePath = "http://127.0.0.1/SharedOutline/" + tpagePath scratchpad.path = tpagePath local tPathList = string.urlSplit(tpagePath) tpath = tPathList[3] tFront = tFront or string.nthField(string.lower(tpath), "$",1) == string.replace(string.lower(string.replaceAll(string.popFileFromAddress(adrObject), ".", "/")),"website/", "/") else scratchpad.taberr = tryError if tFront //---bottone della pagina corrente tLabelText = string(SharedOutlineSuite.gui.tabs.chuncks.frontLabel) try if !tCell [3] tLabelText = string(SharedOutlineSuite.gui.tabs.chuncks.dimmedLabel) tLabels = tLabels+tLabelText tLabels = string.replace(tLabels,"##text##",tCell [1]) else //---altro bottone con link tLabelText = string(SharedOutlineSuite.gui.tabs.chuncks.backLabel) try if !tCell [3] tLabelText = string(SharedOutlineSuite.gui.tabs.chuncks.dimmedLabel) tLabels = tLabels+tLabelText tLabels = string.replace(tLabels,"##text##",tCell [1]) tLabels = string.replace(tLabels,"##link##",string.replace(tCell [2], "##rnd##", random(1,10000))) tHtml = tHtml + string(SharedOutlineSuite.gui.tabs.chuncks.firstRow) tHtml = string.replace(tHtml,"##labels##",tLabels) tHtml = tHtml + string(SharedOutlineSuite.gui.tabs.chuncks.secondRow) tHtml = string.replace(tHtml,"##numSpan##",theCols+2) tHtml = tHtml +"
" return html.processMacros(tHtml,false) msg(row({{"uno","http://uno.html","true"},{"due","","false"},{"tre","http://due.html","true"}})) 5L$)2  chuncksrowVGeneva 228\Geneva M?Z$qZ=yLANDmac on viewOutline () try SharedOutlineSuite.rdcutils.maintain() else return "" local (adrdata = SharedOutlineSuite.init ()) local (pta = html.getPageTableAddress ()) local (title = "Untitled") local (outlineHTML = "") local (subscribeButtonHTML = "") local (editButtonHTML = "") local (refreshButtonHTML = "") local (xmlButtonHTML = "") local (url) if string.upper (pta^.method) == "POST" if defined (pta^.requestHeaders.["Content-type"]) if string.lower (pta^.requestHeaders.["Content-type"]) == "application/x-www-form-urlencoded" local (postargs); new (tableType, @postargs) webserver.parseArgs (pta^.requestBody, @postargs) url = postargs.url if defined (postargs.edit) local (adrserver, adrsub = @adrdata^.subscriptions.[url]) if SharedOutlineSuite.findCommunityServer (@adrsub^.cloudInfo, @adrserver) SharedOutlineSuite.edit (adrsub^.url, adrserver) Frontier.bringToFront () if defined (postargs.add) SharedOutlineSuite.subscribeUrl (url) SharedOutlineSuite.openProjectWindow (false, false) fileMenu.saveMyRoot (adrdata) if typeOf (url) == unknownType //get url from search args local (pta = html.getPageTableAddress ()) local (argtable); new (tableType, @argtable) webserver.parseArgs (pta^.searchArgs, @argtable) if defined (argtable.url) url = argtable.url if typeOf (url) != unknownType local (adrcache = radio.outliner.preCacheUrl (url)) bundle //get title from outline local (xstruct) xml.compile (adrcache^.xmltext, @xstruct) local (opmlElem = xml.getAddress (@xstruct, "opml")) local (headElem = xml.getAddress (opmlElem, "head")) local (titleElem = xml.getAddress (headElem, "title")) title = string (titleElem^) if system.environment.isMac title = latinToMac.convert (title) local (localOutline) local (adr = @localOutline) local (oldTarget = target.set (adr)) Frontier.tools.windowTypes.commands.openUrl (url, adroutline:adr) html.runOutlineDirectives (adr, pta) //security hole? outlineHTML = activeRendererSuite.activeRenderer (adr) target.set (oldTarget) local (adrdata = SharedOutlineSuite.init ()) if defined (adrdata^.subscriptions.[url]) editButtonHTML = "
" else subscribeButtonHTML = "
" refreshButtonHTML = "
" xmlButtonHTML = "" else outlineHTML = "Error: No outline URL supplied." if defined (argtable.url) //using W3C's XSLT service if defined (adrdata^.subscriptions.[argtable.url]) local (adrsub = @adrdata^.subscriptions.[argtable.url]) local (href = "http://www.w3.org/2000/06/webdata/xslt?xslfile=http://radio.weblogs.com/0104487/gems/activeRenderer/outliner_xsl.txt&xmlfile=" + argtable.url + "&transform=Submit") add ("

" + adrsub^.title + "

") add ("") add ("

This demo uses the new activeRenderer XSL stylesheet, on W3C's XSLT service.

") else add ("A subscription with the URL " + argtable.url + " does not exist.") local (htmlText = string (SharedOutlineSuite.gui.outlines.template)) htmlText = string.replaceAll (htmlText, "##title##", title) htmlText = string.replaceAll (htmlText, "##outline##", outlineHTML) htmlText = string.replaceAll (htmlText, "##subscribe##", subscribeButtonHTML) htmlText = string.replaceAll (htmlText, "##edit##", editButtonHTML) htmlText = string.replaceAll (htmlText, "##refresh##", refreshButtonHTML) htmlText = string.replaceAll (htmlText, "##xml##", xmlButtonHTML) return (htmlText) MGeneva M-^:LANDmac on viewServers () try SharedOutlineSuite.rdcutils.maintain() else return "" on selected (fl) if fl return (" selected") else return ("") on checked (fl) if fl return (" checked") else return ("") local (adrdata = SharedOutlineSuite.init ()) local (pta = html.getPageTableAddress ()) local (adrserver, message="", flrefresh = false) if string.upper (pta^.method) == "POST" //update server prefs if defined (pta^.requestHeaders.["Content-type"]) if string.lower (pta^.requestHeaders.["Content-type"]) == "application/x-www-form-urlencoded" local (postargs); new (tableType, @postargs) webserver.parseArgs (pta^.requestBody, @postargs) if defined (postargs.save) adrserver = @adrdata^.servers.[postargs.n] adrserver^.domain = postargs.d adrserver^.path = postargs.pa adrserver^.port = postargs.po adrserver^.protocol = postargs.pr adrserver^.registerProcedure = postargs.rp adrserver^.usernum = postargs.u adrserver^.passwordName = postargs.pn adrserver^.flBehindFirewall = defined (postargs.fw) fileMenu.saveMyRoot (adrdata) local (response) local (userinfo); new (tableType, @userinfo) local (params = {adrserver^.usernum, string.hashmd5 (user.radio.prefs.passwords.[adrserver^.passwordName]), 0, user.inetd.config.http.port, userinfo}) try response = betty.rpc.client (adrserver^.domain, adrserver^.port, "xmlStorageSystem.ping", @params, rpcPath:adrserver^.path) else message = tryerror if defined (response.flError) if response.flError message = "Sorry, the community server returned an error: " + response.message else flrefresh = true if typeOf (adrserver) == unknownType local (searchargs); new (tableType, @searchargs) webserver.parseArgs (pta^.searchargs, @searchargs) if defined (searchargs.n) adrserver = @adrdata^.servers.[searchargs.n] else adrserver = @adrdata^.servers.[adrdata^.prefs.currentServer] flrefresh = defined (searchargs.refresh) local (adr, optionRowsText="", outlineRowsText="") bundle //build community server pop-up menu for adr in @adrdata^.servers local (rowText = string (SharedOutlineSuite.gui.servers.optionRow)) rowText = string.replaceAll (rowText, "##server##", nameOf (adr^)) rowText = string.replaceAll (rowText, "##server_enc##", string.urlEncode (nameOf (adr^))) rowText = string.replaceAll (rowText, "##selected##", selected (nameOf (adr^) == nameOf (adrserver^))) optionRowsText = optionRowsText + rowText bundle //build outline listing try local (adrcache = SharedOutlineSuite.getIndexCache (adrdata, adrserver, flrefresh)) local (adrindex = xml.getAddress (adrcache, "SharedOutlineIndex")) local (adroutlines = xml.getAddress (adrindex, "outlines")) local (baseURL = xml.getAttributeValue (adroutlines, "base")) local (baseTime = date (xml.getAttributeValue (adroutlines, "time"))) local (nomad, title, url, moddate, rowText) for nomad in adroutlines if xml.convertToDisplayName (nameOf (nomad^)) != "outline" continue title = xml.getAttributeValue (nomad, "title") if system.environment.isMac title = latinToMac.convert (title) moddate = baseTime - number (xml.getAttributeValue (nomad, "secs")) if moddate == date (0) moddate = "" url = baseURL + xml.getAttributeValue (nomad, "href") rowText = string (SharedOutlineSuite.gui.servers.outlineRow) if defined (activeRendererSuite) rowText = string.replaceAll (rowText, "##title##", "" + title + "") else rowText = string.replaceAll (rowText, "##title##", title) rowText = string.replaceAll (rowText, "##moddate##", moddate) rowText = string.replaceAll (rowText, "##url##", url) rowText = string.replaceAll (rowText, "##xml##", "") if not defined (adrdata^.subscriptions.[url]) rowText = string.replaceAll (rowText, "##subscribeCheckbox##", "") else rowText = string.replaceAll (rowText, "##subscribeCheckbox##", "") outlineRowsText = outlineRowsText + rowText else outlineRowsText = "Error: " + tryerror + "" local (formText = string (SharedOutlineSuite.gui.servers.form)) bundle //build server prefs form local (passwordPopupText = "", passwordName) for adr in @user.radio.prefs.passwords passwordName = nameOf (adr^) passwordPopupText = passwordPopupText + "" formText = string.replaceAll (formText, "##name##", nameOf (adrserver^)) formText = string.replaceAll (formText, "##domain##", adrserver^.domain) formText = string.replaceAll (formText, "##port##", adrserver^.port) formText = string.replaceAll (formText, "##path##", adrserver^.path) formText = string.replaceAll (formText, "##protocol##", adrserver^.protocol) formText = string.replaceAll (formText, "##registerProcedure##", adrserver^.registerProcedure) formText = string.replaceAll (formText, "##usernum##", adrserver^.usernum) formText = string.replaceAll (formText, "##password##", passwordPopupText) formText = string.replaceAll (formText, "##flBehindFirewall##", checked (adrserver^.flBehindFirewall)) formText = string.replaceAll (formText, "##thispage##", nameOf (adrObject^)) formText = string.replaceAll (formText, "##server##", nameOf (adrserver^)) formText = string.replaceAll (formText, "##message##", message) formText = string.replaceAll (formText, "##optionRows##", optionRowsText) formText = string.replaceAll (formText, "##outlineRows##", outlineRowsText) return (formText) ,Nf Geneva !!tBwLANDmac on writeImages () tBasepath = user.radio.prefs.wwwfolder+ "SharedOutlineTemp" + file.getpathChar() + "images" + file.getpathChar() tPrefsFilePath = user.radio.prefs.wwwfolder+ "SharedOutlineTemp" + file.getpathChar() + "#upstream.xml" if !file.exists(tPrefsFilePath) file.surefilepath(tPrefsFilePath) file.writewholefile(tPrefsFilePath, "") for tImageAdr in @SharedOutlineWebsite.["#images"] local path = tBasePath + nameOf (tImageAdr^) if not file.exists (path) file.surefilepath(path) file.writeWholeFile (path, tImageAdr^) return (true) ,!չN2  )5 GS \h q}    % createServer|seditPreferences|editSubscriptions|YimageRef|imageUrl| outlines| preferences|servers| subscriptions|ہtabs|C viewOutline| viewServers| writeImages|"hVGeneva w2X!2xBGeneva +,LANDmac on importIcon (f, mac) local (adr = @SharedOutlineNodeTypes.[string.popSuffix (file.fileFromPath (f))].icon) if not defined (adr^) new (tableType, adr) if mac adr = @adr^.mac if not defined (adr^) new (tableType, adr) rez.getResource(f, "ics#", 128, @adr^.["ics#"]) rez.getResource(f, "ics4", 128, @adr^.["ics4"]) rez.getResource(f, "ics8", 128, @adr^.["ics8"]) else adr = @adr^.windows adr^ = file.readWholeFile (f) setBinaryType (adr, file.type (f)) return true local (f) if file.getFileDialog ("Select resource file", @f, 0) importIcon (f, false) 2pGeneva e^R1&l|LANDmac local (adr = Frontier.openDataFile ("SharedOutlineData")) local (adrprefs = @adr^.prefs) if not defined (adrprefs^) new (tableType, adrprefs) if not defined (adrprefs^.fldebug) adrprefs^.fldebug = false if not defined (adrprefs^.timeOutSecs) adrprefs^.timeOutSecs = 15 if not defined (adrprefs^.ctSecsBetweenPolls) adrprefs^.ctSecsBetweenPolls = 60 if not defined (adrprefs^.flLogNotificationRequests) adrprefs^.flLogNotificationRequests = true if not defined (adrprefs^.flLogNotifications) adrprefs^.flLogNotifications = true if not defined (adrprefs^.currentServer) adrprefs^.currentServer = "" if not defined (adr^.projectListOutline) new (outlineType, @adr^.projectListOutline) if not defined (adr^.servers) new (tableType, @adr^.servers) bundle //copy user's default server local (adrserver = @adr^.servers.[user.radio.prefs.defaultCloud.server]) adrserver^ = user.radio.prefs.defaultCloud try { table.rename (@adrserver^.server, "domain") } try { delete (@adrserver^.rpcPath) } try { delete (@adrserver^.fldebug) } adrserver^.registerProcedure = "xmlStorageSystem.requestNotification" adrserver^.passwordName = "default" adrserver^.usernum = user.radio.prefs.usernum bundle //create evectors demo server local (adrserver = @adr^.servers.["Evectors Public"]) new (tableType, adrserver) try adrserver^.domain = "cerbero.evectors.it" adrserver^.path = "/RPC2" adrserver^.port = "80" adrserver^.protocol = "xml-rpc" adrserver^.registerProcedure = "xmlStorageSystem.requestNotification" adrserver^.flBehindFirewall = false //we don't want to flood our poor little server with polling requests adrserver^.passwordName = "evectorsPublicRCS" if not defined (user.radio.prefs.passwords.evectorsPublicRCS) user.radio.prefs.passwords.evectorsPublicRCS = string.getRandomPassword (8) local (response, params = {}) params[0] = user.prefs.mailaddress params[0] = user.prefs.name params[0] = string.hashmd5 (user.radio.prefs.passwords.[adrserver^.passwordName]) params[0] = user.inetd.config.http.port params[0] = "Radio UserLand" response = betty.rpc.client (adrserver^.domain, adrserver^.port, "xmlStorageSystem.registerUser", @params, rpcPath:adrserver^.path) adrserver^.usernum = response.usernum adrprefs^.currentServer = nameOf (adrserver^) else delete (adrserver) fileMenu.saveMyRoot (adr) SharedOutlineSuite.buildServerMenu () local (adrsubs = @adr^.subscriptions) if not defined (adrsubs^) new (tableType, adrsubs) local (url = "http://so.evectors.it/outlines/sharedOutlineToolDemo.opml") local (adrsub = @adrsubs^.[url]) new (tableType, adrsub) try local (title = "Untitled") local (adrcache = radio.outliner.preCacheUrl (url)) local (xstruct) xml.compile (adrcache^.xmltext, @xstruct) local (opmlElem = xml.getAddress (@xstruct, "opml")) local (headElem = xml.getAddress (opmlElem, "head")) local (titleElem = xml.getAddress (headElem, "title")) title = string (titleElem^) if system.environment.isMac title = latinToMac.convert (title) local (adrcloud) if radio.outliner.getCloudInfoFromCache (url, @adrcloud) adrsub^.cloudInfo = adrcloud^ SharedOutlineSuite.initSubscription (adrsub, title) else try { delete (adrsub) } fileMenu.saveMyRoot (adr) if defined (user.rootUpdates.servers) local (adrupdates = @user.rootUpdates.servers.SharedOutline) if not defined (adrupdates^) new (tableType, adrupdates) adrupdates^.autobackup = true adrupdates^.dbname = "SharedOutline.root" adrupdates^.dialogs = false adrupdates^.lastupdate = date.netStandardString (date.set (20, 7, 2002, 0, 0, 0)) adrupdates^.method = "toolsUpdate.getUpdate" adrupdates^.openlog = false adrupdates^.port = 80 adrupdates^.server = "updates.xml-rpc.it" adrupdates^.serialNum = 0 adrupdates^.URL = "" if defined (adrupdates^.server) and string.lower (adrupdates^.server) == "updates.xml-rpc.it" if defined (adrupdates^.method) and string.lower (adrupdates^.method) != "toolsupdate.getupdate" adrupdates^.method = "toolsUpdate.getUpdate" return (adr) gxwGeneva O¹M!Y[LANDmac on initSubscription (adrsub, title=nil) if not defined (adrsub^) new (tableType, adrsub) if not defined (adrsub^.ctPolls) adrsub^.ctPolls = 0 if not defined (adrsub^.ctXmlBytes) adrsub^.ctXmlBytes = 0 if not defined (adrsub^.title) if title == nil title = "Untitled" adrsub^.title = title if not defined (adrsub^.url) adrsub^.url = nameOf (adrsub^) if not defined (adrsub^.whenCreated) adrsub^.whenCreated = timeCreated (adrsub) if not defined (adrsub^.whenLastChanged) adrsub^.whenLastChanged = timeCreated (adrsub) if not defined (adrsub^.whenLastPoll) adrsub^.whenLastPoll = date (0) return (true) g/Geneva ۸__LANDmac SharedOutlineSuite.commands.openProjectList () AGeneva ^+F^+F _LANDmac SharedOutlineSuite.commands.setCurrentServer ("Evectors Public") LGeneva ^+F^+F _LANDmac SharedOutlineSuite.commands.setCurrentServer ("radio.xmlstoragesystem.com") +Geneva T7̡_LANDmac SharedOutlineSuite.commands.editServers () )Geneva _)__LANDmac SharedOutlineSuite.commands.editPrefs () )Geneva 47=_LANDmac SharedOutlineSuite.updateRootThreaded () ~$Geneva ۹^+F_LANDmac SharedOutline Open Shared Outlines List - Set Current Server =SharedOutlineSuite.menuScripts.displayServerName ("Evectors Public") =SharedOutlineSuite.menuScripts.displayServerName ("radio.xmlstoragesystem.com") Edit Community Servers... - Preferences - Update SharedOutline.root Ao B( B C D~ E1pE0dGeneva p}6Geneva ST -CLANDmac local (atts) op.attributes.getAll (@atts) if defined (atts.email) return ("(Owned by " + atts.email) else if defined (atts.usernum) return ("(Owned by " + atts.usernum) else return ("(Owned by ???") }Geneva ܸ JLANDmac on displayServerName (serverName) if serverName == SharedOutlineData.prefs.currentServer return ("!" + serverName) return (serverName) c_$S  + displayOwnerHdisplayServerNameJcXPGeneva i3:>uLANDmac on openProjectWindow (flOpenWindow = true, flBringToFront = false) local (adrdata = SharedOutlineSuite.init ()) local (adrOutline = @adrdata^.projectListOutline) local (existingProjects={}) bundle //get existing projects from outline local (lo = adrOutline^, atts) local (oldtarget = target.set (@lo)) op.firstSummit () loop op.attributes.getAll (@atts) if defined (atts.type) and (atts.type == "itSharedOutlineElement") existingProjects[0] = atts.url if not op.go (down, 1) break target.set (oldtarget) local (newProjects={}) bundle //get new projects from data table local (adr) for adr in @adrdata^.subscriptions if not (existingProjects contains adr^.url) newProjects[0] = adr^.url bundle //add new projects to outline local (oldtarget = target.set (adrOutline)) local (oldcursor = op.getCursor ()) local (olddisplay = op.getDisplay ()) op.setDisplay (false) op.firstSummit () op.go (down, infinity) local (url, adr, atts) local (flinsert = op.countSummits () > 1 or op.getLineText () != "") for url in newProjects adr = @adrdata^.subscriptions.[url] if flinsert op.insert (adr^.title, down) else op.setLineText (adr^.title) flinsert = true new (tableType, @atts) atts.type = "itSharedOutlineElement" atts.url = url atts.bold = false op.attributes.addGroup (@atts) op.setCursor (oldcursor) op.setDisplay (olddisplay) target.set (oldtarget) if flOpenWindow if (not window.isOpen (adrOutline)) or flBringToFront edit (adrOutline, windowTitle:"Shared Outlines", flReadOnly:true, adrButtonTable:@SharedOutlineSuite.buttons.projectWindow) return (true) X%  Geneva Sĸ#@vKLANDmac on openSharedOutlineWindow (url, opmltext, adrCloud, flNewOutline=false) if system.environment.isMac opmltext = latinToMac.convert (opmltext) local (title = "Untitled", ownerName, ownerEmail, cloudInfo) try //get title local (xstruct) xml.compile (opmltext, @xstruct) local (nomad = xml.getAddress (@xstruct, "opml")) nomad = xml.getAddress (nomad, "head") title = xml.getAddress (nomad, "title")^ ownerName = xml.getAddress (nomad, "ownerName")^ ownerEmail = xml.getAddress (nomad, "ownerEmail")^ local (adrwindow = Frontier.tools.windowTypes.newWindow ("itEditSharedOutline", flHidden:true, title:title)) op.xmlToOutline (opmltext, adrwindow, @cloudInfo) local (atts) new (tableType, @atts) atts.url = url atts.adrCloud = adrCloud atts.flHaveCustody = true atts.flNewOutline = flNewOutline atts.ownerName = ownerName atts.ownerEmail = ownerEmail window.attributes.addGroup (@atts, adrwindow) bundle //set types of red/green headlines local (oldtarget = target.set (adrwindow)) local (oldcursor = op.getCursor ()) local (olddisplay = op.getDisplay ()) local (oldexpstate = op.getExpansionState ()) op.setDisplay (false) op.fullExpand () op.firstSummit () local (usernum) loop if op.attributes.getOne ("usernum", @usernum) if usernum != adrCloud^.usernum op.attributes.setOne ("type", "itProtectedOutlineElement") else op.attributes.setOne ("type", "itCanEditOutlineElement") if not op.go (flatdown, 1) break op.setExpansionState (oldexpstate) op.setCursor (oldcursor) op.setDisplay (olddisplay) target.set (oldtarget) Frontier.tools.windowTypes.openWindow (adrwindow) return (true) %Geneva M!b"LoLANDmac local (adrdata = SharedOutlineSuite.init ()) local (adrsub, flOneOutlineChanged = false, now = clock.now ()) local (ctSecsBetweenPolls = radio.outliner.init ()^.prefs.ctSecsBetweenPolls) for adrsub in @adrdata^.subscriptions SharedOutlineSuite.initSubscription (adrsub) if not defined (adrsub^.timeReceivedLastNotification) //we're behind a firewall or were unable to request subscriptions if (now - adrsub^.whenLastPoll) >= ctSecsBetweenPolls adrsub^.whenLastPoll = now adrsub^.ctPolls++ try local (s, sizeXmlText, headers, flGotSize = false) local (urlList = string.urlSplit (adrsub^.url)) FIXME: set special referer header s = tcp.httpClient (method:"HEAD", server:urlList[2], path:urlList[3], flMessages:false, ctFollowRedirects:5, timeOutTicks: 60 * adrdata^.prefs.timeOutSecs, flJustHeaders:true, flAcceptOpml:true) new (tabletype, @headers) webserver.util.parseHeaders (s, @headers) if defined (headers.["Content-Length"]) try sizeXmlText = number (string.trimWhiteSpace (headers.["Content-Length"])) flGotSize = true if not flGotSize s = string.httpResultSplit (tcp.httpClient (server:urlList[2], path:urlList[3], flMessages:false, ctFollowRedirects:5, timeOutTicks: 60 * adrdata^.prefs.timeOutSecs, flAcceptOpml:true)) sizeXmlText = sizeOf (s) if sizeXmlText != adrsub^.ctXmlBytes //assume that the content of the outline changed adrsub^.ctXmlBytes = sizeXmlText radio.outliner.preCacheURL (adrsub^.url) FIXME: call subscriptionChanged callbacks??? SharedOutlineSuite.boldenOutline (adrsub^.url) adrsub^.whenLastChanged = clock.now () flOneOutlineChanged = true if flOneOutlineChanged SharedOutlineSuite.openProjectWindow (true, false) rr~F0׹^T ~ $ ,] f   - -9 9>V >aW+ WDe e getToolNamen#!1(!1, "&',  &,%% $,%#"& , ,% &", !, 1 0,",  0,-/(TEXTtSuiteAdrtokn tokn TEXTthisTEXTtSuiteNametokn TEXTtSuiteAdrTEXTtSuitelengthtokn TEXTtSuiteNameTEXTstringTEXTmidTEXTtSuiteNamelongTEXTtSuitelengthlongTEXTgetToolNamemaintain2!(!, &,  ,%(< (",%  *(*, , (  TEXTtUtilsAdrtokn TEXTthisTEXTtUtilsAdrTEXTvalidatelonglongTEXTscriptErrorTEXTTEXTmaintainopenUrl-z!(!,/6 ,",   D<D, ",",    D2C, *B ,   (", ,   TEXTwebbrowserTEXTopenurlTEXTtheUrlTEXTsystemTEXTenvironmentTEXTisMacTEXTtryErrorTEXTMac OS ErrorTEXTscritpErrorTEXTtryerrorTEXTwebbrowserTEXTbringtofrontTEXTopenUrlTEXTtheUrlregister"l! 3(! 3, +&,  ,%&%,  $("",% "&+, $+"*,"&,%!  ,% &*> (",%     ," ,   ,",   ,"+, # +"H,";,%5 4 ;H S","y,"m,"e,Ye m'y x  ( Z< Y," ,  " ;," $,%   $ ; E Q X* Z,  Y," ,%    Y, H, 9, + 7 G X* 0,  /," ,%   " .," #,%   # .(  TEXTtUtilsAdrtokn TEXTthisTEXTtToolNameTEXTtUtilsAdrTEXTgetToolNameTEXTtDataAdrtokn TEXTtUtilsAdrTEXTdataTEXTrdcTEXTtUtilsAdrTEXTserialOkTEXTdialogTEXTnotifyTEXTstringTEXTreplaceTEXTstringTEXTreplaceTEXTtDataAdrTEXTtextsTEXTregNumNotifyTEXT##num##TEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumTEXT##toolname##TEXTtToolNameTEXTdialogTEXTThreeWayTEXTtDataAdrTEXTtextsTEXTaskRegistrationCOnfirmTEXTCancelTEXTRegisterTEXTYeslongTEXTtUtilsAdrTEXTopenUrlTEXThttp://127.0.0.1:5335/TEXTtToolNameTEXT/saveSerialTEXT$msg=serialPutlongTEXTtUtilsAdrTEXTopenUrlTEXTtDataAdrTEXTprefsTEXTregPageUrlTEXTregistersaveRegistration ! (! , +&,  ,%&%,  $("",% "&7,$7"6,"*,""," *'6 5&X,  X,O,8,2, "0,%)( 06"M,%HGM W &,  (",  & +, $ +" *," &,% ! , %   & *( `> _," +," ,'    + 5 @" X," L, F L X ^*u,  &," ,%    % y," ," ,  '  4 x 3, $ 2, + 1 w, ; v," J, B J v, k, P" i," ], W ] i u u,  t,",   Z,"%,  %">,"5,%/ . 5 >N Yh s*, , , ,",   f,"%,  %"@,"5,%/ . 5@ M"e,"Y,S Yet   V, V, L,",  "2,"&,%   &2@ K U   , TEXTtUtilsAdrtokn TEXTthisTEXTtToolNameTEXTtUtilsAdrTEXTgetToolNameTEXTtUpdatesTabAdrTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTrpcserverTEXTxmlrpc://TEXTtUpdatesTabAdrTEXTserverTEXT:TEXTtUpdatesTabAdrTEXTportTEXT/RPC2TEXTtTextTEXTtDateTEXTclockTEXTnowTEXTtDataAdrtokn TEXTtUtilsAdrTEXTdataTEXTrdcTEXTrpcserverTEXTtoolsupdateTEXTvalidateSerialTEXTtToolNameTEXTtheSerialTEXTuserTEXTprefsTEXTmailaddressboolTEXTokTEXTtUpdatesTabAdrTEXTserialNumTEXTtheSerialTEXTuserTEXTcommToolsTEXTtToolNameTEXTbinaryTEXTnumberTEXTtDateTEXTbinaryTEXTstringTEXThashmd5TEXTtDateTEXTuserTEXTprefsTEXTmailAddressTEXTtheSerialTEXTtTextTEXTstringTEXTreplaceTEXTstringTEXTreplaceTEXTtDataAdrTEXTtextsTEXTserialokTEXT##toolname##TEXTtToolNameTEXT##serial##TEXTtheSerialTEXTwrongemailTEXTtTextTEXTstringTEXTreplaceTEXTstringTEXTreplaceTEXTtDataAdrTEXTtextsTEXTwrongemailTEXT##email##TEXTuserTEXTprefsTEXTmailaddressTEXT##serial##TEXTtheSerialTEXTtTextTEXTtTextTEXTstringTEXTreplaceTEXTtDataAdrTEXTtextsTEXTwrongserialTEXT##serial##TEXTtheSerialTEXTtTextTEXTtTextTEXTsaveRegistrationTEXTtheSerial saveSerial  !( (!( , &,  ,%&%,  $("",% "&+, $+"*,"&,%!  ,% &*&),  (, "',",% '&&,%& ,   & 9, " 8," .," "," ,   "' . - 8   ,$  .,",   "",% "$. -(< (, ,",   ",% '2< 1, "0,",%'0/^< ^, 6,",   "5,"$,%$'54%] ,$  1,",   "%,%%$1 0< , ",  , ", < ,  >, >,7,+, "*,",%  '*) 4 =< , ",   $,!# 5,  4,"#,% #"3, , 3 , " ,  !%< !%,"!,"!,"!,"! ,! !  !!!!$ "5,""5,"""4,""/,""*,""#," "# "*"/"4 #Y, ##Y,#F,#A,#5,#/,##-#3 #?#E #X,#L%#W #V $8, $ $7,"$, $$ $$- $6 %<, % %;,"%, %% %%/ %: &H, & &G,"&, && & &*"&F,"&;,%&5 &4 &;&F '8, ' '7,"', '' ''- '6(  ( , &,TEXTtUtilsAdrtokn TEXTthisTEXTtToolNameTEXTtUtilsAdrTEXTgetToolNameTEXTtDataAdrtokn TEXTtUtilsAdrTEXTdataTEXTrdcTEXTtTextTEXTstringTEXTtDataAdrTEXTguiTEXTsaveSerialTEXTtlocalserverhostTEXThttp://127.0.0.1TEXTtlocalserverportTEXTTEXTtActionTEXTtSerialTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumTEXTargtableTEXTpostargsTEXTnewtypetablTEXTargtableTEXTwebserverTEXTparseArgsTEXTptaTEXTpathArgsTEXTargtableTEXTstringTEXTupperTEXTptaTEXTmethodTEXTPOSTtoknTEXTptaTEXTrequestHeadersTEXTContent-typeTEXTstringTEXTlowerTEXTptaTEXTrequestHeadersTEXTContent-typeTEXTapplication/x-www-form-urlencodedTEXTnewtypetablTEXTpostargsTEXTwebserverTEXTparseArgsTEXTptaTEXTrequestBodyTEXTpostargstoknTEXTargTableTEXTmsgTEXTtheMessageTEXTargTableTEXTmsgTEXTtheMessageTEXTtTextTEXTTEXTtDataAdrTEXTtextsTEXTtheMessageTEXT

TEXTtTexttoknTEXTpostargsTEXTactionTEXTmsgTEXTRegistering to updates serverTEXTtTextTEXTtUtilsAdrTEXTsaveRegistrationTEXTpostargsTEXTserialTEXTtSerialTEXTpostargsTEXTserialTEXTuserTEXTinetdTEXTconfigTEXThttpTEXTportlongPTEXTtlocalserverportTEXT:TEXTuserTEXTinetdTEXTconfigTEXThttpTEXTportTEXTtActionTEXTtlocalserverhostTEXTtlocalserverportTEXT/TEXTtToolNameTEXT/tokn TEXTadrObjectTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##action##TEXTtActionTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##toolname##TEXTtToolNameTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##url##TEXTtDataAdrTEXTprefsTEXTregPageUrlTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##serial##TEXTtSerialTEXTtTextTEXTsaveSerialTEXTtheMessageserialOk R!(! ,  &, ,",  &8,  7,",   6,".,!.#5,14& ,  /4 7, "6,",," ,",   ', + 68<8,(, , ,   (,# , % 8,#2, .17  & ,  & ,   0, ( / #,  ",",  ! $,  #,",  " , ,",    %,  $,",   # O  , ,",     !,  ,",     !,  ,",   !,  ,",   ,,  , , < , ,/4:,#,  ,   (  , (  TEXTxTEXTstringTEXTparseAddressTEXTthisTEXTtToolNameTEXTstringTEXTpopSuffixTEXTfileTEXTfilefrompathTEXTxlongTEXTtheSNlongTEXTtheSNTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumtokn TEXTtheSNlongTEXTtheSNlongTEXT-TEXTtheSNlong TEXT-boolTEXTgen2TEXTTEXTgen3TEXTTEXTvectorTEXT0123456789abcdefghkjilmnopqrstuvwxyzTEXTtheToolTEXTstringTEXTmidTEXTtheSNlonglongTEXTtheProgTEXTstringTEXTmidTEXTtheSNlong longTEXTgenTEXTstringTEXTmidTEXTtheSNlonglongTEXTrandomnumTEXTstringTEXTmidTEXTtheSNlonglonglonglongTEXTiTEXTc1TEXTstringTEXTnthCharTEXTtheProgTEXTiTEXTc2TEXTstringTEXTnthCharTEXTrandomnumTEXTiTEXTxTEXTstringTEXTpatternmatchTEXTc1TEXTvectorTEXTzTEXTstringTEXTpatternmatchTEXTc2TEXTvectorTEXTdTEXTxTEXTzTEXTyTEXTabsTEXTdTEXTylongTEXTylong TEXTgen2TEXTvectorTEXTyTEXTgenTEXTgen2boolTEXTserialOkTEXTmsgTEXTserialOkshowFormNE! (! , &,  ,%e<e, 5, #,",    ",%!  1 e, V,"B, < B U,I%T Sd(< (",%  *Y,YY,G, E,"/,%$ #/DX* S, S S, A,  ?," /,% $ # / > R  (  ( TEXTtUtilsAdrtokn TEXTthisTEXTstringTEXTlowertokn TEXTadrObjectTEXTsaveserialTEXTstringTEXTlowertokn TEXTadrObjectTEXTstarttrialTEXTtUtilsAdrTEXTvalidatelongTEXT


TEXTtUtilsAdrTEXTstartTrialTEXTtrialNotRegisteredTEXT
longTEXT
TEXTtUtilsAdrTEXTsaveSerialTEXTtrialExpiredTEXT
TEXTTEXTshowFormTEXTshowForm startTriale!. (!. , &,  ,%&%,  $("",% "&+, $+"*,"&,%!  ,% &* &),  (, "',",% '&&,%& ,   & ",  !(" ,     ,$  .,",   "",% "$. -(< (, ,",   ",% '2< 1, "0,",%'0/^< ^, 6,",   "5,"$,%$'54%] ,$  1,",   "%,%%$1 0< , ",  , ", < ,  >, >,7,+, "*,",%  '*) 4 =< , (",%   < , ",   , "X& $,  #," ,   "(" ,  &!7,!$!7"!6,"!*,"!",!!" !*'!6 !5&"X, " "X,"O,"8,"2, """0,%")"( "0"6""M,%"H"G"M "W #, # #,"#+,"#!,'# ##! #+ #5 #T,"#M,#;#M #S"#d, #^ #d"#s, #n#s"#, #} # $[,"$,"$,$ $'$ $4$Z $+, $$ $* $Y,"$;, $3 $;$Y,$M, $A $K $X %7,"%.,"%$,"%,"%,%% %'%$ %# %. %6&\ &Z,"&, & & &>, & "&=,"&0,%&* &) &0&=&N &Y'%< '%,"',"',"',"' ,' '  ''''$ (5,((5,("(4,"(/,"(*,"(#,( (# (*(/(4 )Y, ))Y,)F,)A,)5,)/,))-)3 )?)E )X,)L%)W )V *8, * *7,"*, ** **- *6 +<, + +;,"+, ++ ++/ +: ,F, , ,E,",, ,, , ,,",D,",8,,2 ,8,D-  - . . , &,TEXTtUtilsAdrtokn TEXTthisTEXTtToolNameTEXTtUtilsAdrTEXTgetToolNameTEXTtDataAdrtokn TEXTtUtilsAdrTEXTdataTEXTrdcTEXTtSerialTEXTtTextTEXTstringTEXTtDataAdrTEXTguiTEXTstartTrialTEXTtlocalserverhostTEXThttp://127.0.0.1TEXTtlocalserverportTEXTTEXTtActionTEXTptaTEXThtmlTEXTgetPageTableAddressTEXTpostargsTEXTargtableTEXTnewtypetablTEXTargtableTEXTwebserverTEXTparseArgsTEXTptaTEXTpathArgsTEXTargtableTEXTstringTEXTupperTEXTptaTEXTmethodTEXTPOSTtoknTEXTptaTEXTrequestHeadersTEXTContent-typeTEXTstringTEXTlowerTEXTptaTEXTrequestHeadersTEXTContent-typeTEXTapplication/x-www-form-urlencodedTEXTnewtypetablTEXTpostargsTEXTwebserverTEXTparseArgsTEXTptaTEXTrequestBodyTEXTpostargstoknTEXTargTableTEXTmsgTEXTtheMessageTEXTargTableTEXTmsgTEXTtheMessageTEXTtTextTEXTTEXTtDataAdrTEXTtextsTEXTtheMessageTEXT

TEXTtTextTEXTtUtilsAdrTEXTvalidatelongtoknTEXTpostargsTEXTactionTEXTmsgTEXTGetting trial licenseTEXTtDateTEXTdateTEXTnextmonthTEXTclockTEXTnowTEXTtUpdatesTabAdrTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTrpcserverTEXTxmlrpc://TEXTtUpdatesTabAdrTEXTserverTEXT:TEXTtUpdatesTabAdrTEXTportTEXT/RPC2TEXTtSerialTEXTrpcserverTEXTtoolsupdateTEXTtrialCodeTEXTtToolNameTEXTdateTEXTnetstandardstringTEXTtDateTEXTpostargsTEXTemailTEXTpostargsTEXTnameTEXTpostargsTEXTsurnameTEXTuserTEXTcommToolsTEXTtToolNameTEXTnumberTEXTtDateTEXTstringTEXThashmd5TEXTtDateTEXTtSerialTEXTscrambleTEXTuserTEXTrootupdatesTEXTserversTEXTtToolNameTEXTserialNumTEXTtSerialTEXTstringTEXTreplaceAllTEXTstringTEXTtDataAdrTEXTTextsTEXTtrialstartedTEXT##toolname##TEXTtToolNameTEXTuserTEXTinetdTEXTconfigTEXThttpTEXTportlongPTEXTtlocalserverportTEXT:TEXTuserTEXTinetdTEXTconfigTEXThttpTEXTportTEXTtActionTEXTtlocalserverhostTEXTtlocalserverportTEXT/TEXTtToolNameTEXT/tokn TEXTadrObjectTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##action##TEXTtActionTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##toolname##TEXTtToolNameTEXTtTextTEXTstringTEXTreplaceAllTEXTtTextTEXT##email##TEXTuserTEXTprefsTEXTmailaddressTEXTtTextTEXTTEXTstartTrialTEXTtheMessagestartupRegistrationCheck[ !u(!u, +&,  ,%&%,  $("",% "&+, $+"*,"&,%!  ,% &*! ,<,<,  < 9,"8,"%, %'88, 07, t,"K,B K s,P"r,"_,U _'rr, jq (", { 6," !," ,  ' ! !,  5, ( 4(" 2, . 2 (" ,      (  (< (",%  *q,< (  u> t,",    s,"#, # P, *"O,":,%4 3 :O` kr H,",%    H,9,+ 7G n," ,   m,",  J, %"I,"5,%/ . 5IZ el*s,< (  s> r,",    q,"#, # N, *"M,":,%4 3 :M^ ip H,",%    H,9,+ 7G p," ,   o,",  L, %"K,"5,%/ . 5K\ gn+,&+, $*TEXTtUtilsAdrtokn TEXTthisTEXTtToolNameTEXTtUtilsAdrTEXTgetToolNameTEXTtDataAdrtokn TEXTtUtilsAdrTEXTdataTEXTrdcTEXTfldebugtoknTEXTuserTEXTcommToolsTEXTtToolNameTEXTLCTEXTdateTEXTtomorrowTEXTdateTEXTuserTEXTcommToolsTEXTtToolNameTEXTLCTEXTclockTEXTnowTEXTuserTEXTcommToolsTEXTtToolNameTEXTLCTEXTnumberTEXTclockTEXTnowTEXTfrontierTEXTbringToFrontboolboolTEXTdailyCallTEXTtUtilsAdrTEXTvalidatelongTEXTdailyCallTEXTdialogTEXTconfirmTEXTstringTEXTreplaceAllTEXTstringTEXTtDataAdrTEXTtextsTEXTaskTrialRegistrationTEXT##toolname##TEXTtToolNameboolTEXTtUtilsAdrTEXTopenUrlTEXThttp://127.0.0.1:5335/TEXTtToolNameTEXT/startTrialTEXTdialogTEXTalertTEXTstringTEXTreplaceAllTEXTstringTEXTtDataAdrTEXTtextsTEXTnoTrialRegistrationTEXT##toolname##TEXTtToolNameboollongTEXTdailyCallTEXTdialogTEXTconfirmTEXTstringTEXTreplaceAllTEXTstringTEXTtDataAdrTEXTtextsTEXTaskLicensePurchaseTEXT##toolname##TEXTtToolNameboolTEXTtUtilsAdrTEXTopenUrlTEXThttp://127.0.0.1:5335/TEXTtToolNameTEXT/startTrialTEXTdialogTEXTalertTEXTstringTEXTreplaceAllTEXTstringTEXTtDataAdrTEXTtextsTEXTnoLicenseRegistrationTEXT##toolname##TEXTtToolNameboolTEXTstartupRegistrationCheckTEXTfldebugboolvalidate h! (! , %&,  ,%&%,  $("",% "<  ,",  , $", ! \, ,,  +, # *," '," ,  ' ' & ) 9, " 8," .," "," ,   "' . - 8 \ \, 2," ,   2, &,  $ 1 [, <# Z," W," K, A K' W V Y ( !, , ,",   ,T, 9,#8,"5,"), )'5 47"R,"F,@ FR","y,"m,"e,Ye m'y x  , #,",", '  (  (",/6( > * , ( ', "&,", '& % * ,N, (M, >,#=,":,".,$ .': 9< L("J, FJ * , ( * , (   ",",  !  (  TEXTtUtilsAdrtokn TEXTthisTEXTtToolNameTEXTtUtilsAdrTEXTgetToolNametoknTEXTuserTEXTcommToolsTEXTnewtypetablTEXTuserTEXTcommToolsTEXTtDateTEXTdateTEXTuserTEXTcommToolsTEXTtToolNamelongTEXTtSerialTEXTuserTEXTrootupdatesTEXTserversTEXTtToolNameTEXTserialNumTEXTstringTEXThashmd5TEXTtDateTEXTtSerialTEXTscrambleTEXTstringTEXTuserTEXTcommToolsTEXTtToolNamelongTEXTisTrialRegistrationTEXTstringTEXThashmd5TEXTdateTEXTuserTEXTcommToolsTEXTtToolNamelongTEXTuserTEXTprefsTEXTmailaddressTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumTEXTstringTEXTuserTEXTcommToolsTEXTtToolNamelongTEXThasBeenRegisteredTEXTSharedOutlineSuiteTEXTinitbooltoknTEXTuserTEXTcommToolsTEXTtToolNamelongTEXTisTrialRegistrationTEXTdateTEXTuserTEXTcommToolsTEXTtToolNamelongTEXTclockTEXTnowlongTEXTisTrialRegistrationlongTEXThasBeenRegisteredlonglongTEXTscratchpadTEXTvalidateerrTEXTtryerrorlongTEXTvalidateVGeneva A`?rHGeneva N5,LANDmac on read (url, adroutline) local (oldtarget = target.set (adroutline)) Frontier.tools.windowTypes.commands.openUrl (url, adroutline:adroutline) local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[url]) SharedOutlineSuite.initSubscription (adrsub) bundle //get cloud info from cache local (adrcloud) if radio.outliner.getCloudInfoFromCache (url, @adrcloud) adrsub^.cloudInfo = adrcloud^ target.set (oldtarget) return (true) Geneva LANDmac local (adrdata = SharedOutlineSuite.init ()) local (adrsub, now = clock.now (), twentyfourhours = 24 * 60 * 60) local (userinfo); new (tableType, @userinfo) local (startticks = clock.ticks (), htmltext = "") for adrsub in @adrdata^.subscriptions if defined (adrsub^.cloudInfo) local (adrserver, flBehindFirewall = user.radio.prefs.flBehindFirewall) if SharedOutlineSuite.findCommunityServer (@adrsub^.cloudInfo, @adrserver) if not defined (adrserver^.flBehindFirewall) adrserver^.flBehindFirewall = user.radio.prefs.flBehindFirewall flBehindFirewall = adrserver^.flBehindFirewall if not flBehindFirewall if not defined (adrsub^.whenLastSubscribe) adrsub^.whenLastSubscribe = date (0) if (now - adrsub^.whenLastSubscribe) > twentyfourhours try with adrsub^.cloudInfo case protocol "xml-rpc" local (params = {"SharedOutline.outlineChanged", user.inetd.config.http.port, "/RPC2", "xml-rpc", {adrsub^.url}, userinfo}) betty.rpc.client (domain, port, registerProcedure, @params, rpcPath: path) "soap" local (params = {"outlineChanged", user.inetd.config.http.port, "/sharedOutline", "soap", {adrsub^.url}, userinfo}) soap.rpc.client (path, registerProcedure, @params, domain, port) adrsub^.whenLastSubscribe = now htmltext = htmltext + "" + adrsub^.title + " " if adrdata^.prefs.flLogNotificationRequests if htmltext != "" radio.log.add ("SharedOutline please notify", htmltext, startticks) UGeneva R'ހ%C*LLANDmac on rpcCall (procedureName, paramList, adrserver) local (response) paramList = {adrserver^.usernum, string.hashMD5 (user.radio.prefs.passwords[adrserver^.passwordName])} + paramList response = xml.rpc (adrserver^.domain, adrserver^.port, procedureName, @paramList, rpcPath:adrserver^.path, protocol:adrserver^.protocol) return (response) ^T Geneva йM! TLANDmac on rpcOutlineChanged (url) local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[url]) if defined (adrsub^) local (startticks = clock.ticks ()) radio.outliner.preCacheUrl (url) FIXME: call subscriptionChanged callbacks??? SharedOutlineSuite.boldenOutline (url) SharedOutlineSuite.openProjectWindow (true, false) local (link = "" + adrsub^.title + "") adrsub^.timeReceivedLastNotification = clock.now () adrsub^.whenLastChanged = adrsub^.timeReceivedLastNotification if adrdata^.prefs.flLogNotifications radio.log.add ("SharedOutline change", link + " changed.", startticks) ^DGeneva  $HLANDmac on startup () SharedOutlineSuite.gui.writeImages () return (true) }Geneva Z$ZR LANDmac This script returns a string which appears in the Status Center on the Radio UserLand home page. SharedOutlineSuite.rdcutils.startupRegistrationCheck () return ( "v" + SharedOutlineInfo.version + ". " + string (SharedOutlineInfo.description)) } Geneva t 9j.LANDmac on subscribeUrl (url) local (adrdata = SharedOutlineSuite.init ()) local (adrsub = @adrdata^.subscriptions.[url]) local (title = "Untitled") local (lo) try try //get title from OPML local (adrcache = radio.outliner.preCacheUrl (url)) local (xstruct) xml.compile (adrcache^.xmltext, @xstruct) local (opmlElem = xml.getAddress (@xstruct, "opml")) local (headElem = xml.getAddress (opmlElem, "head")) local (titleElem = xml.getAddress (headElem, "title")) title = string (titleElem^) if system.environment.isMac title = latinToMac.convert (title) SharedOutlineSuite.read (url, @lo) else scripterror ("Can't subscribe to outline because it could not be read: " + tryerror) SharedOutlineSuite.initSubscription (adrsub, title) adrsub^.title = title return (true)  OGeneva 7(7(#LLANDmac rootUpdates.update (@SharedOutlineSuite) SharedOutlineSuite.buildServerMenu () 9Geneva 7(7( LANDmac SharedOutlineSuite.init () //set up rootUpdates prefs system.temp.SharedOutlineUpdate = SharedOutlineSuite.updateRoot thread.callScript (@system.temp.SharedOutlineUpdate, {}) 9Charcoal  S_LANDmac Set Current Server p)Geneva pL2ڹ^T  *6 >J T` iu z  ' ,8 DP bn        $0 DP ]i t   boldenOutline,buildServerMenu0buttons7 callbacks9_commandsSdataieditiVfindCommunityServerk getIndexCachenFgui% importIcons'init+ initSubscription=menuH menuScriptsK6openProjectWindowKopenSharedOutlineWindowT poll\:rdcutilsdYreadYrequestNotificationsrpcCallrpcOutlineChangedstartupzstatusCenterMessageT subscribeUrl updateRootupdateRootThreadedvirginServerMenuVGeneva f8XL6Geneva ѹ^T\}LANDmac local (adrdata = SharedOutlineSuite.init ()) loop try { SharedOutlineSuite.poll () } try { SharedOutlineSuite.requestNotifications () } thread.sleepFor (20) 6GC$^, enabledscriptGtArial FF2LANDmac on finalFilter (pta) pta^.renderedText = string.replace (pta^.renderedText, "[[title]]", "") return (true) ����������������������������� ���-����Geneva���������������������������� ��������������Eu`Q�������2LAND������mac ������������on firstFilter (adrPageTable) return (true) �����������������������*��[����Geneva���������������������������� ��������������Eu7a���r���L�3*lLAND������mac ������������on pageFilter (pta) if typeOf (pta^.template) == outlineType or typeOf (pta^.template) == wpTextType table.assign (@pta^.template, string (pta^.template)) if typeOf (pta^.template) == stringType and not pta^.indirectTemplate pta^.template = string.replace (pta^.template, "<title>", "[[title]]") html.addPageToGlossary (pta) return (true) �����������������������������������������������y���.���EF�������� ���� ��� ����$���0 ����; finalFilter����|�/ firstFilter����|�9 pagefilter����|���VGeneva���������������������������� �����������P�E��$����������������������������I�������E������7�������� ����url���http://127.0.0.1/SharedOutline/���I���Y�������U���$���^&v^&v�������� ���� ��� ����linetext��� Add Serverpath��� addServer.wsf���Y���O�������K���$���^C>^C>�������� ���� ��� ����linetext���Homepath��� index.wsf���O���Z�������V���$���]w]w�������� ���� ��� ����linetext��� Preferencespath��� editPrefs.wsf���Z���V�������R���$���J\\J\\�������� ���� ��� ����linetext���Registerpath��� register.wsf���V���b�������^���$���Z'LZ'L�������� ���� ��� ����$linetext���Register for trialpath���startTrial.wsf���b���j�������f���$���ZZ�������� ���� ���' ����,linetext���Register for Trial Versionpath���startTrial.wsf���j���T�������P���$���^C&^C&�������� ���� ��� ����linetext���Serverspath��� servers.wsf���T���c�������_���$���^,r^,r�������� ���� ��� ����linetext��� View Outlinepath���viewOutline/index.wsf���c��������,���`�������^C>�������� ���� ��� �������( ����4���@ ����I���U ����h���t ������� ������� ���� Add Server�����3Home����� Preferences�����Register�����YRegister for trial�����Register for Trial Version�����)Servers����� View Outline�������VArial����������������������������� �������������������������������������������������@����????GIF89a_�2���@@@ـtttgggҋuuufffסvvv000hhh ```ȉ֌eeePPPɹpppwwwdddŇsssxxx���!�����,����_�2�@pH,Ȥrl:ШtJZL_!趜m|bn6;~<,|W>uXD]]R  44 ++4ˌV),HG |ؐ#BHC�H8!a�G#$  FN6~�H`S@@3դK`ү^TSѡ.ޜɶ۷pʝKہ81q &$F%aGu4$Q #PR `�FPs<?2\Q%.>(Niɧek3nBR "2g{}KnF,X ~;hWG>{}{]zWx#0 %p�pC 4`r7@!>#R!h‰H#"BT@)DiH&eXD,X@ uP>>D9 1@p_-EyfZp�_0GBa AseRݑGq?&D >EpQhdxP"FYD1jHpEZ 0fY Hyv)LXlZJ 4L:ܨlF:?KzlPidFg)FtQ A(6Nt=A$h$*' H A 17 s0 7܃!s̰_,)o\1; S,Ѐ43XAG#= H[P4LK݀W7mB{5G{-4[3|hs}p-8 < ./w?v nyw}}78$ymwޛOn@݌wN@P@ L'p:Y:WzN W�T컧N긧7{<t/@4|}2o=ˣ~>иL�A��;��@��a����GIFfGIF89a�2���ttt%''$```Ҹǐ @@@ЀnPPPϲ!XK(fff���!�����,�����2��'dilp,tmxi炙pH,a?O yI�HZAP;~ذxlM,¾l CG5 })pp+�@xv&M+},'e%;%{~h%3h7E$+s$1 #"-$:-,"u$h́/+/ MIn0DaCyhGfH60Š/*^`h ܼA@>L<ń ܉bLbg8!g7 'a+EaM"ړC<R+8JaL]vS|"+zpu ?@pVR*ܝqnU `Vn&8n,`Xg! leؕ2Daq$8LA, <T/P]LT{EaX"X5E^yhan%G@:bn)|i)X ! NK֍0]�`)%N7<Rw=BQM 4@\ԇ}0Q LEw/x R!Frk18 Y0@&3yqٕP3n0"`59_S$} MZg gEh[. ֤|ҥ$6 yW6d9Lfm>ܚ6i㜏d&} }7� F% [ U:Zjd^b3ǥvp:擥}%xR5C ,$ i'oBek%"q9*u*j#f:{ k ;<8BNGԴ;oMtyqM (I�UL|/lDjj,߼jL)�?@̆c>,Mbn1p< .tkBPg+e>d[nAD"6j�91 j^C--ÃSa, AP%3%c*B/0LV!•sKl-XWK;C` H`eNwJE QG~r1A]^!FiW*q3Mk$c ;#zś9==  cuB&؎%Yad 88X)2bH7H@4>X;[],�tn @2e�p} ~&$TQP!ZZ=h�+`0QТ1\Iv*,,~�]CQ"8ߤ7 /-5O8ѤL1/E)H`L2'P� )мQ %=Jy8`X%xF㗼X(t L&0͐5 IMUh`4E$ r&B ܦ9)tgIş>uЁ~� @JЂMBІ:ԟ�D'JъZͨF7юz H%J(MJMҖ0LgJӚ8)MӞ@ PJԢHMRԦ4� *T@ըZWTUPSW:ծVի]E+XɺUuhe+\zָծoū\ ׹浪w *Pְua 6U,a#;NֱMb)kbͬf!;zfOZЦe-i;]�nqͭWEnr{\7-.q+]RrV h@‹w(oyw5|^/|wuo{x]/+%,a]0,gMGLbP&&1E|8/qeb3quL871,8.�qlb%KVrzd(G9T{e-k9,re(b2Ѽ1Ǹi݌��;��a��J���������������� ������������ ���F����Y���a����l���t������H���R�����������������Q���_������������P���^���������� GreyBack.gif���5????GIF89a�������!�����,�������@�;REevectorsLogo.gif��� REhead.gif�LREheadBack.gif���????GIF89a�2���vvvظhhhɈeeeѹttt٤fffuuuggg������������!�����,�����2�@: 'dihav4 O%|`@Drlr H8. f<�; space.gif���/GIFfGIF89a�������!����,�������D�; spacer.gif���1????GIF89a������!����,������@X�; TabBak.gif���3????GIF89a�������!�����,���������; TabOffBak.gif���8????GIF89a�������!�����,������� �; TabOffEnd.gif���H????GIF89a����������!�����,�������q" Sp3[Oou└�;TabOffStart.gif���H????GIF89a����������!�����,�������o)lFQ|؁(�; TabSelBak.gif���7????GIF89a��������!�����,������� ��; TabSelEnd.gif���G????GIF89a�����������!�����,�������q" Sp3[Oou�;TabSelStart.gif���G????GIF89a�����������!�����,�������o)lFQ|؁�; tabsStart.gif���:????GIF89a�������!�����,������� o�;��VArial����������������������������� �����������������������������������������������J��"������������{OJJ\l�����������default��� ����������������Geneva���������������������������� ��������������J\lJ\l�����_LAND������mac ������������ ����list� ������������������Geneva���������������������������� ��������������J\lJ\l�����_LAND������mac ������������ ����TEXTHome���� TEXTindex����list� �����������"�������Geneva���������������������������� ��������������J\lJ\l�����_LAND������mac ������������ ���� TEXTServers���� TEXTservers����list� �����������(�������Geneva���������������������������� ��������������J\lJ\l�����_LAND������mac ������������ ����TEXTPreferences���� TEXTeditPrefs��VGeneva���������������������������� ���������A�Q�=������������������������"��?����������`��������������� ������� �������"�������+ ����6���A ����F���P ����Y���b ����g���q ����walink���008000bgcolor���FFFFFFflRender labelsList���defaultlink���0000FFspaceGif���spacetext���000000vlink���800080��VArial����������������������������� �����������������������������������������������?�� �������������Geneva���������������������������� ��������������7'Z'.����� LAND������mac ������������<html> <head> <meta http-equiv="content-type" content="text/html;charset=ISO-8859-1"> <meta name="generator" content="Adobe GoLive 5"> <title >SharedOutline: {title} \
{SharedOutlineSuite.gui.imageRef ("REhead.gif", 50, 193)}{SharedOutlineSuite.gui.imageRef ("REheadBack.gif", 50, 5)} {SharedOutlineSuite.gui.imageRef ("REevectorsLogo.gif", 50, 95)}
\
{SharedOutlineSuite.gui.imageRef ("spacer.gif", 5, 5)}

{title}

{SharedOutlineSuite.rdcutils.showForm()}
{bodytext}
Geneva  Z"vLANDmac SharedOutline: {title} \
{SharedOutlineSuite.gui.imageRef ("REhead.gif", 50, 193)}{SharedOutlineSuite.gui.imageRef ("REheadBack.gif", 50, 5)} {SharedOutlineSuite.gui.imageRef ("REevectorsLogo.gif", 50, 95)}
{SharedOutlineSuite.gui.tabs.row()}

{title}

{SharedOutlineSuite.rdcutils.showForm()}
{bodytext}
O$w$ Z&  defaultlabels!;VGeneva 5XnZVArial nFFFF000000060001001777AA00000000006B000000001001710000001-77FF6FFE18000004800480642200-11350642222FFFF0103CC000010000003700000001013540840642222A0028E00036642BE000020000013B00000000135,#title "Add Server"

Before registering with a Radio Community Server, please make sure that the SharedOutlineServer tool has actually been installed on the server. To regsiter with a server, fill in the following form and click the Add button:

{SharedOutlineSuite.gui.createServer ()}00040000000B0000000201137100050000000A00000002013700006000000620000000210C310FFFF0C00000 10 A20FFFF0900000 10 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002311823F311823F000A0000001500000002642222642222000B00000005000000020000C0000001600000001CCC22FB13D80000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĹ^&%5+fuFFFF000000060001001777AA000000000076000000001001710000001-77FB6FFE18000004800480696200-110410A10410A0696222FFFF0103321000010000003800000001034C40840696222321028E0008A696C900002000003520000000034C,#title "Preferences"

On this page, you can change some general preferences related to the Shared Outline tool.

To determine whether an outline which you subscribed to has changed, the tool may have to periodically contact the Radio Community Server hosting the shared outline and request a current copy. We recommend that the intervall between subsequent polls not be set lower than 60 seconds in order not to overload the server.

Alternatively, the tool may be able to request to be notified of any changes by the server hosting the shared outline. If logging of notifications and notification requests is activated, relevant messages will appear in the Events log.

{SharedOutlineSuite.gui.editPreferences ()}00040000000B000000020134E100050000000A00000002034E00006000000620000000210C310FFFF0C00000 10 A20FFFF0900000 10 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002311823F311823F000A0000001500000002696222696222000B00000005000000020000C00000012000000013218B6B0000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĹ]!Lu"t eFFFF000000060001001777AA000000000078000000001001710000001-76FF6FFE18000004800480614A200-149049C49049C0614A222FFFF0103440000010000003A00000001068B40840614A22263D028E00013E614A600002000006910000000068B,#title "Home"

Welcome to the SharedOutline tool for Radio UserLand. This tool allows a group of users to cooperatively edit outlines hosted on a Radio Community Server.

These are the shared outlines you are currently subscribed to:

{SharedOutlineSuite.gui.editSubscriptions ()}

To subscribe to a shared instant outline, enter (or paste) the URL of its OPML file into the form above and hit the Subscribe button. After the OPML file has been retrieved from the server, the outline should show up at the top of the list of outlines you are subscribed to above.

Note that it is possible to subscribe to a shared outline without being registered with the Radio Community Server that hosts it. When you want to edit the shared outline in question, you will be prompted for your account details and if you are not yet registered with the server, it is possible to register a new account at that point.

Alternatively, you can first provide the details for an existing or new account on a Radio Community Server via the Add Server page. After your account details have been confirmed with the server, you can view a list of outlines available from that server on the Servers page. You can also subscribe to the listed outlines directly from that page without having to enter any URLs.

If you have Marc Barrot's activeRenderer tool installed, you can actually view all shared outlines right here in your browser.

00040000000B000000020168D100050000000A00000002068D00006000000620000000210C310FFFF0C00000 10 A20FFFF0900000 10 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002326B23D326B23D000A0000001700000002614A222614A222000B00000005000000020000C0000001A00000001440430D0FD1013F0000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĹ^-vc eeFFFF000000060001001777AA000000000071000000001001710000001-7FFB6FBE18000004800480640200-1383C383C0640222FFFF0103290000100000036000000010A9408406402228A038C000336409E00002000000AE00000000A9,#template "default" #title "Save Serial Number" {[string.mid(nameOf(parentOf(adrObject^)^), 1, sizeOf(nameOf(parentOf(adrObject^)^))-7) + "suite"].rdcutils.saveSerial()}00040000000F0000000301300AB0000500000009000000020AB00006000000630000000210A210FFFF0A00000 40 C310FFFF0C00000 40 000700000019000000010201800008000000970000000140,Geneva40,4030 10000900000015000000023A03353A0335000A0000001500000002640222640222000B00000005000000020000C000000160000000129211F5517A0000F0000005200000000400 10 4,77A4,D 4,D 4,4,D 4,D 4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA Z' #zkeFFFF000000060001001777AA000000000071000000001001710000001-76FF6FFE1800000480048064E200-1595D595D064E222FFFF0103C20000100000035000000010F84084064E222DB028E0004264E600002000000FD00000000F8,#title "Servers"

On this page, you can edit the preferences for all the Radio Community Servers you are subscribed to and view a list of shared outlines available from these servers.

{SharedOutlineSuite.gui.viewServers ()} 00040000000A0000000201FA1000500000009000000020FA00006000000620000000210C310FFFF0C00000 10 A20FFFF0900000 10 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002311823F311823F000A000000150000000264E22264E222000B00000005000000020000C0000001600000001C2C0319F3A30000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĹ]+" h9mFFFF000000060001001777AA000000000071000000001001710000001-7FFB6FBE18000004800480640200-1383C383C0640222FFFF0103360000100000036000000010B1408406402228A038C000336409C00002000000B600000000B1,#template "default" #title "Register for Trial Version" {[string.mid(nameOf(parentOf(adrObject^)^), 1, sizeOf(nameOf(parentOf(adrObject^)^))-7) + "suite"].rdcutils.startTrial()}00040000000F0000000301380B30000500000009000000020B300006000000630000000210A210FFFF0A00000 40 C310FFFF0C00000 40 000700000019000000010201800008000000970000000140,Geneva40,4030 10000900000015000000023A03353A0335000A0000001500000002640222640222000B00000005000000020000C000000160000000136291C801C60000F0000005200000000400 10 4,77A4,D 4,D 4,4,D 4,D 4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA Z'#zkm+{OJL+default  Geneva L+L+_LANDmac list  Geneva L+L+_LANDmac TEXTHome TEXT../indexlist %Geneva L+L+_LANDmac TEXTServersTEXT../serverslist +Geneva L+L+_LANDmac TEXTPreferencesTEXT../editPrefsVGeneva AQ=+o Geneva LɹLm  LANDmac SharedOutline: {title} {activeRendererHeader ()} \
{SharedOutlineSuite.gui.imageRef ("REhead.gif", 50, 193)}{SharedOutlineSuite.gui.imageRef ("REheadBack.gif", 50, 5)} {SharedOutlineSuite.gui.imageRef ("REevectorsLogo.gif", 50, 95)}
{SharedOutlineSuite.gui.tabs.row()}

{title}

{bodytext}
FFFF000000060001001777AA00000000006F000000001001710000001-7FFF6FBE1800000480048064E200-1123123064E222FFFF0103CF0000100000036000000010EB4084064E222E7028E0004264E1B00002000000F000000000EB,#title "View Outline" {SharedOutlineSuite.gui.viewOutline ()}

Outline rendering powered by Marc Barrot's excellent activeRenderer tool.

00040000000A0000000201ED10005000000130000000403E1530ED00006000000620000000210C310FFFF0C00000 10 A20FFFF0900000 10 00070000002F00000002030180101600008000000970000000140,Geneva40,4030 10000900000015000000023B92553B9255000A000000150000000264E22264E222000B00000005000000020000C0000001800000001CFCE3B15A41580000F0000005200000000400 10 4,77A4,4,D4,D4,4,D4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAL|^(Md=uq.LL  !- 3 #labelsTab T #template X index _ub7Z  * 4@ HT _k r~  % 0< H#filtersL#ftpSiteL #glossaryLn#imagesL #labelsTabL#prefsL= #templatelabels #templates)V#tools* addServer* editPrefs0index8 saveSerialDserversI startTrialOY viewOutlineeVGeneva \[C;b\$Geneva UVChLANDmac on close (adr) local (atts) window.attributes.getAll (@atts, adr) if atts.flHaveCustody SharedOutlineSuite.rpcCall ("SharedOutlineServer.close", {atts.url}, atts.adrCloud) return (true) \Geneva F_F_>&LANDmac on opCursorMoved (adrWindow) msg (op.getCursor () + " -- " + clock.ticks ()) if defined (temp.inOpCursorMoveCall) and temp.inOpCursorMoveCall return (true) if mouse.button () temp.inOpCursorMoveCall = false return (true) if wp.inTextMode () return (true) local (nodetype) if op.attributes.getOne ("type", @nodetype) if nodetype == "itProtectedOutlineElement" temp.inOpCursorMoveCall = true local (oldDisplay = op.getDisplay ()) local (oldCursor = op.getCursor ()) op.setDisplay (false) editMenu.undo () speaker.beep () op.setCursor (oldCursor) op.setDisplay (oldDisplay) temp.inOpCursorMoveCall = false return (true) *>Geneva =@^,)LANDmac on save (adr, flClosing) local (adrdata = SharedOutlineSuite.init ()) local (procedureName) if flClosing procedureName = "SharedOutlineServer.saveAndClose" else procedureName = "SharedOutlineServer.save" local (atts, cloud, adrCloud) window.attributes.getAll (@atts, adr) bundle //check cloud attribute cloud = atts.adrCloud^ if not defined (cloud.domain) table.rename (@cloud.server, "domain") if not defined (cloud.registerProcedure) cloud.registerProcedure = "xmlStorageSystem.requestNotification" adrCloud = @cloud local (opmltext, xstruct) bundle //compile xml/opml struct opmltext = op.outlineToXml (adr, adrCloud:adrCloud) xml.compile (opmltext, @xstruct) bundle //patch title attribute local (nomad) nomad = xml.getAddress (@xstruct, "opml") nomad = xml.getAddress (nomad, "head") xml.getAddress (nomad, "title")^ = window.getTitle (adr) bundle //remove custom node types local (nomad) nomad = xml.getAddress (@xstruct, "opml") nomad = xml.getAddress (nomad, "body") on removeCustomTypes (elem) local (nomad) for nomad in elem case xml.convertToDisplayName (nameOf (nomad^)) "outline" if typeOf (nomad^) == tableType removeCustomTypes (nomad) "/atts" if defined (nomad^.type) if defined (SharedOutlineNodeTypes.[string (nomad^.type)]) delete (@nomad^.type) return (true) if typeOf (nomad^) == tableType removeCustomTypes (nomad) bundle //decompile xml/opml struct opmltext = xml.decompile (@xstruct) opmltext = string.replace (opmltext, "", "") if system.environment.isMac opmltext = string.macToLatin (opmltext) scratchpad.xmlStruct = xstruct op.newOutlineObject (opmltext, @scratchpad.opmltext) local (response) response = SharedOutlineSuite.rpcCall (procedureName, {atts.url, opmltext}, atts.adrCloud) if flClosing window.attributes.setOne ("flHaveCustody", false, adr) if defined (atts.flNewOutline) and atts.flNewOutline //subscribe to outline now try if not defined (adrdata^.subscriptions.[atts.url]) SharedOutlineSuite.subscribeUrl (atts.url) SharedOutlineSuite.openProjectWindow (true, false) window.attributes.setOne ("flNewOutline", false, adr) return (boolean (response)) on save (adr, flClosing) //work on copy of outline while removing custom nodeTypes local (adrdata = SharedOutlineSuite.init ()) local (procedureName, opmltext, response) if flClosing procedureName = "SharedOutlineServer.saveAndClose" else procedureName = "SharedOutlineServer.save" local (atts) window.attributes.getAll (@atts, adr) local (cloud, adrCloud) bundle //if defined (atts.adrCloud) cloud = atts.adrCloud^ if not defined (cloud.domain) table.rename (@cloud.server, "domain") if not defined (cloud.registerProcedure) cloud.registerProcedure = "xmlStorageSystem.requestNotification" adrCloud = @cloud op.newOutlineObject (op.outlineToXml (adr, adrCloud:adrCloud), @scratchpad.opmltext) local (lo = adr^) bundle //remove our node types local (oldtarget = target.set (@lo)) local (oldcursor = op.getCursor ()) local (olddisplay = op.getDisplay ()) local (oldexpstate = op.getExpansionState ()) op.setDisplay (false) op.fullExpand () op.firstSummit () local (nodeatts) loop if op.attributes.getAll (@nodeatts) if defined (nodeatts.type) if nodeatts.type == "itCanEditOutlineElement" or nodeatts.type == "itProtectedOutlineElement" delete (@nodeatts.type) op.attributes.makeEmpty () op.attributes.addGroup (@nodeatts) if not op.go (flatdown, 1) break op.setExpansionState (oldexpstate) op.setCursor (oldcursor) op.setDisplay (olddisplay) target.set (oldtarget) opmltext = op.outlineToXml (@lo, adrCloud:adrCloud) bundle //patch attributes: title, windowTop, windowLeft, windowBottom, windowRight local (nomad) xml.compile (opmltext, @xstruct) nomad = xml.getAddress (@xstruct, "opml") nomad = xml.getAddress (nomad, "head") xml.getAddress (nomad, "title")^ = window.getTitle (adr) local (x, y, h,v) window.getPosition (adr, @x, @y) window.getSize (adr, @h, @v) xml.getAddress (nomad, "windowTop")^ = string (y) xml.getAddress (nomad, "windowLeft")^ = string (x) xml.getAddress (nomad, "windowBottom")^ = string (y + v) xml.getAddress (nomad, "windowRight")^ = string (x + h) opmltext = xml.decompile (@xstruct) opmltext = string.replace (opmltext, "", "") if system.environment.isMac opmltext = string.macToLatin (opmltext) response = SharedOutlineSuite.rpcCall (procedureName, {atts.url, opmltext}, atts.adrCloud) if flClosing window.attributes.setOne ("flHaveCustody", false, adr) if defined (atts.flNewOutline) and atts.flNewOutline //subscribe to outline now try if not defined (adrdata^.subscriptions.[atts.url]) SharedOutlineSuite.subscribeUrl (atts.url) SharedOutlineSuite.openProjectWindow (true, false) window.attributes.setOne ("flNewOutline", false, adr) return (boolean (response)) so.dF_  , 1close h opCursorMoved jsave ms i+Z% fb$ٸi6  .itEditSharedOutline itProjectListfu`ٹ^UB  5A Zf SharedOutlineInfoXSharedOutlineNodeTypes(SharedOutlineRpcHandlers*NSharedOutlineSoapHandlers+SharedOutlineSuiteBSharedOutlineThreadSharedOutlineWebsitef:SharedOutlineWindowTypesDV Lucida GrandeAl*<Geneva ٹ^U`_LANDmac SharedOutlineInfo author authorEmail description homePageUrl name releaseDate version SharedOutlineNodeTypes SharedOutlineRpcHandlers SharedOutlineSoapHandlers SharedOutlineSuite SharedOutlineThread SharedOutlineWebsite SharedOutlineWindowTypes dmddddddddmdmdmdmdmdmdmXChicago? Lucida Grande AGeneva 6]Chicago? ENChicago? Lucida Grande