]½ð.X Â€;Ae’—Geneva€/ïëV¸õºj¹n*†  " .: GS ^j p| …abouth…úcssh‰ dayTemplatehÖÍ itemTemplatehÍe javascripth¢prefsh+qtemplateh³™€* kFFFF000000060001001777AA000000000068000000001001710000001-7FFB6FBE1800000‚‚48004806117200-1‚0Â6‚117222FFFF0‚‚10‚‚3‚283000010000003B0000000104B440840‚‚6‚1172224AE038E00010A61172500002000004BA000000004B4,#title "Thanks"
Home Preferences Register Help Faq

activeRenderer: registration

Thank you for registering your copy of activeRenderer.

You serial number is on its way to your mailbox.

Once you've received the registration message, copy the serial number and paste it into this form.

00040000000A0000000204B6000050000000F0000000301014B60000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚14E28C3‚14E28C000A00000017000000026‚1172226‚117222000B00000005000000020Â000C00000015000000012831F6‚757E0‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,“x4,¡m 4,ÛÐ{4,t`k4,/RPC4,sÛ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹=%Þ¹Ièj´3x”Òôµ\ô½D€ ¡€«„ô.¸õ–ê¹*\ACG“ol1;GIFfGIF89a ñ1ÿÿÿÞÞÞ­­­!ù, „©Ëíc+;ol2DGIFfGIF89a ‘ÞÞÞ­­­ÿÿÿ!ù, ”©Ë¢”Îx,EzAT;ol3FGIFfGIF89a ‘ÞÞÞÿÿÿ!ù, ”b©šÜŒoJnÈ—Kï€I;JnÈ—Kï€I;€€„ô¸ô§ ¹t €Šðt¶Ò²¬¹R3 )1 <] dz€ X€‘ÅÛt®Geneva ¹*\=¹*\=TCàOLANDÿÿÿÿÿÿmac on save ( adrItem, flClosing ) local ( atts ) local ( adr = window.frontmost () ) window.attributes.getAll ( @atts, adr ) if defined ( atts.type ) and atts.type == "outlinerFile" Frontier.tools.data.windowTypes.outlinerFile.save ( adr ) window.attributes.getAll ( @atts, adr ) // Update f attribute if defined ( atts.f ) if ( ( string.patternMatch ( "gems", atts.f ) > 0 ) || ( string.patternMatch ( "instantOutliner", atts.f ) > 0 ) ) local ( outlinesPath = user.radio.prefs.wwwfolder + "outlines" + file.getPathChar() ) local ( outlinesFile = file.fileFromPath ( atts.f ) ) file.copy ( atts.f, outlinesPath + outlinesFile ) return true else return false €€$datatabl.¸þ¸.¸þ¸.€€$datatabl.¸þ¸.¸þ¸.€WdatatablG¸þ¸.¸þ¸. createdSat, 04 May 2002 13:41:08 GMT€€$datatabl.¸þ¸.¸þ¸.€WdatatablG¸þ¸.¸þ¸. createdSat, 04 May 2002 13:41:22 GMT€€€€€€€š€ëÅÛ000000060001001777AA000000000068000000001001710000001-7FFF6FBE1800000‚‚4800480613E200-1‚0Â6‚13E222FFFF0‚‚10‚‚3‚1E0000010000003B0000000102D840840‚‚6‚13E2222AE038E000131613E250000200€õ€&¼DïHC Geneva ¹ úy¹"¥Û™¦ LANDÿÿÿÿÿÿmac on register () if activeRendererSuite.utils.serialOk() dialog.notify(string.replace(activeRendererData.guichuncks.texts.regNumNotify, "##num##", user.rootUpdates.servers.activeRenderer.serialNum)) else case dialog.ThreeWay(activeRendererData.guichuncks.texts.askRegistrationCOnfirm, "Cancel", "Register", "Yes") 1 2 activeRendererSuite.utils.openUrl(activeRendererData.prefs.serialUrl+"$msg="+string.urlencode("activeRendererData.guichuncks.texts.serialPut")) 3 activeRendererSuite.utils.openUrl (activeRende€‘&‚l"žGeneva »—’»—’iDGÖLANDÿÿÿÿÿÿmac on update( procID = 0 ) Information 1/28/03; 10:33:50 PM by MB Added fixing of end of lines for Windows systems 1/15/03; 7:11:36 PM by MB Update external elements right after Frontier database update Do not wait for next Radio restart. 11/15/02; 2:25:22 PM by MB Only test system.temp.activeRenderer.instal' modification date if it is defined Set an updating semaphore in system.temp.activeRenderer before update, reset it when finished 11/14/02; 3:36:27 PM by MB Terminate calling thread before starting a new instance of the instal script 11/4/02; 3:11:46 PM by MB Corrected a bug in the calling thread waking process, reported by Doug Baron 22.10.02; 21:15:39 Uhr by AR/MB Code review with Andre Radke Suppressed the use of a scratchpad subtable Relaunch installation if instal script was updated 9/23/02; 2:30:40 PM by MB Removed call to Frontier.bringToFront 7/4/02; 1:51:55 PM by MB Added support for logging failure 6/29/02; 7:56:54 PM by MB Added support for installation thread wake up 6/28/02; 7:17:32 PM by MB Add logging with number of downloaded parts. local startTime = clock.ticks() // initialize time stamp ctParts = 0 // number of updated parts basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" modCSS = timeModified ( @activeRendererData.texts.css ) modJavascript = timeModified ( @activeRendererData.texts.javascript ) modXslHtml = timeModified ( @activeRendererData.texts.xsl_html ) modXslJs = timeModified ( @activeRendererData.texts.xsl_js ) modRsLite = timeModified ( @activeRendererData.texts.rslite ) modPrefs = timeModified ( @activeRendererData.texts.prefs ) modTemplate = timeModified ( @activeRendererData.texts.template ) on getVersion ( txt ) // Returns a version number from the parameter string local matchList = {} pattern = "version[: ]+([0-9\.a-zA-Z]+)" version = "" regex.extract ( pattern, @txt, @matchList, {1} ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on eolFix ( txt ) // Fixes end of line marker according to operating system regex.subst ( "[\r\n]+", "\r", @txt ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems txt = string.replaceAll ( txt, "\r", "\r\n" ) return txt if ! defined ( system.temp.activeRenderer ) // create temporary table if needed new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.updating = true // set updating semaphore radio.log.add ( "activeRenderer", "Checking \"" + user.rootUpdates.servers.activeRenderer.server + "\" for updates.", startTime ) window.about() // Bring Radio status window to the front try rootUpdates.update (@activeRendererSuite, true, @ctParts ) // check for updates if ctParts > 0 // if some parts were downloaded radio.log.add( "activeRenderer", ctParts +" new part(s) loaded from \"" + user.rootUpdates.servers.activeRenderer.server + "\".", startTime ) else // no available parts radio.log.add( "activeRenderer", "No new part(s) found on \"" + user.rootUpdates.servers.activeRenderer.server + "\".", startTime ) else // catch update errors msg ( tryError ) radio.log.add ( "activeRenderer", "Update failed: " + tryError, startTime ) if defined ( system.temp.activeRenderer.instal ) && timeModified ( @activeRendererSuite.instal ) > timeModified ( @system.temp.activeRenderer.instal ) // if update was launch at startup (autoupdate true) and the instal code was modified during update radio.log.add( "activeRenderer", "activeRendererSuite.instal was updated, re-launching installation.", startTime ) if procID > 0 && thread.exists ( procID ) // if called from a waiting parent thread thread.kill ( procID ) // terminate the calling thread before starting a new one. system.temp.activeRenderer.instal = activeRendererSuite.instal thread.callScript ( @system.temp.activeRenderer.instal, {} ) // Relaunch installation code in a separate thread else // no modification of instal code, check external elements instead if timeModified ( @activeRendererData.texts.css ) > modCSS // css stylesheet was modified local cssPath = basePath + file.getPathChar() + "outliner.css" currentVersion = getVersion ( file.readWholeFile ( cssPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.css ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file updated.", startTime ) if timeModified ( @activeRendererData.texts.javascript ) > modJavascript // javascript code was modified local jsPath = basePath + file.getPathChar() + "outliner.txt" js = eolFix ( string ( activeRendererData.texts.javascript ) ) currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) js = string.replaceAll ( js, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code updated.", startTime ) if timeModified ( @activeRendererData.texts.xsl_html ) > modXslHtml // xsl/html renderer was modified local xslPath = basePath + file.getPathChar() + "outliner_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_html ) ) currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code updated.", startTime ) if timeModified ( @activeRendererData.texts.xsl_js ) > modXslJs // xsl/javascript renderer was modified local xslPath = basePath + file.getPathChar() + "outliner_js_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_js ) ) currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code updated.", startTime ) if timeModified ( @activeRendererData.texts.rslite ) > modRsLite // rsLite code was modified local jsPath = basePath + file.getPathChar() + "rslite.txt" js = eolFix ( string ( activeRendererData.texts.rslite ) ) currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code updated.", startTime ) basePath = user.radio.prefs.wwwfolder + "outlines" if timeModified ( @activeRendererData.texts.prefs ) > modPrefs // #prefs.txt was modified local prefPath = basePath + file.getPathChar() + "#prefs.txt" prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge true" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add ( "activeRenderer", "#prefs.txt file updated in outlines folder.", startTime ) if timeModified ( @activeRendererData.texts.template ) > modTemplate // #template.txt was modified local templatePath = basePath + file.getPathChar() + "#template.txt" currentVersion = getVersion ( file.readWholeFile ( templatePath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.template ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "#template.txt file updated in outlines folder.", startTime ) if procID > 0 // If a a calling process id was passed along if thread.exists ( procID ) and thread.isSleeping ( procID ) // if the process is still there and paused thread.wake ( procID ) // Wake up the dozing thread system.temp.activeRenderer.updating = false // reset updating semaphore return true bundle // test code update () €„„€„„„€„€„„„€€€€€€€€€€€€€€€€;_.»¯ñLPš ol2DGIFfGIF89a ‘ÞÞÞ­­­ÿÿÿ!ù, ”©Ë¢”Îx,EzAT;ol3FGIFfGIF89a ‘ÞÞÞÿÿÿ!ù, ”b©šÜŒoJnÈ—Kï€I;space/GIFfGIF89a€ÿÿÿ!ù,D;VArial _€„ôB¸ô§ ¹ùéˆ  * 0< LX ^ guichuncks« images–ªprefsðÛrootupdatetableÔ¯textsô«ñvª¾€6„ôV¸ô§ ¸ö%  "4 @Y e¦ «½¸ô§ É Ñauthor Marc Barrot authorEmailmba€‡£%Geneva T¹ǵ¹"õ0,'ïLANDÿÿÿÿÿÿmac activeRendererSuite.utils.register() €€ ¸ô§ ¸ö¶ VÀGeneva ¸ô§ ¸ô§ 'ïLANDÿÿÿÿÿÿmac on any (pta) //boilerplate for your responder pta^.responseHeaders.["Content-Type"] = "text/html" pta^.code = 200 //everything was OK pta^.responseBody = "" //build response return (true) €€€€€V2.¸ô§ ¸ô§ any?&2“.¸ô§ ¸ô§ AI Q condition3(string.lower (path) beginsWith "/activerenderer/")enabledmethodsØ@ˆ“€<îÚ ›Geneva (€; ¦FFFF00000006€S¿e~¶Ò²¬¹-=Û )1 <Z e† £«P° º¾ ÅÛ ß autobackupdbnameactiveRenderer.rootdialogs infomethodtoolsupdate.askUpdateParts lastupdateTue, 04 Jun 2002 14:54:02 GMTmethodtoolsupdate.updateopenLogport serialNumserverupdates.xml-rpc.itURLVGeneva ý¿A(\6‡€T;V¸ô§ »¯ñ  "4 @_ k¯ ´Æº‰ipÒ Úauthor Marc Barrot authorEmailmbarrot@dig.fr descriptionOutline rendering for Radio homePageUrl@http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.htmlnameactiveRenderer releaseDateversion1.4.61ion1.0rc2ubmitT€ cRôL¸€|¹*\¼ ~ ’ &† “Ä Ñ@ JaskRe€Z€¥† ZGeneva T¹$B¹6 ö'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/" ) webbrowser.bringtofront () €€Þ€»†~Å Geneva ¹=cA¹=cAŒ?<2LANDÿÿÿÿÿÿmac on nodeState ( day, tpl = "" ) header comments vs 1.02 last updated 6/21/02 by MB local ( imgPath = radio.weblog.getUrl () + "gems/activeRenderer/" ) wedgeImg = imgPath + "ol2.gif" wedgeTitle = "collapse" nodeClass = "expanded" titleWeight = "bold" if !flArchivePage and ( ( tpl == "day" and !activeRendererData.prefs.outlineItems ) or ( tpl == "item" ) ) local ( adrblog = radio.weblog.init () ) local ( adrposts = @adrblog^.posts ) local ( adr = @adrposts^ [ sizeOf ( adrposts^ ) ] ) local ( t = adr^ ) local ( d = date.shortString ( t.when ) ) if ( d != day ) wedgeImg = imgPath + "ol3.gif" wedgeTitle = "expand" nodeClass = "collapsed" titleWeight = "normal" return "" €„€—ÀFFFF000000060001001777AA000000000062000000001001710000001-7FFB6FBE1800000‚‚48004806200-1‚0Â6‚20222FFFF0‚‚10‚‚3‚F00001000000350000000103340840‚‚6‚202228038E00013620B600002000000380000000033,#title "update" {activeRendererSuite.gui.update ()}00040000000900000002035000050000000E000000030101350000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚202226‚20222000B00000005000000020Â000C0000001300000001FE‚A5C04A‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,ÿÿ4,D@4,D@4,4,D@00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹´¿ ¹´À33xâ<€ c›Geneva ¸ô§ ¸ô§ 'ïLANDÿÿÿÿÿÿmac This script runs every hour. „›Geneva ¸ô§ ¸ô§ 'ïLANDÿÿÿÿÿÿmac This script runs every minute. „€çX]Geneva ¹”#¹”#€K€R‰/¹eÕ Home@Ò4VArial €ç{w.¸ô§ ¹*\'  ". 9 everyHourÐN^ everyMinuteÐO everyNightÐR{€ÍÅÛ)Geneva T¸ô§ ¹R‘'ïLANDÿÿÿÿÿÿmac edit ( @activeRendererData.texts.about ) € local ( adr = window.frontmost () ) €Íç]Geneva ¹*\'¹*\'ÿ_ÇàLANDÿÿÿÿÿÿmac This script runs every night. window.about() rootUpdates.update (@activeRendererSuite, true) „€€ç€@Q(NzGeneva€+€Áf`f`6dyÌGeneva (E6p€Ef` ZGeneva T¹$B€ø<âL·Íœ¹Zd  *6 ?K Vb my † editPrefs˜UjsRegistrationAlert»popUnder5ä registeredÖ} saveSerialƒ unRegistered¾ÎVGeneva 4‡228–S€@3/¸ô§ »¯ñ save0ÔË3€°€¨ ,Geneva ¸õcŒ¸õ}øŸBgÃLANDÿÿÿÿÿÿmac on startup () activeRendererSuite.instal() €€€°62¸ô§ »¯ñ startup0“06RN$¸ô§ ¸ô§  fileMenuxU@userxV;R€$¼¤|5Geneva €;Z*¸Geneva ¹ˆ¹ˆ'ïLANDÿÿÿÿÿÿmac on openUrl (theUrl) try webbrowser.openurl (theUrl) else if !system.environment.isMac or !(tryError contains "Mac OS Error") scritpError(tryerror) webbrowser.bringtofront () €€€€€€€€¡ë ( +Geneva ¹9n–¹9n–(_LANDÿÿÿÿÿÿmac on activeRenderer ( ol ) header comments vs 1.0 beta 3 - last updated 6/21/02 by MB Added title identifications with t + tree and nodeTitle name attribute vs 1.0 beta 2 - last updated 6/14/02 by MB Use '>' instead of 'wedge' as an alt attribute for wedge images target.set ( ol ) op.firstSummit () local level = 1 subsCnt = op.countSummits () cssClassName = "active" tree noSubsImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol1.gif" ) expandedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif" ) collapsedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol3.gif" ) wedgeImg s on visit ( siblings ) local ( node = 1 ) loop local ( u = "" ) local ( activeClass ) local ( subsCnt = op.countSubs ( 1 ) ) local ( hasSubs = ( subsCnt > 0 ) ) local ( isExpanded = op.subsExpanded () ) local ( hasUrl = op.attributes.getOne ( "url", @u ) ) s = s + ( "
" ); if level == 1 tree = node + ( "-" + siblings + "." ); else tree = tree + ( node + "-" + siblings + "." ); s = s + "
"; if hasSubs s = s + ( "" ); if ( isExpanded ) wedgeImg = expandedImg wedgeTitle = "collapse" else wedgeImg = collapsedImg wedgeTitle = "expand" else wedgeImg = noSubsImg wedgeTitle = "" s = s + ( "\">\"" ); if hasSubs s = s + "" s = s + ""; s = s + "" if hasUrl s = s + ( "" ); s = s + op.getLineText (); if hasUrl s = s + ""; s = s + "
"; if hasSubs if ( isExpanded ) activeClass = "expanded" else activeClass = "collapsed" op.expand (1) s = s + ( "
" ); if op.go ( right, 1 ) level++ visit ( subsCnt ) if level >1 regex.subst ( "[0-9][0-9]*-[0-9][0-9]*\.$", "", @tree ) level-- op.go ( left, 1 ) else s = s + "
"; if level >1 regex.subst ( "[0-9][0-9]*-[0-9][0-9]*\.$", "", @tree ) if node == siblings s = s + "
"; local ( lst = regex.split ( "\\.", @tree ) ) local ( coord = lst[ sizeOf ( lst ) - 1 ] ) lst = regex.split ( "-", @coord ) local ( rev = tree ) while ( rev != "" ) and ( lst[1] == lst[2] ) s = s + ""; regex.subst ( "[0-9][0-9]*-[0-9][0-9]*\.$", "", @rev ) if rev != "" lst = regex.split ( "\\.", @rev ) coord = lst[ sizeOf ( lst ) - 1 ] lst = regex.split ( "-", @coord ) if not op.go ( down, 1 ) break else node++ visit ( subsCnt ) return ( s ) €„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€˜Í*+Geneva ¸ôµ+¸øo'eõLANDÿÿÿÿÿÿmac on activeRendererFunctions() local ( s = "" ) s = s + "

outline

\n"; s = s + "

collapse all

\n"; s = s + "

expand all

\n"; s = s + "

how this works

"; return ( s ) €€€€€€€€q€ …ú$4Geneva ¸ô´Ÿ¸øoD'&ôLANDÿÿÿÿÿÿmac on activeRendererHeader() local ( s = "" ) local ( packageRoot = radio.weblog.getUrl () + "gems/activeRenderer/" ) s = s + ( "\n" ); s = s + ( "" ); return ( s ) €€€€€€Ѐ-…úoGeneva€†€•rð`¹£óî¹ËÅ  #/ 7C LX co ~Š ‘ ­ editBookmarks9¶üeditPath9ŠUgetOpml9dÁinitPath9¯ò restoreUrl9u¤synchBookmarks9ˆÏupdate9‰šupdateBookmarks9¬ã!€hrð`¸õºj¹µ[†  " .: GS ^j p| ƒ ˜about9OTcss9‰ dayTemplate9ÖÍ itemTemplate9Íe javascript9¢prefs9+qrslite9Œ¬template9³™ €Prðf¯Geneva ¹¤8¹¤8€'€ ‰<ü7¹µ[†  * 4@ HT [g q} „ 𦠫· ½É ÏÛ äð û  !#filters¬s#ftpSite¬€R #glossary¬#Ê#images¬;ƒ#prefs¬ß #template¬9!#tools¬„z bookmarks¬óXhelp¬DÇindex¬¤ãprefs¬ÀÍregister¬Ö saveSerial¬¯Ôthanks¬/uupdate¬»ÚVVerdana º“??8“ò1€ L<îV·Íœ¹ìºˆ  $0 DP Ye p| ‡“   editBookmarksc8 editPrefs˜UjsRegistrationAlert»popUnder[Ö registeredÖ} saveSerialƒ unRegistered¾ÎVGeneva 4‡228–S`€à<î<åGeneva ¸õ‹*¸øoäU—×¹LANDÿÿÿÿÿÿmac on storyBox() local ( s = "" ) local ( class="storybox" ) local ( d = clock.now () ) try s = s + ( "

" ); s = s + "\"OPML"; s = s + " opml 1.0
"; s = s + ( "
last updated: " + d + "
" ); return ( s ) €€€€€€€€€€™€;<î8¸õŠë¸õ‹ $ 9E Q] factiveRendererFunctionsxgactiveRendere€r€2€¨6bArial T·Wˬ¹"ô,I?áÀLANDÿÿÿÿÿÿmac system.temp.update = activeRendererSuite.update thread.easyCall ("system.temp.update", {}) bundle if activeRendererSuite.utils.serialOk() system.temp.update = activeRendererSuite.update thread.easyCall ("system.temp.update", {}) else if dialog.YesNo(activeRendererData.guichuncks.texts.NotRegisteredAlert) activeRendererSuite.utils.register() €€„€€€€€€€¨ ‰Geneva ¸ô§ ¸ö<'ïLANDÿÿÿÿÿÿmac This script returns a string which appears in the Status Center on the Radio UserLand home page. return (activeRendererInfo.description) „€ €ý€¨V¸ô§ ¹­¨  &2 <H O[ bn s “activeRendererÙ©‘ backgroundÙP¡ callbacksÙV}instalÙÖ¥macrosÙÐ×menuÙë”statusCenterMessageÙwö€°Geneva ¸ô§ ¸ô§ 'ïLANDÿÿÿÿÿÿmac This script runs in its own thread. loop //loop until the application quits Add your code here. thread.sleepFor (10) //sleep for ten seconds „€„€€ÛTP.¸ô§ ¹H]ÿÿÿ ctenabledscriptñz€$¼þtArial ¶Fû¶Fû 2®LANDÿÿÿÿÿÿmac on finalFilter (pta) pta^.renderedText = string.replace (pta^.renderedText, "[[title]]", "") return (true) €�����€�����€��������þ���±�������� ���-����Geneva���������������������������� ��������������­ÂEu´`ÞQ������ �2LANDÿÿÿÿÿÿ������mac ������������on firstFilter (adrPageTable) return (true) €�����€��������±��ý��������*��[����Geneva���������������������������� ��������������­ÂEuµü7a���m���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���.���­ÂE¼¶Fû�������� ���� ��� ����$���0 ����; finalFilter����(��{£ firstFilter����(��|­ pagefilter����(��}j��VGeneva���������������������������� ����������è�P�E��$Ï�������������������������Ó���J�������F������µü7¨¸ô§ �������� ����url��� http://127.0.0.1/activeRenderer/���J€�+������O®����������µü8H������VArial��������€��*€��õ������Rô������¹$@ý¹045�������� ���� editPrefs����`�È–���8€��±������Rô����������´ž–������������space���/GIFfGIF89a��€��ÿÿÿ���!ù����,�������D�;��VArial����������������������������� ���������������������������������������������€�+���������Å���V�������´ž†�������� ������� �������"�������+ ����0���: ����C���L ����Q���[ ����aalink���008000bgcolor���FFFFFFflRenderlink���0000FFspaceGif���spacetext���000000vlink���800080��VArial����������������������������� �����������������������������������������������€�d�����¿w���.���¸ô§ »—4������������������€��*���@�������<������ºJT»—3�������� ����displayServerName����À�šÂ€��v���â�������� ���^����Geneva���������������������������� ����������T��¹7e¹7e#���L��'ï�LANDÿÿÿÿÿÿ������mac ������������webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/help" ) webbrowser.bringtofront () €�����€�����€�d���n�����������������µü8>������VArial����������������������������� ������������������������������������������������n€� ð������’¶000000060001001777AA00000000005A000000001001710190490021800000‚‚6000600329200-1‚0Â3‚2921FFFFF0‚‚10ÂE0000100000031000000010E840‚‚3‚2921FE048E000163293000020000001200000000�E,#title "Home" 000400000009000000020100000500000009000000020100000600000032000000010ÁF310‚‚ÁFFFF0‚C00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â1E0‚Á‚0008000000A900000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������10A0304E44000‚‚10Â10000900000015000000020‚961770‚96177000A00000015000000023‚2921F3‚2921F000B00000005000000020Â000C0000001200000001E36‚9AF10‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,appn�4,send�4,8óð�4,&����4,8ô€�4,3©�4,8ôð00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¶��µ��•��µ��¥��¥��.��'��"��‘��’��“��”��…��ƒ��FFFF0FFFF0FFFE000000060001001777AA�±§Pĵü7¨�����������������������������������������������������}�5#¼�������������������������������������������������������������„€�Q������’¶���`���µü7¶Fû�������� ���� ��� �������* ����4���@ ����H���T ����[���g ����q���} ����„��� ����–€��i€�Ü������ì���t���µü7¹,?®�������� ���� ��� �������* ����4���@ ����H���T ����[���g ����q���} ����„��� ����–���¢ ����¨���´ ����¿#filters����8��s#ftpSite����8��€R #glossary����8��P #images����8��"#prefs����8��ß #template�����8��ƒ #tools����8��„zindex����8��„ôprefs����8��ÀÍ saveSerial����8�av��VVerdana��������������������������� ����������º�“�??8“ò������������������������€�3������ì�F���;���Geneva���������������������������� ��������������¸ô§ ¹"òÆ��|��'ï�LANDÿÿÿÿÿÿ������mac ������������activeRenderer About Update Register... Preferences... €�����€���� ����Q(����€���� ����uÚ����€���� ����>K����€���� ����Œ§�������ù€�=������ì����D����Geneva���������������������������� ����������T��¹$B¹$B�����'ï�LANDÿÿÿÿÿÿ������mac ������������webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/prefs" ) €��������€�o������ì�„��s���Geneva���������������������������� ��������������¹*\õ¹*\õ������D_ôRLANDÿÿÿÿ€�á����������H��C� ��Geneva���������������������������� ��������������¹ úy¹"¥�����Û™¦ LANDÿÿÿÿÿÿ������mac ������������on register () if activeRendererSuite.utils.serialOk() dialog.notify(string.replace(activeRendererData.guichuncks.texts.regNumNotify, "##num##", user.rootUpdates.servers.activeRenderer.serialNum)) else case dialog.ThreeWay(activeRendererData.guichuncks.texts.askRegistrationCOnfirm, "Cancel", "Register", "Yes") 1 2 activeRendererSuite.utils.openUrl(activeRendererData.prefs.serialUrl+"$msg="+string.urlencode("activeRendererData.guichuncks.texts.serialPut")) 3 activeRendererSuite.utils.openUrl (activeRendererData.prefs.regPageUrl) msg(register ()) €�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€� ð��º������èÑ@xÖChicago��������������������������?ÿ� ���������������ÿÿÿÿÿÿÿÿ Lucida Grande���������������������� �����������������A�š�èàGeneva����������������������������� ����������������^}¸Chicago��������������������������?ÿ� ����������������mn©Chicago��������������������������?ÿ� ����������������ÿÿÿÿÿÿÿÿ Lucida Grande���������������������� ����������������������ÿÿ����������������������������������������������������������º€�������VÛž��z�0��Geneva���������������������������� ������������¹�p†¹�l?������D�K´ÎLANDÿÿÿÿÿÿ������mac ������������on instal () if ( €��‹��2�����������œ���Geneva���������������������������� ��������������¸å˜À¸å¬�����'ï�LANDÿÿÿÿÿÿ������mac ������������on buildPostArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.requestBody, theTableAdr ) €�����€�����€�����€�����€�����€�É€�Ñ������Ae����™���Geneva���������������������������� ��������������¸å˜À¸å™C��� ��'ï�LANDÿÿÿÿÿÿ������mac ������������on buildPathArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.pathArgs, theTableAdr ) €�����€�����€�����€�����€�������/€�–������Ae����u���Geneva���������������������������� ��������������¹*\n¹*\n������éÊðLANDÿÿÿÿÿÿ������mac ������������on update() Frontier.bringToFront() window.about() rootUpdates.update (@activeRendererSuite, true) return (true) €�����€�����€�����€�����€������� €�������Ae����²���Geneva���������������������������� ��������������¹*\„¹*\„������ÎWµõLANDÿÿÿÿÿÿ������mac ������������This script returns a string which appears in the Status Center on the Radio UserLand home page. return (activeRendererInfo.description) + activeRendererSuite.utils.getHomeJS() „�����€�����„�������<€� æ������Ae000000060001001777AA000000000078000000001001710000001-7EFF6FBE1800000‚‚48004806715200-1‚7C67C77C67C70Â6‚715222FFFF0‚‚10‚‚3‚1040000100000038000000010CC6840‚‚6‚715222CC6038E000708671560000200000CCC00000000�CC6,/* Outliner functions version: 1.0b1 last€�¦€� Ô������É���L���¹ˆj¹9n–�������� ������� ����(���4 ����>���J ����R���^ ����g���s ����| buildPathArgs������ R buildPostArgs������  getHomeJS������\üopenUrl������ ®register�������áserialOk�� Ï��R�����°������������!�������(�!������� ,€ ������� €&�������,€�������� �������,�"�������,����� �� ������������������&�������8,€���� �� �� �������7,�"�������,����� �������� ���� �������6,�"�������.,�������!��������.��#�������5,�������1��������4��&������� ,����� ���������� ��/�������4€ �������7,€���� ����"�������6,�"�������,,�"������� ,�"�������,������� �������������� �� ��'�������,����� ��+������ ��6���������8<€�������8,��������(,� �������,� �������,������� ������ ������������ �������(,�#������� ,����� ������������������%�� �������8,�#�������2,����� ��.��������1��������7�������� � ������ � �� ������ �€&������ �,€����� �������� ���&������ �,������ �������� ��� ������ �0,€���� � �������(� �/�� �������#,€���� ���� �������",�"�������,����� ���������������� ���€�������€������!�� �������$,€���� ���� �������#,�"�������,����� ���������������� ���€�������€������"�� �������,€�������� �������,�"�������,����� �� �������������� ���€�������€�������� �������%,€���� �� �� �������$,�"�������,����� ���������������� ���€������ �€������#��������� O€�������������� ���������� �������,€�������� �������,�"�������,����� �� ������ �������� ���€�������� �������!,€�������� ������� ,�"�������,����� �� ������ �������� ���€�������� �������!,€�������� ������� ,�"�������,����� �������������������€���� ���� �������!,€�������� ������� ,�"�������,����� �������������������€���� ���� �������,€���������������,����������������� ������� ,€�������� �������,������������������������ <€ �������,����������������� �������,�����������������/�������4�:�������,���������#�������,����� �������������������� �������,������� ����������������� ������� ���������(����� �� �� �������,��������� �������(����� �� ��TEXTxTEXTstringTEXTparseAddressTEXTthisTEXTtToolNameTEXTstringTEXTpopSuffixTEXTfileTEXTfilefrompathTEXTxlong���TEXTtheSNlong����TEXTtheSNTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumtokn� TEXTtheSNlong���TEXTtheSNlong���TEXT-TEXTtheSNlong��� TEXT-bool�TEXTgen2TEXTTEXTgen3TEXTTEXTvectorTEXT0123456789abcdefghkjilmnopqrstuvwxyzTEXTtheToolTEXTstringTEXTmidTEXTtheSNlong����long���TEXTtheProgTEXTstringTEXTmidTEXTtheSNlong��� long���TEXTgenTEXTstringTEXTmidTEXTtheSNlong���long���TEXTrandomnumTEXTstringTEXTmidTEXTtheSNlong���long���long���long���TEXTiTEXTc1TEXTstringTEXTnthCharTEXTtheProgTEXTiTEXTc2TEXTstringTEXTnthCharTEXTrandomnumTEXTiTEXTxTEXTstringTEXTpatternmatchTEXTc1TEXTvectorTEXTzTEXTstringTEXTpatternmatchTEXTc2TEXTvectorTEXTdTEXTxTEXTzTEXTyTEXTabsTEXTdTEXTylong����TEXTylong��� TEXTgen2TEXTvectorTEXTyTEXTgenTEXTgen2bool�TEXTserialOkTEXTmsgTEXTserialOk�� £€�%������É000000060001001777AA000000000077000000001001710000001-7EFB6FBE1800000‚‚4800480673C200-1‚7C67C77C67C70Â6‚73C222FFFF0‚‚10‚‚3‚3B0000100000038000000010CC6840‚‚6‚73C222CC6038E00072F673C60000200000CCC00000000�CC6,/* Outliner functions ver€�†��€����FFFF000000060001001777AA000000000066000000001001710000001-7FFB6FBE1800000‚‚48004806FD200-1‚0Â6‚FD222FFFF0‚‚10‚‚3‚25F00001000000380000000103E240840‚‚6‚FD2223DC038E000F06FD2500002000003E800000000�3E2,#title "Thanks" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/help/" title="activeRenderer's online help">Help</a></span> <span><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> </div> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p>Thank you for registering your copy of activeRenderer.</p> <p>You serial number is on its way to your mailbox.</p> <p> Once you've received the registration message, copy the serial number and paste it into <a href="http://127.0.0.1:5335/activeRenderer/register/">this form</a>. </p> </div>00040000000A0000000203E4000050000000F0000000301013E40000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚14E28C3‚14E28C000A00000015000000026‚FD2226‚FD222000B00000005000000020Â000C000000180000000125F1F4‚7535D83‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,“x���4,¡m �4,�ÛÐ{�4,t`k�4,/RPC�4,�sÛ00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹=%Þ¹=(�����������������������������������������â����������3x”������ü����������������������������������������������������€���ù����FFFF000000060001001777AA000000000071000000001001710000001-7FFE6FBE1800000‚‚4800480623200-1‚314A314A0Â6‚23222FFFF0‚‚10‚‚3‚1E00001000000360000000103E40840‚‚6‚232221C038E00016623AF000020000004300000000�3E,#title "Save serial number" {activeRendererSuite.saveSerial()}00040000000F00000003011C0400000500000009000000020400000600000061000000020ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚ÁC310‚‚ÁFFFF0‚C00000 40ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚00080000009C00000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030‚30Â10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚232226‚23222000B00000005000000020Â000C00000012000000011E1D‚‚B14‚1000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,D2@��4,D2@��4,�����4,D2@��4,D2À��4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹  ¹"§¯������������������������������������������>����������Ç�#v³������u������������������������������������������������������ù€� è������Dï000000060001001777AA000000000076000000001001710000001-7FFB6FBE1800000‚‚4800480695200-1‚18618A18618A0Â6‚95222FFFF0‚‚10‚‚3‚1E7000010000003800000001023940840‚‚6‚95222210038E00088695BF000020000023F00000000�239,#title "Register" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="ma€�ï�� í����FFFF000000060001001777AA000000000068000000001001710000001-7FFB6FBE1800000‚‚48004806131200-1‚0Â6‚131222FFFF0‚‚10‚‚3‚548000010000003B00000001054840840‚‚6‚131222542038E000124613125000020000054E00000000�548,#title "Thanks" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="Bookmarks synchronization">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/help/" title="activeRenderer's online help">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html">Faq</a></span> </div> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>registration</b></p> <p>Thank you for registering your copy of activeRenderer.</p> <p>You serial number is on its way to your mailbox.</p> <p> Once you've received the registration message, copy the serial number and paste it into <a href="http://127.0.0.1:5335/activeRenderer/register/">this form</a>. </p> </div>00040000000A00000002054A000050000000F00000003010154A0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚14E28C3‚14E28C000A00000017000000026‚1312226‚131222000B00000005000000020Â000C00000018000000015481F6‚757251F‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,“x���4,¡m �4,�ÛÐ{�4,t`k�4,/RPC�4,�sÛ00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹=%Þ¹¤È��� ��������������������������������������H����������3x”������ i����������������������������������������������������€� è������FFFF000000060001001777AA00000000006F000000001001710000001-7FFF6FBE1800000‚‚480048061E200-1‚8168160Â6‚1E222FFFF0‚‚10‚‚3‚3B00001000000360000000103B40840‚‚6‚1E22215028E0001261EB2000020000004000000000�3B,#title "Preferences" {activeRendererSuite.gui.editPrefs ()}00040000000A00000002013D100050000000A00000002013D00006000000620000000210A210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚ÁA20‚‚ÁFFFF0‚900000 20ÂÁ ‚‚Á‚00070000002F000000020‚10Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚1E2226‚1E222000B00000005000000020Â000C00000012000000013B0‚7‚1AC‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,�‹Xë�4,e, r�4, Rad�4,ªh{�4,om »�4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹$@i¹+hR������������������������������������������;�����������Š,9¼������~������������������������������������������������������€� M������Ò����.���Geneva���������������������������� ��������������¹*\H¹*\H������ŸBpÌLANDÿÿÿÿÿÿ������mac ������������on startup () activeRendererSuite.instal() €�����€�����€�������Šð��ô��’¶��c��VÛ��˜�����������Ù€� h������01�r��Þ���Geneva���������������������������� ��������������¹ˆ¬¹€��H���§�����������)����Geneva���������������������������� ����������T��¸ô§ ¹R‘���)�'ï�LANDÿÿÿÿÿÿ������mac ������������edit ( @activeRendererData.texts.about ) €�����€��û€� a������€¨hÈ������6dyÌ�����Geneva���������������������������� �(�E6��������������������������������������������������<form name="editPrefs" action="##���™€� ¼������€¨����)����Geneva���������������������������� ����������T��¸ô§ ¹R‘���3�'ï�LANDÿÿÿÿÿÿ������mac ������������edit ( @activeRendererData.texts.about ) €��������§€� ������€¨000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480647200-1‚0Â6‚47222FFFF0‚‚10‚‚3‚6800001000000360000000107740840‚‚6‚4722268038E0003A64734000020000007C00000000�77,<script for=window event=onload> if ( confirm( "##text##" ) ) { window.open( "##url##" , "regWindow" ); } </script>000400000009000000020790000500000009000000020790000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚472226‚47222000B00000005000000020Â000C00000016000000016867‚27FD5D1‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,ÿÿ�4,ÿÿ�4,D���4,�����4,�����4,D€�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹ä}¹03ƒ������������������������������������������w�����������.‡�Ý������l������������������������������������������������������ð€� ������€¨���$���·Í€¸€‚=�������� ������� ����objects����À��Ïätexts����À��Dï��VGeneva���������������������������� ����������§�‰�2@8ÖÈ���������������������������This script runs every night.���Ê€�7������€¨����]���Geneva���������������������������� ��������������¹)ž¹)ž�����ÿ_ÇàLANDÿÿÿÿÿÿ������mac ������������This script runs every night. window.about() rootUpdates.update (@activeRendererSuite, true) „�����€�����€�����€��ç€�D������O®���.���·Íœ¹04L�������� ���� ��� ����*���6 ����A editPrefs�������˜¦jsRegistrationAlert������“ª saveSerial��������H ��VGeneva���������������������������� ���������4�‡�228–S����������������������VÛ��˜�����������ç€�Q������O®���L���¸õŠë¹,?§�������� �������$ ����9���E ����O���[ ����g���s ����}���‰ ����’activeRendererFunctions�������gactiveRendererHeader�������jX daySwitch�������ÚS espressoCup�������l4 nodeState�������ÖØstoryBox�������r·���ò€��S������O®���)��O®���ç��ÅÛ���Ù���X��*��éJ��>��·N��×��Ae�� í��Q(�� ��w`���Š��ÖA���X��<€� M���O�������K���$���¹eÕ¹eÕ�������� ���� ��� ����linetext���Homepath��� index.wsf���O€�" ������U�N��z���Geneva���������������������������� ������������¹ªq¹µN������e�¤*ÊLANDÿÿÿÿÿÿ������mac ������������<b>activeRenderer</b> vs 1.0b1 An outline rendering tool for Radio and Manila. Created by ... Marc Barrot Copyright 2002 by Precision IT Management, Inc Feel free to use this code any way you like. Just keep the information in this 'about' outline intact. With the help of ... Simone Bettini Andre Radke Nicholas Riley Aaron Straup Cope Paolo Valdemarin €�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�@€�¾������u\��������Geneva���������������������������� ��������������¸ô§ ¹Ij�� ��'ï�€�¤€�Y������b���’���µü7¹J’�������� ���� ��� �������* ����4���@ ����H���T ����[���g ����q���} ����„��� ����•���¡ ����§���³ ����¹���Å ����Î���Ú ����å���ñ ����ø#filters����8��s#ftpSite����8��€R #glossary����8�#Ê#images����8��;ƒ#prefs����8��ß #template�����8��9!#tools����8��„zhelp����8�F‘index����8�zPprefs����8��ÀÍregister����8�rð saveSerial����8��¯Ôthanks����8��Ž��VVerdana��������������������������� ����������º�“�??8“ò������������������������ô€�Y������b���L���¹ˆj¹=c@�������� ������� ����(���4 ����>���J ����R���^ ����g���s ����| buildPathArgs������bÄ buildPostArgs������av getHomeJS�������ð+openUrl�������ë¤register�������YserialOk�� Ï��R�����°������������!�������(�!������� ,€ ������� €&�������,€�������� �������,�"�������,����� �� ������������������&�������8,€���� �� �� �������7,�"�������,����� �������� ���� �������6,�"�������.,�������!��������.��#�������5,�������1��������4��&������� ,����� ���������� ��/�������4€ �������7,€���� ����"�������6,�"�������,,�"������� ,�"�������,������� �������������� �� ��'�������,����� ��+������ ��6���������8<€�������8,��������(,� �������,� �������,������� ������ ������������ �������(,�#������� ,����� ������������������%�� �������8,�#�������2,����� ��.��������1��������7�������� � ������ � �� ������ �€&������ �,€����� �������� ���&������ �,������ �������� ��� ������ �0,€���� � �������(� �/�� �������#,€���� ���� �������",�"�������,����� ���������������� ���€�������€������!�� �������$,€���� ���� �������#,�"�������,����� ���������������� ���€�������€������"�� �������,€�������� �������,�"�������,����� �� �������������� ���€�������€�������� �������%,€���� �� �� �������$,�"�������,����� ���������������� ���€������ �€������#��������� O€�������������� ���������� �������,€�������� �������,�"�������,����� �� ������ �������� ���€�������� �������!,€�������� ������� ,�"�������,����� �� ������ �������� ���€�������� �������!,€�������� ������� ,�"�������,����� �������������������€���� ���� �������!,€�������� ������� ,�"�������,����� �������������������€���� ���� �������,€���������������,����������������� ������� ,€�������� �������,������������������������ <€ �������,����������������� �������,�����������������/�������4�:�������,���������#�������,����� �������������������� �������,������� ����������������� ������� ���������(����� �� �� �������,��������� �������(����� �� ��TEXTxTEXTstringTEXTparseAddressTEXTthisTEXTtToolNameTEXTstringTEXTpopSuffixTEXTfileTEXTfilefrompathTEXTxlong���TEXTtheSNlong����TEXTtheSNTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumtokn� TEXTtheSNlong���TEXTtheSNlong���TEXT-TEXTtheSNlong��� TEXT-bool�TEXTgen2TEXTTEXTgen3TEXTTEXTvectorTEXT0123456789abcdefghkjilmnopqrstuvwxyzTEXTtheToolTEXTstringTEXTmidTEXTtheSNlong����long���TEXTtheProgTEXTstringTEXTmidTEXTtheSNlong��� long���TEXTgenTEXTstringTEXTmidTEXTtheSNlong���long���TEXTrandomnumTEXTstringTEXTmidTEXTtheSNlong���long���long���long���TEXTiTEXTc1TEXTstringTEXTnthCharTEXTtheProgTEXTiTEXTc2TEXTstringTEXTnthCharTEXTrandomnumTEXTiTEXTxTEXTstringTEXTpatternmatchTEXTc1TEXTvectorTEXTzTEXTstringTEXTpatternmatchTEXTc2TEXTvectorTEXTdTEXTxTEXTzTEXTyTEXTabsTEXTdTEXTylong����TEXTylong��� TEXTgen2TEXTvectorTEXTyTEXTgenTEXTgen2bool�TE€�6��È�������z��Ö����Geneva���������������������������� ��������������»—»—������hd³LANDÿÿÿÿÿÿ������mac ������������on parseCookies ( httpResult, server, path, adrCookiesTable ) Information 11/1/02; 7:32:17 PM by MM (Mikel Maron) Cookie processing is broken in tcp.httpClient: Cookie Data containing "=", like the Yahoo cookies, are not parsed correctly if ( httpResult != "" ) // parse cookies here, since it is broken in tcp.httpClient local ( ixEndHeader, responseHeader, i, j ) ixEndHeader = string.patternMatch ( "\r\n\r\n", httpResult ) //try to find the end of the response header if ixEndHeader > 0 //there is a valid header, look for cookies responseHeader = string.mid ( httpResult, 1, ixEndHeader - 1 ) //get the header if string.lower ( responseHeader ) contains "set-cookie:" //the response header contains at least one cookie if not defined ( adrCookiesTable^ ) new ( tableType, adrCookiesTable ) for i = 1 to string.countFields (responseHeader, "\r") //find all the cookies local ( onecookie = string.nthField ( responseHeader, "\r", i ) ) //get the cookie onecookie = string.popLeading ( onecookie, '\n' ) if string.lower ( onecookie ) beginsWith "set-cookie:" local ( flsecure = false ) //not secure by default local ( domain = server ) //default domain to this server local ( cookiePath = "/" ) local ( expires = clock.now () + ( 24 * 60 * 60 ) ) //default expires at "end of session" local ( cookieName, cookieValue ) if path != "/" cookiePath = string.popSuffix ( path, "/" ) onecookie = string.popLeading ( string.mid (onecookie, 12, infinity), ' ' ) for j = 1 to string.countFields ( onecookie, ';' ) local ( cookiepart = string.nthField ( onecookie, ';', j ) ) cookiepart = string.popLeading ( cookiepart, ' ' ) case string.lower ( string.nthField ( cookiepart, '=', 1 ) ) //take care of standard parts "domain" domain = string.nthField ( cookiepart, '=', 2 ) "path" cookiePath = string.nthField ( cookiepart, '=', 2 ) "expires" on cookieDateToSystemDate ( cookieDate ) try //some cookie dates can be converted to dates directly local ( systemDate = date ( cookieDate ) ) if systemDate < date ( "Monday, 6-Feb-2040" ) return ( systemDate ) try //it may be a date in the 21st century local ( lastpart = string.nthField ( cookieDate, "-", 3 ) ) local ( ixstart = string.patternMatch ( lastpart, cookieDate ) ) return ( date ( string.insert ( "20", cookieDate, ixstart ) ) ) return ( false ) expires = cookieDateToSystemDate ( string.nthField ( cookiepart, '=', 2 ) ) if expires == false //invalid cookie, ignore it break "secure" flsecure = true else // this is the actual cookie name/value cookieName = string.nthField ( cookiepart, '=', 1 ) cookieValue = string.nthField ( cookiepart, '=', 2 ) cookieValue = string.mid ( cookiepart, string.patternMatch ( "=", cookiepart ) + 1, infinity ); if clock.now () < expires //store non-expired cookies only if not defined ( adrCookiesTable^.[domain] ) //have we cookies already for this domain? new ( tableType, @adrCookiesTable^.[domain] ) if not defined ( adrCookiesTable^.[domain].[cookiePath] ) new ( tableType, @adrCookiesTable^.[domain].[cookiePath] ) if not defined ( adrCookiesTable^.[domain].[cookiePath].[cookieName] ) new ( tableType, @adrCookiesTable^.[domain].[cookiePath].[cookieName] ) adrCookiesTable^.[domain].[cookiePath].[cookieName].value = cookieValue adrCookiesTable^.[domain].[cookiePath].[cookieName].expires = expires adrCookiesTable^.[domain].[cookiePath].[cookieName].secure = flsecure €�����„�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�" ��{��������Þ��%� ��Geneva���������������������������� ��������������¹=c@¹=c@������KÇJLANDÿÿÿÿÿÿ������mac ������������on saveSerial () local tText = string(activeRendererData.guichuncks.objects.saveSerial) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction tSerial = user.rootUpdates.servers.activeRenderer.serialNum postargs argTable activeRendererSuite.utils.buildPostArgs(@postargs)//parses posted args to postargs table activeRendererSuite.utils.buildPathArgs(@argTable)//parses args attached to the url after $ char to argTable if defined(argTable.msg) tText = "<b>"+evaluate(argTable.msg)+"</b><p>" + tText if defined(postargs.action) //A post has been issued => process it msg("Registering to updates server") local rpcserver = "xmlrpc://" + user.rootUpdates.servers.activeRenderer.server + ":" + user.rootUpdates.servers.activeRenderer.port + "/RPC2" if [rpcserver].toolsupdate.checkSerial("activeRenderer", postargs.serial, true)//ask the registration server if the serial is valid user.rootUpdates.servers.activeRenderer.serialNum = postargs.serial return "activeRenderer serial number has been registered (" + postargs.serial + ")" else tText = "<b>The provided serial ("+ postargs.serial +") seems wrong or invalid, please check it's typed properly</b><br>" + tText tSerial = postargs.serial if user.inetd.config.http.port != 80 tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/"+nameOf(adrObject^) tText = string.replaceAll(tText, "##action##", tAction) tText = string.replaceAll(tText, "##serial##", tSerial) return tText €�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������{€�n�����av8��¶����Geneva���������������������������� ��������������¹=cA¹=cA�€��K��À����FFFF000000060001001777AA000000000062000000001001710000001-7FFB6FBE1800000‚‚48004806200-1‚0Â6‚20222FFFF0‚‚10‚‚3‚F00001000000350000000103340840‚‚6‚202228038E00013620B6000020000003800000000�33,#title "update" {activeRendererSuite.g€�n�� í����FFFF000000060001001777AA000000000068000000001001710000001-7FFB6FBE1800000‚‚48004806131200-1‚0Â6‚131222FFFF0‚‚10‚‚3‚548000010000003B00000001054840840‚‚6‚131222542038E000124613125000020000054E00000000�548,#title "Thanks" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="Bookmarks synchronization">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/help/" title="activeRenderer's online help">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html">Faq</a></span> </div> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>registration</b></p> <p>Thank you for registering your copy of activeRenderer.</p> <p>You serial number is on its way to your mailbox.</p> <p> Once you've received the registration message, copy the serial number and paste it into <a href="http://127.0.0.1:5335/activeRenderer/register/">this form</a>. </p> </div>00040000000A00000002054A000050000000F00000003010154A0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚14E28C3‚14E28C000A00000017000000026‚1312226‚131222000B00000005000000020Â000C00000018000000015481F6‚757251F‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,“x���4,¡m �4,�ÛÐ{�4,t`k�4,/RPC�4,�sÛ00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹=%Þ¹¤È��� ��������������������������������������H����������3x”������ i������������������������������������������������������ í��â����FFFF000000060001001777AA00000000006E000000001001710000001-7EFF6FBE1800000‚‚480048062D200-1‚8118110Â6‚2D222FFFF0‚‚10‚‚3‚900001000000350000000104640840‚‚6‚2D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000900000002048000050000000F0000000301460480000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚10C2703‚10C270000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C000000130000000198‚A2E02D‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,ÿÿ�4,D@��4,ÿÿ�4,�����4,ÿÿ�4,DÀ�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹ŠâXº… ������������������������������������������F���������� µ?8������^������������������������������������������������������â��È�������z��Ö����Geneva���������������������������� ��������������»¯ñ»¯ñ������hd³LANDÿÿÿÿÿÿ������mac ������������on parseCookies ( httpResult, server, path, adrCookiesTable ) Information 11/1/02; 7:32:17 PM by MM (Mikel Maron) Cookie processing is broken in tcp.httpClient: Cookie Data containing "=", like the Yahoo cookies, are not parsed correctly if ( httpResult != "" ) // parse cookies here, since it is broken in tcp.httpClient local ( ixEndHeader, responseHeader, i, j ) ixEndHeader = string.patternMatch ( "\r\n\r\n", httpResult ) //try to find the end of the response header if ixEndHeader > 0 //there is a valid header, look for cookies responseHeader = string.mid ( httpResult, 1, ixEndHeader - 1 ) //get the header if string.lower ( responseHeader ) contains "set-cookie:" //the response header contains at least one cookie if not defined ( adrCookiesTable^ ) new ( tableType, adrCookiesTable ) for i = 1 to string.countFields (responseHeader, "\r") //find all the cookies local ( onecookie = string.nthField ( responseHeader, "\r", i ) ) //get the cookie onecookie = string.popLeading ( onecookie, '\n' ) if string.lower ( onecookie ) beginsWith "set-cookie:" local ( flsecure = false ) //not secure by default local ( domain = server ) //default domain to this server local ( cookiePath = "/" ) local ( expires = clock.now () + ( 24 * 60 * 60 ) ) //default expires at "end of session" local ( cookieName, cookieValue ) if path != "/" cookiePath = string.popSuffix ( path, "/" ) onecookie = string.popLeading ( string.mid (onecookie, 12, infinity), ' ' ) for j = 1 to string.countFields ( onecookie, ';' ) local ( cookiepart = string.nthField ( onecookie, ';', j ) ) cookiepart = string.popLeading ( cookiepart, ' ' ) case string.lower ( string.nthField ( cookiepart, '=', 1 ) ) //take care of standard parts "domain" domain = string.nthField ( cookiepart, '=', 2 ) "path" cookiePath = string.nthField ( cookiepart, '=', 2 ) "expires" on cookieDateToSystemDate ( cookieDate ) try //some cookie dates can be converted to dates directly local ( systemDate = date ( cookieDate ) ) if systemDate < date ( "Monday, 6-Feb-2040" ) return ( systemDate ) try //it may be a date in the 21st century local ( lastpart = string.nthField ( cookieDate, "-", 3 ) ) local ( ixstart = string.patternMatch ( lastpart, cookieDate ) ) return ( date ( string.insert ( "20", cookieDate, ixstart ) ) ) return ( false ) expires = cookieDateToSystemDate ( string.nthField ( cookiepart, '=', 2 ) ) if expires == false //invalid cookie, ignore it break "secure" flsecure = true else // this is the actual cookie name/value cookieName = string.nthField ( cookiepart, '=', 1 ) cookieValue = string.nthField ( cookiepart, '=', 2 ) cookieValue = string.mid ( cookiepart, string.patternMatch ( "=", cookiepart ) + 1, infinity ); if clock.now () < expires //store non-expired cookies only if not defined ( adrCookiesTable^.[domain] ) //have we cookies already for this domain? new ( tableType, @adrCookiesTable^.[domain] ) if not defined ( adrCookiesTable^.[domain].[cookiePath] ) new ( tableType, @adrCookiesTable^.[domain].[cookiePath] ) if not defined ( adrCookiesTable^.[domain].[cookiePath].[cookieName] ) new ( tableType, @adrCookiesTable^.[domain].[cookiePath].[cookieName] ) adrCookiesTable^.[domain].[cookiePath].[cookieName].value = cookieValue adrCookiesTable^.[domain].[cookiePath].[cookieName].expires = expires adrCookiesTable^.[domain].[cookiePath].[cookieName].secure = flsecure €�����„�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������È€�'Z�����3$�Ì��‚���Geneva���������������������������� ��������������»—ê»—ê������Œ?<2LANDÿÿÿÿÿÿ������mac ������������on nodeState ( day, tpl = "" ) header comments 6/28/02; 11:54:00 AM by MB Modified to take categories into account. 6/25/02; 1:02:22 PM by MB vs 1.03 local imgPath = radio.weblog.getUrl () + "gems/activeRenderer/" adrBlog = radio.weblog.init () wedgeImg = imgPath + "ol2.gif" wedgeTitle = "collapse" nodeClass = "expanded" titleWeight = "bold" if !flArchivePage and ( ( tpl == "day" and !adrBlog^.prefs.activeRenderer.outlineItems ) or ( tpl == "item" ) ) local adrBlog = radio.weblog.init () adrPosts = @adrBlog^.posts i, t, d for i = sizeOf ( adrPosts^ ) downto 1 // locate the most recent relevant post local ( adr = @adrposts^ [ i ] ) t = adr^ if defined ( categoryName ) // is this a category home page ? if defined ( t.categories [ categoryName ] ) // is the current post included in this category ? break else // this is the main home page then. if !t.flNotOnHomePage // does this post belong to it ? break d = date.shortString ( t.when ) if ( d != day ) wedgeImg = imgPath + "ol3.gif" wedgeTitle = "expand" nodeClass = "collapsed" titleWeight = "normal" return "" €�����„�����„�����€�����„�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����oo if regex.€�Ô��!z�������P��²���Geneva���������������������������� ��������������»—ê»—ê������3�O}LANDÿÿÿÿÿÿ������mac ������������on update ( src, dst ) Information 10/10/02; 10:33:54 PM by MB Corrected a bug reported by Donovan Watts Mac MSIE's Descriptions were not appended to their bookmark but shifted to the next one. Descriptions are now attached to the proper node in the outline. 10/3/02; 10:45:45 PM by MB Added a type attribute with 'link' value for each href Corrected a bug in url extraction from href when source is a file 9/15/02; 11:18:18 AM by MB Corrected a bug in getUrl, which was creating broken links starting by URL= with some bookmarks in MSIE6/Win. Corrected a bug in addPath: handle string of nested subfolders correctly 9/13/02; 12:10:14 PM by MB Corrected a bug when loading the old version of the bookmarks outline file. 9/12/02; 3:19:15 PM by MB Corrected a bug in comment properties (<DD>) rendering. 9/10/02; 1:17:12 PM by MB Synchronizes Mozilla or MSIE bookmarks (src) with an OPML outline (dst) local direction = "down" newOutline oldOutline buffer = "" oldPath = "" startTime = clock.ticks() on addPath ( path ) local parent = "" flag = 0 diffPath = "" field = 0 on getUrl ( path ) local s = "" l s = file.readWholeFile ( path ) l = regex.grep ( "^[Uu][Rr][Ll]=", @s ) s = l[1] regex.subst ( "^\n", "", @s ) s = string.mid ( s, 5, string.length ( s ) - 4 ) return s on getName ( path ) local s = "" s = file.fileFromPath ( path ) regex.subst ( ".url$", "", @s ) return s parent = file.folderFromPath ( path ) if ! file.isFolder ( path ) // if it's a file if string.hasSuffix ( ".url", path ) regex.subst ( "[:\\\\]$", "", @parent ) if parent == oldPath // if it belongs to the same folder as the previous file op.insert ( getName ( path ), direction ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) else // it belongs to a different folder if string.patternMatch ( parent, oldPath ) // if the previous file belongs to a subfolder of the current file's folder op.insert ( getName ( path ), direction ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) while ( oldPath != parent ) flag = flag + 1 oldPath = file.folderFromPath ( oldPath ) regex.subst ( "[:\\\\]$", "", @oldPath ) if flag > 1 op.reorg ( "left", flag - 1 ) flag = 0 else if string.patternMatch ( oldPath, parent ) // if it belongs to a subfolder of the previous file's folder diffPath = string.mid ( parent, string.length ( oldPath ) + 2, string.length ( parent ) - string.length ( oldPath ) ) for field = 1 to string.countFields ( diffPath, file.getPathChar () ) op.insert ( string.nthField ( diffPath, file.getPathChar (), field ), direction ) direction = "right" op.insert ( getName ( path ), direction ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) else // it belongs to a folder which has a common ancestor with the previous file's folder local folderList = {} commonAncestor = parent i = 0 j = 0 while ! string.patternMatch ( commonAncestor, oldPath ) i = i + 1 folderList [i] = file.fileFromPath ( commonAncestor ) commonAncestor = file.folderFromPath ( commonAncestor ) regex.subst ( "[:\\\\]$", "", @commonAncestor ) op.insert ( folderList [i], direction ) if i > 1 for j = i - 1 to 1 op.insert ( folderList [j], "right" ) op.insert ( getName ( path ), right ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) oldPath = parent direction = "down" else // it's a folder regex.subst ( "[:\\\\]$", "", @path ) // remove trailing path separator if string.patternMatch ( path, oldPath) // if folder isn't empty direction = "left" return true radio.log.add( "activeRenderer", "Starting bookmarks synchronization.", startTime ) if ! file.exists ( src ) // fail if source file or folder if missing radio.log.add( "activeRenderer", "Bookmarks synchronization error, missing : " + src + ".", startTime ) return false file.sureFilePath ( dst ) // path for destination outline if file.exists ( dst ) new ( outlineType, @scratchpad.old ) op.xmlToOutline ( file.readWholeFile ( dst ), @scratchpad.old ) new ( outlineType, @newOutline ) // create a new empty outline target.set ( @newOutline ) if ! file.isFolder ( src ) // if source is a file try local start, end cnt = 0 // Count number of <DL> tags flag = 0 // Count number of consecutive </DL> tags file.open ( src ) // Open source Bookmarls file while ! file.endOfFile ( src ) // Loop through all source lines local buffer = file.readLine ( src ) // Read next source line url = "" matchList = {} if buffer // if not an empty line if string.patternMatch ( "/DL", buffer ) direction = "left" flag = flag + 1 if string.patternMatch ( "<DL", buffer ) if cnt direction = "right" cnt = cnt + 1 flag = 0 if string.patternMatch ( "<DD", buffer ) // Link description node regex.extract ( "<DD>([^<]+)", @buffer, @matchList, {1} ) regex.subst ( "^[ \t]+", "", @buffer ) // Remove any whitespace header regex.subst ( "<DT>.*", "", @buffer ) regex.subst ( "<[^<>]+>", "", @buffer ) op.insert ( matchList [1], "right" ) // insert the description as a child of the current node op.go ( "left", 1 ) // move the current node pointer back to the parent node if string.patternMatch ( "DT", buffer ) // Title node or link node if string.patternMatch ( "HREF", buffer ) // If link node, get url local matchList = {} pattern = "HREF=\"([^\"]+*)\"[ 0-9a-zA-Z]+*" regex.extract ( pattern, @buffer, @matchList, {1}, true ) url = matchList[1] regex.subst ( "^[ \t]+", "", @buffer ) local ( s = buffer ) regex.subst ( "^<DD>[^<]+", "", @s ) regex.subst ( "<[^<>]+>", "", @s ) op.insert ( s, direction ) if url op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", url ) if flag > 1 op.reorg ( "left", flag - 1 ) direction = "down" flag = 0 file.close ( src ) // Close source bookmarks file else // Source is a folder oldPath = src regex.subst ( "[:\\\\]$", "", @oldPath ) file.visitFolder ( src, infinity, @addPath ) op.firstSummit () // Delete empty first node op.deleteLine () scratchpad.new = newOutline if file.exists ( dst ) op.visitAll ( @newOutline, @activeRendererSuite.bookmarks.restoreUrl ) target.set ( @scratchpad.new ) op.firstSummit () loop // Collapse all summits if op.countSubs ( 1 ) > 0 op.collapse () if ( ! op.go ( down, 1 ) ) break file.writeWholeFile ( dst, op.outlineToXml ( @scratchpad.new ) ) target.clear () radio.log.add( "activeRenderer", "Bookmarks synchronization complete.", startTime ) return true bundle // test code if update ( "Macintosh HD:Users:marc:Desktop:Favorites.html", "Macintosh HD:Users:marc:Desktop:result.opml" ) dialog.alert ( "Done." ) else dialog.alert ( "Failed." ) €�����„�����€�����€�����€�����€�����€�����������������€�����������������€�����������€�����������„�����������€�����������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����€�����������������€�����€�����������������€�����€�����€��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������€�����€�����€�����€�����������€�����€�����€�����������������������������€�����€�����€�����€�����€�����������������������������€�'Z��£����FFFF000000060001001777AA000000000079000000001001710000001-7EFB6FBE1800000‚‚480048065DD200-1‚1FA2051FA2050Â6‚5DD222FFFF0‚‚10‚‚3‚1795000010000007C00000002093440840‚‚6‚2352228D003C80002282C2352090934179540840‚‚23565DD222E61038E0005D065DD6000020000093A00000000�934,#title "Help" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="Bookmarks synchronization">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><b>Help</b></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html">Faq</a></span> </div> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>online help</b></p> <p>activeRenderer currently has 3 features :</p> <table cellpadding="2" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:daySwitch( 'pf1' )"> <img id="if1" src="../images/ol2.gif" title="collapse" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> <span id="tf1" name="itemTitle" style="font-weight: bold;"> OPML outlines rendering in HTML. </span> </td> </tr> </table> <div name="item" id="pf1" class="expanded" style="margin-left: 17px;"> <p style=" margin-top: 5px; margin-bottom: 0px;"> activeRenderer upstreams outlines stored in OPML format to your Radio public site, translating the outline contents to HTML along the way, so that the published version may be read in regular - if modern - Web browsers.</p> <p style=" margin-top: 7px; margin-bottom: 0px;"> When installed, activeRenderer creates an <i>outlines</i> special folder in Radio's <i>www</i> folder. Any OPML file saved in <i>outlines</i> is automagically rendered in HTML and upstreamed to the public site. Check Radio's Events Log page to check on the upstreaming process, and locate the rendered version's public URL.</p> <p style=" margin-top: 7px; margin-bottom: 0px;"> In addition, activeRenderer traps Radio's File / Save menu, so that any time you save your instant 000200000E6700000934�E61, outline, or any time you save an outline below the <i>gems</i> folder, a duplicate is stored in <i>outlines</i>, and rendered on the public site.</p> <p style=" margin-top: 7px; margin-bottom: 5px;"> Last, every time you start Radio, activeRenderer makes a copy of your instant outline in the <i>outlines</i> folder, which upstreams the latest available version.</p> </div> <table cellpadding="2" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:daySwitch( 'pf2' )"> <img id="if2" src="../images/ol3.gif" title="expand" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> <span id="tf2" name="itemTitle"> Outline style weblog templates. </span> </td> </tr> </table> <div name="item" id="pf2" class="collapsed" style="margin-left: 17px;"> <p style=" margin-top: 5px; margin-bottom: 0px;"> activeRenderer can modify your weblog templates to publish your weblog's pages with an outline look.</p> <p style=" margin-top: 7px; margin-bottom: 0px;"> To turn the outline style on or off, use activeRenderer's <a href="http://127.0.0.1:5335/activeRenderer/">preferences</a> page.</p> <p style=" margin-top: 7px; margin-bottom: 0px;"> The basic outline style adds an outline wedge to every date title on the page. If you use titles for your posts - a good editorial habit - check the second preference to add an outline wedge to every post. Refer to the preferences page collapsed nodes for details.</p> <p style=" margin-top: 7px; margin-bottom: 0px;"> activeRenderer performs the outline style trick by backing up the current <i>#dayTemplate.txt</i> and <i>#itemTemplate.txt</i> files from Radio's <i>www</i> folder, and replacing them with activeRendered versions. The backups are in <i>www/gems/activeRenderer/backup</i>. They are restored to <i>www</i> when you turn the outline style off in the preferences.</p> <p style=" margin-top: 7px; margin-bottom: 5px;"> If the activeRendered templates do not fit your weblog's theme perfectly, you're welcome to customize them further using any text editor. Your modifications will be saved, provided you raise each template's version number (in the top comment tag) by a significant offset.</p> </div> <table cellpadding="2" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:daySwitch( 'pf3' )"> <img id="if3" src="../images/ol3.gif" title="expand" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> <span id="tf3" name="itemTitle"> The opmlRender macro. </span> </td> </tr> </table> <div name="item" id="pf3" class="collapsed" style="margin-left: 17px;"> <p style=" margin-top: 5px; margin-bottom: 0px;"> This macro returns the content of an OPML document in HTML/CSS. It can be inserted in the <i>#homeTemplate.txt</i> template to manage parts of the home page, such as headlines, sidebars, blogrolls or directories as separate outline files.</p> <p style=" margin-top: 7px; margin-bottom: 0px;"> Insert <%opmlRender ( "url" ) %> anywhere you want the "url" outline to be rendered. "url" must be a regularly formed uniform resource locator for the outline to render. A local url uses the "file://" prefix. A remote url uses the "http://" prefix.</p> <p style=" margin-top: 7px; margin-bottom: 5px;"> Refer to the <a href="http://radio.weblogs.com/0104487/outlines/opmlRender.html">opmlRender howto</a> on <b>s l a m</b> for details of opmlRender parameters and several examples.</p> </div> </div> 00040000000B0000000201797000050000000C000000020117970000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚16B2F93‚16B2F9000A00000017000000026‚5DD2226‚5DD222000B00000005000000020Â000C000000170000000117951F4‚756F40‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,ÿÿ�4,ÿÿ�4,D€��4,D€��4,�����4,D€�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹6ˆ¹¤K���A��������������������������������������•�����������RgÐs������������������������������������������������������������£€�dx������´Ù����œ���Geneva���������������������������� ��������������¸å˜À¸å¬�����'ï�LANDÿÿÿÿÿÿ������mac ������������on buildPostArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.requestBody, theTableAdr ) €�����€�����€�����€�����€�����saveSerial()}00��B€�&Ê������´Ù����™���Geneva���������������������������� ��������������¸å˜À¸å™C��� ��'ï�LANDÿÿÿÿÿÿ������mac ��������€�€�IÊ�����av��"º���Geneva���������������������������� ��������������»—»—������¢� @<LANDÿÿÿÿÿÿ������mac ������������on uninstal ( f ) Information 1/21/03; 3:28:27 PM by MB Created, called from user.tools.callbacks.afterUninstall.activeRenderer. f is the pathname to the uninstalled tool. local startTime = clock.ticks() adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs appPath = file.folderFromPath ( Frontier.getProgramPath () ) // retrieve the Radio application folder toolsPath = appPath + "Tools" + file.getPathChar() // get Radio's Tools folder pathname basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" + file.getPathChar () customPath = backupPath + "custom" + file.getPathChar () arPath = file.folderFromPath ( appPath ) + "activeRendererUninstalled" + file.getPathChar () wwwPath = arPath + "www" + file.getPathChar () gemsPath = arPath + "gems" + file.getPathChar () on getVersion ( txt ) // Extracts version number from txt string local ( matchList = {} ) local ( pattern = "version[: ]+([0-9\.a-zA-Z]+)" ) regex.extract ( pattern, @txt, @matchList, {1} ) local ( version = "" ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on setArchive () // create uninstal folders file.sureFolder ( arPath ) file.sureFolder ( wwwPath ) file.sureFolder ( gemsPath ) on restoreTemplates () // Restore regular outline templates if possible local homeTemplateBackup dayTemplate dayTemplateBackup itemTemplateBackup setArchive () if adrPrefs^.activeRenderer.outlineWeblog // if outline style is currently turned on if file.exists ( backupPath + "#homeTemplate.txt" ) // if the original home template was properly backed up homeTemplateBackup = file.readWholeFile ( backupPath + "#homeTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "activeRenderer", homeTemplateBackup ) || string.patternMatch ( "daySwitch", homeTemplateBackup ) // if there is a trace of activeRenderer induced modification in the backed up home template radio.log.add( "activeRenderer", "Warning: backed up home template appears to have been modified with activeRenderer macros.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#homeTemplate.txt", wwwPath + "#homeTemplate.txt" ) // archive current version file.copy ( backupPath + "#homeTemplate.txt", user.radio.prefs.wwwfolder + "#homeTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original home template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the home template in " + backupPath + ".", startTime ) if file.exists ( backupPath + "#dayTemplate.txt" ) // if the original day template was properly backed up dayTemplateBackup = file.readWholeFile ( backupPath + "#dayTemplate.txt" )// retrieve the template's content if string.patternMatch ( "dayTemplate", dayTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up day template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#dayTemplate.txt", wwwPath + "#dayTemplate.txt" ) // archive current version file.copy ( backupPath + "#dayTemplate.txt", user.radio.prefs.wwwfolder + "#dayTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original day template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the day template in " + backupPath + ".", startTime ) if adrPrefs^.activeRenderer.outlineItems // if outline items style is currently on if file.exists ( backupPath + "#itemTemplate.txt" ) // if the original item template was properly backed up itemTemplateBackup = file.readWholeFile ( backupPath + "#itemTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "itemTemplate", itemTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up item template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#itemTemplate.txt", wwwPath + "#itemTemplate.txt" ) // archive current version file.copy ( backupPath + "#itemTemplate.txt", user.radio.prefs.wwwfolder + "#itemTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original item template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the item template in " + backupPath + ".", startTime ) adrPrefs^.activeRenderer.outlineItems = false // turn off item outlining preference adrPrefs^.activeRenderer.outlineWeblog = false // turn off day outlining preference fileMenu.saveMyRoot ( adrPrefs ) // save preferences if f beginsWith "[" // clean up pathname if necessary f = string.mid ( f, 3, string.length ( f ) - 4 ) if string.patternMatch ( "activeRenderer.root", f ) // if we are indeed talking about aR if file.exists ( toolsPath + "activeRenderer.root" ) // if activeRenderer.root is still in the Tools folder if defined ( temp.Frontier.tools.activeRenderer ) // if activeRenderer has been installed during this Radio session if ! defined ( temp.Frontier.tools.activeRenderer.url ) // if activeRenderer was deactivated radio.log.add( "activeRenderer", "Deactivation requested.", startTime ) restoreTemplates () radio.log.add ( "activeRenderer", "Tool was deactivated.", startTime ) else // activeRenderer is not in the Tools folder any more. radio.log.add( "activeRenderer", "Uninstallation requested.", startTime ) restoreTemplates () bundle // Restore #prefs.txt file if file.exists ( backupPath + "#prefs.txt" ) // if the original prefs file was properly backed up file.copy ( user.radio.prefs.wwwfolder + "#prefs.txt", wwwPath + "#prefs.txt" ) // archive current prefs file.copy ( backupPath + "#prefs.txt", user.radio.prefs.wwwfolder + "#prefs.txt" ) // restore prefs radio.log.add( "activeRenderer", "Original preferences restored.", startTime ) €�ó��&J���������"º���Geneva���������������������������� ��������������»—’»—’������¢� @<LANDÿÿÿÿÿÿ������mac ������������on uninstal ( f ) Information 1/21/03; 3:28:27 PM by MB Created, called from user.tools.callbacks.afterUninstall.activeRenderer. f is the pathname to the uninstalled tool. local startTime = clock.ticks() adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs appPath = file.folderFromPath ( Frontier.getProgramPath () ) // retrieve the Radio application folder toolsPath = appPath + "Tools" + file.getPathChar() // get Radio's Tools folder pathname basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" + file.getPathChar () customPath = backupPath + "custom" + file.getPathChar () arPath = file.folderFromPath ( appPath ) + "activeRendererUninstalled" + file.getPathChar () wwwPath = arPath + "www" + file.getPathChar () gemsPath = arPath + "gems" + file.getPathChar () on getVersion ( txt ) // Extracts version number from txt string local ( matchList = {} ) local ( pattern = "version[: ]+([0-9\.a-zA-Z]+)" ) regex.extract ( pattern, @txt, @matchList, {1} ) local ( version = "" ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on setArchive () // create uninstal folders file.sureFolder ( arPath ) file.sureFolder ( wwwPath ) file.sureFolder ( gemsPath ) on restoreTemplates () // Restore regular outline templates if possible local homeTemplateBackup dayTemplate dayTemplateBackup itemTemplateBackup setArchive () if adrPrefs^.activeRenderer.outlineWeblog // if outline style is currently turned on if file.exists ( backupPath + "#homeTemplate.txt" ) // if the original home template was properly backed up homeTemplateBackup = file.readWholeFile ( backupPath + "#homeTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "activeRenderer", homeTemplateBackup ) || string.patternMatch ( "daySwitch", homeTemplateBackup ) // if there is a trace of activeRenderer induced modification in the backed up home template radio.log.add( "activeRenderer", "Warning: backed up home template appears to have been modified with activeRenderer macros.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#homeTemplate.txt", wwwPath + "#homeTemplate.txt" ) // archive current version file.copy ( backupPath + "#homeTemplate.txt", user.radio.prefs.wwwfolder + "#homeTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original home template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the home template in " + backupPath + ".", startTime ) if file.exists ( backupPath + "#dayTemplate.txt" ) // if the original day template was properly backed up dayTemplateBackup = file.readWholeFile ( backupPath + "#dayTemplate.txt" )// retrieve the template's content if string.patternMatch ( "dayTemplate", dayTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up day template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#dayTemplate.txt", wwwPath + "#dayTemplate.txt" ) // archive current version file.copy ( backupPath + "#dayTemplate.txt", user.radio.prefs.wwwfolder + "#dayTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original day template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the day template in " + backupPath + ".", startTime ) if adrPrefs^.activeRenderer.outlineItems // if outline items style is currently on if file.exists ( backupPath + "#itemTemplate.txt" ) // if the original item template was properly backed up itemTemplateBackup = file.readWholeFile ( backupPath + "#itemTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "itemTemplate", itemTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up item template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#itemTemplate.txt", wwwPath + "#itemTemplate.txt" ) // archive current version file.copy ( backupPath + "#itemTemplate.txt", user.radio.prefs.wwwfolder + "#itemTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original item template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the item template in " + backupPath + ".", startTime ) adrPrefs^.activeRenderer.outlineItems = false // turn off item outlining preference adrPrefs^.activeRenderer.outlineWeblog = false // turn off day outlining preference fileMenu.saveMyRoot ( adrPrefs ) // save preferences if f beginsWith "[" // clean up pathname if necessary f = string.mid ( f, 3, string.length ( f ) - 4 ) if string.patternMatch ( "activeRenderer.root", f ) // if we are indeed talking about aR if file.exists ( toolsPath + "activeRenderer.root" ) // if activeRenderer.root is still in the Tools folder if defined ( temp.Frontier.tools.activeRenderer ) // if activeRenderer has been installed during this Radio session if ! defined ( temp.Frontier.tools.activeRenderer.url ) // if activeRenderer was deactivated radio.log.add( "activeRenderer", "Deactivation requested.", startTime ) restoreTemplates () radio.log.add ( "activeRenderer", "Tool was deactivated.", startTime ) else // activeRenderer is not in the Tools folder any more. radio.log.add( "activeRenderer", "Uninstallation requested.", startTime ) restoreTemplates () bundle // Restore #prefs.txt file if file.exists ( backupPath + "#prefs.txt" ) // if the original prefs file was properly backed up file.copy ( user.radio.prefs.wwwfolder + "#prefs.txt", wwwPath + "#prefs.txt" ) // archive current prefs file.copy ( backupPath + "#prefs.txt", user.radio.prefs.wwwfolder + "#prefs.txt" ) // restore prefs radio.log.add( "activeRenderer", "Original preferences restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the prefs file in " + backupPath + ".", startTime ) bundle // Remove activeRenderer folder from gems try gemsPath = gemsPath + "activeRenderer" + file.getPathChar () file.sureFolder ( gemsPath ) file.copy ( basePath, gemsPath ) file.deleteFolder ( basePath ) radio.log.add ( "activeRenderer", "activeRenderer folder moved from " + user.radio.prefs.wwwfolder + "gems to " + file.folderFromPath ( gemsPath ), startTime ) else radio.log.add ( "activeRenderer", "Warning: could not delete activeRenderer folder from " + user.radio.prefs.wwwfolder + "gems.", startTime ) bundle // Unlink aR macros if ( defined ( user.html.macros.opmlRender ) ) delete ( @user.html.macros.opmlRender ) if ( defined( user.html.macros.daySwitch ) ) delete ( @user.html.macros.daySwitch ) if ( defined( user.html.macros.nodeState ) ) delete ( @user.html.macros.nodeState ) if ( defined( user.html.macros.nodeFormat ) ) delete ( @user.html.macros.nodeFormat ) if ( defined( user.html.macros.storyBox ) ) delete ( @user.html.macros.storyBox ) if ( defined( user.html.macros.espressoCup ) ) delete ( @user.html.macros.espressoCup ) if ( defined( user.html.macros.activeRoll ) ) delete ( @user.html.macros.activeRoll ) if ( defined( user.html.macros.activeRendererFunctions ) ) delete ( @user.html.macros.activeRendererFunctions ) if ( defined( user.html.macros.activeRendererHeader ) ) delete ( @user.html.macros.activeRendererHeader ) bundle // Unlink rendering code if defined ( user.html.renderers.activeRenderer ) delete ( @user.html.renderers.activeRenderer ) bundle // Remove update table if defined ( user.rootUpdates.servers.activeRenderer ) delete ( @user.rootUpdates.servers.activeRenderer ) bundle // Remove preferences table if defined ( adrPrefs^.activeRenderer ) delete ( @adrPrefs^.activeRenderer ) radio.log.add( "activeRenderer", "Tool was completely removed.", startTime ) bundle // Remove uninstallation code if defined ( scratchpad.activeRenderer.cleanup ) // just in case it's gone for some reason if ! defined ( temp.activeRenderer ) new ( tabletype, @temp.activeRenderer ) temp.activeRenderer.cleanup = scratchpad.activeRenderer.cleanup // duplicate the cleanup script thread.callScript ( @temp.activeRenderer.cleanup, {} ) // launch the copy in another thread return true €�����„�����€�����€�����€�����€�����������������������������������������������������������������������€�����������������������������������������������€�����������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������������������������������������€�����������������������������������������������������€�����������������������������������������������������������������������������������������������������������������€�����������������€�����������������€�����������������€�����€�����������������������������������€�����€�AI€� x�����pÎ~�������¦é€������Geneva���������������������������� �(�±ž��������������������������������������������������on activeRendere���ˆ€� ä�����pÎ����)����Geneva���������������������������� ����������T��¸ô§ ¹R‘���y��'ï�LANDÿÿÿÿÿÿ������mac ������������edit ( @activeRendererData.texts.about ) €��������§€� 1�����pÎ���j���¹£óî»—3�������� ������� ����#���/ ����7���C ����L���X ����c���o ����~���Š ����‘��� ����­���¹ ����Å editBookmarks����p�äeditPath����p� 1vgetOpml����p�‹WinitPath����p� *l restoreUrl����p� >synchBookmarks����p� 7¦update����p�  updateBookmarks����p� ¤ yahooImport����p� )��C€� â�����rÜ000000060001001777AA000000000068000000001001710000001-7EFB6FBE1800000‚‚48004806276200-1‚0Â6‚276222FFFF0‚‚10‚‚3‚13E000010000003A00000001053B40840‚‚6‚27622253B038E00026962766000020000054100000000�53B,/* RSLite - Simple non-concurrent remote scripting calls. send one string, receive one string created by Brent Ashley version: 1.01 last modified 9/10/02 - Marc Barrot Specify path attribute in cookie, for Mozilla's sake. You may use and distribute this code freely, just keep this header information intact. */ function RSLiteObject(){ this.interval = 500; this.attempts = 3; this.i = new Image(); this.call = function ( page, parm ){ parm = (parm != null)? parm : ''; var d = new Date(); document.cookie = 'RSLite=x; expires=Fri, 31 Dec 1999 23:59:59 GMT; path=/;'; this.i.src = page + '?u=' + d.getTime() + '&p=' + parm; setTimeout( "RSLite.receive(1);", this.interval ); } this.receive = function ( attempt ){ var response = null; var aCookie = document.cookie.split("; "); for (var i=0; i < aCookie.length; i++){ var aCrumb = aCookie[i].split("="); if (aCrumb[0] == 'RSLite') response = aCrumb[1]; } if ( response != null ){ this.callback( unescape(response.replace(/\+/g,' ')) ); } else { if (attempt < this.attempts){ setTimeout( "RSLite.receive( " + (attempt+1) +" );",this.interval); } else { this.failure(); } } } this.callback = function( response ){ alert(response); } this.failure = function(){ alert( "RSLite timed out"); } } var RSLite; 00040000000A00000002053D0000500000015000000040E4113E053D0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚30Â180‚Á‚Á‚10Â170‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚29B2E03‚29B2E0000A00000017000000026‚2762226‚276222000B00000005000000020Â000C000000150000000113EE4‚6A7110‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,D(€��4,D(€��4,�����4,D(€��4,D)���4, Use00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹¤~¹¤³�����������������������������������������;�����������/$Ý������ ^����������������������������������������������������€�MÍ��Aù����FFFF000000060001001777AA00000000007B000000001001710000001-7FFB6FBE1800000‚‚4800480618A7200-1‚7C67C77C67C70Â6‚18A7222FFFF0‚‚10‚‚3‚3B7E000010000019000000006092240840‚‚6‚49822290003CE00048B6498B40922123640840‚‚498699F2228C403C80009923099F1AC012361B8A40840‚‚99F6D4722293503C8000D3A18D47A001B8A278D40840‚‚D476117E222BB003CE00011716117E1870278D2F1640840‚‚117E613EE22277903C800013E119813EE1E502F163B7E40840‚‚13EE618A7222C67038E000189A618A7B000020000092800000000�922,/* Outliner functions version: 1.4 last modified 4-Mar-2003 created by Marc Barrot, with help from Aaron Straup Cope, DJ Adams, Sjoerd Visscher and Danny Goodman copyright 2002 by Precision IT Management,Inc. You may use and distribute this code freely, just keep this header information intact. */ var img_expanded = 'http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif'; var img_collapsed = 'http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif'; var img_rotating = 'http://radio.weblogs.com/0104487/gems/activeRenderer/globe.gif'; (new Image(15,15)).src = img_expanded; // caching (new Image(15,15)).src = img_collapsed; // caching (new Image(15,15)).src = img_rotating; // caching function expand(ioNode) { ioWedge = "i" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_collapsed; document.getElementById(ioWedge).title='collapse'; document.getElementById(ioNode).className='expanded'; } } function collapse(ioNode) { ioWedge = "i" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_expanded; document.getElementById(ioWedge).title='expand'; document.getElementById(ioNode).className='collapsed'; } } function ioSwitch(ioNode) { if (document.getElementById && document.getElementById(ioNode) != null) { nodeState = document.getElementById(ioNode).className; } if (nodeState == 'collapsed') { expand(ioNode); } else { collapse(ioNode); } } function expandAll(divName) { if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('div'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == divName) { expand(nodeList.item(i).id); } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function collapseAll(divName) { if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('div'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == divName) { collapse(nodeList.item(i).id); } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function normalizeAll(spanName) { 00020000091A00000922�914, if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('span'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == spanName) { nodeList.item(i).style.fontWeight = 'normal'; } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function expandBold(ioNode) { ioWedge = "i" + ioNode.substr(1); ioTitle = "t" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_collapsed; document.getElementById(ioWedge).title='collapse'; document.getElementById(ioNode).className='expanded'; document.getElementById(ioTitle).style.fontWeight = 'bold'; } } function expandByDate(n) { if (n.nodeType == 1) { if (n.tagName.toLowerCase() == 'div') { if (n.getAttribute('name') == 'item') { expandBold(n.id); } } } var children = n.childNodes; for (var i=0; i < children.length; i++ ) { expandByDate(children[i]); } } function daySwitch(postDate) { var hasItems = 0; if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('span'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == 'itemTitle') { hasItems = 1; break; } } } if (hasItems) { collapseAll('item'); normalizeAll('itemTitle'); if (document.getElemen€�_€�¹�����000000060001001777AA000000000062000000001€�_K�� í����FFFF000000060001001777AA000000000068000000001001710000001-7FFB6FBE1800000‚‚48004806131200-1‚0Â6‚131222FFFF0‚‚10‚‚3‚548000010000003B00000001054840840‚‚6‚131222542038E000124613125000020000054E00000000�548,#title "Thanks" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="Bookmarks synchronization">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/help/" title="activeRenderer's online help">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html">Faq</a></span> </div> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>registration</b></p> <p>Thank€�dx��À����FFFF000000060001001777AA000000000062000000001001710000001-7FFB6FBE1800000‚‚48004806200-1‚0Â6‚20222FFFF0‚‚10‚‚3‚F00001000000350000000103340840‚‚6‚202228038E00013620B6000020000003800000000�33,#title "update" {activeRendererSuite.gui.update ()}00040000000900000002035000050000000E000000030101350000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚202226‚20222000B00000005000000020Â000C0000001300000001FE‚A5C04A‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,ÿÿ�4,ÿÿ�4,D@��4,D@��4,�����4,D@�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹´¿ ¹´À�������������������������������������������3����������3xâ������<������������������������������������������������������À��&‚�������l��"ž���Geneva���������������������������� ��������������»¯ñ»¯ñ������iDGÖLANDÿÿÿÿÿÿ������mac ������������on update( procID = 0 ) Information 1/28/03; 10:33:50 PM by MB Added fixing of end of lines for Windows systems 1/15/03; 7:11:36 PM by MB Update external elements right after Frontier database update Do not wait for next Radio restart. 11/15/02; 2:25:22 PM by MB Only test system.temp.activeRenderer.instal' modification date if it is defined Set an updating semaphore in system.temp.activeRenderer before update, reset it when finished 11/14/02; 3:36:27 PM by MB Terminate calling thread before starting a new instance of the instal script 11/4/02; 3:11:46 PM by MB Corrected a bug in the calling thread waking process, reported by Doug Baron 22.10.02; 21:15:39 Uhr by AR/MB Code review with Andre Radke Suppressed the use of a scratchpad subtable Relaunch installation if instal script was updated 9/23/02; 2:30:40 PM by MB Removed call to Frontier.bringToFront 7/4/02; 1:51:55 PM by MB Added support for logging failure 6/29/02; 7:56:54 PM by MB Added support for installation thread wake up 6/28/02; 7:17:32 PM by MB Add logging with number of downloaded parts. local startTime = clock.ticks() // initialize time stamp ctParts = 0 // number of updated parts basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" modCSS = timeModified ( @activeRendererData.texts.css ) modJavascript = timeModified ( @activeRendererData.texts.javascript ) modXslHtml = timeModified ( @activeRendererData.texts.xsl_html ) modXslJs = timeModified ( @activeRendererData.texts.xsl_js ) modRsLite = timeModified ( @activeRendererData.texts.rslite ) modPrefs = timeModified ( @activeRendererData.texts.prefs ) modTemplate = timeModified ( @activeRendererData.texts.template ) on getVersion ( txt ) // Returns a version number from the parameter string local matchList = {} pattern = "version[: ]+([0-9\.a-zA-Z]+)" version = "" regex.extract ( pattern, @txt, @matchList, {1} ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on eolFix ( txt ) // Fixes end of line marker according to operating system regex.subst ( "[\r\n]+", "\r", @txt ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems txt = string.replaceAll ( txt, "\r", "\r\n" ) return txt if ! defined ( system.temp.activeRenderer ) // create temporary table if needed new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.updating = true // set updating semaphore radio.log.add ( "activeRenderer", "Checking \"" + user.rootUpdates.servers.activeRenderer.server + "\" for updates.", startTime ) window.about() // Bring Radio status window to the front try rootUpdates.update (@activeRendererSuite, true, @ctParts ) // check for updates if ctParts > 0 // if some parts were downloaded radio.log.add( "activeRenderer", ctParts +" new part(s) loaded from \"" + user.rootUpdates.servers.activeRenderer.server + "\".", startTime ) else // no available parts radio.log.add( "activeRenderer", "No new part(s) found on \"" + user.rootUpdates.servers.activeRenderer.server + "\".", startTime ) else // catch update errors msg ( tryError ) radio.log.add ( "activeRenderer", "Update failed: " + tryError, startTime ) if defined ( system.temp.activeRenderer.instal ) && timeModified ( @activeRendererSuite.instal ) > timeModified ( @system.temp.activeRenderer.instal ) // if update was launch at startup (autoupdate true) and the instal code was modified during update radio.log.add( "activeRenderer", "activeRendererSuite.instal was updated, re-launching installation.", startTime ) if procID > 0 && thread.exists ( procID ) // if called from a waiting parent thread thread.kill ( procID ) // terminate the calling thread before starting a new one. system.temp.activeRenderer.instal = activeRendererSuite.instal thread.callScript ( @system.temp.activeRenderer.instal, {} ) // Relaunch installation code in a separate thread else // no modification of instal code, check external elements instead if timeModified ( @activeRendererData.texts.css ) > modCSS // css stylesheet was modified local cssPath = basePath + file.getPathChar() + "outliner.css" currentVersion = getVersion ( file.readWholeFile ( cssPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.css ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file updated.", startTime ) if timeModified ( @activeRendererData.texts.javascript ) > modJavascript // javascript code was modified local jsPath = basePath + file.getPathChar() + "outliner.txt" js = eolFix ( string ( activeRendererData.texts.javascript ) ) currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) js = string.replaceAll ( js, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code updated.", startTime ) if timeModified ( @activeRendererData.texts.xsl_html ) > modXslHtml // xsl/html renderer was modified local xslPath = basePath + file.getPathChar() + "outliner_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_html ) ) currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code updated.", startTime ) if timeModified ( @activeRendererData.texts.xsl_js ) > modXslJs // xsl/javascript renderer was modified local xslPath = basePath + file.getPathChar() + "outliner_js_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_js ) ) currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code updated.", startTime ) if timeModified ( @activeRendererData.texts.rslite ) > modRsLite // rsLite code was modified local jsPath = basePath + file.getPathChar() + "rslite.txt" js = eolFix ( string ( activeRendererData.texts.rslite ) ) currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code updated.", startTime ) basePath = user.radio.prefs.wwwfolder + "outlines" if timeModified ( @activeRendererData.texts.prefs ) > modPrefs // #prefs.txt was modified local prefPath = basePath + file.getPathChar() + "#prefs.txt" prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge true" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add ( "activeRenderer", "#prefs.txt file updated in outlines folder.", startTime ) if timeModified ( @activeRendererData.texts.template ) > modTemplate // #template.txt was modified local templatePath = basePath + file.getPathChar() + "#template.txt" currentVersion = getVersion ( file.readWholeFile ( templatePath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.template ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "#template.txt file updated in outlines folder.", startTime ) if procID > 0 // If a a calling process id was passed along if thread.exists ( procID ) and thread.isSleeping ( procID ) // if the process is still there and paused thread.wake ( procID ) // Wake up the dozing thread system.temp.activeRenderer.updating = false // reset updating semaphore return true bundle // test code update () €�����„�����„�����€�����„�����������������„�����������������„�����������€�����������„�����������������������€�����������„�����������„�����������„�����������€�����������������������������������������������������������������€�����������������������������������������������������€�����������������������������€�����������€�����€�����€�����€�����������������������������������€�����������������€�����������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������€�����€�����€�������������&‚���Ó�������Ï���L���¸ô§ »¯ñ�������� ���� ��� ���� ���, ����3���? ����E���Q ����a���m ����sentities������,ˆ guichuncks������˜images������»prefs������=rootupdatetable������€Ptexts������ô«���Ó€�W�����%ß���$���ºJBZºJB®�������� ������� ����port���5336server��� 64.81.223.180���Q€������/u000000060001001777AA000000000079000000001001710000001-7EFF6FBE1800000‚‚48004806D13200-1‚CB9CBDCB9CBD0Â6‚D13222FFFF0‚‚10‚‚3‚103A0000100000077000000020616840‚‚6‚48B22260503C800047E1848B6E0616103A840‚‚48B6D13222A24038E000D066D136000020000061C00000000�616,/* version€�³���������ž��û����Geneva���������������������������� ��������������»—¾»—¾������}�^“þLANDÿÿÿÿÿÿ������mac ������������on checkHomeTemplate ( startTime = clock.ticks() ) Information 10/29/02; 5:20:33 PM by MB Provide multiple backups, so as not to overwrite the original backup 22.10.02; 22:50:04 Uhr by AR/MB Code review with Andre Radke Inserted ca€�-��È�������z��Ö����Geneva���������������������������� ��������������»—»—������hd³LANDÿÿÿÿÿÿ������mac ������������on parseCookies ( httpResult, server, path, adrCookiesTable ) Information 11/1/02; 7:32:17 PM by MM (Mikel Maron) Cookie processing is broken in tcp.httpClient:€�W��ð�������Ô�� ¤����Geneva���������������������������� ��������������»¯ñ»¯ñ������(�wLANDÿÿÿÿÿÿ������mac ������������on folderToOpml (folder, adrcallback=nil, ownername=user.prefs.name, owneremail=user.prefs.mailAddress, adrCloud=nil) Information 3/3/03; 11:28:49 AM by MB Ported to activeRenderer from webOutliner, modified url attribute creation, modified text creation. 11/22/02; 11:54:12 PM by MB Simplified code to handle local opml file names only. linked urls are GET requests to webOutliner/renderOutline with a url parameter 11/19/02; 5:25:24 PM by DB derived from radio.file.folderToOpml created by JES local xmltext = "" indentlevel = 0 localHost = "127.0.0.1" localPort = "5335" on add ( s ) xmltext = xmltext + string.filledstring ( "\t", indentlevel ) + s + "\r\n" add ( "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" ) add ( "<!-- OPML generated by activeRenderer vs " + activeRendererInfo.version + " on " + date.netStandardString (clock.now ()) + " -->\r\n" ) if adrCloud == nil add ( "<opml version=\"1.0\">" ); indentlevel++ else add ( "<opml version=\"1.1\">" ); indentlevel++ bundle // add head local ( adrfile ) radio.file.getFileAttributes ( folder, @adrfile ) add ( "<head>" ); indentlevel++ add ( "<ownerName>" + ownername + "</ownerName>" ) add ( "<ownerEmail>" + owneremail + "</ownerEmail>" ) add ( "<dateCreated>" + adrfile^.created + "</dateCreated>" ) add ( "<dateModified>" + adrfile^.modified + "</dateModified>" ) add ( "<expansionState></expansionState>" ) if adrCloud != nil with adrCloud^ add ( "<cloud domain=\"" + server + "\" port=\"" + port + "\" path=\"" + path + "\" registerProcedure=\"" + registerProcedure + "\" protocol=\"" + protocol + "\"/>" ) add ( "</head>" ); indentlevel-- bundle // add body add ( "<body>" ); indentlevel++ local ( lowerdirectoryfname = string.lower (radio.data.upstream.directoryFileName ) ) on dofolder ( folder, fltoplevel = false ) // return true if at least one file was inserted local ( f, fname, atts, flfolder, adrfile, flinserted ) fileloop ( f in folder ) if not file.isVisible ( f ) // skip invisible files continue if file.fileFromPath ( f ) beginsWith "." // skip files that begin with "." continue fname = file.filefrompath ( f ) if fltoplevel // don't include the directory in the directory if string.lower (fname) == lowerdirectoryfname continue local ( adrfile ) radio.file.getFileAttributes ( f, @adrfile ) if adrcallback != nil // 7/21/01 JES: adrcallback, not adrcallback^ -- this was causing a crash try if not adrcallback^ ( f ) continue if adrfile^.flFolder fname = string.mid (fname, 1, sizeof (fname) - 1) if adrfile^.ctfiles > 0 add ( "<outline type=\"folder\" text=\"" + fname + "\">" ); indentlevel++ dofolder ( f ) add ( "</outline>" ); indentlevel-- else add ( "<outline type=\"folder\" text=\"" + fname + "\"/>" ) else if fname endsWith ".opml" local url = string.urlEncode ( file.fileToURL ( f ) ) urlattribute = "url=\"" + url + "\"" txt = string.mid ( fname, 1, string.length ( fname ) -5 ) add ( "<outline type=\"link\" text=\"" + txt + "\" " + urlattribute + "/>" ) dofolder ( folder, true ) add ( "</body>" ); indentlevel-- add ( "</opml>" ); indentlevel-- return ( xmltext ) bundle // test code op.xmlToOutline ( folderToOpml ( radio.file.getSubFolder ( "outlines" ) ), @temp.webOutliner.directory ) op.fullCollapse () edit ( @temp.webOutliner.directory ) €�����„�����„�����€�����„�����€�����€�����€�����������€�����������������������������€�����������€�����€�����€�����������€�����������€�����������������������������������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����€�����€�����€�����€�����€�������ð��4]�������¬��.9����Geneva���������������������������� ��������������»¯ñ»¯ñ������ž%ïLANDÿÿÿÿÿÿ������mac ������������on rssRenderer ( rss = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, flIncludeChannelTitle = false, flCollapseChannelTitle = false, itemCnt = 0, expandedCnt = 0, titleWordCnt = 8, flCreateHeader = false ) Information 3/3/03; 4:36:30 PM by MB Corrected bug in items handling, allow for items without descriptions 2/27/03; 3:56:33 PM by MB Completed HTML generation 2/25/03; 9:29:57 PM by MB Added meaningful tags content retrieval logics 2/22/03; 6:09:59 PM by MB Added comments and main tags detection logics 2/19/03; 6:41:06 PM by MB Created from scratch local html = "\r<!-- generated by activeRenderer for Radio vs " + activeRendererInfo.version + " - HTML outline structure copyright 2002-03 Precision IT Management, Inc. -->\r" // whole outline's rendered HTML string noSubsImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol1.gif" ) expandedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif" ) collapsedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol3.gif" ) beginTag = 0 // start of current tag position endTag = 0 // end of current tag position flHeader = false // header mode flag nodeCnt = 0 // node counter level = 0 // current outline level offset = 0 // start of line offset based on current level title = "" // current channel or item title header = "" // current item generated header node if necessary link = "" // current channel or item link description = "" // current channel or item description guid = "" // current item guid pubDate = "" // current item publication date item = 0 // items counter on processHeader () // skip all information before the first <channel> tag rss = string.delete ( rss, 1, string.patternMatch ( "<channel", rss ) -1 ) on addNode ( s, l = "" ) // format and adds the current node to the HTML output local nodeId = uniqId + string ( ++nodeCnt ) // set new node id html = html + ( string.filledstring ("\t", level + offset ) + "<div id=\"r" + nodeId + "\" class=\"" + cssClassName + ( level + long ( cssClassLevel ) + 1 ) + "\">" ); // root div html = html + "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td valign=\"top\" class=\"wedge\">"; // single row table + left cell if hasChildren // if the node has children html = html + ( "<a name=\"a" + nodeId + "\" href=\"javascript:ioSwitch( 'p" + nodeId + "' )\">" ); // link for active expand/collapse wedge if isExpanded // if the node is expanded wedgeImg = expandedImg wedgeTitle = "collapse" else // if the node is collapsed wedgeImg = collapsedImg wedgeTitle = "expand" else // if the node is childless wedgeImg = noSubsImg wedgeTitle = "" html = html + ( "<img id=\"i" + nodeId + "\" src=\"" + wedgeImg + "\" align=\"top\" border=\"0\" hspace=\"0\" vspace=\"0\" alt=\"wedge\" title=\"" + wedgeTitle + "\">" ); // wedge image if hasChildren // if the node has children html = html + "</a>" // close link html = html + "</td><td class=\"para\"><span id=\"t" + nodeId + "\">"; // close left cell, open right cell if l // add a link if it was passed along html = html + ( "<a href=\"" + l + "\" target=\"_blank\">" ); html = html + s; // node text inside span if l // close the link if it was passed along html = html + "</a>" html = html + "</span></td></tr></table>"; // close span, cell, row and table if hasChildren // if the node has children if isExpanded // set class attribute according to expansion state activeClass = "expanded" else activeClass = "collapsed" offset++ html = html + ( "\r" + string.filledstring ("\t", level + offset ) + "<div name=\"" + cssClassName + "\" class=\"" + activeClass + "\" id=\"p" + nodeId + "\">\r" ); // embedding div for children nodes else // if the node is childless html = html + "</div>\r"; // close div on flushNode () // close the current node in the HTML outline html = html + ( string.filledstring ("\t", level + --offset ) + "</div>\r" ); html = html + ( string.filledstring ("\t", --level + offset ) + "</div>\r" ); on getTagContent () // Get content between opening and closing XML tags local ( content = "" ) rss = string.delete ( rss, 1, endTag ) // strip current tag from body beginTag = string.patternMatch ( "</" + tag, rss ) // locate start of closing tag position content = string.mid ( rss, 1, beginTag - 1 ) // retrieve tag's content endTag = beginTag + 2 + string.length ( tag ) // set new end of tag position beginTag = 1 // reset begining of tag position return content // return tagged content on stripHtmlTags ( s ) // Strip all HTML tags from passed string while string.patternMatch ( "<", s ) > 0 local ( before = string.mid ( s, 1, string.patternMatch ( "<", s ) - 1 ) ) local ( after = string.mid ( s, string.patternMatch ( ">", s ) + 4, string.length ( s ) - ( string.patternMatch ( ">", s ) + 3 ) ) ) s = before + after return s on cleanHtmlTags ( s, t, r = "" ) // Cleanup HTML tags in s, replacing t by r local p = string.patternMatch ( "<" + string.lower ( t ), s ) before if p == 0 p = string.patternMatch ( "<" + string.upper ( t ), s ) while p > 0 before = string.mid ( s, 1, p -1 ) s = string.mid ( s, p, string.length ( s ) ) p = string.patternMatch ( ">", s ) + 3 s = before + r + string.mid ( s, p + 1, string.length ( s ) ) p = string.patternMatch ( "<" + string.lower ( t ), s ) if p == 0 p = string.patternMatch ( "<" + string.upper ( t ), s ) return s on processTag ( s ) // process XML tags as they come along local tag = string.firstWord ( s ) // current tag's token, devoid of attributes hasChildren = false // true if the current node has children isExpanded = false // true if the current node is visible and its visible node count is included in the expansionString case tag "/rss" // </rss> tag, time to bail out of the calling loop if flIncludeChannelTitle // flush channel title node if necessary flushNode () return false "channel" // <channel> tag, set header mode flHeader = true "item" // <item> tag, reset header mode, build a node for the channel title if flIncludeChannelTitle is true and first occurence of <item> tag item++ // increment items counter if flHeader if flIncludeChannelTitle hasChildren = true if ! flCollapseChannelTitle isExpanded = true addNode ( title, link ) level++ flHeader = false title = "" link = "" description = "" pubDate = "" "title" // <title> tag, retrieve title's content title = getTagContent () "link" // <link> tag, retrieve link's content link = getTagContent () "description" // <description> tag, retrieve descriptions' content description = getTagContent () "guid" // <guid> tag, retrieve guid's content guid = getTagContent () "pubDate" // <pubDate> tag, retrieve date's content local d = date ( getTagContent () ) t = date.timeString ( d ) pubDate = date.shortString ( d ) + " - " + string.mid ( t, 1, string.length ( t ) - 6 ) + string.lower ( string.mid ( t, string.length ( t ) - 2, 3 ) ) + " GMT" "dc:date" // <dc:date> tag, retrieve date's content pubDate = getTagContent () "/item" // </item> tag, build an item note in the HTML outline if itemCnt == 0 || item <= itemCnt // if we are within item display range local ( additionalData = "" ) if ! title // If title is missing, try to create one from description local ( p = string.patternMatch ( ". ", description ) ) if p > 0 title = string.mid ( description, 1, p ) else title = description if title endsWith "." title = string.mid ( title, 1, string.length ( title ) - 1 ) local ( t = stripHtmlTags ( title ) ) // strip all HTML tags from title if string.countWords ( t ) > titleWordCnt // truncate title if necessary local pivot = string.nthWord ( t, titleWordCnt + 1 ) support = string.nthWord ( t, titleWordCnt + 2 ) if support pivot = pivot + " " + support p = string.patternMatch ( pivot, t ) t = string.mid ( t, 1, p - 1 ) + "..." if guid || ( ! guid && link ) // insert link in last word if permalink to the post appears to be defined local permalink = guid p = string.patternMatch ( string.lastWord ( t ), t ) if ! permalink permalink = link t = string.mid ( t, 1, p - 1) + "<a href=\"" + permalink + "\" target=\"_blank\">" + string.mid ( t, p, string.length ( t ) ) hasChildren = true if expandedCnt > 0 && item <= expandedCnt // set title expansion state isExpanded = true else isExpanded = false addNode ( t ) // output title if flCreateHeader // if item header node creation requested local ( p = string.patternMatch ( ". ", description ) ) if p > 0 header = cleanHtmlTags ( string.mid ( description, 1, p ), "img", "[img] " ) // retrieve first sentence, cleaning up IMG tags header = cleanHtmlTags ( header, "p" ) // clean up P tags header = cleanHtmlTags ( header, "/p" ) header = cleanHtmlTags ( header, "blockquote" ) // clean up BLOCKQUOTE tags header = cleanHtmlTags ( header, "/blockquote" ) header = cleanHtmlTags ( header, "br" ) // clean up BR tags header = cleanHtmlTags ( header, "hr" ) // clean up HR tags description = string.mid ( description, p + 2, string.length ( description ) - ( p + 1 ) ) // remove header from description level++ // if description hasChildren = true else hasChildren = false isExpanded = false addNode ( header ) isExpanded = false hasChildren = false level++ if description addNode ( description ) if pubDate additionalData = additionalData + pubDate if link if pubDate additionalData = additionalData + " - " additionalData = additionalData + "[<a href=\"" + link + "\">link</a>]" if guid if pubDate || link additionalData = additionalData + " - " additionalData = additionalData + "[<a href=\"" + guid + "\">guid</a>]" addNode ( additionalData ) if flCreateHeader && header && description flushNode () flushNode () title = "" header = "" link = "" description = "" guid = "" pubDate = "" return true // stay in the calling loop until </rss> is detected if ! uniqId // assign a unique node id prefix if none is specified in parameters uniqId = string ( random ( 1, 9 ) ) processHeader () // jump to starting point in rss source string while true // loop for all tags after <rss> beginTag = string.patternMatch ( "<", rss ) // locate start of tag position endTag = string.patternMatch ( ">", rss ) // locate end of tag position if ! processTag ( string.mid ( rss, beginTag +1, endTag - beginTag -1 ) ) // process current tag, stop when false is returned break rss = string.delete ( rss, beginTag, endTag - beginTag + 1 ) // strip current tag from body html= string.multipleReplaceAll ( html, @activeRendererData.entities, false ) // convert entity encoded characters html = html + "<!-- end of rendered news feed -->\r"; return html bundle // test code local ( x, w, start, stop, s ) file.getFileDialog ("Pick a file, any file", @x, 0) s = file.readWholeFile ( x ) start = clock.ticks () w = rssRenderer ( rss:s, flIncludeChannelTitle:true, flCollapseChannelTitle:true, flCreateHeader:true ) z = string.replaceAll ( w, "'", "\\'" ) z = string.replaceAll ( z, "\r", "'\r+ '" ) z = "retrieveHtml ('" + z + "');" stop = clock.ticks () dialog.alert ( stop - start ) wp.newTextObject ( z, @temp.test ) edit ( @temp.test ) €�����„�����„�����€�����„�����������„�����������€�����������€�����������€�����������������������������������������������������������������������������������������������������������€�����������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������€�����������������������������������������������€�����������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������€�����€�����������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������4]��i>������� Š��_<����Geneva���������������������������� ��������������»¯ñ»¯ñ������.�nÉhLANDÿÿÿÿÿÿ������mac ������������on instal () Information 3/3/03; 2:47:09 PM by MB Added update of myOutlines.opml outline 2/7/03; 4:04:38 PM by MB Updated installation of activeRendererFunctions and storyBox macros 1/28/03; 5:49:56 PM by MB Added fixing of end of lines in text files for Windows systems 1/21/03; 4:40:47 PM by MB Added installation of uninstal code 1/17/03; 4:45:37 PM by MB Modified installation of activeRoll macro. 1/14/03; 10:45:59 PM by MB Added updateServer pref, defaults to stable 11/14/02; 3:11:51 PM by MB Modified installation of outlines/#prefs.txt for the flDisplayHTMLWedge directive Fix liveTopics preferences if liveTopics is installed. 11/10/02; 7:34:40 PM by MB Modified installation of activeRendererFunctions macro. 11/1/02; 5:58:55 PM by MB Added Yahoo bookmarks preferences Updated bookmarks synchronization for Yahoo bookmarks 10/29/02; 7:05:08 PM by MB Provided multiple backups when day and item templates are updated 22.10.02; 21:47:26 Uhr by AR/MB Code review with Andre Radke Renounced deleting anything in the user table Given up on all wp object processing Cleaned up update launch if auto-update is enabled 10/11/02; 6:07:28 PM by MB Added xsl stylesheets installation in www/gems/activeRenderer 9/10/02; 7:01:01 PM by MB Added bookmark synchronization if pref is checked Added bookmarks preferences initialization Added rslite javascript code installation 7/31/02; 9:05:29 PM by MB Added activeRoll macro installation 7/31/02; 9:10:03 AM by MB Modified to fix multiple end of lines in the middle of #Prefs.txt if it ever occurs when outline-style weblog presentation is checked 7/16/02; 1:54:12 PM by MB Modified to add displayLatest user preference, defaults to true. 7/12/02; 10:30:14 AM by MB Added logging of installation start. Modified call to daySwitch macro 7/10/02; 4:25:43 PM by MB Added startTime parameter passing to checkHomeTemplate, thanks Brian. 7/9/02; 5:56:35 PM by MB inserted a newLine before #nodeClass in www/#prefs.txt when missing from the file's last line. Added autoUpstream user preference, true by default. Do not touch #homeTemplate.txt and #prefs.txt in www if outlineWeblog pref is not checked 7/4/02; 1:47:16 PM by MB Perform auto-update only if the tool is registered. 7/1/02; 11:18:50 AM by MB Corrected wedge image instal logging. 6/29/02; 10:15:16 AM by MB Added logging to Radio events log. Added synchronization with update thread. 6/28/02; 11:36:47 PM by MB Added installation of autoUpdate preference. Update activeRenderer at startup if true. 6/26/02; 8:17:29 PM by MB Corrected bug in auto update table installation. Was resetting serial number everytime radio was started. Added nodeFormat macro installation 6/25/02; 12:21:49 PM by MB Created local user preferences table if needed. Modified url of javascript gifs with address of current weblog, not slam. Modified Macros folder cleanup to account for Windows systems on getVersion ( txt ) // Returns a version number from the parameter string local matchList = {} pattern = "version[: ]+([0-9\.a-zA-Z]+)" version = "" regex.extract ( pattern, @txt, @matchList, {1} ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on getNewLineMarker () // Returns end of line sequence according to system local ( s = "\r" ) if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" s = s + "\n"; return s on touchOPML ( path ) // Touch path if it's an opml file if regex.easyMatch ( ".*\\.opml$", path ) file.touchPath ( path ) on eolFix ( txt ) // Fixes end of line marker according to operating system regex.subst ( "[\r\n]+", "\r", @txt ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems txt = string.replaceAll ( txt, "\r", "\r\n" ) return txt local adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs startTime = clock.ticks() radio.log.add( "activeRenderer", "Beginning installation.", startTime ) bundle // Instal user preferences table if ! defined ( adrPrefs^.activeRenderer ) new ( tabletype, @adrPrefs^.activeRenderer ) table.copycontents ( @activeRendererData.prefs, @adrPrefs^.activeRenderer ) radio.log.add( "activeRenderer", "Default preferences table installed.", startTime ) if ! defined ( adrPrefs^.activeRenderer.autoUpdate ) adrPrefs^.activeRenderer.autoUpdate = activeRendererData.prefs.autoUpdate if ! defined ( adrPrefs^.activeRenderer.autoUpstream ) adrPrefs^.activeRenderer.autoUpstream = activeRendererData.prefs.autoUpstream if ! defined ( adrPrefs^.activeRenderer.displayLatest ) adrPrefs^.activeRenderer.displayLatest = activeRendererData.prefs.displayLatest if ! defined ( adrPrefs^.activeRenderer.bookmarksPath ) adrPrefs^.activeRenderer.bookmarksPath = "" if ! defined ( adrPrefs^.activeRenderer.outlinePath ) adrPrefs^.activeRenderer.outlinePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "bookmarks.opml" if ! defined ( adrPrefs^.activeRenderer.keepSynched ) adrPrefs^.activeRenderer.keepSynched = false if ! defined ( adrPrefs^.activeRenderer.useYahoo ) adrPrefs^.activeRenderer.useYahoo = false if ! defined ( adrPrefs^.activeRenderer.myYahoo ) new ( tabletype, @adrPrefs^.activeRenderer.myYahoo ) adrPrefs^.activeRenderer.myYahoo.userId = "" adrPrefs^.activeRenderer.myYahoo.password = "" if ! defined ( adrPrefs^.activeRenderer.updateServer ) adrPrefs^.activeRenderer.updateServer = "stable" bundle // Instal update table if ! defined ( user.rootUpdates.servers.activeRenderer ) new ( tabletype, @user.rootUpdates.servers.activeRenderer ) table.copycontents ( @activeRendererData.rootupdatetable, @user.rootUpdates.servers.activeRenderer ) radio.log.add( "activeRenderer", "Default update table installed.", startTime ) if adrPrefs^.activeRenderer.updateServer == "alpha" user.rootUpdates.servers.activeRenderer.server = activeRendererData.prefs.alphaServer.server user.rootUpdates.servers.activeRenderer.port = activeRendererData.prefs.alphaServer.port bundle // Update tool if auto update enabled and tool registered if adrPrefs^.activeRenderer.autoUpdate and activeRendererSuite.utils.serialOk () if !defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.update = activeRendererSuite.update // Run a copy of the update code in a separate thread thread.callScript ("system.temp.activeRenderer.update", { thread.getCurrentID () } ) thread.sleepFor ( 30 ) // sleep for the next 30 seconds, or a wake-up from the update code newLine = getNewLineMarker () // Get proper new line sequence bundle // Instal rendering code if ( ! defined ( user.html.renderers.activeRenderer ) ) script.newScriptObject ("on activeRenderer ( ol ) { activeRendererSuite.activeRenderer ( ol ) }", @user.html.renderers.activeRenderer ) script.compile ( @user.html.renderers.activeRenderer ) bundle // Clean-up Macros folder macrosPath = Frontier.getProgramPath () regex.subst ("[^:\\\\]+$", "", @macrosPath) // Strip everything after last path separator macrosPath = macrosPath + "Macros" + file.getPathChar() if file.exists ( macrosPath + "activeRendererHeader.txt" ) // Those 4 macros... file.delete ( macrosPath + "activeRendererHeader.txt" ) if file.exists ( macrosPath + "activeRendererFunctions.txt" ) // ...may have existed... file.delete ( macrosPath + "activeRendererFunctions.txt" ) if file.exists ( macrosPath + "espressoCup.txt" ) // ...in separate text files... file.delete ( macrosPath + "espressoCup.txt" ) if file.exists ( macrosPath + "storyBox.txt" ) // ...before aR release. file.delete ( macrosPath + "storyBox.txt" ) bundle // Instal activeRendererHeader macro if ( defined ( user.html.macros.activeRendererHeader ) ) delete ( @user.html.macros.activeRendererHeader ) script.newScriptObject ("on activeRendererHeader () { activeRendererSuite.macros.activeRendererHeader () }", @user.html.macros.activeRendererHeader ) script.compile ( @user.html.macros.activeRendererHeader ) bundle // Instal activeRendererFunctions macro if ( defined ( user.html.macros.activeRendererFunctions ) ) delete ( @user.html.macros.activeRendererFunctions ) script.newScriptObject ("on activeRendererFunctions ( titleText = \"outline\", titleClass = \"active\", flIncludeLinks = true, linkClass = \"active\", nodeClass = \"active\", helpText = \"how this works\", helpClass = \"help\", flImageCache = true, flVertical = true ) { activeRendererSuite.macros.activeRendererFunctions ( titleText, titleClass, flIncludeLinks, linkClass, nodeClass, helpText, helpClass, flImageCache, flVertical ) }", @user.html.macros.activeRendererFunctions ) script.compile ( @user.html.macros.activeRendererFunctions ) bundle // Instal espressoCup macro if ( ! defined ( user.html.macros.espressoCup ) ) script.newScriptObject ("on espressoCup ( flag ) { activeRendererSuite.macros.espressoCup ( flag ) }", @user.html.macros.espressoCup ) script.compile ( @user.html.macros.espressoCup ) bundle // Instal storyBox macro if ( defined ( user.html.macros.storyBox ) ) delete ( @user.html.macros.storyBox ) script.newScriptObject ("on storyBox ( class = \"storybox\", type = \"opml 1.0\", updated = \"last updated\" ) { activeRendererSuite.macros.storyBox ( class, type, updated ) }", @user.html.macros.storyBox ) script.compile ( @user.html.macros.storyBox ) bundle // Instal nodeFormat macro if ( ! defined ( user.html.macros.nodeFormat ) ) script.newScriptObject ("on nodeFormat ( num, flag=true ) { activeRendererSuite.macros.nodeFormat ( num, flag ) }", @user.html.macros.nodeFormat ) script.compile ( @user.html.macros.nodeFormat ) bundle // Instal nodeState macro if ( ! defined ( user.html.macros.nodeState ) ) script.newScriptObject ("on nodeState ( day, tpl=\"\" ) { activeRendererSuite.macros.nodeState ( day, tpl ) }", @user.html.macros.nodeState ) script.compile ( @user.html.macros.nodeState ) bundle // Instal daySwitch macro if ( ! defined (user.html.macros.daySwitch ) ) script.newScriptObject ("on daySwitch ( daysPerLine = 7 ) { activeRendererSuite.macros.daySwitch ( daysPerLine ) }", @user.html.macros.daySwitch ) script.compile ( @user.html.macros.daySwitch ) bundle // Instal opmlRender macro if ( ! defined ( user.html.macros.opmlRender ) ) script.newScriptObject ("on opmlRender ( url, cssName = \"l\", flExpand = false, depth = 0, length = 0 ) { activeRendererSuite.macros.opmlRender ( url, cssName, flExpand, depth, length ) }", @user.html.macros.opmlRender ) script.compile ( @user.html.macros.opmlRender ) bundle // Instal activeRoll macro if defined ( user.html.macros.activeRoll ) // temporary for replacement delete ( @user.html.macros.activeRoll ) if ! defined ( user.html.macros.activeRoll ) script.newScriptObject ("on activeRoll ( url, class=\"roll\", target=\"_new\", title = \"\", flRoll = true, action = \"transclude\" ) { activeRendererSuite.macros.activeRoll ( url, class, target, title, flRoll, action ) }", @user.html.macros.activeRoll ) script.compile ( @user.html.macros.opmlRender ) bundle // Create activeRenderer folder in www/gems if non existent basePath = user.radio.prefs.wwwfolder + "gems" basePath = basePath + file.getPathChar() + "activeRenderer" file.sureFolder ( basePath ) bundle // Create or update CSS file if non existent or earlier version local cssPath = basePath + file.getPathChar() + "outliner.css" if ! file.exists ( cssPath ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( cssPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.css ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file updated.", startTime ) bundle // Create or update outliner Javascript file if non existent or earlier version local jsPath = basePath + file.getPathChar() + "outliner.txt" js = eolFix ( string ( activeRendererData.texts.javascript ) ) js = string.replaceAll ( js, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if ! file.exists ( jsPath ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code updated.", startTime ) bundle // Create or update outliner xsl/html file if non existent or earlier version local xslPath = basePath + file.getPathChar() + "outliner_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_html ) ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if ! file.exists ( xslPath ) file.writeWholeFile ( xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code updated.", startTime ) bundle // Create or update outliner xsl/js file if non existent or earlier version local xslPath = basePath + file.getPathChar() + "outliner_js_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_js ) ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if ( ! file.exists ( xslPath ) ) file.writeWholeFile ( xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code updated.", startTime ) bundle // Create or update rslite Javascript file if non existent or earlier version local jsPath = basePath + file.getPathChar() + "rslite.txt" js = eolFix ( string ( activeRendererData.texts.rslite ) ) if ! file.exists ( jsPath ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code updated.", startTime ) bundle // Create wedge images if needed for gifAdr in @activeRendererData.images local ( gifPath = basePath + file.getPathChar() + nameOf ( gifAdr^ ) + ".gif" ) if ! file.exists ( gifPath ) file.writeWholeFile ( gifPath, gifAdr^ ) radio.log.add ( "activeRenderer", nameOf ( gifAdr^ ) + " wedge image installed.", startTime ) bundle // Create outlines folder in www if non existent basePath = user.radio.prefs.wwwfolder + "outlines" file.sureFolder ( basePath ) bundle // Create or update #prefs.txt in www/outlines if non existent or earlier version local ( prefPath = basePath + file.getPathChar() + "#prefs.txt" ) if ! file.exists ( prefPath ) file.writeWholeFile ( prefPath, eolFix ( string ( activeRendererData.texts.prefs ) ) ) radio.log.add ( "activeRenderer", "default #prefs.txt file installed in outlines folder.", startTime ) else local prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge true" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add ( "activeRenderer", "#prefs.txt file updated in outlines folder.", startTime ) bundle // Create or update #template.txt in www/outlines if non existent or earlier version local ( templatePath = basePath + file.getPathChar() + "#template.txt" ) if ( ! file.exists ( templatePath ) ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "default #templates.txt file installed in outlines folder.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( templatePath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.template ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "#template.txt file updated in outlines folder.", startTime ) bundle // Render instant outline opml file if it exists and if auto upstream pref is checked local ( ioPath = user.radio.prefs.wwwfolder + "instantOutliner" ) if file.exists ( ioPath ) and adrPrefs^.activeRenderer.autoUpstream local srcPath = ioPath + file.getPathChar() + string.innerCaseName (user.prefs.name) + ".opml" dstPath = basePath + file.getPathChar() + string.innerCaseName (user.prefs.name) + ".opml" if file.exists ( srcPath ) file.copy ( srcPath, dstPath ) else radio.log.add ( "activeRenderer", "instant outline file " + srcPath +" not found.", startTime ) bundle // Instal outline-style weblog presentation local basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" customPath = backupPath + file.getPathChar () + "custom" file.sureFolder ( backupPath ) // create backup folder if non existent file.sureFolder ( customPath ) // create custom versions backup folder if non existent if adrPrefs^.activeRenderer.outlineWeblog // if outlined weblog style is requested activeRendererSuite.utils.checkHomeTemplate ( startTime ) // Update #homeTemplate.txt in www when necessary activeRendererSuite.utils.checkPrefs ( startTime ) // Update #Prefs.txt file when necessary bundle // Update #dayTemplate.txt if non existent or earlier version local dayPath = user.radio.prefs.wwwfolder + "#dayTemplate.txt" if ! file.exists ( dayPath ) file.writeWholeFile ( dayPath, string ( activeRendererData.texts.dayTemplate ) ) radio.log.add ( "activeRenderer", dayPath + " outline style template installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( dayPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.dayTemplate ) ) if date.versionLessThan ( currentVersion, updateVersion ) and currentVersion != "" // If a newer version is available and days are outlined local archivePath = backupPath + file.getPathChar() + "#dayTemplate.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( dayPath, archivePath ) // Backup current day template to aR's backup folder file.writeWholeFile ( dayPath, string ( activeRendererData.texts.dayTemplate ) ) radio.log.add ( "activeRenderer", dayPath + " outline style template updated.", startTime ) bundle // Update #itemTemplate.txt if non existent or earlier version local itemPath = user.radio.prefs.wwwfolder + "#itemTemplate.txt" if ! file.exists ( itemPath ) file.writeWholeFile ( itemPath, string ( activeRendererData.texts.itemTemplate ) ) radio.log.add ( "activeRenderer", itemPath + " outline style template installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( itemPath ) ) updateVersion = getVersion (string ( activeRendererData.texts.itemTemplate ) ) if date.versionLessThan ( currentVersion, updateVersion ) and currentVersion != "" // If a newer version is available and items are outlined local archivePath = backupPath + file.getPathChar() + "#itemTemplate.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( itemPath, archivePath ) // Backup current item template to aR's backup folder file.writeWholeFile ( itemPath, string ( activeRendererData.texts.itemTemplate ) ) radio.log.add ( "activeRenderer", itemPath + " outline style template updated.", startTime ) bundle // Synchronize bookmarks outline if needed if defined ( adrPrefs^.activeRenderer.keepSynched ) if adrPrefs^.activeRenderer.keepSynched if ( adrPrefs^.activeRenderer.bookmarksPath || adrPrefs^.activeRenderer.useYahoo ) && adrPrefs^.activeRenderer.outlinePath thread.callScript ("activeRendererSuite.bookmarks.synchBookmarks", {} ) // Launch in a separate thread bundle // Create or updates myOutlines outline local ( dirPath = radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" ) file.writeWholeFile ( dirPath, activeRendererSuite.utils.folderToOpml ( radio.file.getSubFolder ( "outlines" ) ) ) bundle // Instal uninstallation code if ! defined ( scratchpad.activeRenderer ) // create activeRenderer section in scratchpad if needed new ( tabletype, @scratchpad.activeRenderer ) if ! defined ( scratchpad.activeRenderer.version ) || date.versionLessThan ( scratchpad.activeRenderer.version, activeRendererInfo.version ) // if no verion yet or earlier aR version scratchpad.activeRenderer.version = activeRendererInfo.version // update version number if defined ( scratchpad.activeRenderer.uninstal ) // delete any existing code delete ( @scratchpad.activeRenderer.uninstal ) if defined ( scratchpad.activeRenderer.cleanup ) delete ( @scratchpad.activeRenderer.cleanup ) scratchpad.activeRenderer.uninstal = activeRendererSuite.uninstal // instal uninstal code scratchpad.activeRenderer.cleanup = activeRendererSuite.cleanup // instal cleanup code radio.log.add( "activeRenderer", "Updated uninstal code.", startTime ) if ! defined ( user.tools.callbacks.afterUninstall.activeRenderer ) // instal uninstal callback user.tools.callbacks.afterUninstall.activeRenderer = @scratchpad.activeRenderer.uninstal radio.log.add( "activeRenderer", "Installation complete.", startTime ) bundle // Fix liveTopics if need be if defined ( liveTopicsInfo.version ) // if liveTopics is installed local prefPath = user.radio.prefs.wwwfolder + "outlines" + file.getPathChar() + "topics" + file.getPathChar() + "#prefs.txt" if file.exists ( prefPath ) local prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge false" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add( "activeRenderer", "Fixed liveTopics prefs in " + file.folderFromPath ( prefPath ) + ".", startTime ) file.visitFolder ( file.folderFromPath ( prefPath ), 1, @touchOPML ) instal() // Test code €�����„�����„�����€�����„�����������„�����������„�����������„�����������„�����������„�����������������„�����������„�����������������„�����������„�����������������������������€�����������€�����������������������„�����������„�����������������„�����������„�����������������„�����������„�����������������������„�����������„�����������„�����������������„�����������������„�����������������������„�����������������������€�����������������������������������������������������€�����������������������������€�����������������€�����������������������������€�����������������������€�����€�����������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������������������������������€�����������������������������������������€�����€�����������������������€�����������������������������������������������������������������������€�����������������������������€�����������������������������€�����������������������€�����������������������������€�����������������������€�����������������������€�����������������������€�����������������������€�����������������������������������€�����������������������€�����������������������������������������������������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������€�����������������������������������€�����������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������€�����������������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������������€�����������������€�����������������������������������������������������������������������������������€�����€�����������������������������������������������������������������������������������������€�������i>��N}�������b��F£���Geneva���������������������������� ��������������»¯ñ»¯ñ������(�Ó�7LANDÿÿÿÿÿÿ������mac ������������on activeRenderer ( ol = nil, opml = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, link = "url", opmlCall = "transclude", pta = nil, targetFrame = "", flDisplayHTMLWedge = false, flDoClick = false, flDisplayDirectives = false, flRoll = false ) Information 3/3/03; 2:37:31 PM by MB Modified detection of rss link attributes. 2/25/03; 10:59:25 AM by MB Replaced target="_new" by target="_blank" for HTML link attachments, as suggested by Sjoerd Visscher. 1/24/03; 12:15:52 AM by MB Added support for Flash or Quicktime node links 1/18/03; 11:09:59 AM by MB Added passing along of roll context for webOutliner transcluded links Added initial css class level parameter, defaults to 0 1/15/03; 5:39:29 PM by MB Optimized translation of XML entities using activeRendererData.entities table 1/8/03; 12:00:42 PM by MB Complete rewrite using strings and no recursion for speed optimisation Added flDisplayDirectives parameter, true if #directive nodes are rendered in the HTML output 1/7/03; 5:42:01 PM by MB Removed the onclick="doClick (this)" attribute to the text span in the node when flDoclick is specified. Using the class="clickable" attribute instead. 1/2/03; 8:00:37 PM by MB Simplified the rendering of the closing </div> tags for embedded nodes New code is far faster and corrects 2 bugs in the rendering: The first reported by Jon Udell and Marc Canter A macro error involving an lst list now gone for good The other reported by Rick Olson in July and more recently by Luc Vanden Abeele In some cases, there were 2 additional </divs> generated for no good reason I can think of 12/31/02; 7:30:00 PM by MB Simplified node id computing, dropped the 'tree' notation in favor of a simple node counter. 12/20/02; 11:06:38 PM by MB Added a 'clickable' class attribute to node spans when #flDoClick or flDoClick is true Corrected a bug in rendering of node links, as evidenced by Thomas Burg and Marc Canter 12/16/02; 9:29:19 PM by MB Corrected a bug in the end of node detection 12/9/02; 1:14:05 PM by MB Corrected 2 bugs in the rendering of HTML linked nodes. 12/8/02; 5:44:10 AM by MB Use the cssClassName parameter instead of the 'active' constant for the name of child nodes embedding div, expand all/collapse all javascript functions now only act on the main outline in the page Added flDisplayHTMLWedge parameter, defaults to false, to complement the flDisplayHTMLWedge directive. 12/5/02; 12:14:55 PM by MB Added the flDoClick parameter, defaults to false, includes onClick property to node span if true (complements the flDoClick directive). 12/4/02; 10:29:18 AM by MB Added the page table address as an optional parameter, defaults to nil, for webOutliner support. Save and restore previous outline obect 'target', to walk on the safe side, as suggested by Doug Baron. 11/22/02; 3:47:19 PM by MB Fixed a bug reported by Peter Chapman, target was not initialized properly when the flDisplayHTMLWedge directive was undefined or set to false. 11/21/02; 5:39:18 PM by MB Added a opmlCall parameter to provide the name of the Javascript function in charge of OPML transclusion Added an onClick event to each node's span if the flDoClick directive is set to true Do not render nodes starting with '#'. 11/13/02; 6:32:15 PM by MB Modified rss attribute detection. Renders HTML attributes according to the flDisplayHTMLWedge directive 10/31/02; 2:39:24 PM by MB Added a link parameter, defaults to htmlUrl, for checking extra url attributes Added an flRoll parameter, defaults to false, set to true if called from a blogroll Detect pictures (jpg/gif/png), regular html and rss for transclusion. 10/14/02; 3:26:35 PM by MB Corrected a bug in the .opml detection, reported by Bryce 10/10/02; 7:08:13 PM by MB Added an additional uniqId optional parameter at Mikel's request Added transclusion support for OPML links 9/15/02; 4:04:35 PM by MB Restored the htmlUrl attribute testing which disappeared for some reason during August. 7/31/02; 6:47:51 PM by MB Changed cssClassName to parameter, still defaults to active. Added targetFrame parameter, empty by default, to specify a target window or frame for link attributes. All modifications consistent with the call of activeRenderer from the new activeRoll macro. 6/26/02; 7:09:48 PM by MB Removed class in a tag attribute when rendering link attributes 6/25/02; 2:09:08 PM by MB Align wedge img to the top, not the middle of a line. vs 1.0 beta 3 - last updated 6/21/02 by MB Added title identifications with t + tree and nodeTitle name attribute vs 1.0 beta 2 - last updated 6/14/02 by MB Use '>' instead of 'wedge' as an alt attribute for wedge images local html = "\r<!-- generated by activeRenderer for Radio vs " + activeRendererInfo.version + " - HTML outline structure copyright 2002-03 Precision IT Management, Inc. -->\r" // whole outline's rendered HTML string beginTag = 0 // start of current tag position endTag = 0 // end of current tag position level = 0 // current outline level offset = 0 // start of line offset based on current level expansionString = "" // list of expanded nodes, as a string nodeCnt = 0 // node counter isVisible = true // false for nodes embedded in a collapsed node visNodeCnt = 0 // visible node counter, for expanded nodes checking visLevel = 0 // level of the last visible node noSubsImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol1.gif" ) expandedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif" ) collapsedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol3.gif" ) linkedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol4.gif" ) imgImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol5.gif" ) pageImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol6.gif" ) mmImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol7.gif" ) wedgeImg = noSubsImg wedgeTitle = "" rssCall = opmlCall on getText ( str ) // returns the text attribute of an <outline> tag local l = 0 t = "" l = sizeOf ( str ) t = string.mid ( str, string.patternMatch ( "text=", str ) + 6, l ) t = string.delete ( t, string.patternMatch ( "\"", t ), l ) if t beginsWith "#" and ! flDisplayDirectives t = "" return t on getLink ( str ) // returns the link attributes' of an <outline> tag if any, determine link type local l = 0 beginUrl = 0 beginType = 0 u = "" t = "" l = sizeOf ( str ) beginUrl = string.patternMatch ( link + "=", str ) // check if there is an attribute specified in the 'link' parameter if beginUrl // if so retrieve it u = string.mid ( str, beginUrl + sizeOf ( link ) + 2, l ) u = string.delete ( u, string.patternMatch ( "\"", u ), l ) beginType = string.patternMatch ( "type=", str ) // check if there is a type attribute specified if beginType // if so check for rss t = string.mid ( str, beginType + 6, l ) t = string.delete ( t, string.patternMatch ( "\"", t ), l ) if u // if a link attribute was retrieved if string.hasSuffix ( ".opml", u ) && string.patternMatch ( "?", u ) == 0 // true if the url ends with opml and is not a GET argument isOPML = true else if string.hasSuffix (".jpg", u ) || string.hasSuffix (".gif", u ) || string.hasSuffix (".png", u ) isPICT = true else if t == "rss" || string.hasSuffix (".rss", u ) || string.hasSuffix ("rss.xml", u ) || string.patternMatch ( "?rss", u ) > 0 isRSS = true else if string.hasSuffix (".swf", u ) || string.hasSuffix (".mov", u ) isMM = true else isHTML = true return u // return the link attribute, or an empty string on addNode () // format and adds the current node to the HTML output local target = "" // link target classLevel = 0 if text // if there is some content in the node html = html + ( string.filledstring ("\t", level + offset ) + "<div id=\"r" + nodeId + "\" class=\"" + cssClassName + ( level + long ( cssClassLevel ) + 1 ) + "\">" ); // root div html = html + "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td valign=\"top\" class=\"wedge\">"; // single row table + left cell if hasChildren // if the node has children html = html + ( "<a name=\"a" + nodeId + "\" href=\"javascript:ioSwitch( 'p" + nodeId + "' )\">" ); // link for active expand/collapse wedge if isExpanded // if the node is expanded wedgeImg = expandedImg wedgeTitle = "collapse" else // if the node is collapsed wedgeImg = collapsedImg wedgeTitle = "expand" else // if the node is childless if url // if a link attribute was defined if isOPML // if it's an OPML link wedgeImg = linkedImg wedgeTitle = "expand linked outline" html = html + ( "<a href=\"javascript:" + opmlCall + "('p" + nodeId + "', '" + url + "'" ); // link for OPML inclusion wedge if opmlCall beginsWith "webOutliner" // check for webOutliner related extra parameters to opmlCall if flRoll // if we are currently rendering a roll html = html + ", 'roll'"; // pass 'roll' as context parameter to webOutliner's javascript code html = html + ")\">" else if isPICT // if it's an image link wedgeImg = imgImg wedgeTitle = "expand image" html = html + ( "<a href=\"javascript:imgLoad('p" + nodeId + "', '" + url + "')\">" ); // link for image inclusion wedge else if isRSS // if it's an RSS link wedgeImg = linkedImg wedgeTitle = "expand linked rss feed" html = html + ( "<a href=\"javascript:rssclude('p" + nodeId + "', '" + url + "')\">" ); // link for RSS inclusion wedge html = html + ( "<a href=\"javascript:" + rssCall + "('p" + nodeId + "', '" + url + "'" ); // link for OPML inclusion wedge if opmlCall beginsWith "webOutliner" // check for webOutliner related extra parameters to opmlCall if flRoll // if we are currently rendering a roll html = html + ", 'roll'"; // pass 'roll' as context parameter to webOutliner's javascript code html = html + ")\">" else if isMM // if it's a Flash or Quicktime link wedgeImg = mmImg wedgeTitle = "expand movie" html = html + ( "<a href=\"javascript:mmLoad('p" + nodeId + "', '" + url + "')\">" ); // link for movie inclusion wedge else // assume it's HTML if ( ( defined ( pta^.flDisplayHTMLWedge ) && pta^.flDisplayHTMLWedge) || flDisplayHTMLWedge ) && ! flRoll // if the flDisplayHTMLWedge directive or parameter are defined true wedgeImg = pageImg wedgeTitle = "open linked page" if targetFrame // if a destination is specified target = targetFrame else if ( defined ( pta^.flDisplayHTMLWedge ) && pta^.flDisplayHTMLWedge ) || flDisplayHTMLWedge // if we are rendering 'page' wedges target = "_blank" else target = "" // regular links, stay in the same window html = html + ( "<a href=\"" + url + "\" target=\"" + target + "\">" ); // link for HTML 'page' wedge else // no directive, or directive is false, or in a roll wedgeImg = noSubsImg wedgeTitle = "" if targetFrame // if a destination is specified target = targetFrame else // if no link attribute detected wedgeImg = noSubsImg wedgeTitle = "" html = html + ( "<img id=\"i" + nodeId + "\" src=\"" + wedgeImg + "\" align=\"top\" border=\"0\" hspace=\"0\" vspace=\"0\" alt=\"wedge\" title=\"" + wedgeTitle + "\">" ); // wedge image if hasChildren || ( url && ( isOPML || isPICT || isRSS || isMM || ( isHTML && ( ( defined ( pta^.flDisplayHTMLWedge ) && pta^.flDisplayHTMLWedge ) || flDisplayHTMLWedge ) && ! flRoll) ) ) html = html + "</a>" // close link if necessary html = html + "</td><td class=\"para\"><span id=\"t" + nodeId + "\""; // close left cell, open right cell if ( defined ( pta^.flDoClick ) && pta^.flDoClick && ! flRoll ) || flDoClick html = html + " class=\"clickable\""; // include clickable class attribute if required by directive or parameter html = html + ">"; // close span tag if url && isHTML && ( ( defined ( pta^.flDisplayHTMLWedge ) && ! pta^.flDisplayHTMLWedge ) || ( ! defined ( pta^.flDisplayHTMLWedge ) && ! flDisplayHTMLWedge ) || flRoll ) html = html + ( "<a href=\"" + url ); // link to HTML if needed if target html = html + ( "\" target=\"" + target ); // add target attribute if necessary html = html + "\">"; // close link html = html + text; // node text inside span if url && isHTML && ( ( defined ( pta^.flDisplayHTMLWedge ) && ! pta^.flDisplayHTMLWedge ) || ( ! defined ( pta^.flDisplayHTMLWedge ) && ! flDisplayHTMLWedge ) || flRoll ) html = html + "</a>"; // end of link tag if necessary html = html + "</span></td></tr></table>"; // close span, cell, row and table if hasChildren // if the node has children if isExpanded // set class attribute according to expansion state activeClass = "expanded" else activeClass = "collapsed" offset++ html = html + ( "\r" + string.filledstring ("\t", level + offset ) + "<div name=\"" + cssClassName + "\" class=\"" + activeClass + "\" id=\"p" + nodeId + "\">\r" ); // embedding div for children nodes else // if the node is childless html = html + "</div>\r"; // close div on closeNode () // close child node divs in HTML output html = html + ( string.filledstring ("\t", level -1 + offset ) + "</div>\r" ); // close embedding div offset-- html = html + ( string.filledstring ("\t", level - 1 + offset ) + "</div>\r" ); // close parent node div on processTag ( s ) // process a single XML tag local tag = string.firstWord ( s ) // current tag's token, devoid of attributes text = "" // current tag's text attribute url = "" // current tag's link attribute isOPML = false // true if link attribute points to an OPML resource isPICT = false // true if link attribute points to an image resource isRSS = false // true if link attribute points to an RSS resource isMM = false // true if link attribute points to a multimedia resource isHTML = false // true if none of the above are true nodeId = uniqId + string ( nodeCnt ) // current node id hasChildren = false // true if the current node has children isExpanded = false // true if the current node is visible and its visible node count is included in the expansionString case tag "/body" // </body> tag, time to bail out of the calling loop return false "outline" // <outline> tag, we found another node nodeCnt++ // increment node counter hasChildren = string.mid ( s, sizeOf ( s ), 1 ) != "/"// true if the current node has children if isVisible // if we are not inside a collapsed node visNodeCnt++ // increment visible nodes counter if hasChildren // if the current node has children isExpanded = string.patternMatch ( " " + string ( visNodeCnt ) + ",", expansionString ) // non 0 if the visible node count is included in the expansionString text = getText ( s ) // get the text attribute content url = getLink ( s ) // get the link attributes content, nil if not present addNode () // format the node and add it to the output string if hasChildren // if the current node has children if isVisible // if it is not inside a collapsed node if ! isExpanded // if the node is collapsed isVisible = false // stop counting visible nodes visLevel = level // save the current level level++ // increment current outline level "/outline" // </outline> tag, up one outline level closeNode () // output closing divs level-- // decrement current outline level if level == visLevel // if we are now out of a collapsed node isVisible = true // restart counting visible nodes return true // stay in the calling loop on processHeader () // process all tags up to <body> local start = 0 stop = 0 x = "" start = string.patternMatch ( "<expansionState>", opml ) + 16 stop = string.patternMatch ( "</expansionState>", opml ) if start x = string.mid ( opml, start, stop - start ) if x x = " " + ( x + "," ); opml = string.delete ( opml, 1, string.patternMatch ( "<outline", opml ) -1 ) return x if ! pta // try to retrieve a page table address if none was passed along try pta = html.getPageTableAddress () if ! uniqId // assign a unique node id prefix if none is specified in parameters uniqId = string ( random ( 1, 9 ) ) if ol // convert the outline object to an OPML string if an address was passed along opml = op.outlineToXml ( ol ) if opmlCall == "transclude" // set RSS transcluding javascript to rssclude if opmlCall has its default value rssCall = "rssclude" expansionString = processHeader () // advance to outline body, retrieving outline expansion state while true // loop for all tags after <body> beginTag = string.patternMatch ( "<", opml ) // locate start of tag position endTag = string.patternMatch ( ">", opml ) // locate end of tag position if ! processTag ( string.mid ( opml, beginTag +1, endTag - beginTag -1 ) ) // process current tag, stop when false is returned break opml = string.delete ( opml, beginTag, endTag - beginTag + 1 ) // strip current tag from body html= string.multipleReplaceAll ( html, @activeRendererData.entities, false ) html = html + "<!-- end of rendered outline -->\r"; return html // returned the rendered HTML string bundle // test code local ( x, w, start, stop, s ) file.getFileDialog ("Pick a file, any file", @x, 0) s = file.readWholeFile ( x ) op.xmlToOutline ( s, @temp.outline ) s = "" start = clock.ticks () w = activeRenderer ( ol:@temp.outline, opml:s, flDisplayDirectives:true ) stop = clock.ticks () dialog.alert ( stop - start ) wp.newTextObject ( w, @temp.test ) edit ( @temp.test ) €�����„�����„�����€�����„�����������„�����������„�����������������„�����������„�����������������„�����������������„�����������������������������������������„�����������„�����������������„�����������„�����������„�����������������������€�����������€�����������������„�����������������„�����������������������„�����������������€�����������������������€�����������€�����������������€�����������„�����������������������„�����������„�����������€�����������€�����������€�����������������������������������������������������������������������������������������������������������������������������€�����������������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������������������������������������������������������������€�����������������€�����������€�����������€�����������€�����€�����������������������������������€�����€�����€�����€�������������������������������������������������������������������������N}€�%>�����¸�N��\���Geneva���������������������������� ��������������»—ê»—ê�����'&ôLANDÿÿÿÿÿÿ������mac ������������on activeRendererHeader() Information 2/6/03; 4:21:15 PM by MB Added 'type' attribute to the 'script' tag for HTML 4.01 compliance 9/12/02; 1:12:07 PM by MB Modified the returned string to include a system dependent line break between the link and script tags. Bug reported by AJG Baeumel. local s = "" packageRoot = radio.weblog.getUrl () + "gems/activeRenderer/" s = s + ( "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + packageRoot + "outliner.css\">" + cr ); s = s + ( "<script type=\"text/javascript\" src=\"" + packageRoot + "outliner.txt\"></script>" ); return ( s ) €�����„�����„�����€�����€�����������������€�����������������€�����€�����€�����€�"€�"����� fl�$�� ����Geneva���������������������������� ��������������»—ë»—ë������,�4ƒ?LANDÿÿÿÿÿÿ������mac ������������on jsRenderRss ( rss = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, flIncludeChannelTitle = false, flCollapseChannelTitle = false, itemCnt = 0, expandedCnt = 0, titleWordCnt = 8, flCreateHeader = false ) local ( s = activeRendererSuite.rssRenderer ( rss:rss, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, flIncludeChannelTitle:flIncludeChannelTitle, flCollapseChannelTitle:flCollapseChannelTitle, itemCnt:itemCnt, expandedCnt:expandedCnt, titleWordCnt:titleWordCnt, flCreateHeader:flCreateHeader ) ) s = string.replaceAll ( s, "'", "\\'" ) s = string.replaceAll ( s, "\r", "'\r+ '" ) s = "includeHtml ('" + s + "');" return s €�����€�����€�����€�����€�����€�������<€�È����� fl��é����Geneva���������������������������� ��������������»—ê»—ê������<�\>:LANDÿÿÿÿÿÿ������mac ������������on yahooImport ( login, passwd ) Information 11/1/02; 7:29:32 PM by MM (Mikel Maron) Return Yahoo bookmarks in an HTML string on error ( s ) return "Error: " + s local args header server path adrCookiesTable httpResult bookmarks matchstring if ( tcp.isOffline () ) return error ( "TCP is Offline" ) bundle //get Yahoo Cookies try new ( tabletype, @args ); args.login = login; args.passwd = passwd new ( tabletype,@header ); header.["User-Agent"] = "Mozilla/5.001 (windows; U; NT4.0; en-us) Gecko/25250101" server = "login.yahoo.com"; path="/config/login"; adrCookiesTable = @user.webBrowser.cookies httpResult = tcp.httpClient ( method:"POST",server:server,path:path,data:webserver.encodeargs(@args),datatype:"application/x-www-form-urlencoded",cookiesOn:true,adrHdrTable:@header ) else return error ( "Could not connect to Yahoo to retrieve Cookies" ) bundle //reparse Cookies try delete ( @adrCookiesTable^.[".yahoo.com"].["/"].["Y"] ) //delete the bad Y Cookie activeRendererSuite.utils.parseCookies ( httpResult, server, path, adrCookiesTable ) //cookie parsing is broken in radio, do it right here if not defined (adrCookiesTable^.[".yahoo.com"].["/"].["Y"]) return error ( "Yahoo Cookie not set. Probably incorrect Yahoo ID/Password" ) bundle //get the Bookmarks try path = "/config/export_bookmark"; server = "e.my.yahoo.com" new ( tabletype,@args ); args.[".commit"] = "1" httpResult = tcp.httpClient ( method:"POST",server:server,path:path,data:webserver.encodeargs(@args),datatype:"application/x-www-form-urlencoded",cookiesOn:true,adrHdrTable:@header ) bookmarks = string.httpResultSplit ( httpResult ) else return error ( "Could not connect to Yahoo to retrieve Bookmarks" ) matchstring = "<!DOCTYPE NETSCAPE-Bookmark-file-1>" if ( matchstring != string.mid ( bookmarks, 1, string.length ( matchstring ) ) ) return error ( "Improper Bookmark format returned" ) return bookmarks bundle // test code yahooImport ( "yid", "pw" ) €�����„�����€�����€�����€�����€�����€�����������������������������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€������� o€�p����� fl�ö�����Geneva���������������������������� ��������������»—ê»—ê������.¼ÿGLANDÿÿÿÿÿÿ������mac ������������on updateBookmarks () Information 11/3/02; 8:20:14 PM by MB Added support for Yahoo bookmarks local pta = html.getpageTableAddress () argList = string.parseHttpArgs ( pta^.searchArgs ) pathList = argList[4] delimiter = string.patternMatch ( "__", pathList ) src = string.mid ( pathList, 1, delimiter - 1 ) dst = string.mid ( pathList, delimiter + 2, string.length ( pathList ) - delimiter + 1 ) result = "" delimiter = string.patternMatch ( "--", src ) if delimiter > 0 local bookmarks = "" userId = string.mid ( src, 1, delimiter - 1 ) password = string.mid ( src, delimiter + 2, string.length ( src ) - delimiter + 1 ) startTime = clock.ticks() if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix name for Windows systems src = file.getSpecialFolderPath ("", "Temp", true) + "bookmarks.html" else src = file.getSpecialFolderPath ("", "Temporary Items", true) + "bookmarks.html" radio.log.add( "activeRenderer", "Retrieving Yahoo bookmarks.", startTime ) bookmarks = activeRendererSuite.bookmarks.yahooImport ( userId, password ) // retrieve bookmarks from Yahoo if regex.easyMatch ( "^Error", bookmarks ) radio.log.add( "activeRenderer", bookmarks, startTime ) if file.exists ( src ) radio.log.add( "activeRenderer", "Using local cached bookmarks found at " + src, startTime ) else result = bookmarks else radio.log.add( "activeRenderer", "Saving bookmarks to " + src, startTime ) file.writeWholeFile ( src, bookmarks ) if ! result // if result is still empty if activeRendererSuite.bookmarks.update ( src, dst ) result = "Synchronization complete." else result = "synchronization failed." webserver.util.setCookie ( pta, "RSLite", result + "; path=/;" ) webbrowser.bringtofront () €�����„�����€�����€�����€�����������������������������������������������€�����€�����€�����������������������������€�����������€�����������€�����€�����€�����������������������������������€�����������������€�����€�����������€�����������€�����€�����€�ë€� Ñ�����ý+�º��8���Geneva���������������������������� ��������������»—ê»—ê�����'5øLANDÿÿÿÿÿÿ������mac ������������on synchBookmarks () Information 11/2/02; 7:28:13 PM by MB Added support for Yahoo bookmarks local adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs src = adrPrefs^.activeRenderer.bookmarksPath startTime = clock.ticks() if adrPrefs^.activeRenderer.useYahoo local bookmarks = "" if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix name for Windows systems src = file.getSpecialFolderPath ("", "Temp", true) + "bookmarks.html" else src = file.getSpecialFolderPath ("", "Temporary Items", true) + "bookmarks.html" radio.log.add( "activeRenderer", "Retrieving Yahoo bookmarks.", startTime ) bookmarks = activeRendererSuite.bookmarks.yahooImport ( adrPrefs^.activeRenderer.myYahoo.userId, adrPrefs^.activeRenderer.myYahoo.password ) // retrieve bookmarks from Yahoo if regex.easyMatch ( "^Error", bookmarks ) radio.log.add( "activeRenderer", bookmarks, startTime ) if file.exists ( src ) radio.log.add( "activeRenderer", "Using local cached bookmarks found at " + src, startTime ) else return false else radio.log.add( "activeRenderer", "Saving bookmarks to " + src, startTime ) file.writeWholeFile ( src, bookmarks ) activeRendererSuite.bookmarks.update ( src, adrPrefs^.activeRenderer.outlinePath ) return true bundle // Test code synchBookmarks () €�����„�����€�����€�����€�����������������������������€�����������������������������������������������������������������������������������������������������������€�����€�����€�����€�������j€�[�����ý+�®��ç����Geneva���������������������������� ��������������»—ê»—ê������,�y`LANDÿÿÿÿÿÿ������mac ������������on restoreUrl () Information 9/13/02; 12:46:30 PM by MB Added comments Expand node before retrieving comment in old outline. local s = "" comment = "" att = "" adr if op.attributes.getOne ("url", @att) // current node has a link attribute if ! op.countSubs (1) // current node does *not* have children s = op.getLineText () // save bookmark title adr = target.get () // save pointer to current outline target.set ( @scratchpad.old ) // set target to previous version op.firstSummit () // start from top if op.find ( s ) // bookmark is found in previous version if op.countSubs (1) // bookmark has children if op.attributes.getOne ("url", @att) // bookmark has a link attribute op.expand (1) // expand node 1 level op.go ( "right", 1 ) // move to first child node (comment) comment = op.getLineText () // save comment text target.set ( @scratchpad.new ) // set target to new version op.firstSummit () // start from top if op.find ( s ) // locate bookmark in new version if op.attributes.getOne ("url", @att) // node has link attribute op.insert ( comment, "right" ) // add a comment child node target.set ( adr ) // reset target to original outline return €�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€������� €��B�����ý+������ºJT»—�������� ����displayServerName����À�ªÒ}€�%>���§�����������)����Geneva���������������������������� ����������T��¸ô§ ¹R‘���y��'ï�LANDÿÿÿÿÿÿ������mac ������������edit ( @activeRendererData.texts.about ) €��������§��w����FFFF000000060001001777AA000000000067000000001001710000001-7FFF6FBE1800000‚‚4800480613E200-1‚0Â6‚13E222FFFF0‚‚10‚‚3‚1D000010000003B0000000102F340840‚‚6‚13E2222EF038E000131613E2500002000002F900000000�2F3,<!-- dayTemplate version: 1.0 <% nodeState("<%shortDate%>", "day" ) %> --> <div> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:ioSwitch( 'p<%shortDate%>' )"> <img id="i<%shortDate%>" src="<%wedgeImg%>" title="<%wedgeTitle%>" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td width="75%"><hr size="1" width="95%" style="color: #E0E0E0;"></td> <td align="right" nowrap><b><%longDate%></b></td> </tr> </table> </td> </tr> </table> <div id="p<%shortDate%>" class="<%nodeClass%>" name="day"> <%items%> </div> </div>00040000000A0000000202F5000050000000A0000000202F50000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚1822FB3‚1822FB000A00000017000000026‚13E2226‚13E222000B00000005000000020Â000C00000013000000011D‚‚A9B095‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,r���4,r���4,r$à�4,�����4,r4>�4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹µÿ¹J h�����������������������������������������ó�����������N�ÍãÛ������ó������������������������������������������������������w��p��������¢��V���Geneva���������������������������� ��������������»¯ñ»¯ñ������vÓJ9LANDÿÿÿÿÿÿ������mac ������������<b>activeRenderer</b> vs 1.4 An outline rendering tool for Radio Created by ... Marc Barrot Copyright 2002 by Precision IT Management, Inc. Published under the <a href="http://radio.weblogs.com/0104487/outlines/aR/aRLicense.html">MIT License</a>. With the help of ... Joshua Allen Brent Ashley AJG Baeumel Doug Baron Gilles Beauchamp Simone Bettini Thomas Burg Marc Canter Danny Goodman Brian Lenihan Jack Foster Mancilla Mikel Maron Ian McKenzie Matt Mower Andre Radke Nicholas Riley Aaron Straup Cope Paolo Valdemarin Sjoerd Visscher Bryce Yehl €�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������p���ç����������8�������¹B3p�������� ������� �������) ����2���> ����EHome����À��Ò4 Preferences����À�%}Register����À�%Thanks����À�$½��VArial����������������������������� ������������������������������������������������ç���R�������N���$���¹B2&¹B2&�������� ���� ��� ����linetext���Thankspath��� thanks.wsf���R���V�������R���$���¹B3Q¹B3Q�������� ���� ��� ����linetext���Registerpath��� register.wsf���V���V�������R���$���¹B3p¹B3p�������� ���� ��� ����linetext��� Preferencespath��� index.wsf���V€�¶������ü,�������Geneva����������������������€��-€�'O�����Å$000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000330000000103140840‚‚6‚13222038E0006‚1310F000020000003600000000�31,{active€�2€�5:�����.v��"º���Geneva���������������������������� ��������������»—3»—3������¢� @<LANDÿÿÿÿÿÿ������mac ������������on uninstal ( f ) Information 1/21/03; 3:28:27 PM by MB Created, called from user.tools.callbacks.afterUninstall.activeRenderer. f is the pathname to the uninstalled tool. local startTime = clock.ticks() adrBlog = r€�™€�ô����� f-0000000600010€�¶��×����FFFF000000060001001777AA000000000073000000001001710000001-7FFE6FBE1800000‚‚48004806200-1‚18618A18618A0Â6‚20222FFFF0‚‚10‚‚3‚3700001000000360000000103740840‚‚6‚2022212038E00013620BF000020000003C00000000�37,#title "Register" {activeRendererSuite.gui.register ()}00040000000900000002039000050000000A0000000201390000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 60ÂÁ ‚‚Á‚00070000002F000000020‚10Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚16E2303‚16E230000A00000015000000026‚202226‚20222000B00000005000000020Â000C000000160000000137162‚5861B9‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,tÙ�4,subs�4,sub�4,›jë�4,User�4,ièub00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹:j»º‰���� ���������������������������������������7�����������ÐEQˆ������S������������������������������������������������������×€�3>�����ºpˆí�������¦é€������Geneva���������������������������� �(�±ž���������������������������������������������p€�2Â�����ºp�6��/���Geneva���������������������������� ��������������»—ê»—ê������-�èiLANDÿÿÿÿÿÿ������mac ������������on getOPML () local pta = html.getpageTableAddress () argList = string.parseHttpArgs ( pta^.searchArgs ) path = argList[4] Frontier.bringToFront () file.putFileDialog ( "locate the destination outline file", @path ) webserver.util.setCookie ( pta, "RSLite", path ) webbrowser.bringtofront () €�����€�����€�����€�����€�����€�����€�����€�����€�������Ý€�0Ù�����ºÐ000000060001001777AA000000000067000000001001710000001-7FFF6FBE1800000‚‚4800480613E200-1‚0Â6‚13E222FFFF0‚‚10‚‚3‚1D000010000003B0000000102F340840‚‚6‚13E2222EF038E000131613E2500002000002F900000000�2F3,<!-- dayTemplate version: 1.0 <% nodeState("<%shortDate%>", "day" ) %> --> <div> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:ioSwitch( 'p<%shortDate%>' )"> <img id="i<%shortDate%>" src="<%wedgeImg%>" title="<%wedgeTitle%>" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td width="75%"><hr size="1" width="95%" style="color: #E0E0E0;"></td> <td align="right" nowrap><b><%longDate%></b></td> </tr> </table> </td> </tr> </table> <div id="p<%shortDate%>" class="<%nodeClass%>" name="day"> <%items%> </div> </div>00040000000A0000000202F5000050000000A0000000202F50000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚1822FB3‚1822FB000A00000017000000026‚13E2226‚13E222000B00000005000000020Â000C00000013000000011D‚‚A9B095‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,r���4,r���4,r$à�4,�����4,r4>�4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹µÿ¹J h�����������������������������������������ó�����������N�ÍãÛ������ó������������������������������������������������������w€�)V�����ºÐð��$î����Geneva���������������������������� ��������������»—ê»—ê������Z�9¬ÓLANDÿÿÿÿÿÿ������mac ������������<!-- Outline browser for activeRenderer version ##aRversion## --> <script type="text/javascript"><!-- function hide (divId) { if (document.getElementById && document.getElementById(divId) != null) { document.getElementById(divId).style.display = "none"; } } function show (divId) { if (document.getElementById && document.getElementById (divId) != null) { document.getElementById (divId).style.display = "block"; } } function checked (param) { var s = ""; if (document.renderer.elements[param].checked ) { s = '&' + param + '=yes'; }; return s; } function load (divId, url) { document.renderer.src.value = url; result.location = 'http://127.0.0.1:5335/activeRenderer/render/?src=' + url + '&action=browse&itemCnt=' + document.renderer.itemCnt.value + '&cssClassName=' + document.renderer.cssClassName.value + '&expandedCnt=' + document.renderer.expandedCnt.value + '&linkAttribute=' + document.renderer.linkAttribute.value + '&titleWordCnt=' + document.renderer.titleWordCnt.value + '&cssClassLevel=' + document.renderer.cssClassLevel.value + checked ('flIncludeChannelTitle') + checked ('flRoll') + checked ('flCollapseChannelTitle') + checked ('flCollapseChannelTitle') + checked ('flDisplayHTMLWedge') + checked ('flCreateHeader') + checked ('flDisplayDirectives'); } //--></script> <div id="menu" style="margin-bottom: 10px; text-align: center; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><b>Browser</b></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/preferences" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="activeBookmarks settings">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html" target="_blank" title="activeRenderer Information Page">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html" target="_blank" title="More Or Less Frequently Asked Questions">Faq</a></span> </div> <div id="main" style="margin-left: 10px; margin-right: 10px; font-family: verdana, sans-serif; font-size: 11px; color: #666"> <div id="roll" style="float: right; width: 165px"> Select list: <div style="margin-top: 1px"> <input type="button" name="news" value="news" onclick="list.location = 'http://127.0.0.1:5335/activeRenderer/render/?src=##mySubscriptions##&action=browse&cssClassName=roll&linkAttribute=xmlUrl&cssClassLevel=0&flRoll=yes&opmlCall=parent.load'" style="margin-right: 5px"> <input type="button" name="outlines" value="outlines" onclick="list.location = 'http://127.0.0.1:5335/activeRenderer/render/?src=##myOutlines##&action=browse&cssClassName=roll&linkAttribute=url&cssClassLevel=0&flRoll=yes&opmlCall=parent.load'"> </div> <div style="margin-top: 5px"> <span style="font-family: verdana, sans-serif; font-size: 11px; color: #666">Select outline:</span><br> <div style="margin-top: 3px; border-top: solid #666 2px; border-left: solid #666 2px; border-bottom: solid silver 1px; border-right: solid silver 1px"> <iframe name="list" frameborder="0" style="width: 100%; height: 400px"> </iframe> </div> </div> </div> <div id="browser" style="float: left; width: 545px"> <div id="controls"> <form name="renderer" action="##action##" method="GET" target="result" style="margin: 0px"> OPML outline or RSS news feed url: <div style="margin-top: 1px"> <input name="src" value="##url##" style="width: 384px; margin-right: 5px; font-family: verdana, sans-serif; font-size: 11px"> <input type="submit" name="action" value="browse" style="margin-right: 5px"> <input type="button" name="settings" value="settings" onclick="hide ('viewer'); show ('params')"> </div> <div id="params" style="display: none; margin-top: 5px;margin-bottom: 5px"> Rendering parameters:<br> <div style="border: silver solid 1px; margin-top: 3px; margin-bottom: 3px; padding: 5px"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="font-family: verdana, sans-serif; font-size: 11px"> <tr> <td colspan="2"> news </td> <td colspan="2"> outlines </td> <tr> <td> <div style="margin-top: 3px"> <input name="itemCnt" value="##itemCnt##" style="vertical-align: middle; border: 1px dotted silver; margin-right: 5px; width: 30px; text-align: right; font-family: verdana, sans-serif; font-size: 11px"> <span style="color: #666">posts listed</span> </div> </td> <td> <div style="margin-top: 3px"> <input type="checkbox" name="flIncludeChannelTitle" value="##flIncludeChannelTitle##" style="vertical-align: middle"> <span style="margin-right: 5px; color: #666">include feed title</span> </div> </td> <td> <div style="margin-top: 3px"> <input name="cssClassName" value="##cssClassName##" style="vertical-align: middle; border: 1px dotted silver; margin-right: 5px; width: 50px; text-align: left; font-family: verdana, sans-serif; font-size: 11px"> <span style="color: #666">nodes class</span> </div> </td> <td> <div style="margin-top: 3px"> <input type="checkbox" name="flRoll" value="##flRoll##" style="vertical-align: middle"> <span style="margin-right: 5px; color: #666">roll type links</span> </div> </td> <tr> <tr> <td> <div style="margin-top: 3px"> <input name="expandedCnt" value="##expandedCnt##" style="vertical-align: middle; border: 1px dotted silver; margin-right: 5px; width: 30px; text-align: right; font-family: verdana, sans-serif; font-size: 11px"> <span style="color: #666">posts expanded</span> </div> </td> <td> <div style="margin-top: 3px"> <input type="checkbox" name="flCollapseChannelTitle" value="##flCollapseChannelTitle##" style="vertical-align: middle"> <span style="margin-right: 5px; color: #666">collapse feed title</span> </div> </td> <td> <div style="margin-top: 3px"> <input name="linkAttribute" value="##linkAttribute##" style="vertical-align: middle; border: 1px dotted silver; margin-right: 5px; width: 50px; text-align: left; font-family: verdana, sans-serif; font-size: 11px"> <span style="color: #666">link attribute</span> </div> </td> <td> <div style="margin-top: 3px"> <input type="checkbox" name="flDisplayHTMLWedge" value="##flDisplayHTMLWedge##" style="vertical-align: middle"> <span style="margin-right: 5px; color: #666">page wedges</span> </div> </td> <tr> <tr> <td> <div style="margin-top: 3px"> <input name="titleWordCnt" value="##titleWordCnt##" style="vertical-align: middle; border: 1px dotted silver; margin-right: 5px; width: 30px; text-align: right; font-family: verdana, sans-serif; font-size: 11px"> <span style="color: #666">words per title</span> </div> </td> <td> <div style="margin-top: 3px"> <input type="checkbox" name="flCreateHeader" value="##flCreateHeader##" style="vertical-align: middle"> <span style="margin-right: 5px; color: #666">create headers</span> </div> </td> <td> <div style="margin-top: 3px"> <input name="cssClassLevel" value="##cssClassLevel##" style="vertical-align: middle; border: 1px dotted silver; margin-right: 5px; width: 50px; text-align: right; font-family: verdana, sans-serif; font-size: 11px"> <span style="margin-right: 5px; color: #666">starting level</span> </div> </td> <td> <div style="margin-top: 3px"> <input type="checkbox" name="flDisplayDirectives" value="##flDisplayDirectives##" style="vertical-align: middle"> <span style="margin-right: 5px; color: #666">display directives</span> </div> </td> <tr> </table> </div> <div style="text-align: right"> <input type="reset" value="reset"> <input type="button" name="set" value="save" onclick="hide ('params'); show ('viewer')" style="margin-left: 5px"> </div> </div> </form> </div> <div id="viewer" style="margin-top: 5px"> Rendered outline:<br> <div style="margin-top: 3px; border-top: solid #666 2px; border-left: solid #666 2px; border-bottom: solid silver 1px; border-right: solid silver 1px"> <iframe name="result" frameborder="0" style="width: 100%; height: 400px"> </iframe> </div> </div> </div> </div> <!-- Image inclusion cache --> <img id="hiddenImg" style="position:absolute; top:0px; left:0px; visibility:hidden" src="" alt="noseeum"> <script type="text/javascript"><!-- var cachedImg = document.getElementById('hiddenImg'); //--></script> <!-- End of cache --> €�����€�����������������������������������������������������������������������������������������������������������������������������€�����������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������������������€�3>���¾��� �������4����Arial����������������������������� ��������������ºIÿ"ºJIà���)��'ï�LANDÿÿÿÿÿÿ������mac ������������activeRendererSuite.utils.setUpdateServer ("alpha") €�����utils.serial���¾��"��������N��\���Geneva���������������������������� ��������������»¯ñ»¯ñ�����'&ôLANDÿÿÿÿÿÿ������mac ������������on activeRendererHeader() Information 2/6/03; 4:21:15 PM by MB Added 'type' attribute to the 'script' tag for HTML 4.01 compliance 9/12/02; 1:12:07 PM by MB Modified the returned string to include a system dependent line break between the link and script tags. Bug reported by AJG Baeumel. local s = "" packageRoot = radio.weblog.getUrl () + "gems/activeRenderer/" s = s + ( "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + packageRoot + "outliner.css\">" + cr ); s = s + ( "<script type=\"text/javascript\" src=\"" + packageRoot + "outliner.txt\"></script>" ); return ( s ) €�����„�����„�����€�����€�����������������€�����������������€�����€�����€�������"�� j��������Þ�� ���Geneva���������������������������� ��������������»¯ñ»¯ñ������-�r«lLANDÿÿÿÿÿÿ������mac ������������on activeRendererFunctions ( titleText = "outline", titleClass = "active", flIncludeLinks = true, linkClass = "active", nodeClass = "active", helpText = "how this works", helpClass = "help", flImageCache = true, flVertical = true ) Information 2/7/03; 4:07:37 PM by MB Added flVertical parameter - cleaned up HTML output 12/8/02; 7:24:16 AM by MB Removed trailing end of line marker in returned string 11/10/02; 6:28:53 PM by MB Added flImageCache parameter, defaults to true, to include a cache for images inclusion. Added parameters for everything that is output on the page. 7/17/02; 10:45:39 AM by MB Added display of version at tooltip in browser when hovering over 'how this works'. local version = "1.1" s = "\r<!-- activeRendererFunctions vs " + version + "-->\r<div id=\"activeRendererFunctions\">\r" if titleText != "" // if a title is provided s = s + ( "\t<div class=\"" + titleClass + "\">" + titleText + "</div>\r" ); if flIncludeLinks // if we need to display the expand/collapse all links s = s + ( "\t<div class=\"" + linkClass + "\">\r" ); s = s + ( "\t\t<a href=\"#\" onclick=\"collapseAll('" + nodeClass + "')\" title=\"click to collapse all nodes\">collapse all</a>" ); if flVertical s = s + "<br>\r"; else s = s + " / \r"; s = s + ( "\t\t<a href=\"#\" onclick=\"expandAll('" + nodeClass + "')\" title=\"click to expand all nodes\">expand all</a>\r" ); s = s + "\t</div>\r"; if helpText != "" // if a help link is provided s = s + ( "\t<div class=\"" + helpClass + "\">\r" ); s = s + ( "\t\t<a href=\"http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html\" target=\"_blank\" title=\"vs. " + activeRendererInfo.version + "\">" + helpText + "</a>\r" ); s = s + "\t</div>\r"; if flImageCache // if we need to include an image cache s = s + "\t<!-- Image inclusion cache -->\r\t<img id=\"hiddenImg\" style=\"position:absolute; top:0px; left:0px; visibility:hidden\" src=\"\" alt=\"noseeum\">\r"; s = s + "\t<script type=\"text/javascript\"><!--\r\t\tvar cachedImg = document.getElementById('hiddenImg'); //-->\r\t</script>\r\t<!-- End of cache -->\r"; s = s + "</div>\r<!-- activeRendererFunctions ends -->"; return ( s ) bundle // Test code wp.newTextObject ( activeRendererFunctions (), @Temp.htmlTest ) edit (@Temp.htmlTest ) €�����„�����€�����€�����„�����������„�����������������€�����������€�����������������€�����������€�����������������������������������������������������€�����������������������€�����������������€�����€�����€�����€�����€������� j��<��������$�� ����Geneva���������������������������� ��������������»¯ñ»¯ñ������,�4ƒ?LANDÿÿÿÿÿÿ������mac ������������on jsRenderRss ( rss = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, flIncludeChannelTitle = false, flCollapseChannelTitle = false, itemCnt = 0, expandedCnt = 0, titleWordCnt = 8, flCreateHeader = false ) local ( s = activeRendererSuite.rssRenderer ( rss:rss, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, flIncludeChannelTitle:flIncludeChannelTitle, flCollapseChannelTitle:flCollapseChannelTitle, itemCnt:itemCnt, expandedCnt:expandedCnt, titleWordCnt:titleWordCnt, flCreateHeader:flCreateHeader ) ) s = string.replaceAll ( s, "'", "\\'" ) s = string.replaceAll ( s, "\r", "'\r+ '" ) s = "includeHtml ('" + s + "');" return s €�����€�����€�����€�����€�����€�������<��<��������$�� ����Geneva���������������������������� ��������������»¯ñ»¯ñ������–�ÝíèLANDÿÿÿÿÿÿ������mac ������������on jsRenderOpml ( opml = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, link = "url", opmlCall = "transclude", targetFrame = "", flDisplayHTMLWedge = false, flDoClick = false, flDisplayDirectives = false, flRoll = false ) local ( s = activeRendererSuite.activeRenderer ( opml:opml, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, link:link, opmlCall:opmlCall, targetFrame:targetFrame, flDisplayHTMLWedge:flDisplayHTMLWedge, flDoClick:flDoClick, flDisplayDirectives:flDisplayDirectives, flRoll:flRoll ) ) s = string.replaceAll ( s, "'", "\\'" ) s = string.replaceAll ( s, "\r", "'\r+ '" ) s = "includeHtml ('" + s + "');" return s €�����€�����€�����€�����€�����€�������<��4��������Z��b���Geneva���������������������������� ��������������»¯ñ»¯ñ������eü¹/LANDÿÿÿÿÿÿ������mac ������������on update () Information 9/23/02; 2:31:49 PM by MB Launches a tool update session in another thread, returns home page. local pta = html.getPageTableAddress () if activeRendererSuite.utils.serialOk () // if tool is registered if !defined ( system.temp.activeRenderer ) // if a temporary table is needed new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.update = activeRendererSuite.update thread.callScript ("system.temp.activeRenderer.update", {} ) webbrowser.bringtofront () pta^.code = 302 pta^.responseHeaders.Location = "http://127.0.0.1:5335/" return "" €�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������4��ì��������<��8����Geneva���������������������������� ��������������»¯ñ»¯ñ�����'‰íLANDÿÿÿÿÿÿ������mac ������������on regWindow () local s = "" if !activeRendererSuite.utils.serialOk() s = string ( activeRendererData.guichuncks.objects.popUnder ) s = string.replace ( s, "##url##", "http://127.0.0.1:5335/activeRenderer/register/" ) return s bundle // test code scratchpad.js = regWindow () edit ( @scratchpad.js ) €�����€�����€�����€�����€�����€�����€�����€�����€�����€�������ì€�§�����‡���� �����Geneva���������������������������� ��������������¹ëF—º‰H������|�0QÆLANDÿÿÿÿÿÿ������mac ������������{bodytext} €�����L ( "http://127.0.0.1:5335/���¤€�÷�����‡���.���¸ô§ »—ë����������������������� ����ctenabledscript������‡€��T€�—�����]½�<��ñ���Geneva���������������������������� ����������T��·Wˬ¹´×���¤��?áÀLANDÿÿÿÿÿÿ������mac ������������if activeRendererSuite.utils.serialOk () if dialog.confirm ( "Update activeRenderer now ?" ) if !defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.update = activeRendererSuite.update thread.easyCall ("system.temp.activeRenderer.update", {}) else if dialog.YesNo ( activeRendererData.guichuncks.texts.notRegisteredAlert ) webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/register" ) webbrowser.bringtofront () €�����€�����€�����€�����€�����€�����€�����€�����€�����€�������¥€��æ�����]½� ���b����Geneva���������������������������� ����������T��¹ǵ¹>Â���†��'ï�LANDÿÿÿÿÿÿ������mac ������������webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/register" ) webbrowser.bringtofront () €�����€�����€�§�������� .Í�������¦é€������Geneva���������������������������� �(�±ž��������������������������������������������������on activeRendererHead�����Â������h���~���¶Ò²¬»¯ñ��������������� �������)��������1 ����<���Z ����e���† �������¦��������®����P���³ ����½���Á ����È���Þ ����â autobackupdbname���activeRenderer.rootdialogs infomethod���toolsupdate.askUpdateParts lastupdate���Thu, 14 Nov 2002 21:13:35 GMTmethod���toolsupdate.getUpdateopenLogport serialNum����server���updates.xml-rpc.itURL������VGeneva���������������������������� ���������ý�¿�A�(�\6‡������������������������Â��m�������Z��›����Geneva���������������������������� ��������������»¯ñ»¯ñ������,þ÷aLANDÿÿÿÿÿÿ������mac ������������<!-- editPrefs version: 1.1.2 --> <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="RSS/OPML browser">Browser</a></span> <span style="margin-right: 20px;"><b>Preferences</b></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="Bookmarks synchronization">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html" target="_blank" title="activeRenderer Information Page">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html" target="_blank" title="More Or Less Frequently Asked Questions">Faq</a></span> </div> <form name="editPrefs" action="##action##" method="POST"> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>default settings</b></p> <table cellpadding="1" cellspacing="0" border="0" width="100%"> <tr> <td width="25"> <input type="checkbox" ##defOutlineWeblog## name="flOutlineWeblog" value="##outlineWeblog##"> </td> <td> Outline publication dates. </td> </tr> <tr> <td></td> <td> <div style="margin-top: 7px;"> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:ioSwitch( 'pDay' )"> <img id="iDay" src="images/ol3.gif" title="expand" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> Adds an active outline wedge to every date title on your weblog's home page. </td> </tr> </table> <div id="pDay" class="collapsed" style="margin-left: 15px;"> <p style="margin-top: 5px;margin-bottom: 0px;">Posts published on the same date are grouped into one outline node. The most recent date node is expanded. All the other nodes are collapsed.</p> <p style="margin-top: 5px;margin-bottom: 0px;"><b>Checking</b> this preference will backup your weblog's non-outlined <i>#dayTemplate.txt</i> template file to <i>www/gems/activeRenderer/backup</i>, and replace it with activeRenderer's outline style template.</p> <p style="margin-top: 5px;margin-bottom: 0px;"><b>Unchecking</b> this preference will restore your weblog's non-outlined <i>#dayTemplate.txt</i> template to the <i>www</i> folder.</p> </div> </div> </td> </tr> </table> <span name="itemsPref" class="##visibility##" style="margin-top: 10px;"> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td width="25"></td> <td width="25"> <input type="checkbox" ##defOutlineItems## name="flOutlineItems" value="##outlineItems##"> </td> <td> Outline individual posts. </td> </tr> <tr> <td></td> <td></td> <td> <div style="margin-top: 7px; margin-bottom: 7px;"> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:ioSwitch( 'pItem' )"> <img id="iItem" src="images/ol3.gif" title="expand" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> Adds an active outline wedge to every post title on your weblog's home page. </td> </tr> </table> <div id="pItem" class="collapsed" style="margin-left: 15px;"> <p style="margin-top: 5px;margin-bottom: 0px;">Only check this preference if your posts usually include titles. All date nodes are expanded. Post nodes matching the most recent publication date are expanded. Earlier post nodes are collapsed, listing post titles only. Use the 'latest' widget on the home page to expand/collapse posts according to their publication date.</p> <p style="margin-top: 5px;margin-bottom: 0px;"><b>Checking</b> this preference will cause your weblog's<i> #itemTemplate.txt</i> template file to be copied to the <i>www/gems/activeRenderer/backup</i> folder, to be replaced by activeRenderer's outline style template.</p> <p style="margin-top: 5px;margin-bottom: 0px;"><b>Unchecking</b> this preference will restore your weblog's original template to the <i>www</i> folder</p> </div> </div> </td> </tr> <tr> <td width="25"></td> <td width="25"> <input type="checkbox" ##defDisplayLatest## name="flDisplayLatest" value="##displayLatest##"> </td> <td> Display 'Latest' widget. </td> </tr> <tr> <td></td> <td></td> <td> <div style="margin-top: 7px;">This widget expands and collapses posts in your weblog's home page according to which date you click.</div> </td> </tr> </table> </span> <br> <table cellpadding="0" cellspacing="0" border="0" width="100%"> <tr> <td valign="middle" width="15"> <a href="javascript:ioSwitch( 'pCustom' )"> <img id="iCustom" src="images/ol3.gif" title="expand" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> You may customize your own versions of the outline style templates using any text editor. </td> </tr> </table> <div id="pCustom" class="collapsed" style="margin-left: 15px; margin-top: 5px;margin-bottom: 0px;"> When modifiying <i>#dayTemplate.txt</i> or <i>#itemTemplate.txt</i> in the <i>www</i> folder, you probably don't want your modifications superceded by activeRenderer's default outline templates the next time you start Radio. To avoid this, update the version number in each file's top comment line with a high value. Any version number above 99 is safe. </div> <br> <table cellpadding="5" cellspacing="0" border="0" width="100%"> <tr> <td width="25"> <input type="checkbox" ##defAutoUpdate## name="flAutoUpdate" value="##autoUpdate##"> </td> <td> Update activeRenderer automatically at startup. </td> </tr> <tr> <td width="25"> <input type="checkbox" ##defAutoUpstream## name="flAutoUpstream" value="##autoUpstream##"> </td> <td> Upstream instant outline at startup, duplicate and upstream outlines when saved under www/gems. </td> </tr> </table> <p>After saving activeRenderer's preferences, re-publish your weblog's home page using Radio's Publish / Weblog Home Page menu.</p> <p style="text-align: right;"> <input type="submit" name="action" value="Save"> <input type="reset"> </p> </div> </form> €�����€�����������������������������������������������������€�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������m���������¸��í����Geneva���������������������������� ��������������»¯ñ»¯ñ������,�W}LANDÿÿÿÿÿÿ������mac ������������<!-- Bookmarks version: 1.1.2 --> <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="RSS/OPML browser">Browser</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/preferences" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><b>Bookmarks</b></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html" target="_blank" title="activeRenderer Information Page">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html" target="_blank" title="More Or Less Frequently Asked Questions">Faq</a></span> </div> <form name="Bookmarks" action="##action##" method="POST"> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>bookmarks</b></p> <p>Browser identification: <script>document.write ( navigator.userAgent );</script></p> <table cellpadding="0" cellspacing="3" border="0" width="100%"> <tr> <td width="15"> <a href="javascript:ioSwitch( 'pPath' )"> <img id="iPath" src="##wedge##" title="expand help" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> Path to the source bookmarks file or folder: </td> </tr> <tr> <td> </td> <td> <input name="bookmarksPath" size="100" value="##bookmarksPath##"> </td> </tr> <tr> <td> </td> <td> <input type="button" name="browseSrc" value="Browse" onClick="RSLite = new RSLiteObject(); RSLite.callback = setSrc; RSLite.attempts = 100; RSLite.call('http://127.0.0.1:5335/activeRenderer/bookmarks/getPath', document.forms['Bookmarks']['bookmarksPath'].value);"> </table> <div id="pPath" class="collapsed" style="margin-left: 21px; margin-top: 4px;margin-bottom: 7px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color=#707070;"> The bookmarks file is where your Web browser stores your 'Favorite' or 'Bookmarked' links.<br> Click the <i>Browse</i> button to locate it, or type in its full path name.<br> With Windows versions of Microsoft Internet Explorer (MSIE), each link is stored in a separate file in the Favorites folder instead of a single file for all links. You need to supply the path name for that folder.<br> Here are some examples : <ul style="margin-top: 3px;"> <li>MSIE / MacOS X: Macintosh HD:Users:marc:Library:Preferences:Explorer:Favorites.html</li> <li>Mozilla / MacOS X: Macintosh HD:Users:marc:Library:Mozilla:Profiles:default:ut7elluu.slt:bookmarks.html</li> <li>MSIE / Win 98: C:\Windows\Favorites</li> <li>MSIE / Win NT4: C:\Winnt\Profiles\marc\Favorites</li> <li>Mozilla / Win 98: C:\Windows\Application Data\Mozilla\Profiles\default\egee7tjx.slt\bookmarks.html </ul> </div> <table cellpadding="0" cellspacing="3" border="0" width="100%" style="margin-top: 8px;"> <tr> <td width="15"> <a href="javascript:ioSwitch( 'pYahoo' )"> <img id="iYahoo" src="##wedge##" title="expand help" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> <input type="checkbox" ##defUseYahoo## name="flUseYahoo" value="##useYahoo##"> Retrieve bookmarks from Yahoo instead. </td> </tr> <tr> <td> </td> <td> myYahoo user id: <input name="userId" size="20" value="##userId##">  password: <input name="password" size="20" value="##password##" type="password"> </td> </table> <div id="pYahoo" class="collapsed" style="margin-left: 21px; margin-top: 4px;margin-bottom: 7px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color=#707070;"> If you check the 'Yahoo bookmarks' box, activeRenderer will connect to your myYahoo account, using the id and password provided on this page, then retrieve your Yahoo bookmarks instead of your local browser bookmarks.<br> This feature is brought to you thanks to Mikel Maron, current author of myRadio, and former author of the Yahoo bookmarks service. </div> <table cellpadding="0" cellspacing="3" border="0" width="100%" style="margin-top: 8px;"> <tr> <td width="15"> <a href="javascript:ioSwitch( 'pDest' )"> <img id="iDest" src="##wedge##" title="expand help" align="bottom" border="0" hspace="0" vspace="0" alt=">"> </a> </td> <td> Path to the destination OPML outline: </td> </tr> <tr> <td> </td> <td> <input name="outlinePath" size="100" value="##outlinePath##"> </td> </tr> <tr> <td> </td> <td> <input type="button" name="browseDst" value="Browse" onClick="RSLite = new RSLiteObject(); RSLite.callback = setDst; RSLite.attempts = 100; RSLite.call('http://127.0.0.1:5335/activeRenderer/bookmarks/getOpml', document.forms['Bookmarks']['outlinePath'].value);">  <input type="button" name="updateBmk" value="Update Now" onClick="RSLite = new RSLiteObject(); RSLite.callback = setRes; RSLite.attempts = 1000; document.getElementById('result').firstChild.data = 'Synchronizing bookmarks, please wait...'; updateBookmarks ();">  <input type="checkbox" ##defKeepSynched## name="flKeepSynched" value="##keepSynched##">  Update in the background when Radio starts. <div id="result" style="margin-top: 5px; font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px;"> </div> </table> <div id="pDest" class="collapsed" style="margin-left: 21px; margin-top: 4px;margin-bottom: 7px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color=#707070;"> The destination outline holds your bookmarked links in an OPML format file.<br> The default outline file is <i>bookmarks.opml</i> in the <i>gems</i> subfolder of Radio's <i>www</i> folder.<br> Click the <i>Browse</i> button to supply another path name for that file, or type it in directly.<br> Click the <i>Update Now</i> button to create or update the outline with your bookmarks.<br> Check the <i>Update Automatically</i> box to keep track of new/modified bookmarks every time Radio starts.<br> </div> <p align="right"> <span style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color=#707070;">Click Save to modify settings</span>  <input type="submit" name="action" value="Save"> <input type="reset"> </p> </div> </form> €�����€�����������������������������������������������������€�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€� š�����Ñœ���L���¹Žü™»—ë�������� ���� ��� �������* ����2���> ����D���P ����Y���e ����l #template�����P�ËgetOpml����P�Š¢getPath����P�Æfindex����P�[ initPath����P�V_update����P�Q¬���Ì€�Â�����Ñœ�H��–�����Geneva���������������������������� ��������������»—ê»—ê������™‚ oLANDÿÿÿÿÿÿ������mac ������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>{title} {metaTags ()} {bodyTag ()} {bodytext} €€€€€€€€€€€€V€`ÑœT Geneva »—ê»—êÛ ëQLANDÿÿÿÿÿÿmac on setUpdateServer ( name ) Information 1/15/03; 10:35:48 AM by MB Modifies the actual update server on the fly 1/14/03; 11:24:30 PM by MB Modifies the updateServer user pref activeRendererSuite.utils.getPrefs ()^.updateServer = name case name "alpha" user.rootUpdates.servers.activeRenderer.server = activeRendererData.prefs.alphaServer.server user.rootUpdates.servers.activeRenderer.port = activeRendererData.prefs.alphaServer.port "stable" user.rootUpdates.servers.activeRenderer.server = activeRendererData.prefs.stableServer.server user.rootUpdates.servers.activeRenderer.port = activeRendererData.prefs.stableServer.port €„„€€€€€€€€€€€\øT, Geneva »—ê»—êÜ€LANDÿÿÿÿÿÿmac on getPrefs () Information: 1/15/03; 12:31:36 AM by MB Ported from liveTopics, thanks Matt. 02/07/02; 23:16:36 by MM Okay Marc you got me, forgot to use radio.weblog.init() in here!!! 30/06/02; 00:31:29 by MM Moved preferences table to weblogData.prefs.liveTopics from liveTopicsData.prefs 27/06/02; 16:09:45 by MM Implemented to replace direct references to the liveTopicsData.prefs table in preparation for prefs moving to weblogData local data = radio.weblog.init() return @data^.prefs.activeRenderer dialog.alert( getPrefs() ) €„€€€€€€€€€€ š( dGeneva ¹Šá×¹Žý@4'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/bookmarks/" ) webbrowser.bringtofront () €€¹EEˆºS'OI'ïLANDÿÿÿÿÿ =±Geneva »¯ñ»¯ñ-c¬·LANDÿÿÿÿÿÿmac on register () header comments 6/26/02; 8:19:20 PM by MB Save user.rootUpdates.servers.activeRenderer table after settig serial 6/25/02; 10:41:17 AM by MB on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" local s tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction tSerial = user.rootUpdates.servers.activeRenderer.serialNum tResult postargs argTable if activeRendererSuite.utils.serialOk() // tool is already registered, build string s = string (activeRendererData.guichuncks.objects.registered) else // tool is not already registered, build form s = string (activeRendererData.guichuncks.objects.unRegistered) activeRendererSuite.utils.buildPostArgs ( @postargs )// Parses posted args to postargs table if defined ( postargs.action ) // A post has been issued => process it msg ("Registering with updates server.") local rpcserver = "xmlrpc://" + user.rootUpdates.servers.activeRenderer.server + ":" + user.rootUpdates.servers.activeRenderer.port + "/RPC2" if [rpcserver].toolsupdate.checkSerial("activeRenderer", postargs.serial, true) // ask the registration server if the serial is valid. user.rootUpdates.servers.activeRenderer.serialNum = postargs.serial filemenu.saveMyRoot ( @user.rootUpdates.servers.activeRenderer ) tResult = "activeRenderer's serial number has been registered." msg ("Registration succeeded.") else // registration failed tResult = "Oops ! " + postargs.serial + " is not a valid serial number. Check it again." tSerial = postargs.serial msg ("Registration failed.") if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/"+nameOf ( adrObject^ ) s = string.replaceAll ( s, "##action##", tAction ) s = string.replaceAll ( s, "##serial##", tSerial ) s = string.replaceAll ( s, "##result##", tResult ) s = string.replaceAll ( s, "##regMsg##", activeRendererData.guichuncks.texts.regMsg ) s = string.replaceAll ( s, "##regPageUrl##", activeRendererData.prefs.regPageUrl ) return s // return page contents €„„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€ = º. Geneva »¯ñ»¯ñTCàOLANDÿÿÿÿÿÿmac on save ( adrItem, flClosing ) Information 3/3/03; 2:57:07 PM by MB Added update of myOutlines.opml when saving or copying to outlines. 11/16/02; 4:00:34 PM by MB Corrected a bug when saving the 'instant outline' As reported by Georg Bauer 11/5/02; 7:18:51 PM by MB Modified to mirror 'gems' subfolder hierarchy under 'outlines' As suggested by Donovan Watts local atts adr = window.frontmost () on updateMyOutlines () local ( dirPath = radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" ) file.writeWholeFile ( dirPath, activeRendererSuite.utils.folderToOpml ( radio.file.getSubFolder ( "outlines" ) ) ) window.attributes.getAll ( @atts, adr ) if defined ( atts.type ) and atts.type == "outlinerFile" Frontier.tools.data.windowTypes.outlinerFile.save ( adr ) window.attributes.getAll ( @atts, adr ) // Update f attribute if defined ( atts.f ) local outlinesPath = user.radio.prefs.wwwfolder + "outlines" + file.getPathChar() targetPath = outlinesPath outlinesFile = file.fileFromPath ( atts.f ) outlinesFolder = file.folderFromPath ( atts.f ) if string.patternMatch ( "gems", outlinesFolder ) > 0 regex.subst ( ".*gems[:\\\\]", "", @outlinesFolder ) // get rid of everything up to gems regex.subst ( "[:\\\\]$", "", @outlinesFolder ) // get rid of any trailing folder separator if outlinesFolder // if we're mirroring a subfolder of gems targetPath = outlinesPath + outlinesFolder + file.getPathChar() // define the subfolder of outlines if file.exists ( outlinesPath + outlinesFile ) // if the outline already exists in outlines file.copy ( atts.f, outlinesPath + outlinesFile ) // replace it there file.sureFilePath ( targetPath + outlinesFile) // create the mirror subfolder in outlines if needed file.copy ( atts.f, targetPath + outlinesFile ) // save the outline at its proper location updateMyOutlines () // update the myOutlines outline in gems else if string.patternMatch ( "instantOutliner", outlinesFolder ) > 0 // if we're saving the instant outline file.copy ( atts.f, outlinesPath + outlinesFile ) // copy it to the outlines folder updateMyOutlines () else if string.patternMatch ( "outlines", outlinesFolder ) > 0 updateMyOutlines () return true else return false €„„€„„€$datatabl.¸þ¸.¸þ¸.€€$datatabl.¸þ¸.¸þ¸.€WdatatablG¸þ¸.¸þ¸. createdSat, 04 May 2002 13:41:08 GMT$datatabl.¸þ¸.¸þ¸.WdatatablG¸þ¸.¸þ¸. createdSat, 04 May 2002 13:41:22 GMT€ º€B{4 Lucida Grande ºIÿ"ºJIà)'ïLANDÿÿÿÿÿÿmac activeRendererSuite.utils.setUpdateServer ("alpha") €ndeµ€{´)Geneva T¸ô§ ¹R‘y'ïLANDÿÿÿÿÿÿmac edit ( @activeRendererData.texts.about ) €§€Î{´000000060001001777AA000000000065000000001001710000001-7FFB6FBE1800000‚‚480048062D200-1‚0Â6‚2D222FFFF0‚‚10‚‚3‚5400001000000360000000105440840‚‚6‚2D2223C038E0002062D8E00002000000590000000054,#flDisplayCup "regular" #renderOutlineWith "activeRenderer" #flDisplayHTMLWedge true000400000009000000020560000500000009000000020560000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C0000001700000001543B‚1F221288‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,>P4,]¬4,] 4,k¬064,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õŇ¹ùiXT3xâJ€Bü eGeneva ¹$Bº‰bãb'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/preferences" ) webbrowser.bringtofront () €€ath = argList[4] FüÞ ZGeneva Tº‰b÷º‰c'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/" ) webbrowser.bringtofront () €€Þ {CV¸ô§ »¯ñ  2> Vb z† š¦ »Ç ÝactiveRendererData ñTactiveRendererInfo CactiveRendererNodeTypes >úactiveRendererResponder @ÆactiveRendererSuite ¼ÚactiveRendererThread ý^activeRendererWebsite ÃV Lucida Grande226(ŒÈÜŠGeneva /¸ô§ ¹äчŽ'ïLANDÿÿÿÿÿÿmac activeRendererData activeRendererInfo author authorEmail description homePageUrl name releaseDate version activeRendererNodeTypes activeRendererResponder activeRendererSuite activeRenderer background everyHour everyMinute everyNight bookmarks callbacks fileMenu save user startup cleanup gui instal jsRender jsRenderOpml jsRenderRss macros activeRendererFunctions activeRendererHeader activeRoll daySwitch espressoCup nodeFormat nodeState opmlRender storyBox menu menuItems render rssRenderer saveSerial statusCenterMessage uninstal update utils activeRendererThread activeRendererWebsite €€±„€i€€±„€i€€±„€pÌ€€±„€pÌ€€±„€pÌ€€±„€pÌ€€±„€pÌ€€±„€pÌ€€±„€pÌ€€±„€i€€±„€i€€±„€i€€±„€±è€€±„€±è€€±„€¶$€€±„€¶$€€±„€¶$€€±„€±è€€±„€±è€€±„€¶d€€±„€¶€€±„€¶d€€±„€¶¨€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€¶À€€±„€¶À€€±„€¶À€€±„€¶À€€±„€¶À€€±„€¶À€€±„€¶À€€±„€¶À€€±„€¶À€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€±è€€±„€i€€±„€i {€G.vL¹Žü™ºŠî¾  * 2> DP Ye l #templateàgetOpmlàágetPathàÜ×indexà~initPathà±¾updateୠ̀o‚eGeneva ¸ô§ ¹¤èJ'ïLANDÿÿÿÿÿÿmac €GHDt¸õºj»¯ñ  " .: GS ^j p| ƒ ˜¤ ­¹ Àaboutp Ncssp 'Ë dayTemplatepË itemTemplatep c javascriptpܶprefsp ‰rslitep ›templatep Mxsl_htmlp²Èxsl_jsp qÀH€ óX8¸õ–ê¹ÍŠVZ¢¦globe GIFfGIF89a ¢¶˜kHDD½¦Šȱ‘mma!ÿ NETSCAPE2.0!þ©right 20€•€ îVÐÞ Geneva »—»—-r«lLANDÿÿÿÿÿÿmac on activeRendererFunctions ( titleText = "outline", titleClass = "active", flIncludeLinks = true, linkClass = "active", nodeClass = "active", helpText = "how this works", helpClass = "help", flImageCache = true€ë€ Úß=0000000600010017€ ñFFFF000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000‚‚480048062D200-1‚0Â6‚2D222FFFF0‚‚10‚‚3‚1500001000000350000000103C40840‚‚6‚2D2223C038E0002062D60000200000041000000003C,#title "Preferences" {activeRendererSuite.gui.editPrefs ()} 00040000000A00000002013E10005000000090000000203E00006000000630000000210C310‚‚ÁFFFF0‚C00000 20ÂÁ ‚‚Á‚ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â160‚Á‚0008000000A50000000140,Geneva40,1040304E40Â10Â10000900000017000000023‚11327B3‚11327B000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C000000110000000115‚‚1B610‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,appn4,send4,8óð4,&4,8ô€4,3©4,8ôð00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA±§Pĺ‰_-<•I»×mñ½FFFF000000060001001777AA00000000006D000000001001710000001-7EFB6FBE1800000‚‚48004806200-1‚8118110Â6‚20222FFFF0‚‚10‚‚3‚18000010000003300000001022840‚‚6‚2022222038E00013620600002000000270000000022,{activeRendererSuite.jsRender ()} 00040000000900000002024000050000000F0000000301220240000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚10C2703‚10C270000A00000015000000026‚202226‚20222000B00000005000000020Â000C00000015000000011815‚97007C‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,D@4,ÿÿ4,4,ÿÿ4,DÀ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹ŠâXº‰H'" µ?89½€ UòÎ$º„ô8º‰GÖ   #templateP{indexPGÙQÆLANDÿÿÿÿÿÿmac u€ ÔòÎ ŠGeneva ¹EEˆºS'OI'ïLANDÿÿÿÿÿÿmac if dialog.confirm ( "Deactivate activeRenderer tool ?" ) Frontier.tools.uninstall ( window.getFile ( parentOf ( activeRendererInfo ) ) ) €€€ ºòÎ. Geneva »—ê»—êTCàOLANDÿÿÿÿÿÿmac on save ( adrItem, flClosing ) Information 3/3/03; 2:57:07 PM by MB Added update of myOutlines.opml when saving or copying to outlines. 11/16/02; 4:00:34 PM by MB Corrected a bug when saving the 'instant outline' As reported by Georg Bauer 11/5/02; 7:18:51 PM by MB Modified to mirror 'gems' subfolder hierarchy under 'outlines' As suggested by Donovan Watts local atts adr = window.frontmost () on updateMyOutlines () local ( dirPath = radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" ) file.writeWholeFile ( dirPath, activeRendererSuite.utils.folderToOpml ( radio.file.getSubFolder ( "outlines" ) ) ) window.attributes.getAll ( @atts, adr ) if defined ( atts.type ) and atts.type == "outlinerFile" Frontier.tools.data.windowTypes.outlinerFile.save ( adr ) window.attributes.getAll ( @atts, adr ) // Update f attribute if defined ( atts.f ) local outlinesPath = user.radio.prefs.wwwfolder + "outlines" + file.getPathChar() targetPath = outlinesPath outlinesFile = file.fileFromPath ( atts.f ) outlinesFolder = file.folderFromPath ( atts.f ) if string.patternMatch ( "gems", outlinesFolder ) > 0 regex.subst ( ".*gems[:\\\\]", "", @outlinesFolder ) // get rid of everything up to gems regex.subst ( "[:\\\\]$", "", @outlinesFolder ) // get rid of any trailing folder separator if outlinesFolder // if we're mirroring a subfolder of gems targetPath = outlinesPath + outlinesFolder + file.getPathChar() // define the subfolder of outlines if file.exists ( outlinesPath + outlinesFile ) // if the outline already exists in outlines file.copy ( atts.f, outlinesPath + outlinesFile ) // replace it there file.sureFilePath ( targetPath + outlinesFile) // create the mirror subfolder in outlines if needed file.copy ( atts.f, targetPath + outlinesFile ) // save the outline at its proper location updateMyOutlines () // update the myOutlines outline in gems else if string.patternMatch ( "instantOutliner", outlinesFolder ) > 0 // if we're saving the instant outline file.copy ( atts.f, outlinesPath + outlinesFile ) // copy it to the outlines folder updateMyOutlines () else if string.patternMatch ( "outlines", outlinesFolder ) > 0 updateMyOutlines () return true else return false €„„€„„€$datatabl.¸þ¸.¸þ¸.€€$datatabl.¸þ¸.¸þ¸.€WdatatablG¸þ¸.¸þ¸. createdSat, 04 May 2002 13:41:08 GMT$datatabl.¸þ¸.¸þ¸.WdatatablG¸þ¸.¸þ¸. createdSat, 04 May 2002 13:41:22 GMT€€ U’#`¸ô§ »¯ñ #0>KY d˜ ¥ alphaServerp; autoUpdate autoUpstream displayLatest outlineItems outlineWeblog regPageUrl0http://register.xml-rpc.it/itstories/story$num=3 stableServerpÛVGeneva gÉ2@xÖche s = s + "\r
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: registration

If you do not have a serial number, proceed straight to the registration site.

Enter your activeRenderer serial number :   

##regMsg##

##result##

€€€ÃÞTGeneva »¯ñ»¯ñGÑà,LANDÿÿÿÿÿÿmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: registration

This copy of activeRenderer is registered. Serial number: ##serial##.
€€€ÞßFFFF000000060001001777AA000000000078000000001001710000001-7FFB6FBE1800000‚‚48004806242200-1‚49549E49549E0Â6‚242222FFFF0‚‚10‚‚3‚446000010000003B00000001044640840‚‚6‚24222243D038E000235624234000020000044C00000000446,00040000000A000000020448000050000000A0000000204480000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚16A1E63‚16A1E6000A00000017000000026‚2422226‚242222000B00000005000000020Â000C0000001700000001446E2‚656772E‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿ4,IGxv4,J3Bv4,ZXIg4,cj154,ZXIg00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹=Åu¹ègD F,0©)[ß½?Geneva »¯ñ»¯ñ”7\¸LANDÿÿÿÿÿÿmac Please provide at least an 'src' argument in your GET request. €½}BºKHºKHù   ! &+ 2&&''>><<""UQj¸õŠë»¯ñ $ 9E P\ fr ~Š •¡ «· ÂÎ ×activeRendererFunctionsdÆactiveRendererHeadera˜ activeRollÓé daySwitch BD espressoCupRÞ nodeFormat›ø nodeState 0 version = matchList[1] return version on setArchive () // create uninstal folders file.sureFolder ( arPath ) file.sureFolder ( wwwPath ) file.sureFolder ( gemsPath ) on restoreTemplates () // Restore regular outline templates if possible local homeTemplateBackup dayTemplate dayTemplateBackup itemTemplateBackup setArchive () if adrPrefs^.activeRenderer.outlineWeblog // if outline style is currently turned on if file.exists ( backupPath + "#homeTemplate.txt" ) // if the original home template was properly backed up homeTemplateBackup = file.readWholeFile ( backupPath + "#homeTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "activeRenderer", homeTemplateBackup ) || string.patternMatch ( "daySwitch", homeTemplateBackup ) // if there is a trace of activeRenderer induced modification in the backed up home template radio.log.add( "activeRenderer", "Warning: backed up home template appears to have been modified with activeRenderer macros.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#homeTemplate.txt", wwwPath + "#homeTemplate.txt" ) // archive current version file.copy ( backupPath + "#homeTemplate.txt", user.radio.prefs.wwwfolder + "#homeTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original home template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the home template in " + backupPath + ".", startTime ) if file.exists ( backupPath + "#dayTemplate.txt" ) // if the original day template was properly backed up dayTemplateBackup = file.readWholeFile ( backupPath + "#dayTemplate.txt" )// retrieve the template's content if string.patternMatch ( "dayTemplate", dayTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up day template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#dayTemplate.txt", wwwPath + "#dayTemplate.txt" ) // archive current version file.copy ( backupPath + "#dayTemplate.txt", user.radio.prefs.wwwfolder + "#dayTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original day template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the day template in " + backupPath + ".", startTime ) if adrPrefs^.activeRenderer.outlineItems // if outline items style is currently on if file.exists ( backupPath + "#itemTemplate.txt" ) // if the original item template was properly backed up itemTemplateBackup = file.readWholeFile ( backupPath + "#itemTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "itemTemplate", itemTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up item template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#itemTemplate.txt", wwwPath + "#itemTemplate.txt" ) // archive current version file.copy ( backupPath + "#itemTemplate.txt", user.radio.prefs.wwwfolder + "#itemTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original item template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the item template in " + backupPath + ".", startTime ) adrPrefs^.activeRenderer.outlineItems = false // turn off item outlining preference adrPrefs^.activeRenderer.outlineWeblog = false // turn off day outlining preference fileMenu.saveMyRoot ( adrPrefs ) // save preferences if f beginsWith "[" // clean up pathname if necessary f = string.mid ( f, 3, string.length ( f ) - 4 ) if string.patternMatch ( "activeRenderer.root", f ) // if we are indeed talking about aR if file.exists ( toolsPath + "activeRenderer.root" ) // if activeRenderer.root is still in the Tools folder if defined ( temp.Frontier.tools.activeRenderer ) // if activeRenderer has been installed during this Radio session if ! defined ( temp.Frontier.tools.activeRenderer.url ) // if activeRenderer was deactivated radio.log.add( "activeRenderer", "Deactivation requested.", startTime ) restoreTemplates () radio.log.add ( "activeRenderer", "Tool was deactivated.", startTime ) else // activeRenderer is not in the Tools folder any more. radio.log.add( "activeRenderer", "Uninstallation requested.", startTime ) restoreTemplates () bundle // Restore #prefs.txt file if file.exists ( backupPath + "#prefs.txt" ) // if the original prefs file was properly backed up file.copy ( user.radio.prefs.wwwfolder + "#prefs.txt", wwwPath + "#prefs.txt" ) // archive current prefs file.copy ( backupPath + "#prefs.txt", user.radio.prefs.wwwfolder + "#prefs.txt" ) // restore prefs radio.log.add( "activeRenderer", "Original preferences restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the prefs file in " + backupPath + ".", startTime ) bundle // Remove activeRenderer folder from gems try gemsPath = gemsPath + "activeRenderer" + file.getPathChar () file.sureFolder ( gemsPath ) file.copy ( basePath, gemsPath ) file.deleteFolder ( basePath ) radio.log.add ( "activeRenderer", "activeRenderer folder moved from " + user.radio.prefs.wwwfolder + "gems to " + file.folderFromPath ( gemsPath ), startTime ) else radio.log.add ( "activeRenderer", "Warning: could not delete activeRenderer folder from " + user.radio.prefs.wwwfolder + "gems.", startTime ) bundle // Unlink aR macros if ( defined ( user.html.macros.opmlRender ) ) delete ( @user.html.macros.opmlRender ) if ( defined( user.html.macros.daySwitch ) ) delete ( @user.html.macros.daySwitch ) if ( defined( user.html.macros.nodeState ) ) delete ( @user.html.macros.nodeState ) if ( defined( user.html.macros.nodeFormat ) ) delete ( @user.html.macros.nodeFormat ) if ( defined( user.html.macros.storyBox ) ) delete ( @user.html.macros.storyBox ) if ( defined( user.html.macros.espressoCup ) ) delete ( @user.html.macros.espressoCup ) if ( defined( user.html.macros.activeRoll ) ) delete ( @user.html.macros.activeRoll ) if ( defined( user.html.macros.activeRendererFunctions ) ) delete ( @user.html.macros.activeRendererFunctions ) if ( defined( user.html.macros.activeRendererHeader ) ) delete ( @user.html.macros.activeRendererHeader ) bundle // Unlink rendering code if defined ( user.html.renderers.activeRenderer ) delete ( @user.html.renderers.activeRenderer ) bundle // Remove update table if defined ( user.rootUpdates.servers.activeRenderer ) delete ( @user.rootUpdates.servers.activeRenderer ) bundle // Remove preferences table if defined ( adrPrefs^.activeRenderer ) delete ( @adrPrefs^.activeRenderer ) radio.log.add( "activeRenderer", "Tool was completely removed.", startTime ) bundle // Remove uninstallation code if defined ( scratchpad.activeRenderer.cleanup ) // just in case it's gone for some reason if ! defined ( temp.activeRenderer ) new ( tabletype, @temp.activeRenderer ) temp.activeRenderer.cleanup = scratchpad.activeRenderer.cleanup // duplicate the cleanup script thread.callScript ( @temp.activeRenderer.cleanup, {} ) // launch the copy in another thread return true €„€€€€€€€€€€€€€€€€€€€€€€€€€€€&J€‰ƒ 0NGeneva »—ê»—ê'ïLANDÿÿÿÿÿÿmac on cleanup () Information 1/21/03; 4:55:24 PM by MB Created. Delete all trace of activeRenderer in the scratchpad if defined ( user.tools.callbacks.afterUninstall.activeRenderer ) delete ( @user.tools.callbacks.afterUninstall.activeRenderer ) if defined ( scratchpad.activeRenderer ) delete ( @scratchpad.activeRenderer ) €„„€€€€ö€‡ƒ B Geneva »—ê»—êÄ‘•LANDÿÿÿÿÿÿmac on startup () Information 22.10.02; 20:25:19 Uhr by AR/MB Code review with Andre Radke disabled this callback, using activeRendererThread instead bundle // disabled code if ! defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.instal = activeRendererSuite.instal thread.easyCall ( "system.temp.activeRenderer.instal", {} ) return false €„„€Z€!ƒ dGeneva ¹Šá×¹Žý@4'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/bookmarks/" ) webbrowser.bringtofront () €€on initPath () local p €,5ƒ B Geneva »—»—Ä‘•LANDÿÿÿÿÿÿmac on startup () Information 22.10.02; 20:25:19 Uhr by AR/MB Code review with Andre Radke disabled this callback, using activeRendererThread instead bundle // disabled code if ! defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.instal = activeRendererSuite.instal thread.easyCall ( "system.temp.activeRenderer.instal", {} €‰§FFFF000000060001001777AA00000000006F000000001001710000001-7FFB6FBE1800000‚‚4800480613200-1‚1201200Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000320000000102940840‚‚6‚13222038E0006‚13E1000020000002E0000000029,{activeRendererSuite.bookmarks.getOpml()}0004000000090000000202B00005000000090000000202B0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000015000000011E15‚E700A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,D@4,D@4,4,D@4,DÀ4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹’mê¹£õ)z² #§–ê4 Geneva »¯ñ»¯ñ’ÃgYLANDÿÿÿÿÿÿmac {title} {metaTags ()} {bodytext} €€€€€€€€€€€€€€€€€€€€€€–ÌBGeneva »¯ñ»¯ñ,ͱLANDÿÿÿÿÿÿmac on render () Information 2/28/03; 11:19:12 AM by MB Created from scratch on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" on buildImgCache ( s ) // Adds HTML for image inclusion cache s = s + "\r\r" s = s + "\t\"noseeum\"\r" s = s + "\r" s = s + "\r" return s local s = string ( activeRendererData.guichuncks.objects.renderer ) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction getargs argTable wedge = "../../images/help.gif" defKeepSynched = "" defUseYahoo = "" adrBlog = radio.weblog.init () demoUrl = "http://www.scripting.com/rss.xml" url urlList outlineString = "" itemCnt = 0 expandedCnt = 0 titleWordCnt = 8 flIncludeChannelTitle = false flCollapseChannelTitle = false flCreateHeader = false cssClassName = "active" cssClassLevel = 0 linkAttribute = "url" flDisplayHTMLWedge = false targetFrame = "" flDisplayDirectives = false uniqId = "" opmlCall = "transclude" flDoClick = false flRoll = false activeRendererSuite.utils.buildPathArgs ( @getargs ) // Parses get args to getargs table if defined ( getargs.action ) // a GET request has been issued, process it if defined ( getargs.src ) url = getargs.src urlList = string.urlSplit ( url ) if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file if ( system.environment.isMac ) regex.subst ( "file:///volumes", "file://", @url ) // clean up url on MacOS systems outlineString = file.readWholeFile ( file.urlToFile ( url ) ) // retrieve from filesystem else if string.lower ( urlList[1] ) beginsWith "http:" // if it's a bona fide http url if string.countFields ( urlList[2], ":" ) == 2 // if a port is specified server = string.nthField ( urlList[2], ":", 1 ) port = string.nthField ( urlList[2], ":", 2 ) else server = urlList[2] port = "80" outlineString = tcp.examples.httpGet ( server, urlList[3], port ) // retrieve via http else s = "exotic url schemes are not rendered for now. Check: " + url if outlineString // if an actual string was retrieved local isXml = string.patternMatch ( " process it adrBlog^.prefs.activeRenderer.bookmarksPath = postArgs.bookmarksPath adrBlog^.prefs.activeRenderer.outlinePath = postArgs.outlinePath adrBlog^.prefs.activeRenderer.keepSynched = defined ( postArgs.flKeepSynched ) adrBlog^.prefs.activeRenderer.useYahoo = defined ( postArgs.fluseYahoo ) adrBlog^.prefs.activeRenderer.myYahoo.userId = postArgs.userId adrBlog^.prefs.activeRenderer.myYahoo.password = postArgs.password fileMenu.saveMyRoot ( @adrBlog^.prefs ) if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/bookmarks/" s = string.replaceAll ( s, "##action##", tAction ) s = string.replaceAll ( s, "##wedge##", wedge ) s = string.replaceAll ( s, "##bookmarksPath##", adrBlog^.prefs.activeRenderer.bookmarksPath ) s = string.replaceAll ( s, "##outlinePath##", adrBlog^.prefs.activeRenderer.outlinePath ) if adrBlog^.prefs.activeRenderer.keepSynched defKeepSynched = "checked=\"checked\"" s = string.replaceAll ( s, "##defKeepSynched##", defKeepSynched ) s = string.replaceAll ( s, "##keepSynched##", checked ( adrBlog^.prefs.activeRenderer.keepSynched ) ) if adrBlog^.prefs.activeRenderer.useYahoo defUseYahoo = "checked=\"checked\"" s = string.replaceAll ( s, "##defUseYahoo##", defUseYahoo ) s = string.replaceAll ( s, "##useYahoo##", checked ( adrBlog^.prefs.activeRenderer.useYahoo ) ) s = string.replaceAll ( s, "##userId##", adrBlog^.prefs.activeRenderer.myYahoo.userId ) s = string.replaceAll ( s, "##password##", adrBlog^.prefs.activeRenderer.myYahoo.password ) return s €„€€„€€€€€€€€€€€€€€€€€€€ ဠ8¿Àt¹ˆj»—ë  (4 FR ]i v‚ ‹— Ÿ« ¸Ä Í   ° buildPathArgsàá buildPostArgsߣcheckHomeTemplateÒ@ checkPrefsÓ folderToOpmlÂDgetPrefsÆbopenUrlÑœ parseCookies_úserialOk ÏR°!(! ,€  €&,€ ,",  &8,€  7,",   6,".,!.#5,14& ,  /4€ 7,€ "6,",," ,",   ', + 68<€8,(, , ,   (,# , % 8,#2, .17  €& ,€  & ,   0,€ ( / #,€  ",",  €€! $,€  #,",  €€" ,€ ,",   €€ %,€  $,",  € €# O€  ,€ ,",    € !,€  ,",    € !,€  ,", €  !,€  ,", €  ,€,  ,€ , <€ , ,/4:,#,  ,   (  , (  TEXTxTEXTstringTEXTparseAddressTEXTthisTEXTtToolNameTEXTstringTEXTpopSuffixTEXTfileTEXTfilefrompathTEXTxlongTEXTtheSNlongTEXTtheSNTEXTuserTEXTrootUpdatesTEXTserversTEXTtToolNameTEXTserialNumtokn TEXTtheSNlongTEXTtheSNlongTEXT-TEXTtheSNlong TEXT-boolTEXTgen2TEXTTEXTgen3TEXTTEXTvectorTEXT0123456789abcdefghkjilmnopqrstuvwxyzTEXTtheToolTEXTstringTEXTmidTEXTtheSNlonglongTEXTtheProgTEXTstringTEXTmidTEXTtheSNlong longTEXTgenTEXTstringTEXTmidTEXTtheSNlonglongTEXTrandomnumTEXTstringTEXTmidTEXTtheSNlonglonglonglongTEXTiTEXTc1TEXTstringTEXTnthCharTEXTtheProgTEXTiTEXTc2TEXTstringTEXTnthCharTEXTrandomnumTEXTiTEXTxTEXTstringTEXTpatternmatchTEXTc1TEXTvectorTEXTzTEXTstringTEXTpatternmatchTEXTc2TEXTvectorTEXTdTEXTxTEXTzTEXTyTEXTabsTEXTdTEXTylongTEXTylong TEXTgen2TEXTvectorTEXTyTEXTgenTEXTgen2boolTEXTserialOkTEXTmsgTEXTserialOksetUpdateServerÂú€ 8]H–Geneva »¯ñ»¯ñ™‚ oLANDÿÿÿÿÿÿmac {title} {metaTags ()} {bodyTag ()} {bodytext} €€€€€€€€€€€€Geneva]žûGeneva »¯ñ»¯ñ}^“þLANDÿÿÿÿÿÿmac on checkHomeTemplate ( startTime = clock.ticks() ) Information 10/29/02; 5:20:33 PM by MB Provide multiple backups, so as not to overwrite the original backup 22.10.02; 22:50:04 Uhr by AR/MB Code review with Andre Radke Inserted call to activeRendererHeader macro instead of separate includes for js and css Got rid of wp object processing Cleaned up the file writing code 7/16/02; 2:31:11 PM by MB Added support for the new displayLatest user preference. 7/10/02; 4:19:10 PM by MB Added local definition of newLine and startTime, thanks Brian. 7/9/02; 6:13:47 PM by MB Updates #homeTemplate.txt in www if necessary on insertInTemplate ( what, where ) local ( idx = string.patternMatch ( where, homeTemplate ) ) wp.newtextobject ( string.mid ( homeTemplate, 1, idx - 1 ), @scratchpad.homeTemplate ) target.set( @scratchpad.homeTemplate ) wp.insert ( what ) wp.insert ( string.mid ( homeTemplate, idx, string.length ( homeTemplate ) +1 - idx ) ) file.writeWholeFile ( homePath, wp.getText() ) target.clear() return file.readWholeFile (homePath ) on insertInTemplate ( what, where, adrTemplate ) // Insert what after where in adrTemplate if where is found local ( idx = string.patternMatch ( where, adrTemplate^ ) ) if idx > 0 adrTemplate^ = string.insert ( what, adrTemplate^, idx ) flOverwriteTemplateFile = true // Set file overwrite flag return true local basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" homePath = user.radio.prefs.wwwfolder + "#homeTemplate.txt" homeTemplate = file.readWholeFile (homePath ) packageRoot = radio.weblog.getUrl () + "gems/activeRenderer/" adrBlog = radio.weblog.init () flOverwriteTemplateFile = false // Do not overwrite home template by default regex.subst ( "^[^\r\n]*outliner\\.(css|txt)[^\r\n]*$", "", @homeTemplate ) // Get rid of previous lines with 'outliner.css' or 'outliner.txt' lines regex.subst ( "[\r\n]+", "\r", @homeTemplate ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems prefs = string.replaceAll ( homeTemplate, "\r", "\r\n" ) if string.patternMatch ( "activeRendererHeader", homeTemplate ) == 0 // Insert activeRendererHeader macro call if missing local ( macroCall = "<% activeRendererHeader() %>" + cr ) insertInTemplate ( macroCall, "", @homeTemplate ) if string.patternMatch ( "daySwitch", homeTemplate ) == 0 // Insert daySwitch macro call if missing local ( daySwitchCall = "<!-- <%daySwitch ()%><br> -->" ) insertInTemplate ( daySwitchCall, "<%radio.weblog.drawcalendar", @homeTemplate ) if adrBlog^.prefs.activeRenderer.displayLatest // If displayLatest preference is checked if string.patternMatch ( "<!-- <%daySwitch ()%><br> -->", homeTemplate ) != 0 // Uncomment daySwitch macro call homeTemplate = string.replace ( homeTemplate, "<!-- <%daySwitch ()%><br> -->", "<%daySwitch ()%><br>" ) flOverwriteTemplateFile = true else // displayLatest is not checked if string.patternMatch ( "<!-- <%daySwitch ()%><br> -->", homeTemplate ) == 0 and string.patternMatch ( "<%daySwitch ()%><br>", homeTemplate ) != 0 // If daySwitch call present and not commented out homeTemplate = string.replace ( homeTemplate, "<%daySwitch ()%><br>", "<!-- <%daySwitch ()%><br> -->" ) flOverwriteTemplateFile = true if flOverwriteTemplateFile // If file overwrite is requested local archivePath = backupPath + file.getPathChar() + "#homeTemplate.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( homePath, archivePath ) // Backup current home template to aR's backup folder radio.log.add ( "activeRenderer", homePath + " backed up to " + archivePath + ".", startTime ) file.writeWholeFile ( homePath, homeTemplate ) // Replace with updated template bundle // test code checkHomeTemplate() €�����„�����€�����€�����€�����€�����€�����€�����€�����„�����������„�����������„�����������„�����������������������������������������������������€�����������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������€�����������������€�����������������€�����������������������€�����������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€���������ô��������<��@����Geneva���������������������������� ��������������»¯ñ»¯ñ�����'ï�LANDÿÿÿÿÿÿ������mac ������������on buildPathArgs (theTableAdr) local pta=html.getpageTableAddress() rq = pta^.request p = string.patternMatch ( "?", rq ) rq = string.mid (rq, p + 1, string.length ( rq ) ) p = string.patternMatch ( " ", rq ) rq = string.mid (rq, 1, p ) new ( tableType, theTableAdr ) webserver.parseArgs ( rq, theTableAdr ) €�����€�����������������������€�����€�����€�����€�����€�������ô����������`��G���Geneva���������������������������� ��������������»¯ñ»¯ñ������ÎW LANDÿÿÿÿÿÿ������mac ������������Information 10/29/02; 3:21:59 PM by MB Only display 'update' link if auto update is disabled. This script returns a string which appears in the Status Center on the Radio UserLand home page. local s = activeRendererInfo.description //displayed string adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs s = s + ( " vs: " + activeRendererInfo.version + ".<br>" ); if activeRendererSuite.utils.serialOk() // if aR is registered if ! adrPrefs^.activeRenderer.autoUpdate // and auto-update is disabled s = s + "** <a href=\"http://127.0.0.1:5335/activeRenderer/update\">update</a> **" else // if aR is not registered s = s + "** <a href=\"http://127.0.0.1:5335/activeRenderer/register\">register</a> **" s = s + activeRendererSuite.gui.regWindow () // this is js code that pops under a window if aR is unregistered return s „�����€�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������€�€€�����a���$���º„ô8º‰GÖ�������� ���� ��� ���� #template�����P�;³index����P�6Å #template�����P�getOpml����P����|€�ø�����a�–�����Geneva���������������������������� ��������������»—ê»—ê�����U�—×¹LANDÿÿÿÿÿÿ������mac ������������on storyBox ( class = "storybox", type = "opml 1.0", updated = "last updated" ) Information 2/7/03; 2:22:01 PM by MB Added optional class, type and updated parameters Cleaned up HTML output local version = "1.1" s = "\r<!-- storyBox vs " + version + " -->\r" d = clock.now () if ! defined ( opmlStory ) opmlStory = "" s = s + ( "<div class=\"" + class + "\">\r" ); if type != "" s = s + ( "\t<a href=\"" + opmlStory + "\" title=\"Click to access this document's XML version\">" ); s = s + ( "<img src=\"http://radio.weblogs.com/0104487/images/xml.gif\" border=\"0\" width=\"36\" height=\"14\" alt=\"XML version\"></a> " + type + "\r" ); if updated != "" s = s + "\t"; if type != "" s = s + "<br>"; s = s + ( updated + ": " + d + "\r" ); s = s + "</div>\r<!--storyBox ends -->"; return ( s ) bundle // Test code wp.newTextObject ( storyBox (), @Temp.htmlTest ) edit (@Temp.htmlTest ) €�����„�����€�����€�����€�����€�����������������������€�����������€�����€�����������������€�����������������������������€�����€�����€�������������������«€�2v�����a�Ì�����Geneva���������������������������� ��������������»—ê»—ê������£j°LANDÿÿÿÿÿÿ������mac ������������on nodeFormat ( postNum, flTitle = true ) 7/1/02; 11:07:51 PM by MB Added support for title links. Thanks Jack. local adrBlog = radio.weblog.init () adrPosts = @adrBlog^.posts adrPrefs = @adrBlog^.prefs adr = @adrPosts^ [ string.padWithZeros ( postNum, 8 ) ] post = string ( adr^.text ) s post = string.replaceAll (post, "\n", "") // in case of Windows type end of lines post = html.processMacros ( post ) if flTitle if defined ( adr^.title ) if defined ( adr^.link ) s = "<a href=\"" + adr^.link + "\">" else if adrPrefs^.flAutoGenerateLinks s = "<a href=\"" + radio.weblog.getUrl () + date.year ( adr^.when ) + "/" + string.padWithZeros ( date.month ( adr^.when ),2 ) + "/" + string.padWithZeros ( date.day ( adr^.when ),2 ) + ".html#a" + postNum + "\">" s = s + adr^.title if defined ( adr^.link ) or adrPrefs^.flAutoGenerateLinks s = s + "</a>" else s = string.firstSentence ( post ) else if defined ( adr^.title ) s = post else s = string.mid ( post, string.length ( string.firstSentence ( post ) ) + 1, string.length ( post ) - string.length ( string.firstSentence ( post ) ) ) regex.subst( "^ +", "", @s ) return s bundle // Test code wp.newTextObject ( nodeFormat ( 197, true ), @scratchpad.test ) edit ( @scratchpad.test ) €�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�^�� Ó��������� M� ��Geneva���������������������������� ��������������»—ê»—ê������.�°ÉLANDÿÿÿÿÿÿ������mac ������������on espressoCup ( checkFlag=false ) Information 12/18/02; 11:08:17 AM by MB Test for existence of flEnabled before testing its value 11/13/02; 3:30:32 PM by MB Returns an empty string if the instant outliner file does not exist 9/4/02; 1:15:21 PM by MB Corrected Jabber host parameter in IM 8/28/02; 10:55:23 PM by MB Simplified code Added support for notification by IM using JES's bundle from radio.outliner.macros.coffeeMug local adrdata = radio.outliner.init () f = radio.outliner.getMyOutlineFile () c = "http://radio.weblogs.com/0104487/images/my/espresso.gif" t = "espresso cup" adrfile url s = "" if file.exists ( f ) // if an instant outliner file actually exists radio.file.getfileattributes ( f, @adrfile ) url = "http://127.0.0.1:5335/system/pages/outlinerSubscribe?url=" + ( string.urlencode ( adrfile^.upstream.url ) + "&author=" + string.urlencode ( user.prefs.name ) + "&weblog=" + string.urlencode ( radio.weblog.getUrl () ) ) bundle //add IM notification params to the URL if defined ( adrdata^.prefs.messaging.flEnabled ) && adrdata^.prefs.messaging.flEnabled if adrdata^.prefs.messaging.flAimEnabled url = url + "&imProtocol=aim&imUsername=" + user.im.aim.username + "&imRegisterProcedure=radioOutliner.requestNotification" else if adrdata^.prefs.messaging.flJabberEnabled url = url + "&imProtocol=jabber&imUsername=" + user.im.jabber.username + "@" + user.im.jabber.host + "&imRegisterProcedure=radioOutliner.requestNotification" s = "<a href=\"" + ( url + "\" title=\"Click on the " + t + " to add " + user.prefs.name + "'s Instant Outline to your Radio buddy list.\"><img src=\"" + c + "\" border=\"0\" alt=\"Outline subscribe\"></a>" ) if ( checkFlag ) try if ( flDisplayCup == "glass" ) c = "http://radio.weblogs.com/0104487/images/my/glass.gif" t = "espresso glass" if ( flDisplayCup == "regular" ) c = "http://radio.weblogs.com/0104487/images/my/mug.gif" t = "coffee mug" if ( flDisplayCup == "spinning" ) c = "http://radio.weblogs.com/0104487/images/my/cm_spin.gif" t = "spinning mug" s = "<a href=\"" + ( url + "\" title=\"Click on the " + t + " to add " + user.prefs.name + "'s Instant Outline to your Radio buddy list.\"><img src=\"" + c + "\" border=\"0\" alt=\"Outline subscribe\"></a>" ); else s = "" return s €�����„�����„�����€�����„�����������€�����������€�����������������€�����������������������������������������������€�����€�����€�����€�����€�����������������������������������€�����€�����������������������������������������������������������������������������������€�����€�=€�·�����¸’�� à� ��Geneva���������������������������� ��������������»—ê»—ê������G�Ë„PLANDÿÿÿÿÿÿ������mac ������������on daySwitch ( daysPerLine = 7 ) Information 2/6/03; 11:42:57 AM by MB Added 'latestTitle' class attribute to widget's title 8/1/02; 3:31:48 PM by MB Removed comment in rendered HTML, initialize output to empty string. 7/25/02; 3:29:49 PM by MB Modified collapse / expand all javascript call to handle both outline day and outline post preferences. Added a comment tag with version number in the output. 7/16/02; 4:54:25 PM by MB Links are now in the latest class instead of active class. Added display of version at tooltip in browser when hovering 'how this works'. 7/12/02; 11:27:42 AM by MB Added maximum number of days per line parameter, defaults to 7. Formatted days on 2 digits, left padded with zero. 6/29/02; 10:10:03 AM by MB Added how this works link 6/28/02; 12:13:45 PM by MB Modified to take categories into account. local s = "" version = "1.0.2" if !flArchivePage // are we rendering a home page ? s = s + "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n"; s = s + "<tr><td align=\"center\" class=\"latestTitle\"><b>Latest</b></td></tr>\n"; s = s + "<tr><td class=\"latest\">"; local adrBlog = radio.weblog.init () adrPosts = @adrBlog^.posts adrPrefs = @adrBlog^.prefs days = adrPrefs^.ctDaysToDisplay previousDate nodeId i if adrPrefs^.activeRenderer.outlineItems nodeId = "item" else nodeId = "day" for i = sizeOf ( adrPosts^ ) downto 1 local adr = @adrPosts^ [i] t = adr^ d = date.shortString ( t.when ) flInclude = false if defined ( categoryName ) // are we rendering a category home page ? if defined ( t.categories [ categoryName ] ) // is the current post included in this category ? flInclude = true else // we are rendering the main home page if !t.flNotOnHomePage // does this post belong to the main home page ? flInclude = true if d != previousDate and flInclude if days != adrPrefs^.ctDaysToDisplay and ( ( adrPrefs^.ctDaysToDisplay - days ) % daysPerLine ) == 0 // skip a line every daysPerLine dates. s = s + "<br>"; s = s + ( "<a href=\"javascript:daySwitch( 'p" + d + "' )\" title=\"expand " + d + "\">" + string.padWithZeros ( date.day ( t.when ), 2 ) + "</a>   " ); previousDate = d days = days - 1 if days == 0 break s = s + "</td></tr>\n"; s = s + "<tr><td class=\"latest\"><a href=\"#\" onclick=\"expandAll(\'" + nodeId + "\')\" title=\"click to expand all posts\">expand</a> / <a href=\"#\" onclick=\"collapseAll(\'" + nodeId + "\')\" title=\"click to collapse all posts\">collapse</a> all posts</td></tr>\n"; s = s + "<tr><td class=\"help\" align=\"center\"><a href=\"http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html\" target=\"_blank\" title=\"vs. " + activeRendererInfo.version + "\">how this works</a></td></tr>"; s = s + "</table>"; return s bundle //test code flArchivePage = false wp.newtextobject ( daySwitch (), @scratchpad.daySwitch ) edit ( @scratchpad.daySwitch ) €�����„�����„�����€�����„�����������€�����������������„�����������������„�����������������„�����������„�����������€�����������������€�����€�����€�����€�����€�����������������������������������������������€�����������€�����������€�����������������������������������������������������������������������������������������������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€������� ê€�Á�����¸�Þ��k���Geneva���������������������������� ��������������»—ê»—ê������,ƒHLANDÿÿÿÿÿÿ������mac ������������on activeRoll ( url, class = "roll", target = "_new", title = "", flRoll = true, action = "transclude" ) Information 1/17/03; 4:35:07 PM by MB Added new 'action' parameter to set the javascript to call on included/transcluded links, defaults to aR's default. 1/10/03; 3:15:07 PM by MB Modified call to activeRenderer, use opml string instead of outline object 12/31/02; 8:07:57 PM by MB Modified rollId, randomize between 10 and 99 11/8/02; 7:18:24 PM by MB Added a random uniqId to pass along to activeRenderer 11/1/02; 2:19:56 PM by MB Added flRoll parameter, defaults to true, passed along to activeRenderer 7/25/02; 6:44:12 PM by MB Returns the HTML for an OPML file specified in url local urlList opmlText ol s = "" rollId = string ( random ( 10, 99 ) ) if title != "" s = s + ( "<div class=\"" + class + "Title\">" + title + "</div>" ); s = s + "<div class=\"roll\">" urlList = string.urlSplit ( url ) // parse url if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file opmlText = file.readWholeFile ( file.urlToFile ( url ) ) else // otherwise it must be http opmlText = string.httpResultSplit ( tcp.httpClient ( server:urlList [2], path:urlList [3], flAcceptOpml:true ) ) if system.environment.isMac // take care of Mac encoding opmlText = latinToMac.convert ( opmlText ) s = s + activeRendererSuite.activeRenderer ( opml:opmlText, cssClassName:class, opmlCall:action, targetFrame:target, flRoll:flRoll, uniqId:rollId ) // render in HTML s = s + "</div>" s = s + "<div class=\"rollHelp\"><a href=\"http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html\" target=\"_blank\" title=\"vs. " + activeRendererInfo.version + "\">how this works</a></div>" return s bundle // test code edit ( @scratchpad.test ) wp.setText ( activeRoll ( "file:///Data/Marc/Radio%20UserLand/www/gems/opml/blogroll.opml" ) ) €�����„�����„�����€�����„�����������„�����������€�����������„�����������€�����������€�����������������������������������€�����������€�����€�����€�����������€�����������€�����������€�����€�����€�����€�����€�����€�����€�����€�(��� j��������Þ�� ���Geneva���������������������������� ��������������»—ê»—ê������-�r«lLANDÿÿÿÿÿÿ������mac ������������on activeRendererFunctions ( titleText = "outline", titleClass = "active", flIncludeLinks = true, linkClass = "active", nodeClass = "active", helpText = "how this works", helpClass = "help", flImageCache = true, flVertical = true ) Information 2/7/03; 4:07:37 PM by MB Added flVertical parameter - cleaned up HTML output 12/8/02; 7:24:16 AM by MB Removed trailing end of line marker in returned string 11/10/02; 6:28:53 PM by MB Added flImageCache parameter, defaults to true, to include a cache for images inclusion. Added parameters for everything that is output on the page. 7/17/02; 10:45:39 AM by MB Added display of version at tooltip in browser when hovering over 'how this works'. local version = "1.1" s = "\r<!-- activeRendererFunctions vs " + version + "-->\r<div id=\"activeRendererFunctions\">\r" if titleText != "" // if a title is provided s = s + ( "\t<div class=\"" + titleClass + "\">" + titleText + "</div>\r" ); if flIncludeLinks // if we need to display the expand/collapse all links s = s + ( "\t<div class=\"" + linkClass + "\">\r" ); s = s + ( "\t\t<a href=\"#\" onclick=\"collapseAll('" + nodeClass + "')\" title=\"click to collapse all nodes\">collapse all</a>" ); if flVertical s = s + "<br>\r"; else s = s + " / \r"; s = s + ( "\t\t<a href=\"#\" onclick=\"expandAll('" + nodeClass + "')\" title=\"click to expand all nodes\">expand all</a>\r" ); s = s + "\t</div>\r"; if helpText != "" // if a help link is provided s = s + ( "\t<div class=\"" + helpClass + "\">\r" ); s = s + ( "\t\t<a href=\"http://radio.weblogs.com/0104487/outlines/aR/activeRenderer.html\" target=\"_blank\" title=\"vs. " + activeRendererInfo.version + "\">" + helpText + "</a>\r" ); s = s + "\t</div>\r"; if flImageCache // if we need to include an image cache s = s + "\t<!-- Image inclusion cache -->\r\t<img id=\"hiddenImg\" style=\"position:absolute; top:0px; left:0px; visibility:hidden\" src=\"\" alt=\"noseeum\">\r"; s = s + "\t<script type=\"text/javascript\"><!--\r\t\tvar cachedImg = document.getElementById('hiddenImg'); //-->\r\t</script>\r\t<!-- End of cache -->\r"; s = s + "</div>\r<!-- activeRendererFunctions ends -->"; return ( s ) bundle // Test code wp.newTextObject ( activeRendererFunctions (), @Temp.htmlTest ) edit (@Temp.htmlTest ) €�����„�����€�����€�����„�����������„�����������������€�����������€�����������������€�����������€�����������������������������������������������������€�����������������������€�����������������€�����€�����€�����€�����€�����€�7-€�H¿�����Xà¦��ä���Geneva���������������������������� ��������������»—ë»—ë������,�Ï‹LANDÿÿÿÿÿÿ������mac ������������on jsRender () Information 3/3/03; 5:58:47 PM by MB Derived from activeRendererSuite.render on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" on buildImgCache ( s ) // Adds HTML for image inclusion cache s = s + "\r<!-- Image inclusion cache -->\r" s = s + "\t<img id=\"hiddenImg\" style=\"position:absolute; top:0px; left:0px; visibility:hidden\" src=\"\" alt=\"noseeum\">\r" s = s + "<script type=\"text/javascript\"><!--\r" s = s + "\t\tvar cachedImg = document.getElementById('hiddenImg');\r" s = s + "\t\t//--></script>\r" s = s + "<!-- End of cache -->\r" return s local s = string ( activeRendererData.guichuncks.objects.jsRenderer ) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction getargs argTable wedge = "../../images/help.gif" defKeepSynched = "" defUseYahoo = "" adrBlog = radio.weblog.init () demoUrl = "http://www.scripting.com/rss.xml" url urlList outlineString = "" itemCnt = 0 expandedCnt = 0 titleWordCnt = 8 flIncludeChannelTitle = false flCollapseChannelTitle = false flCreateHeader = false cssClassName = "active" cssClassLevel = 0 linkAttribute = "url" flDisplayHTMLWedge = false targetFrame = "" flDisplayDirectives = false uniqId = "" opmlCall = "transclude" flDoClick = false flRoll = false activeRendererSuite.utils.buildPathArgs ( @getargs ) // Parses get args to getargs table if defined ( getargs.action ) // a GET request has been issued, process it if defined ( getargs.src ) url = getargs.src urlList = string.urlSplit ( url ) if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file if ( system.environment.isMac ) regex.subst ( "file:///volumes", "file://", @url ) // clean up url on MacOS systems outlineString = file.readWholeFile ( file.urlToFile ( url ) ) // retrieve from filesystem else if string.lower ( urlList[1] ) beginsWith "http:" // if it's a bona fide http url if string.countFields ( urlList[2], ":" ) == 2 // if a port is specified server = string.nthField ( urlList[2], ":", 1 ) port = string.nthField ( urlList[2], ":", 2 ) else server = urlList[2] port = "80" outlineString = tcp.examples.httpGet ( server, urlList[3], port ) // retrieve via http else s = "exotic url schemes are not rendered for now. Check: " + url if outlineString // if an actual string was retrieved local isXml = string.patternMatch ( "<?xml", outlineString ) isOpml = string.patternMatch ( "<opml", outlineString ) isRss = string.patternMatch ( "<rss", outlineString ) if isXml // is the retrieved content XML ? if defined ( getargs.uniqId ) uniqId = number ( string.trimWhiteSpace ( getargs.uniqId ) ) if defined ( getargs.cssClassName ) cssClassName = string.trimWhiteSpace ( getargs.cssClassName ) if defined ( getargs.cssClassLevel ) cssClassLevel = number ( string.trimWhiteSpace ( getargs.cssClassLevel ) ) if isOpml // well, is it OPML ? if defined ( getargs.linkAttribute ) linkAttribute = string.trimWhiteSpace ( getargs.linkAttribute ) if defined ( getargs.opmlCall ) opmlCall = string.trimWhiteSpace ( getargs.opmlCall ) if defined ( getargs.targetFrame ) targetFrame = number ( string.trimWhiteSpace ( getargs.targetFrame ) ) flDisplayHTMLWedge = defined ( getargs.flDisplayHTMLWedge ) flDisplayDirectives = defined ( getargs.flDisplayDirectives ) flDoClick = defined ( getargs.flDoClick ) flRoll = defined ( getargs.flRoll ) s = activeRendererSuite.jsRenderOpml ( opml:outlineString, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, link:linkAttribute, opmlCall:opmlCall, targetFrame:targetFrame, flDisplayHTMLWedge:flDisplayHTMLWedge, flDoClick:flDoClick, flDisplayDirectives:flDisplayDirectives, flRoll:flRoll ) else if isRss // or is it RSS ? if defined ( getargs.itemCnt ) itemCnt = number ( string.trimWhiteSpace ( getargs.itemCnt ) ) if defined ( getargs.expandedCnt ) expandedCnt = number ( string.trimWhiteSpace ( getargs.expandedCnt ) ) if defined ( getargs.titleWordCnt ) titleWordCnt = number ( string.trimWhiteSpace ( getargs.titleWordCnt ) ) flIncludeChannelTitle = defined ( getargs.flIncludeChannelTitle ) flCollapseChannelTitle = defined ( getargs.flCollapseChannelTitle ) flCreateHeader = defined ( getargs.flCreateHeader ) s = activeRendererSuite.jsRenderRss ( rss:outlineString, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, flIncludeChannelTitle:flIncludeChannelTitle, flCollapseChannelTitle:flCollapseChannelTitle, itemCnt:itemCnt, expandedCnt:expandedCnt, titleWordCnt:titleWordCnt, flCreateHeader:flCreateHeader ) else s = "The XML content at this address does not appear to be valid OPML or RSS. Check " + url else s = "The content at this address does not appear to be valid XML. Check " + url return s if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/render/" return s €�����„�����„�����€�����€�����������������������������€�����������������������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������������������€�����������������������������������������������������������������€�����€�����������������������€�����€�����������€�����������€�����������€�����€�����������€�����������€�����������€�����€�����€�����€�����€�����€�����€�����€�����������€�����������€�����������€�����€�����€�����€�����€�����������€�����������€�����€�����������€�����€�������€�0±�����Xà��±���Geneva���������������������������� ��������������»—ê»—ê������-c¬·LANDÿÿÿÿÿÿ������mac ������������on register () header comments 6/26/02; 8:19:20 PM by MB Save user.rootUpdates.servers.activeRenderer table after settig serial 6/25/02; 10:41:17 AM by MB on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" local s tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction tSerial = user.rootUpdates.servers.activeRenderer.serialNum tResult postargs argTable if activeRendererSuite.utils.serialOk() // tool is already registered, build string s = string (activeRendererData.guichuncks.objects.registered) else // tool is not already registered, build form s = string (activeRendererData.guichuncks.objects.unRegistered) activeRendererSuite.utils.buildPostArgs ( @postargs )// Parses posted args to postargs table if defined ( postargs.action ) // A post has been issued => process it msg ("Registering with updates server.") local rpcserver = "xmlrpc://" + user.rootUpdates.servers.activeRenderer.server + ":" + user.rootUpdates.servers.activeRenderer.port + "/RPC2" if [rpcserver].toolsupdate.checkSerial("activeRenderer", postargs.serial, true) // ask the registration server if the serial is valid. user.rootUpdates.servers.activeRenderer.serialNum = postargs.serial filemenu.saveMyRoot ( @user.rootUpdates.servers.activeRenderer ) tResult = "activeRenderer's serial number has been registered." msg ("Registration succeeded.") else // registration failed tResult = "Oops ! " + postargs.serial + " is not a valid serial number. Check it again." tSerial = postargs.serial msg ("Registration failed.") if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/"+nameOf ( adrObject^ ) s = string.replaceAll ( s, "##action##", tAction ) s = string.replaceAll ( s, "##serial##", tSerial ) s = string.replaceAll ( s, "##result##", tResult ) s = string.replaceAll ( s, "##regMsg##", activeRendererData.guichuncks.texts.regMsg ) s = string.replaceAll ( s, "##regPageUrl##", activeRendererData.prefs.regPageUrl ) return s // return page contents €�����„�����„�����€�����€�����€�����������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������€�����€�����€�����€�����€�����€�����€������� =€�&h����� s`��"4���Geneva���������������������������� ��������������»—ê»—ê������,X߀LANDÿÿÿÿÿÿ������mac ������������on editPrefs () header comments 7/16/02; 4:45:04 PM by MB Added handling of displayLatest preference. Corrected a bug when unchecking the outlineWeblog preference. Preferences are now saved after setting the outlineItems preference to false. 7/9/02; 4:26:18 PM by MB Added autoUpstream preference 6/29/02; 12:01:16 AM by MB Added autoUpdate preference 6/25/02; 12:42:50 PM by MB vs 1.0 beta 6 on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" on getVersion ( txt ) // Extracts version number from txt string local ( matchList = {} ) local ( pattern = "version[: ]+([0-9\.a-zA-Z]+)" ) regex.extract ( pattern, @txt, @matchList, {1} ) local ( version = "" ) if sizeOf ( matchList ) > 0 version = matchList[1] return version local s = string(activeRendererData.guichuncks.objects.editPrefs) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction postargs argTable defOutlineWeblog = "" defOutlineItems = "" defAutoUpdate = "" defAutoUpstream = "" defDisplayLatest = "" backupPath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar () + "activeRenderer" + file.getPathChar () + "backup" customPath = backupPath + file.getPathChar () + "custom" dayPath = user.radio.prefs.wwwfolder + "#dayTemplate.txt" dayBackupPath = backupPath + file.getPathChar() + "#dayTemplate.txt" dayCustomPath = customPath + file.getPathChar() + "#dayTemplate.txt" itemPath = user.radio.prefs.wwwfolder + "#itemTemplate.txt" itemBackupPath = backupPath + file.getPathChar() + "#itemTemplate.txt" itemCustomPath = customPath + file.getPathChar() + "#itemTemplate.txt" homePath = user.radio.prefs.wwwfolder + "#homeTemplate.txt" adrBlog = radio.weblog.init () activeRendererSuite.utils.buildPostArgs ( @postargs )// Parses posted args to postargs table if defined ( postargs.action ) // A post has been issued => process it adrBlog^.prefs.activeRenderer.outlineWeblog = defined ( postargs.flOutlineWeblog ) adrBlog^.prefs.activeRenderer.outlineItems = defined ( postargs.flOutlineItems ) adrBlog^.prefs.activeRenderer.displayLatest = defined ( postargs.flDisplayLatest ) adrBlog^.prefs.activeRenderer.autoUpdate = defined ( postargs.flAutoUpdate ) adrBlog^.prefs.activeRenderer.autoUpstream = defined ( postargs.flAutoUpstream ) fileMenu.saveMyRoot ( @adrBlog^.prefs ) if adrBlog^.prefs.activeRenderer.outlineWeblog // Outline style required, backup templates and instal customized ones activeRendererSuite.utils.checkHomeTemplate () // Update #homeTemplate.txt in www when necessary activeRendererSuite.utils.checkPrefs () // Update #Prefs.txt file when necessary if file.exists ( dayPath ) // If there is currently a day template file in www if string.patternMatch ( "dayTemplate", file.readWholeFile ( dayPath ) ) == 0 // if it is a non-outline template file.copy ( dayPath, dayBackupPath ) // backup original template if file.exists ( dayCustomPath ) // if a locally customized outline template exists file.copy ( dayCustomPath, dayPath ) // install locally customized outline template else target.set( @activeRendererData.texts.dayTemplate ) file.writeWholeFile ( dayPath, wp.getText() ) // install activeRenderer's outline template target.clear() if adrBlog^.prefs.activeRenderer.outlineItems // Items outlining required if file.exists ( itemPath ) // If there is currently an item template file in www if string.patternMatch ( "itemTemplate", file.readWholeFile ( itemPath ) ) == 0 // if it is a non-outline template file.copy ( itemPath, itemBackupPath ) // backup original template if file.exists ( itemCustomPath ) // if a locally customized outline template exists file.copy ( itemCustomPath, itemPath ) // install locally customized outline template else target.set( @activeRendererData.texts.itemTemplate ) file.writeWholeFile ( itemPath, wp.getText() ) // install activeRenderer's outline template target.clear() else if file.exists ( itemPath ) // If there is currently an item template file in www if string.patternMatch ( "itemTemplate", file.readWholeFile ( itemPath ) ) != 0 // if it is an outline type template target.set( @activeRendererData.texts.itemTemplate ) currentVersion = getVersion ( file.readWholeFile ( itemPath ) ) updateVersion = getVersion ( wp.getText() ) if date.versionLessThan ( updateVersion, currentVersion ) // if the local outline template is newer than the one in activeRenderer file.copy ( itemPath, itemCustomPath ) // backup locally customized version if file.exists ( itemBackupPath ) // if original template was backed up file.copy ( itemBackupPath, itemPath ) // restore original template target.clear() else // original style required, restore original templates if file.exists ( dayPath ) // if there is currently a day template file in www if string.patternMatch ( "dayTemplate", file.readWholeFile ( dayPath ) ) != 0 // if it is an outline type template target.set( @activeRendererData.texts.dayTemplate ) local ( currentVersion = getVersion ( file.readWholeFile ( dayPath ) ) ) local ( updateVersion = getVersion ( wp.getText() ) ) if date.versionLessThan ( updateVersion, currentVersion ) // if the local outline template is newer than the one in activeRenderer file.copy ( dayPath, dayCustomPath ) // backup locally customized version if file.exists ( dayBackupPath ) // if original template was backed up file.copy ( dayBackupPath, dayPath ) // restore original template target.clear() if file.exists ( itemPath ) // If there is currently an item template file in www if string.patternMatch ( "itemTemplate", file.readWholeFile ( itemPath ) ) != 0 // if it is an outline type template target.set( @activeRendererData.texts.itemTemplate ) currentVersion = getVersion ( file.readWholeFile ( itemPath ) ) updateVersion = getVersion ( wp.getText() ) if date.versionLessThan ( updateVersion, currentVersion ) // if the local outline template is newer than the one in activeRenderer file.copy ( itemPath, itemCustomPath ) // backup locally customized version if file.exists ( itemBackupPath ) // if original template was backed up file.copy ( itemBackupPath, itemPath ) // restore original template target.clear() adrBlog^.prefs.activeRenderer.outlineItems = false fileMenu.saveMyRoot ( @adrBlog^.prefs ) if file.exists ( homePath ) // If there is currently a home template file in www local ( homeTemplate = file.readWholeFile (homePath ) ) if string.patternMatch ( "<!-- <%daySwitch ()%><br> -->", homeTemplate ) == 0 file.writeWholeFile ( homePath, string.replace ( homeTemplate, "<%daySwitch ()%><br>", "<!-- <%daySwitch ()%><br> -->" ) ) fileMenu.saveMyRoot ( @adrBlog^.prefs ) if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/"+nameOf ( adrObject^ ) s = string.replaceAll ( s, "##action##", tAction ) if adrBlog^.prefs.activeRenderer.outlineWeblog // Set checkbox current value defOutlineWeblog = "checked=\"checked\"" s = string.replaceAll ( s, "##visibility##", "expanded" ) else s = string.replaceAll ( s, "##visibility##", "collapsed" ) s = string.replaceAll ( s, "##defOutlineWeblog##", defOutlineWeblog ) s = string.replaceAll ( s, "##outlineWeblog##", checked ( adrBlog^.prefs.activeRenderer.outlineWeblog ) ) if adrBlog^.prefs.activeRenderer.outlineItems defOutlineItems = "checked=\"checked\"" s = string.replaceAll ( s, "##defOutlineItems##", defOutlineItems ) s = string.replaceAll ( s, "##outlineItems##", checked ( adrBlog^.prefs.activeRenderer.outlineItems ) ) if adrBlog^.prefs.activeRenderer.displayLatest defDisplayLatest = "checked=\"checked\"" s = string.replaceAll ( s, "##defDisplayLatest##", defDisplayLatest ) s = string.replaceAll ( s, "##displayLatest##", checked ( adrBlog^.prefs.activeRenderer.displayLatest ) ) if adrBlog^.prefs.activeRenderer.autoUpdate defAutoUpdate = "checked=\"checked\"" s = string.replaceAll ( s, "##defAutoUpdate##", defAutoUpdate ) s = string.replaceAll ( s, "##autoUpdate##", checked ( adrBlog^.prefs.activeRenderer.autoUpdate ) ) if adrBlog^.prefs.activeRenderer.autoUpstream defAutoUpstream = "checked=\"checked\"" s = string.replaceAll ( s, "##defAutoUpstream##", defAutoUpstream ) s = string.replaceAll ( s, "##autoUpstream##", checked ( adrBlog^.prefs.activeRenderer.autoUpstream ) ) return s €�����„�����„�����€�����€�����€�����„�����������„�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������������������������������������������������€�����������������������������������������������������������€�����������������������������������������������������������������€�����€�����������������������������������������������������������€�����������������������������������������������������������������������€�����������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������& €��P����� s>�� ß���Geneva���������������������������� ��������������»—»—�����€�€€��Z��������*���¸���Geneva���������������������������� ��������������¹ˆ¹ˆ�����'ï�LANDÿÿÿÿÿÿ������mac ������������on openUrl (theUrl) try webbrowser.openurl (theUrl) else if !system.environment.isMac or !(tryError contains "Mac OS Error") scritpError(tryerror) webbrowser.bringtofront () €�����€�����€�����€�����€�����€�����€�������Z�� Ó��������� M� ��Geneva���������������������������� ��������������»¯ñ»¯ñ������.�°ÉLANDÿÿÿÿÿÿ������mac ������������on espressoCup ( checkFlag=false ) Information 12/18/02; 11:08:17 AM by MB Test for existence of flEnabled before testing its value 11/13/02; 3:30:32 PM by MB Returns an empty string if the instant outliner file does not exist 9/4/02; 1:15:21 PM by MB Corrected Jabber host parameter in IM 8/28/02; 10:55:23 PM by MB Simplified code Added support for notification by IM using JES's bundle from radio.outliner.macros.coffeeMug local adrdata = radio.outliner.init () f = radio.outliner.getMyOutlineFile () c = "http://radio.weblogs.com/0104487/images/my/espresso.gif" t = "espresso cup" adrfile url s = "" if file.exists ( f ) // if an instant outliner file actually exists radio.file.getfileattributes ( f, @adrfile ) url = "http://127.0.0.1:5335/system/pages/outlinerSubscribe?url=" + ( string.urlencode ( adrfile^.upstream.url ) + "&author=" + string.urlencode ( user.prefs.name ) + "&weblog=" + string.urlencode ( radio.weblog.getUrl () ) ) bundle //add IM notification params to the URL if defined ( adrdata^.prefs.messaging.flEnabled ) && adrdata^.prefs.messaging.flEnabled if adrdata^.prefs.messaging.flAimEnabled url = url + "&imProtocol=aim&imUsername=" + user.im.aim.username + "&imRegisterProcedure=radioOutliner.requestNotification" else if adrdata^.prefs.messaging.flJabberEnabled url = url + "&imProtocol=jabber&imUsername=" + user.im.jabber.username + "@" + user.im.jabber.host + "&imRegisterProcedure=radioOutliner.requestNotification" s = "<a href=\"" + ( url + "\" title=\"Click on the " + t + " to add " + user.prefs.name + "'s Instant Outline to your Radio buddy list.\"><img src=\"" + c + "\" border=\"0\" alt=\"Outline subscribe\"></a>" ) if ( checkFlag ) try if ( flDisplayCup == "glass" ) c = "http://radio.weblogs.com/0104487/images/my/glass.gif" t = "espresso glass" if ( flDisplayCup == "regular" ) c = "http://radio.weblogs.com/0104487/images/my/mug.gif" t = "coffee mug" if ( flDisplayCup == "spinning" ) c = "http://radio.weblogs.com/0104487/images/my/cm_spin.gif" t = "spinning mug" s = "<a href=\"" + ( url + "\" title=\"Click on the " + t + " to add " + user.prefs.name + "'s Instant Outline to your Radio buddy list.\"><img src=\"" + c + "\" border=\"0\" alt=\"Outline subscribe\"></a>" ); else s = "" return s €�����„�����„�����€�����„�����������€�����������€�����������������€�����������������������������������������������€�����€�����€�����€�����€�����������������������������������€�����€�����������������������������������������������������������������������������������€������� Ó€�Bù�����Ü� ���d����Geneva���������������������������� ��������������¹Šá×¹Žý@���4��'ï�LANDÿÿÿÿÿÿ������mac ������������webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/bookmarks/" ) webbrowser.bringtofront () €�����€�����­�€��ê€�CŸ�����Ðì�$�� ����Geneva���������������������������� ��������������»—ë»—ë������–�ÝíèLANDÿÿÿÿÿÿ������mac ������������on jsRenderOpml ( opml = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, link = "url", opmlCall = "transclude", targetFrame = "", flDisplayHTMLWedge = false, flDoClick = false, flDisplayDirectives = false, flRoll = false ) local ( s = activeRendererSuite.activeRenderer ( opml:opml, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, link:link, opmlCall:opmlCall, targetFrame:targetFrame, flDisplayHTMLWedge:flDisplayHTMLWedge, flDoClick:flDoClick, flDisplayDirectives:flDisplayDirectives, flRoll:flRoll ) ) s = string.replaceAll ( s, "'", "\\'" ) s = string.replaceAll ( s, "\r", "'\r+ '" ) s = "includeHtml ('" + s + "');" return s €�����€�����€�����€�����€�����€�������<€�@W�����Ðì000000060001001777AA000000000079000000001001710000001-7FFB6FBE1800000‚‚4800480691D200-1‚1701731701730Â6‚91D222FFFF0‚‚10‚‚3‚19DA000010000007C000000020A2340840‚‚6‚31F2229E903CC000312631F1330A2319DA40840‚‚31F691D222FA6038E000910691D590000200000A2900000000�A23,<?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method = "html" version = "4.0" encoding="ISO-8859-1" indent = "yes" /> <xsl:strip-space elements = "*" /> <!--Outliner stylesheet version: 1.3.1 last modified: 19-Jan-2003 Created by Marc Barrot, inspired by Joshua Allen and Sjoerd Visscher. copyright 2002 by Precision IT Management,Inc. You may use and distribute this code freely, just keep this header information intact. --> <xsl:variable name="childless">http://radio.weblogs.com/0104487/gems/activeRenderer/ol1.gif</xsl:variable> <xsl:variable name="collapsed">http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif</xsl:variable> <xsl:variable name="expanded">http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif</xsl:variable> <xsl:variable name="linked">http://radio.weblogs.com/0104487/gems/activeRenderer/ol4.gif</xsl:variable> <xsl:variable name="image">http://radio.weblogs.com/0104487/gems/activeRenderer/ol5.gif</xsl:variable> <xsl:variable name="html">http://radio.weblogs.com/0104487/gems/activeRenderer/ol6.gif</xsl:variable> <xsl:template match = "/opml" > <html> <head> <script type="text/javascript" src="http://radio.weblogs.com/0104487/gems/activeRenderer/outliner.txt"></script> <link rel="stylesheet" type="text/css" href="http://radio.weblogs.com/0104487/gems/activeRenderer/outliner.css" /> <title><xsl:value-of select="head/title" /> generated by activeRenderer for XSL vs 1.3.1 - HTML outline structure copyright 2002-03 Precision IT Management, Inc. 000200000FBD00000A23FB7, javascript:void(null) 00040000000B00000002019DC000050000000B00000002019DC0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚2A52D83‚2A52D8000A00000017000000026‚91D2226‚91D222000B00000005000000020Â000C0000000E000000010‚‚F80‚‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,acti4,à‹4,084,4824,4E04,@00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹Ì¾8ºQšÚ,äüDÈ€!ƒÖ+000000060001001777AA000000000078000000001001710000001-7EFB6FBE1800000‚‚48004806394200-1‚3FE4063FE4060Â6‚394222FFFF0‚‚10‚‚3‚7A7000010000003A0000000107A740840‚‚6‚3942227A7038E0003876394600002000007AD000000007A7, <%activeRendererHeader () %> <%title%>
<%storyBox () %>

<%title%>

home

<%activeRendererFunctions () %>

<%bodytext%> <%espressoCup ( true ) %>
<%radio.macros.editThisPageButton ()%>
<%radio.macros.staticSiteStatsImage ()%> 00040000000A0000000207A9000050000000A0000000207A90000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚2403BB3‚2403BB000A00000017000000026‚3942226‚394222000B00000005000000020Â000C0000001A000000017A7450‚1EC11D1330‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,Cý€4,4,Cþ€4,5{4,5{4,5{00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õ»½¹XÈ'§5²ˆ€ ¾€ B€5_ú000000060001001777AA000000000068000000001001710000001-7EFB6FBE1800000‚‚48004806276200-1‚0Â6‚276222FFFF0‚‚10‚‚3‚13E000010000003A00000001053B40840‚‚6‚27622253B038E0002696276600002000005410000000053B,/* RSLite - Simple non-concurrent remote scripting calls. send one string, receive one string created by Brent Ashley version: 1.01 last modified 9/10/02 - Marc Barrot Specify path attribute in cookie, for Mozilla's sake. You may use and distribute this code freely, just keep this header information intact. */ function RSLiteObject(){ this.interval = 500; this.attempts = 3; this.i = new Image(); this.call = function ( page, parm ){ parm = (parm != null)? parm : ''; var d = new Date(); document.cookie = 'RSLite=x; expires=Fri, 31 Dec 1999 23:59:59 GMT; path=/;'; this.i.src = page + '?u=' + d.getTime() + '&p=' + parm; setTimeout( "RSLite.receive(1);", this.interval ); } this.receive = function ( attempt ){ var response = null; var aCookie = document.cookie.split("; "); for (var i=0; i < aCookie.length; i++){ var aCrumb = aCookie[i].split("="); if (aCrumb[0] == 'RSLite') response = aCrumb[1]; } if ( response != null ){ this.callback( unescape(response.replace(/\+/g,' ')) ); } else { if (attempt < this.attempts){ setTimeout( "RSLite.receive( " + (attempt+1) +" );",this.interval); } else { this.failure(); } } } this.callback = function( response ){ alert(response); } this.failure = function(){ alert( "RSLite timed out"); } } var RSLite; 00040000000A00000002053D0000500000015000000040E4113E053D0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚30Â180‚Á‚Á‚10Â170‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚29B2E03‚29B2E0000A00000017000000026‚2762226‚276222000B00000005000000020Â000C000000150000000113EE4‚6A7110‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,D(€4,D(€4,4,D(€4,D)4, Use00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹¤~¹¤³;/$Ý ^ †G_ú000000060001001777AA000000000077000000001001710000001-7FFF6FBE1800000‚‚4800480621B200-1‚15F16515F1650Â6‚21B222FFFF0‚‚10‚‚3‚1F000010000003B0000000104C640840‚‚6‚21B2224C2038E00020E621B2500002000004CC000000004C6,
> <%nodeFormat ( <%itemNum%> )%>
<%nodeFormat ( <%itemNum%>, false )%>
<%enclosure%>
00040000000A0000000204C8000050000000A0000000204C80000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚1F32AB3‚1F32AB000A00000017000000026‚21B2226‚21B222000B00000005000000020Â000C00000015000000011F1E‚CA309E‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,4,Ùèë4,/RPC4,èû4,Óu›00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹¶I¹J € ÆOÿU½Ø \€ß_úê4 Geneva »€Bù]½BùÜ UòÎ%>¸žà‘B{§‡B(J$Š¢§tþ flÄ7Ð쀀a'Z3$]þ•–§¨÷ 8¿À šÑœ+¶ÂD#Ñ-„3>ºp^Æf …Xà‰ƒ d¿w9)V'^Ùõÿ óXG.vò3W%ß¶ü,navdx´Ù èDï cRô@Q(ÍÅÛ MÒ" U°€¨+O®çX;Ae<î„ô ð’¶VÛ$¼TP$º„ô8º‰GÖ   #templateP¢¾indexPŸT:B€Geneva ¹ëF—º†?¡|0QÆLANDÿÿÿÿÿÿmac {title} {bodytext} €€€€€€€€€€€:\T Geneva »¯ñ»¯ñÛ ëQLANDÿÿÿÿÿÿmac on setUpdateServer ( name ) Information 1/15/03; 10:35:48 AM by MB Modifies the actual update server on the fly 1/14/03; 11:24:30 PM by MB Modifies the updateServer user pref activeRendererSuite.utils.getPrefs ()^.updateServer = name case name "alpha" user.rootUpdates.servers.activeRenderer.server = activeRendererData.prefs.alphaServer.server user.rootUpdates.servers.activeRenderer.port = activeRendererData.prefs.alphaServer.port "stable" user.rootUpdates.servers.activeRenderer.server = activeRendererData.prefs.stableServer.server user.rootUpdates.servers.activeRenderer.port = activeRendererData.prefs.stableServer.port €„„€€€€€€€€€€\øT, Geneva »¯ñ»¯ñÜ€LANDÿÿÿÿÿÿmac on getPrefs () Information: 1/15/03; 12:31:36 AM by MB Ported from liveTopics, thanks Matt. 02/07/02; 23:16:36 by MM Okay Marc you got me, forgot to use radio.weblog.init() in here!!! 30/06/02; 00:31:29 by MM Moved preferences table to weblogData.prefs.liveTopics from liveTopicsData.prefs 27/06/02; 16:09:45 by MM Implemented to replace direct references to the liveTopicsData.prefs table in preparation for prefs moving to weblogData local data = radio.weblog.init() return @data^.prefs.activeRenderer dialog.alert( getPrefs() ) €„€€€€€€€€€ø •> ßGeneva »¯ñ»¯ñù¢(LANDÿÿÿÿÿÿmac on checkPrefs ( startTime = clock.ticks() ) Information 10/29/02; 5:35:20 PM by MB Provided multiple backups, so as not to overwrite the original backup 23.10.02; 0:07:30 Uhr by AR/MB Code review with Andre Radke Got rid of all wp object processing Simplified the file end of line cleanup sequence 7/31/02; 8:26:16 AM by MB Used a regex for trailing end of lines removal, to allow for inconsistent EOL encoding. 7/25/02; 5:15:14 PM by MB Remove all trailing end of line markers in #prefs.txt before inserting a single one. 7/12/02; 10:47:51 AM by MB Added local definition of startTime, thanks Jerry. 7/9/02; 6:20:00 PM by MB Update #Prefs.txt file when necessary local basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" prefPath = user.radio.prefs.wwwfolder + "#prefs.txt" prefs = file.readWholeFile ( prefPath ) flOverwriteTemplateFile = false // No file overwrite by default bundle // Fix any broken #Prefs.txt file regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "nodeClass", prefs ) == 0 // Insert nodeClass directive if missing prefs = prefs + cr + "#nodeClass \"expanded\"" // Add a new line marker and the nodeClass directive flOverwriteTemplateFile = true // Request file overwrite if string.patternMatch ( "wedgeImg", prefs ) == 0 // Insert wedgeImg directive if missing prefs = prefs + cr + "#wedgeImg \"" + radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif\"" flOverwriteTemplateFile = true if string.patternMatch ( "wedgeTitle", prefs ) == 0 // Insert wedgeTitle directive if missing prefs = prefs + cr + "#wedgeTitle \"collapse\"" flOverwriteTemplateFile = true if string.patternMatch ( "titleWeight", prefs ) == 0 // Insert titleWeight directive if missing prefs = prefs + cr + "#titleWeight \"bold\"" flOverwriteTemplateFile = true if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems prefs = string.replaceAll ( prefs, "\r", "\r\n" ) if flOverwriteTemplateFile // If file overwrite was requested local archivePath = backupPath + file.getPathChar() + "#Prefs.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( prefPath, archivePath ) // Backup current prefs file radio.log.add ( "activeRenderer", prefPath + " backed up to " + archivePath + ".", startTime ) file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy bundle // test code checkPrefs() €„„€€€€€€„„„€€€€€€€€€ •€žà‘ºJT»—ê displayServerName †1FFF6FBE1800000‚‚4800480613200-€i€)–y eGeneva ¹$Bº‰bãb'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/preferences" ) webbrowser.bringtofront () €€é€4–yZbGeneva »—ê»—êeü¹/LANDÿÿÿÿÿÿmac on update () Information 9/23/02; 2:31:49 PM by MB Launches a tool update session in another thread, returns home page. local pta = html.getPageTableAddress () if activeRendererSuite.utils.serialOk () // if tool is registered if !defined ( system.temp.activeRenderer ) // if a temporary table is needed new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.update = activeRendererSuite.update thread.callScript ("system.temp.activeRenderer.update", {} ) webbrowser.bringtofront () pta^.code = 302 pta^.responseHeaders.Location = "http://127.0.0.1:5335/" return "" €„€€€€€€€€€€€€€€žÆ5Arial ºIÿ"ºJJE)'ïLANDÿÿÿÿÿÿmac activeRendererSuite.utils.setUpdateServer ("stable") €1 <ZÆ«–Geneva »¯ñ»¯ñU—×¹LANDÿÿÿÿÿÿmac on storyBox ( class = "storybox", type = "opml 1.0", updated = "last updated" ) Information 2/7/03; 2:22:01 PM by MB Added optional class, type and updated parameters Cleaned up HTML output local version = "1.1" s = "\r\r" d = clock.now () if ! defined ( opmlStory ) opmlStory = "" s = s + ( "
\r" ); if type != "" s = s + ( "\t" ); s = s + ( "\"XML " + type + "\r" ); if updated != "" s = s + "\t"; if type != "" s = s + "
"; s = s + ( updated + ": " + d + "\r" ); s = s + "
\r"; return ( s ) bundle // Test code wp.newTextObject ( storyBox (), @Temp.htmlTest ) edit (@Temp.htmlTest ) €„€€€€€€€€€€€«€#Ñ-„Ô ¤Geneva »—ë»—ë(wLANDÿÿÿÿÿÿmac on folderToOpml (folder, adrcallback=nil, ownername=user.prefs.name, owneremail=user.prefs.mailAddress, adrCloud=nil) Information 3/3/03; 11:28:49 AM by MB Ported to activeRenderer from webOutliner, modified url attribute creation, modified text creation. 11/22/02; 11:54:12 PM by MB Simplified code to handle local opml file names only. linked urls are GET requests to webOutliner/renderOutline with a url parameter 11/19/02; 5:25:24 PM by DB derived from radio.file.folderToOpml created by JES local xmltext = "" indentlevel = 0 localHost = "127.0.0.1" localPort = "5335" on add ( s ) xmltext = xmltext + string.filledstring ( "\t", indentlevel ) + s + "\r\n" add ( "" ) add ( "\r\n" ) if adrCloud == nil add ( "" ); indentlevel++ else add ( "" ); indentlevel++ bundle // add head local ( adrfile ) radio.file.getFileAttributes ( folder, @adrfile ) add ( "" ); indentlevel++ add ( "" + ownername + "" ) add ( "" + owneremail + "" ) add ( "" + adrfile^.created + "" ) add ( "" + adrfile^.modified + "" ) add ( "" ) if adrCloud != nil with adrCloud^ add ( "" ) add ( "" ); indentlevel-- bundle // add body add ( "" ); indentlevel++ local ( lowerdirectoryfname = string.lower (radio.data.upstream.directoryFileName ) ) on dofolder ( folder, fltoplevel = false ) // return true if at least one file was inserted local ( f, fname, atts, flfolder, adrfile, flinserted ) fileloop ( f in folder ) if not file.isVisible ( f ) // skip invisible files continue if file.fileFromPath ( f ) beginsWith "." // skip files that begin with "." continue fname = file.filefrompath ( f ) if fltoplevel // don't include the directory in the directory if string.lower (fname) == lowerdirectoryfname continue local ( adrfile ) radio.file.getFileAttributes ( f, @adrfile ) if adrcallback != nil // 7/21/01 JES: adrcallback, not adrcallback^ -- this was causing a crash try if not adrcallback^ ( f ) continue if adrfile^.flFolder fname = string.mid (fname, 1, sizeof (fname) - 1) if adrfile^.ctfiles > 0 add ( "" ); indentlevel++ dofolder ( f ) add ( "" ); indentlevel-- else add ( "" ) else if fname endsWith ".opml" local url = string.urlEncode ( file.fileToURL ( f ) ) urlattribute = "url=\"" + url + "\"" txt = string.mid ( fname, 1, string.length ( fname ) -5 ) add ( "" ) dofolder ( folder, true ) add ( "" ); indentlevel-- add ( "" ); indentlevel-- return ( xmltext ) bundle // test code op.xmlToOutline ( folderToOpml ( radio.file.getSubFolder ( "outlines" ) ), @temp.webOutliner.directory ) op.fullCollapse () edit ( @temp.webOutliner.directory ) €„„€„€€€€€€€€€€€€€€€€€€ð€ÕpΞûGeneva »—ê»—ê}^“þLANDÿÿÿÿÿÿmac on checkHomeTemplate ( startTime = clock.ticks() ) Information 10/29/02; 5:20:33 PM by MB Provide multiple backups, so as not to overwrite the original backup 22.10.02; 22:50:04 Uhr by AR/MB Code review with Andre Radke Inserted call to activeRendererHeader macro instead of separate includes for js and css Got rid of wp object processing Cleaned up the file writing code 7/16/02; 2:31:11 PM by MB Added support for the new displayLatest user preference. 7/10/02; 4:19:10 PM by MB Added local definition of newLine and startTime, thanks Brian. 7/9/02; 6:13:47 PM by MB Updates #homeTemplate.txt in www if necessary on insertInTemplate ( what, where ) local ( idx = string.patternMatch ( where, homeTemplate ) ) wp.newtextobject ( string.mid ( homeTemplate, 1, idx - 1 ), @scratchpad.homeTemplate ) target.set( @scratchpad.homeTemplate ) wp.insert ( what ) wp.insert ( string.mid ( homeTemplate, idx, string.length ( homeTemplate ) +1 - idx ) ) file.writeWholeFile ( homePath, wp.getText() ) target.clear() return file.readWholeFile (homePath ) on insertInTemplate ( what, where, adrTemplate ) // Insert what after where in adrTemplate if where is found local ( idx = string.patternMatch ( where, adrTemplate^ ) ) if idx > 0 adrTemplate^ = string.insert ( what, adrTemplate^, idx ) flOverwriteTemplateFile = true // Set file overwrite flag return true local basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" homePath = user.radio.prefs.wwwfolder + "#homeTemplate.txt" homeTemplate = file.readWholeFile (homePath ) packageRoot = radio.weblog.getUrl () + "gems/activeRenderer/" adrBlog = radio.weblog.init () flOverwriteTemplateFile = false // Do not overwrite home template by default regex.subst ( "^[^\r\n]*outliner\\.(css|txt)[^\r\n]*$", "", @homeTemplate ) // Get rid of previous lines with 'outliner.css' or 'outliner.txt' lines regex.subst ( "[\r\n]+", "\r", @homeTemplate ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems prefs = string.replaceAll ( homeTemplate, "\r", "\r\n" ) if string.patternMatch ( "activeRendererHeader", homeTemplate ) == 0 // Insert activeRendererHeader macro call if missing local ( macroCall = "<% activeRendererHeader() %>" + cr ) insertInTemplate ( macroCall, "", @homeTemplate ) if string.patternMatch ( "daySwitch", homeTemplate ) == 0 // Insert daySwitch macro call if missing local ( daySwitchCall = "<!-- <%daySwitch ()%><br> -->" ) insertInTemplate ( daySwitchCall, "<%radio.weblog.drawcalendar", @homeTemplate ) if adrBlog^.prefs.activeRenderer.displayLatest // If displayLatest preference is checked if string.patternMatch ( "<!-- <%daySwitch ()%><br> -->", homeTemplate ) != 0 // Uncomment daySwitch macro call homeTemplate = string.replace ( homeTemplate, "<!-- <%daySwitch ()%><br> -->", "<%daySwitch ()%><br>" ) flOverwriteTemplateFile = true else // displayLatest is not checked if string.patternMatch ( "<!-- <%daySwitch ()%><br> -->", homeTemplate ) == 0 and string.patternMatch ( "<%daySwitch ()%><br>", homeTemplate ) != 0 // If daySwitch call present and not commented out homeTemplate = string.replace ( homeTemplate, "<%daySwitch ()%><br>", "<!-- <%daySwitch ()%><br> -->" ) flOverwriteTemplateFile = true if flOverwriteTemplateFile // If file overwrite is requested local archivePath = backupPath + file.getPathChar() + "#homeTemplate.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( homePath, archivePath ) // Backup current home template to aR's backup folder radio.log.add ( "activeRenderer", homePath + " backed up to " + archivePath + ".", startTime ) file.writeWholeFile ( homePath, homeTemplate ) // Replace with updated template bundle // test code checkHomeTemplate() €�����„�����€�����€�����€�����€�����€�����€�����€�����„�����������„�����������„�����������„�����������������������������������������������������€�����������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������€�����������������€�����������������€�����������������������€�����������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������€�¸�����pÎ���$���ºJBZºJêJ�������� ������� ����port���80server���updates.xml-rpc.it���T€�+±�����pÎ���$���ºJBZºJB®�������� ������� ����port���5336server��� 64.81.223.180���Q€�+T�����pÎ���$���·Í€¸€‚=�������� ������� ����objects����p�ç<texts����p�åÎ��VGeneva���������������������������� ����������§�‰�2@8ÖÈ�������������������������¨€�* �����qq���$���¸€|»—�������� �������s ����znotRegisteredAlert���\You €�#Ñ��B��������Š��@����Geneva���������������������������� ��������������»¯ñ»¯ñ������êÒ¯QLANDÿÿÿÿÿÿ������mac ������������Information 1/21/03; 6:13:07 PM by MB Check on activeRenderer.root's presence in Tools every 30 minutes Call uninstal if it has been moved 22.10.02; 20:27:02 Uhr by AR/MB Code review with Andre Radke Start activeRenderer's installation This script runs in its own thread. if ! defined ( system.temp.activeRenderer ) // only if the temp table is empty new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.instal = activeRendererSuite.instal thread.callScript ( @system.temp.activeRenderer.instal, {} ) // run the installation process in a different thread bundle // while the application is running local path = Frontier.getProgramPath () // retrieve the Radio application pathname dirPath = radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" regex.subst ( "[^:\\\\]+$", "", @path ) // get the application folder pathname path = path + "Tools" + file.getPathChar() // get the Tools folder pathname loop // keep testing until break signal if defined ( temp.Frontier.tools.activeRenderer.url ) && ! file.exists ( path + "activeRenderer.root" ) // if aR is still active and activeRenderer.root has been moved out of Tools Frontier.tools.uninstall ( path + "activeRenderer.root" ) // launch the uninstal code break // exit this loop and thread thread.sleepFor ( 1800 ) // sleep for a while „�����€�����€�����€�����€�����������������„�����€�����������������������€�������������������������������������������������������������������B��& �������`��"4���Geneva���������������������������� ��������������»¯ñ»¯ñ������,X߀LANDÿÿÿÿÿÿ������mac ������������on editPrefs () header comments 7/16/02; 4:45:04 PM by MB Added handling of displayLatest preference. Corrected a bug when unchecking the outlineWeblog preference. Preferences are now saved after setting the outlineItems preference to false. 7/9/02; 4:26:18 PM by MB Added autoUpstream preference 6/29/02; 12:01:16 AM by MB Added autoUpdate preference 6/25/02; 12:42:50 PM by MB vs 1.0 beta 6 on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" on getVersion ( txt ) // Extracts version number from txt string local ( matchList = {} ) local ( pattern = "version[: ]+([0-9\.a-zA-Z]+)" ) regex.extract ( pattern, @txt, @matchList, {1} ) local ( version = "" ) if sizeOf ( matchList ) > 0 version = matchList[1] return version local s = string(activeRendererData.guichuncks.objects.editPrefs) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction postargs argTable defOutlineWeblog = "" defOutlineItems = "" defAutoUpdate = "" defAutoUpstream = "" defDisplayLatest = "" backupPath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar () + "activeRenderer" + file.getPathChar () + "backup" customPath = backupPath + file.getPathChar () + "custom" dayPath = user.radio.prefs.wwwfolder + "#dayTemplate.txt" dayBackupPath = backupPath + file.getPathChar() + "#dayTemplate.txt" dayCustomPath = customPath + file.getPathChar() + "#dayTemplate.txt" itemPath = user.radio.prefs.wwwfolder + "#itemTemplate.txt" itemBackupPath = backupPath + file.getPathChar() + "#itemTemplate.txt" itemCustomPath = customPath + file.getPathChar() + "#itemTemplate.txt" homePath = user.radio.prefs.wwwfolder + "#homeTemplate.txt" adrBlog = radio.weblog.init () activeRendererSuite.utils.buildPostArgs ( @postargs )// Parses posted args to postargs table if defined ( postargs.action ) // A post has been issued => process it adrBlog^.prefs.activeRenderer.outlineWeblog = defined ( postargs.flOutlineWeblog ) adrBlog^.prefs.activeRenderer.outlineItems = defined ( postargs.flOutlineItems ) adrBlog^.prefs.activeRenderer.displayLatest = defined ( postargs.flDisplayLatest ) adrBlog^.prefs.activeRenderer.autoUpdate = defined ( postargs.flAutoUpdate ) adrBlog^.prefs.activeRenderer.autoUpstream = defined ( postargs.flAutoUpstream ) fileMenu.saveMyRoot ( @adrBlog^.prefs ) if adrBlog^.prefs.activeRenderer.outlineWeblog // Outline style required, backup templates and instal customized ones activeRendererSuite.utils.checkHomeTemplate () // Update #homeTemplate.txt in www when necessary activeRendererSuite.utils.checkPrefs () // Update #Prefs.txt file when necessary if file.exists ( dayPath ) // If there is currently a day template file in www if string.patternMatch ( "dayTemplate", file.readWholeFile ( dayPath ) ) == 0 // if it is a non-outline template file.copy ( dayPath, dayBackupPath ) // backup original template if file.exists ( dayCustomPath ) // if a locally customized outline template exists file.copy ( dayCustomPath, dayPath ) // install locally customized outline template else target.set( @activeRendererData.texts.dayTemplate ) file.writeWholeFile ( dayPath, wp.getText() ) // install activeRenderer's outline template target.clear() if adrBlog^.prefs.activeRenderer.outlineItems // Items outlining required if file.exists ( itemPath ) // If there is currently an item template file in www if string.patternMatch ( "itemTemplate", file.readWholeFile ( itemPath ) ) == 0 // if it is a non-outline template file.copy ( itemPath, itemBackupPath ) // backup original template if file.exists ( itemCustomPath ) // if a locally customized outline template exists file.copy ( itemCustomPath, itemPath ) // install locally customized outline template else target.set( @activeRendererData.texts.itemTemplate ) file.writeWholeFile ( itemPath, wp.getText() ) // install activeRenderer's outline template target.clear() else if file.exists ( itemPath ) // If there is currently an item template file in www if string.patternMatch ( "itemTemplate", file.readWholeFile ( itemPath ) ) != 0 // if it is an outline type template target.set( @activeRendererData.texts.itemTemplate ) currentVersion = getVersion ( file.readWholeFile ( itemPath ) ) updateVersion = getVersion ( wp.getText() ) if date.versionLessThan ( updateVersion, currentVersion ) // if the local outline template is newer than the one in activeRenderer file.copy ( itemPath, itemCustomPath ) // backup locally customized version if file.exists ( itemBackupPath ) // if original template was backed up file.copy ( itemBackupPath, itemPath ) // restore original template target.clear() else // original style required, restore original templates if file.exists ( dayPath ) // if there is currently a day template file in www if string.patternMatch ( "dayTemplate", file.readWholeFile ( dayPath ) ) != 0 // if it is an outline type template target.set( @activeRendererData.texts.dayTemplate ) local ( currentVersion = getVersion ( file.readWholeFile ( dayPath ) ) ) local ( updateVersion = getVersion ( wp.getText() ) ) if date.versionLessThan ( updateVersion, currentVersion ) // if the local outline template is newer than the one in activeRenderer file.copy ( dayPath, dayCustomPath ) // backup locally customized version if file.exists ( dayBackupPath ) // if original template was backed up file.copy ( dayBackupPath, dayPath ) // restore original template target.clear() if file.exists ( itemPath ) // If there is currently an item template file in www if string.patternMatch ( "itemTemplate", file.readWholeFile ( itemPath ) ) != 0 // if it is an outline type template target.set( @activeRendererData.texts.itemTemplate ) currentVersion = getVersion ( file.readWholeFile ( itemPath ) ) updateVersion = getVersion ( wp.getText() ) if date.versionLessThan ( updateVersion, currentVersion ) // if the local outline template is newer than the one in activeRenderer file.copy ( itemPath, itemCustomPath ) // backup locally customized version if file.exists ( itemBackupPath ) // if original template was backed up file.copy ( itemBackupPath, itemPath ) // restore original template target.clear() adrBlog^.prefs.activeRenderer.outlineItems = false fileMenu.saveMyRoot ( @adrBlog^.prefs ) if file.exists ( homePath ) // If there is currently a home template file in www local ( homeTemplate = file.readWholeFile (homePath ) ) if string.patternMatch ( "<!-- <%daySwitch ()%><br> -->", homeTemplate ) == 0 file.writeWholeFile ( homePath, string.replace ( homeTemplate, "<%daySwitch ()%><br>", "<!-- <%daySwitch ()%><br> -->" ) ) fileMenu.saveMyRoot ( @adrBlog^.prefs ) if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/"+nameOf ( adrObject^ ) s = string.replaceAll ( s, "##action##", tAction ) if adrBlog^.prefs.activeRenderer.outlineWeblog // Set checkbox current value defOutlineWeblog = "checked=\"checked\"" s = string.replaceAll ( s, "##visibility##", "expanded" ) else s = string.replaceAll ( s, "##visibility##", "collapsed" ) s = string.replaceAll ( s, "##defOutlineWeblog##", defOutlineWeblog ) s = string.replaceAll ( s, "##outlineWeblog##", checked ( adrBlog^.prefs.activeRenderer.outlineWeblog ) ) if adrBlog^.prefs.activeRenderer.outlineItems defOutlineItems = "checked=\"checked\"" s = string.replaceAll ( s, "##defOutlineItems##", defOutlineItems ) s = string.replaceAll ( s, "##outlineItems##", checked ( adrBlog^.prefs.activeRenderer.outlineItems ) ) if adrBlog^.prefs.activeRenderer.displayLatest defDisplayLatest = "checked=\"checked\"" s = string.replaceAll ( s, "##defDisplayLatest##", defDisplayLatest ) s = string.replaceAll ( s, "##displayLatest##", checked ( adrBlog^.prefs.activeRenderer.displayLatest ) ) if adrBlog^.prefs.activeRenderer.autoUpdate defAutoUpdate = "checked=\"checked\"" s = string.replaceAll ( s, "##defAutoUpdate##", defAutoUpdate ) s = string.replaceAll ( s, "##autoUpdate##", checked ( adrBlog^.prefs.activeRenderer.autoUpdate ) ) if adrBlog^.prefs.activeRenderer.autoUpstream defAutoUpstream = "checked=\"checked\"" s = string.replaceAll ( s, "##defAutoUpstream##", defAutoUpstream ) s = string.replaceAll ( s, "##autoUpstream##", checked ( adrBlog^.prefs.activeRenderer.autoUpstream ) ) return s €�����„�����„�����€�����€�����€�����„�����������„�����€�����„�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����������������������������������������������������€�����������������������������������������������������������€�����������������������������������������������������������������€�����€�����������������������������������������������������������€�����������������������������������������������������������������������€�����������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������& €�B�����(��Š��@����Geneva���������������������������� ��������������»—ë»—ë������êÒ¯QLANDÿÿÿÿÿÿ������mac ������������Information 1/21/03; 6:13:07 PM by MB Check on activeRenderer.root's presence in Tools every 30 minutes Call uninstal if it has been moved 22.10.02; 20:27:02 Uhr by AR/MB Code review with Andre Radke Start activeRenderer's installation This script runs in its own thread. if ! defined ( system.temp.activeRenderer ) // only if the temp table is empty new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.instal = activeRendererSuite.instal thread.callScript ( @system.temp.activeRenderer.instal, {} ) // run the installation process in a different thread bundle // while the application is running local path = Frontier.getProgramPath () // retrieve the Radio application pathname dirPath = radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" regex.subst ( "[^:\\\\]+$", "", @path ) // get the application folder pathname path = path + "Tools" + file.getPathChar() // get the Tools folder pathname loop // keep testing until break signal if defined ( temp.Frontier.tools.activeRenderer.url ) && ! file.exists ( path + "activeRenderer.root" ) // if aR is still active and activeRenderer.root has been moved out of Tools Frontier.tools.uninstall ( path + "activeRenderer.root" ) // launch the uninstal code break // exit this loop and thread thread.sleepFor ( 1800 ) // sleep for a while „�����€�����€�����€�����€�����������������„�����€�����������������������€�����������������������������������������������������������������€�B���B������<������ºJT»¯ñ�������� ����displayServerName����À� ,�����B���”����������8���¹$@ý»¯ñ�������� ���� ��� �������+ ����5���A ����H editPrefs����P�ìoregister����P�Ê‚ regWindow����P�y update����P�uÌ���”��������5���Ä���µü7»¯ñ�������� ���� ��� �������* ����4���@ ����H���T ����[���g ����q���} ����„��� ����š���¦ ����«���· ����½���É ����Ò���Þ ����ê���ö ����ü�� ����� ���$��0 ���;��G ���N��Z ���a#filters�������s#ftpSite�������€R #glossary������#Ê#images�������;ƒ#prefs�������ß #template�������¶;#tools�������„z bookmarks������ +9help������DÇindex������Cjsrender������ *¯ preferences������øprefs�������ÀÍregister������(¡render������¢^ saveSerial�������¯Ôthanks�������ý¦update������Åú��VVerdana��������������������������� ����������º�“�??8“ò������������������������€�Ù�����õÿ000000060001001777AA00000000006E000000001001710000001-7EFF6FBE1800000‚‚480048062D200-1‚8118110Â6‚2D222FFFF0‚‚10‚‚3‚900001000000350000000104640840‚‚6‚2D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000900000002048000050000000F0000000301460480000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚00070000002F000€�Ù��þ����FFFF000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000‚‚480048062D200-1‚0Â6‚2D222FFFF0‚‚10‚‚3‚4600001000000350000000104640840‚‚6‚2D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000A00000002014810005000000090000000204800006000000630000000210C310‚‚ÁFFFF0‚C00000 20ÂÁ ‚‚Á‚ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â160‚Á‚0008000000A500000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������1040304E40Â10Â10000900000017000000023‚11327B3‚11327B000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C0000001400000001461AC‚65620‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,appn�4,send�4,8óð�4,&����4,8ô€�4,3©�4,8ôð00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�±§Pĺ‰œº������������������������������������������F�����������•I»×������z������������������������������������������������������þ��§����FFFF000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000330000000103140840‚‚6‚13222038E0006‚1310F000020000003600000000�31,{activeRendererSuite.bookmarks.updateBookmarks()}000400000009000000020330000500000009000000020330000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000016000000011E15‚10720A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,D@��4,�¬[�4,Hþ»�4,ÆÇ �4,�����4,…00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹’mê¹£õ¢������������������������������������������1����������‰Ä8T������#������������������������������������������������������§€�J$�����Š¢000000060001001777AA000000000062000000001001710000001-7FFB6FBE1800000‚‚48004806200-1‚0Â6‚20222FFFF0‚‚10‚‚3‚F00001000000350000000103340840‚‚6‚202228038E00013620B6000020000003800000000�33,#title "update" {activeRendererSuite.gui.update ()}00040000000900000002035000050000000E000000030101350000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚202226‚20222000B00000005000000020Â000C0000001300000001FE‚A5C04A‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,ÿÿ�4,ÿÿ�4,D@��4,D@��4,�����4,D@�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹´¿ ¹´À�������������������������������������������3����������3xâ������<������������������������������������������������������À€� í�����Š¢000000060001001777AA000000000068000000001001710000001-7FFB6FBE1800000‚‚48004806131200-1‚0Â6‚131222FFFF0‚‚10‚‚3‚548000010000003B00000001054840840‚‚6‚131222542038E000124613125000020000054E00000000�548,#title "Thanks" <div style="text-align: center; margin-bottom: -30px; font-family: sans-serif;"> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/" title="Weblog local home page">Home</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/" title="activeRenderer's settings">Preferences</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/bookmarks/" title="Bookmarks synchronization">Bookmarks</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/register/" title="activeRenderer's registration">Register</a></span> <span style="margin-right: 20px;"><a href="http://127.0.0.1:5335/activeRenderer/help/" title="activeRenderer's online help">Help</a></span> <span><a href="http://radio.weblogs.com/0104487/outlines/aR/arFaq.html">Faq</a></span> </div> <div style="border: #COCOCO solid 1px; padding: 30px; margin: 50px;"> <p style="font-family: sans-serif; margin-top: 0px;">activeRenderer: <b>registration</b></p> <p>Thank you for registering your copy of activeRenderer.</p> <p>You serial number is on its way to your mailbox.</p> <p> Once you've received the registration message, copy the serial number and paste it into <a href="http://127.0.0.1:5335/activeRenderer/register/">this form</a>. </p> </div>00040000000A00000002054A000050000000F00000003010154A0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚14E28C3‚14E28C000A00000017000000026‚1312226‚131222000B00000005000000020Â000C00000018000000015481F6‚757251F‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,“x���4,¡m �4,�ÛÐ{�4,t`k�4,/RPC�4,�sÛ00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹=%Þ¹¤È��� ��������������������������������������H����������3x”������ i����������������������������������������������������€�¹€�;_�����t000000060001001777AA00000000006E000000001001710000001-7EFF6FBE1800000‚‚480048062D200-1‚8118110Â6‚2D222FFFF0‚‚10‚‚3‚900001000000350000000104640840‚‚6‚2D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000900000002048000050000000F0000000301460480000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚00080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 10000900000017000000023‚10C2703‚10C270000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C000000130000000198‚A2E02D‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ�4,77A�4,ÿÿ�4,D@��4,ÿÿ�4,�����4,ÿÿ�4,DÀ�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��¦��¹����°��­��­��.��'��"��Ô��Õ��Ò��Ó��É��É��FFFF0FFFF0FFFE000000060001001777AA�¹ŠâXº… ������������������������������������������F���������� µ?8������^������������������������������������������������������â€�6q�����t�B��€����Geneva���������������������������� ��������������¹ëF—º†?¡������|�0QÆLANDÿÿÿÿÿÿ������mac ������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <script type="text/javascript" src="http://radio.weblogs.com/0104487/gems/activeRenderer/outliner.txt"></script> <link rel="stylesheet" type="text/css" href="http://radio.weblogs.com/0104487/gems/activeRenderer/outliner.css"> <title>{title} {bodytext} €€€€€€€€€€€:€4+t000000060001001777AA000000000073000000001001710000001-7FFE6FBE1800000‚‚48004806200-1‚18618A18618A0Â6‚20222FFFF0‚‚10‚‚3‚3700001000000360000000103740840‚‚6‚2022212038E00013620BF000020000003C0000000037,#title "Register" {activeRendererSuite.gui.register ()}00040000000900000002039000050000000A0000000201390000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 60ÂÁ ‚‚Á‚00070000002F000000020‚10Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚16E2303‚16E230000A00000015000000026‚202226‚20222000B00000005000000020Â000C000000160000000137162‚5861B9‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,tÙ4,subs4,sub4,›jë4,User4,ièub00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹:j»º‰ 7ÐEQˆS×€/Ht000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000‚‚480048062D200-1‚0Â6‚2D222FFFF0‚‚10‚‚3‚1500001000000350000000103C40840‚‚6‚2D2223C038E0002062D60000200000041000000003C,#title "Preferences" {activeRendererSuite.gui.editPrefs ()} 00040000000A00000002013E10005000000090000000203E00006000000630000000210C310‚‚ÁFFFF0‚C00000 20ÂÁ ‚‚Á‚ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â160‚Á‚0008000000A50000000140,Geneva40,1040304E40Â10Â10000900000017000000023‚11327B3‚11327B000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C000000110000000115‚‚1B610‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,appn4,send4,8óð4,&4,8ô€4,3©4,8ôð00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA±§Pĺ‰_-<•I»×mñ€*Kt000000060001001777AA00000000006D000000001001710000001-7EFB6FBE1800000‚‚48004806200-1‚8118110Â6‚20222FFFF0‚‚10‚‚3‚18000010000003300000001022840‚‚6‚2022222038E00013620600002000000270000000022,{activeRendererSuite.jsRender ()} 00040000000900000002024000050000000F0000000301220240000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚10C2703‚10C270000A00000015000000026‚202226‚20222000B00000005000000020Â000C00000015000000011815‚97007C‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,D@4,ÿÿ4,4,ÿÿ4,DÀ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹ŠâXº‰H'" µ?89½€%‚t000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000‚‚480048062D200-1‚0Â6‚2D222FFFF0‚‚10‚‚3‚4600001000000350000000104640840‚‚6‚2D22246038E0002062D6000020000004B0000000046,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000A00000002014810005000000090000000204800006000000630000000210C310‚‚ÁFFFF0‚C00000 20ÂÁ ‚‚Á‚ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â160‚Á‚0008000000A50000000140,Geneva40,1040304E40Â10Â10000900000017000000023‚11327B3‚11327B000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C0000001400000001461AC‚65620‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,appn4,send4,8óð4,&4,8ô€4,3©4,8ôð00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA±§Pĺ‰œºF•I»×zþ€ xt000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000330000000103140840‚‚6‚13222038E0006‚1310F00002000000360000000031,{activeRendererSuite.bookmarks.updateBookmarks()}000400000009000000020330000500000009000000020330000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000016000000011E15‚10720A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,D@4,¬[4,Hþ»4,ÆÇ 4,4,…00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹’mê¹£õ¢1‰Ä8T#§€Åt000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000320000000102A40840‚‚6‚13222038E0006‚13E2000020000002F000000002A,{activeRendererSuite.bookmarks.initPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000015000000011E15‚D720A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,D(€4,D(€4,4,D(€4,D)4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹’mê¹£õ—*z² €ž€]H000000060001001777AA000000000071000000001001710000001-7EFB6FBE1800000‚‚480048062D200-1‚264826480Â6‚2D222FFFF0‚‚10‚‚3‚4400001000000350000000104440840‚‚6‚2D22244038E0002062D600002000000490000000044,#title "Bookmarks" {activeRendererSuite.bookmarks.editBookmarks ()} 00040000000900000002046000050000000F0000000301440460000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚10C2703‚10C270000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C00000015000000014433E‚B57320‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,D@4,ÿÿ4,4,ÿÿ4,DÀ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹ŠâXº‰œ}D µ?8aå€*]HzÖGeneva »—ê»—êhd³LANDÿÿÿÿÿÿmac on parseCookies ( httpResult, server, path, adrCookiesTable ) Information 11/1/02; 7:32:17 PM by MM (Mikel Maron) Cookie processing is broken in tcp.httpClient: Cookie Data containing "=", like the Yahoo cookies, are not parsed correctly if ( httpResult != "" ) // parse cookies here, since it is broken in tcp.httpClient local ( ixEndHeader, responseHeader, i, j ) ixEndHeader = string.patternMatch ( "\r\n\r\n", httpResult ) //try to find the end of the response header if ixEndHeader > 0 //there is a valid header, look for cookies responseHeader = string.mid ( httpResult, 1, ixEndHeader - 1 ) //get the header if string.lower ( responseHeader ) contains "set-cookie:" //the response header contains at least one cookie if not defined ( adrCookiesTable^ ) new ( tableType, adrCookiesTable ) for i = 1 to string.countFields (responseHeader, "\r") //find all the cookies local ( onecookie = string.nthField ( responseHeader, "\r", i ) ) //get the cookie onecookie = string.popLeading ( onecookie, '\n' ) if string.lower ( onecookie ) beginsWith "set-cookie:" local ( flsecure = false ) //not secure by default local ( domain = server ) //default domain to this server local ( cookiePath = "/" ) local ( expires = clock.now () + ( 24 * 60 * 60 ) ) //default expires at "end of session" local ( cookieName, cookieValue ) if path != "/" cookiePath = string.popSuffix ( path, "/" ) onecookie = string.popLeading ( string.mid (onecookie, 12, infinity), ' ' ) for j = 1 to string.countFields ( onecookie, ';' ) local ( cookiepart = string.nthField ( onecookie, ';', j ) ) cookiepart = string.popLeading ( cookiepart, ' ' ) case string.lower ( string.nthField ( cookiepart, '=', 1 ) ) //take care of standard parts "domain" domain = string.nthField ( cookiepart, '=', 2 ) "path" cookiePath = string.nthField ( cookiepart, '=', 2 ) "expires" on cookieDateToSystemDate ( cookieDate ) try //some cookie dates can be converted to dates directly local ( systemDate = date ( cookieDate ) ) if systemDate < date ( "Monday, 6-Feb-2040" ) return ( systemDate ) try //it may be a date in the 21st century local ( lastpart = string.nthField ( cookieDate, "-", 3 ) ) local ( ixstart = string.patternMatch ( lastpart, cookieDate ) ) return ( date ( string.insert ( "20", cookieDate, ixstart ) ) ) return ( false ) expires = cookieDateToSystemDate ( string.nthField ( cookiepart, '=', 2 ) ) if expires == false //invalid cookie, ignore it break "secure" flsecure = true else // this is the actual cookie name/value cookieName = string.nthField ( cookiepart, '=', 1 ) cookieValue = string.nthField ( cookiepart, '=', 2 ) cookieValue = string.mid ( cookiepart, string.patternMatch ( "=", cookiepart ) + 1, infinity ); if clock.now () < expires //store non-expired cookies only if not defined ( adrCookiesTable^.[domain] ) //have we cookies already for this domain? new ( tableType, @adrCookiesTable^.[domain] ) if not defined ( adrCookiesTable^.[domain].[cookiePath] ) new ( tableType, @adrCookiesTable^.[domain].[cookiePath] ) if not defined ( adrCookiesTable^.[domain].[cookiePath].[cookieName] ) new ( tableType, @adrCookiesTable^.[domain].[cookiePath].[cookieName] ) adrCookiesTable^.[domain].[cookiePath].[cookieName].value = cookieValue adrCookiesTable^.[domain].[cookiePath].[cookieName].expires = expires adrCookiesTable^.[domain].[cookiePath].[cookieName].secure = flsecure €„€„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€„€€€€€€€€€€€È€V]H8¹$@ý»—  + 5A H editPrefsP—¬registerPc regWindowP`ÎupdatePËî 1/—€ ÷-M®Geneva »—»—'Å;LANDÿÿÿÿÿÿmac
activeRenderer vs 1.4 An outline rendering tool for Radio Created by ... Marc Barrot Copyright 2002 by Precision IT Management, Inc. Published under the MIT License. With the help of ... Joshua Allen Brent Ashley AJG Baeumel Doug Baron Gilles Beauchamp Simone Bettini Thomas Burg Marc Canter Danny Goodman Brian Lenihan Jack Foster Mancilla Mikel Maron Ian McKenzie Matt Mower Andre Radke Nicholas Riley Aaron Straup Cope Paolo Valdemarin Sjoerd Visscher Bryce Yehl €€€€€€€€€€€€€€€€€€€€€€€€€€€€þT"œGeneva ¸å˜À¸å¬'ïLANDÿÿÿÿÿÿmac on buildPostArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.requestBody, theTableAdr ) €€€€€PãgetPathPÁ2iT ŠGeneva ¹EEˆºS'OI'ïLANDÿÿÿÿÿÿmac if dialog.confirm ( "Deactivate activeRenderer tool ?" ) Frontier.tools.uninstall ( window.getFile ( parentOf ( activeRendererInfo ) ) ) €€^ÌGeneva »¯ñ»¯ñ£j°LANDÿÿÿÿÿÿmac on nodeFormat ( postNum, flTitle = true ) 7/1/02; 11:07:51 PM by MB Added support for title links. Thanks Jack. local adrBlog = radio.weblog.init () adrPosts = @adrBlog^.posts adrPrefs = @adrBlog^.prefs adr = @adrPosts^ [ string.padWithZeros ( postNum, 8 ) ] post = string ( adr^.text ) s post = string.replaceAll (post, "\n", "") // in case of Windows type end of lines post = html.processMacros ( post ) if flTitle if defined ( adr^.title ) if defined ( adr^.link ) s = "" else if adrPrefs^.flAutoGenerateLinks s = "" s = s + adr^.title if defined ( adr^.link ) or adrPrefs^.flAutoGenerateLinks s = s + "" else s = string.firstSentence ( post ) else if defined ( adr^.title ) s = post else s = string.mid ( post, string.length ( string.firstSentence ( post ) ) + 1, string.length ( post ) - string.length ( string.firstSentence ( post ) ) ) regex.subst( "^ +", "", @s ) return s bundle // Test code wp.newTextObject ( nodeFormat ( 197, true ), @scratchpad.test ) edit ( @scratchpad.test ) €„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€^¦äGeneva »¯ñ»¯ñ,Ï‹LANDÿÿÿÿÿÿmac on jsRender () Information 3/3/03; 5:58:47 PM by MB Derived from activeRendererSuite.render on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" on buildImgCache ( s ) // Adds HTML for image inclusion cache s = s + "\r\r" s = s + "\t\"noseeum\"\r" s = s + "\r" s = s + "\r" return s local s = string ( activeRendererData.guichuncks.objects.jsRenderer ) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction getargs argTable wedge = "../../images/help.gif" defKeepSynched = "" defUseYahoo = "" adrBlog = radio.weblog.init () demoUrl = "http://www.scripting.com/rss.xml" url urlList outlineString = "" itemCnt = 0 expandedCnt = 0 titleWordCnt = 8 flIncludeChannelTitle = false flCollapseChannelTitle = false flCreateHeader = false cssClassName = "active" cssClassLevel = 0 linkAttribute = "url" flDisplayHTMLWedge = false targetFrame = "" flDisplayDirectives = false uniqId = "" opmlCall = "transclude" flDoClick = false flRoll = false activeRendererSuite.utils.buildPathArgs ( @getargs ) // Parses get args to getargs table if defined ( getargs.action ) // a GET request has been issued, process it if defined ( getargs.src ) url = getargs.src urlList = string.urlSplit ( url ) if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file if ( system.environment.isMac ) regex.subst ( "file:///volumes", "file://", @url ) // clean up url on MacOS systems outlineString = file.readWholeFile ( file.urlToFile ( url ) ) // retrieve from filesystem else if string.lower ( urlList[1] ) beginsWith "http:" // if it's a bona fide http url if string.countFields ( urlList[2], ":" ) == 2 // if a port is specified server = string.nthField ( urlList[2], ":", 1 ) port = string.nthField ( urlList[2], ":", 2 ) else server = urlList[2] port = "80" outlineString = tcp.examples.httpGet ( server, urlList[3], port ) // retrieve via http else s = "exotic url schemes are not rendered for now. Check: " + url if outlineString // if an actual string was retrieved local isXml = string.patternMatch ( "<<""€^‘ظô§ »¯ñ  &2 <H R^ fr v‚ ‰• žª ·Ã ÏÛ âî óÿ   ( 4@ KW kw €Œ “Ÿ ¥activeRenderer¤E backgroundP¡ bookmarksý¾ callbacksV}cleanup‘.gui#instal:ûjsRender¢b jsRenderOpmlr„ jsRenderRsso<macros-menu· menuItemsÕrenderlÊ rssRenderer’ saveSerialô¥statusCenterMessageÌÁuninstal2ŠupdateÊÆutilsr0‘€9)V000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000320000000102A40840‚‚6‚13222038E0006‚13€Ó€Ôª¢000000060001001777AA0000000€€M¥Z000000060001001777AA00000000006F000000001001710000001-7FFB6FBE1800000‚‚4800480613200-1‚1201200Â6‚13222FFFF0‚‚10‚‚3‚1E0000100€¯€(§Õ000000060001001777AA000000000065000000001001710000001-7FFB6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF€9žFFFF000000060001001777AA000000000065000000001001710000001-7FFB6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000320000000102A40840‚‚6‚13222038E0006‚13E2000020000002F000000002A,{activeRendererSuite.bookmarks.editPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000015000000011E15‚D720A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,D@4,D@4,4,D@4,DÀ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹4m¹£õŠ*3x➀ …Xà000000060001001777AA000000000065000000001001710000001-7FFB6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000320000000102A40840‚‚6‚13222038E0006‚13E2000020000002F000000002A,{activeRendererSuite.bookmarks.editPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000015000000011E15‚D720A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,D@4,D@4,4,D@4,DÀ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹4m¹£õŠ*3xâž€Û »ê4 Geneva »—ê»—ê’ÃgYLANDÿÿÿÿÿÿmac {title} {metaTags ()} {bodytext} €€€€€€€€€€€€€€€€€€€€€€–€9 »*¸Geneva € …æ bGeneva T¹ǵ¹>†'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/register" ) webbrowser.bringtofront () €€æÁÞkGeneva »¯ñ»¯ñ,ƒHLANDÿÿÿÿÿÿmac on activeRoll ( url, class = "roll", target = "_new", title = "", flRoll = true, action = "transclude" ) Information 1/17/03; 4:35:07 PM by MB Added new 'action' parameter to set the javascript to call on included/transcluded links, defaults to aR's default. 1/10/03; 3:15:07 PM by MB Modified call to activeRenderer, use opml string instead of outline object 12/31/02; 8:07:57 PM by MB Modified rollId, randomize between 10 and 99 11/8/02; 7:18:24 PM by MB Added a random uniqId to pass along to activeRenderer 11/1/02; 2:19:56 PM by MB Added flRoll parameter, defaults to true, passed along to activeRenderer 7/25/02; 6:44:12 PM by MB Returns the HTML for an OPML file specified in url local urlList opmlText ol s = "" rollId = string ( random ( 10, 99 ) ) if title != "" s = s + ( "
" + title + "
" ); s = s + "
" urlList = string.urlSplit ( url ) // parse url if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file opmlText = file.readWholeFile ( file.urlToFile ( url ) ) else // otherwise it must be http opmlText = string.httpResultSplit ( tcp.httpClient ( server:urlList [2], path:urlList [3], flAcceptOpml:true ) ) if system.environment.isMac // take care of Mac encoding opmlText = latinToMac.convert ( opmlText ) s = s + activeRendererSuite.activeRenderer ( opml:opmlText, cssClassName:class, opmlCall:action, targetFrame:target, flRoll:flRoll, uniqId:rollId ) // render in HTML s = s + "
" s = s + "" return s bundle // test code edit ( @scratchpad.test ) wp.setText ( activeRoll ( "file:///Data/Marc/Radio%20UserLand/www/gems/opml/blogroll.opml" ) ) €„„€„„€„€€€€€€€€€€€€€€€ÁAùFFFF000000060001001777AA00000000007B000000001001710000001-7FFB6FBE1800000‚‚4800480618A7200-1‚7C67C77C67C70Â6‚18A7222FFFF0‚‚10‚‚3‚3B7E000010000019000000006092240840‚‚6‚49822290003CE00048B6498B40922123640840‚‚498699F2228C403C80009923099F1AC012361B8A40840‚‚99F6D4722293503C8000D3A18D47A001B8A278D40840‚‚D476117E222BB003CE00011716117E1870278D2F1640840‚‚117E613EE22277903C800013E119813EE1E502F163B7E40840‚‚13EE618A7222C67038E000189A618A7B000020000092800000000922,/* Outliner functions version: 1.4 last modified 4-Mar-2003 created by Marc Barrot, with help from Aaron Straup Cope, DJ Adams, Sjoerd Visscher and Danny Goodman copyright 2002 by Precision IT Management,Inc. You may use and distribute this code freely, just keep this header information intact. */ var img_expanded = 'http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif'; var img_collapsed = 'http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif'; var img_rotating = 'http://radio.weblogs.com/0104487/gems/activeRenderer/globe.gif'; (new Image(15,15)).src = img_expanded; // caching (new Image(15,15)).src = img_collapsed; // caching (new Image(15,15)).src = img_rotating; // caching function expand(ioNode) { ioWedge = "i" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_collapsed; document.getElementById(ioWedge).title='collapse'; document.getElementById(ioNode).className='expanded'; } } function collapse(ioNode) { ioWedge = "i" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_expanded; document.getElementById(ioWedge).title='expand'; document.getElementById(ioNode).className='collapsed'; } } function ioSwitch(ioNode) { if (document.getElementById && document.getElementById(ioNode) != null) { nodeState = document.getElementById(ioNode).className; } if (nodeState == 'collapsed') { expand(ioNode); } else { collapse(ioNode); } } function expandAll(divName) { if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('div'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == divName) { expand(nodeList.item(i).id); } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function collapseAll(divName) { if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('div'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == divName) { collapse(nodeList.item(i).id); } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function normalizeAll(spanName) { 00020000091A00000922914, if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('span'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == spanName) { nodeList.item(i).style.fontWeight = 'normal'; } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function expandBold(ioNode) { ioWedge = "i" + ioNode.substr(1); ioTitle = "t" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_collapsed; document.getElementById(ioWedge).title='collapse'; document.getElementById(ioNode).className='expanded'; document.getElementById(ioTitle).style.fontWeight = 'bold'; } } function expandByDate(n) { if (n.nodeType == 1) { if (n.tagName.toLowerCase() == 'div') { if (n.getAttribute('name') == 'item') { expandBold(n.id); } } } var children = n.childNodes; for (var i=0; i < children.length; i++ ) { expandByDate(children[i]); } } function daySwitch(postDate) { var hasItems = 0; if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('span'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == 'itemTitle') { hasItems = 1; break; } } } if (hasItems) { collapseAll('item'); normalizeAll('itemTitle'); if (document.getElementById) { expandByDate(document.getElementById(postDate)); } } else { collapseAll('day'); ioSwitch(postDate); } } var targetNode; var targetRoot; function transclude(ioNode, url) { var serverUrl = 'http://www.w3.org/2000/06/webdata/xslt'; var xsltUrl = 'http://radio.weblogs.com/0104487/gems/activeRenderer/outliner_js_xsl.txt'; var xsltUrl2 = 'http://radio.weblogs.com/0104487/gems/activeRenderer/outliner_xsl.txt'; var renderRequest = serverUrl + '?xslfile=' + xsltUrl + '&xmlfile=' + url + '&transform=Submit'; var renderRequest2 = serverUrl + '?xslfile=' + xsltUrl2 + '&xmlfile=' + url + '&transform=Submit'; var ioWedge = "i" + ioNode.substr(1); var ioRoot = "r" + ioNode.substr(1); var ioTitle = "t" + ioNode.substr(1); if (document.getElementById) { // create buffer if needed if (! document.getElementById ('buffer')) { // if buffer does not already exist 00020000095A00001236954, var buffer = document.createElement('div'); buffer.setAttribute ('id', 'buffer'); document.body.appendChild (buffer); // add buffer as last element of body } // test for Mac MSIE var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1; if (macMSIE) { // open new window for transcluded content var xAnchor = screen.width - (640 + 20); var yAnchor = 5; var xWidth = 640; var yHeight = 400; window.open (renderRequest2, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor); } else { // expand node var imgNode = document.getElementById (ioWedge); // wedge image node var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var title = spanNode.firstChild.data; var newTitle = document.createTextNode (title); // create new heading container var expandedNode = document.createElement ('div'); // create embedding element expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', ioNode); expandedNode.style.marginLeft = '15px'; imgNode.src = img_rotating; // update wedge's image imgNode.title = 'loading'; imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')'); spanNode.removeChild (spanNode.firstChild); // replace heading spanNode.appendChild (newTitle); rootNode.appendChild (expandedNode); // insert embedding element targetNode = expandedNode; targetRoot = imgNode; // load buffer with rendered outline script var theEl=document.createElement('script'); theEl.src = renderRequest; document.getElementById('buffer').appendChild(theEl); } } } function retrieveHtml(s) { // clean-up entity encoded HTML s = s.replace (/</g, '<'); s = s.replace (/>/g, '>'); s = s.replace (/&/g, '&'); // generate random key var rnd = Math.random(); var rnd_key = String (rnd).substr(1,6); s = s.replace (/(id="[rpti][^"][^"]*)/g, '$1' + rnd_key); // update all div node ids s = s.replace (/(\('p[^'][^']*)/g, '$1' + rnd_key); // update headings ids // insert transcluded HTML targetNode.innerHTML = s; targetRoot.src = img_collapsed; // update wedge image targetRoot.title = 'collapse'; 000200000C0900001B8AC03,} function imgLoad(ioNode, url) { // load image at url into browser cache // ioNode : expanding node identifier (string), stored in a custom property // url : web address of the included image (string) var ioWedge = "i" + ioNode.substr(1); if (document.getElementById) { var imgNode = document.getElementById (ioWedge); // wedge image node imgNode.src = img_rotating; // update wedge's image imgNode.title = 'loading'; } cachedImg.ioNode = ioNode; cachedImg.onload = imgTakeABreath; cachedImg.src = url; } function imgTakeABreath() { // allow for Mac MSIE and Mozilla to catch up setTimeout("imgSwitch()", 0); // ugh! } function imgSwitch() { // actual image transclusion starts here var ioWedge = "i" + cachedImg.ioNode.substr(1); var ioRoot = "r" + cachedImg.ioNode.substr(1); var ioTitle = "t" + cachedImg.ioNode.substr(1); if (document.getElementById) { var imgNode = document.getElementById (ioWedge); // wedge image node var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var expandedNode = document.createElement ('div'); expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', cachedImg.ioNode); expandedNode.style.marginLeft = '15px'; rootNode.appendChild (expandedNode); // insert embedding element var expandedWidth; if (rootNode.currentStyle) { // get embedding element's width expandedWidth = parseInt (rootNode.offsetWidth) - (15 + 4); } else { expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue('width')); } var includedLink = document.createElement ('a'); // create a link for the included image includedLink.setAttribute ('href', cachedImg.src); includedLink.setAttribute ('target', '_new'); includedLink.setAttribute ('title', 'view full size'); var includedImg = document.createElement ('img'); // create the included image includedImg.setAttribute ('border', 0); includedImg.setAttribute ('hspace', 0); includedImg.setAttribute ('vspace', 8); includedImg.setAttribute ('alt', 'included image'); includedImg.src = cachedImg.src; // set the image's url if (expandedWidth < cachedImg.width) { // adjust size if greater than embedding element includedImg.width = expandedWidth; includedImg.height = (cachedImg.height / cachedImg.width) * expandedWidth; } expandedNode.appendChild (includedLink); // insert link includedLink.appendChild (includedImg); // insert image imgNode.src = img_collapsed; // update wedge imgNode.title = 'collapse'; imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + cachedImg.ioNode + '\')'); } } function mmLoad(ioNode, url) { // load multimedia object at url into browser cache // ioNode : expanding node identifier (string), stored in a custom property 00020000078F0000278D789, // url : web address of the included object (string) var ioWedge = "i" + ioNode.substr(1); var ioRoot = "r" + ioNode.substr(1); var ioTitle = "t" + ioNode.substr(1); var ioObject = "f" + ioNode.substr(1); var urlType = 'application/x-shockwave-flash'; var isWin = navigator.appVersion.indexOf("Win") != -1; // true if Windows, false if MacOS var isIE = navigator.appName.indexOf("Microsoft") != -1; // true if MSIE, false if other browser if (url.substring (url.length - 3, url.length) == 'mov') { urlType = 'video/quicktime'; } if (document.getElementById) { var mmNode = document.getElementById (ioWedge); // wedge image element var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var expandedNode = document.createElement ('div'); expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', ioNode); expandedNode.style.textAlign = 'left'; expandedNode.style.marginLeft = '15px'; if (!isWin && isIE) { // use top margin if Mac MSIE expandedNode.style.marginTop = '4px'; } else { expandedNode.style.marginTop = '0px'; } rootNode.appendChild (expandedNode); // insert embedding element var expandedWidth; if (rootNode.currentStyle) { // get embedding element's width IE style var border = isWin ? (15 + 4) : 4; expandedWidth = parseInt (rootNode.offsetWidth) - border; } else { // or get it a la Mozilla expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue('width')); } var embeddedstring = ''; expandedNode.innerHTML = embeddedstring; mmNode.src = img_collapsed; // update wedge 000200000C6E00002F16C68, mmNode.title = 'collapse'; mmNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')'); } } function rssclude(ioNode, url) { var ioWedge = "i" + ioNode.substr(1); var ioRoot = "r" + ioNode.substr(1); var ioTitle = "t" + ioNode.substr(1); if (document.getElementById) { // create buffer if needed if (! document.getElementById ('buffer')) { // if buffer does not already exist var buffer = document.createElement('div'); buffer.setAttribute ('id', 'buffer'); document.body.appendChild (buffer); // add buffer as last element of body } // locate relevant info in DOM tree var imgNode = document.getElementById (ioWedge); // wedge image node var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var rootClass = rootNode.className; // class of root node // create request elements var serverUrl = 'http://services.activerenderer.com/activeRenderer/'; var cssClassLevel = rootClass.replace (/[a-z]+/gi, ''); // root node outline level var cssClassName = rootClass.replace (/[0-9]+/gi, ''); // root node class radix var uniqId = String (Math.random ()).substr(2,5); url = escape (url).replace (/\//g, "%2F"); // test for Mac MSIE var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1; var safari = navigator.userAgent.search (/safari/i) + 1; if (macMSIE) { // open new window for transcluded content var xAnchor = screen.width - (640 + 20); var yAnchor = 5; var xWidth = 640; var yHeight = 400; var renderRequest = serverUrl + 'render?src=' + url + '&action=submit'; var w = window.open (renderRequest, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor); } else { /* expand node var title = spanNode.firstChild.data; var newTitle = document.createTextNode (title); // create new heading container var expandedNode = document.createElement ('div'); // create embedding element expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', ioNode); expandedNode.style.marginLeft = '15px'; imgNode.src = img_rotating; // update wedge's image imgNode.title = 'loading'; imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')'); spanNode.removeChild (spanNode.firstChild); // replace heading spanNode.appendChild (newTitle); rootNode.appendChild (expandedNode); // insert embedding element targetNode = expandedNode; targetRoot = imgNode; // load buffer with rendered outline script var theEl=document.createElement('script'); var renderRequest = serverUrl + 'jsrender?src=' + url + '&action=submit'; theEl.src = renderRequest; document.getElementById('buffer').appendChild(theEl); */ alert ('RSS inclusion will be here shortly, keep faith :-)'); } } } function includeHtml(s) { // insert transcluded HTML targetNode.innerHTML = s; targetRoot.src = img_collapsed; // update wedge image targetRoot.title = 'collapse'; }00040000000B0000000203B80000050000000B0000000203B800000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 F0ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚28630D3‚28630D000A00000019000000026‚18A72226‚18A7222000B00000005000000020Â000C0000001B000000013B7E2E0‚F01D21275‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,5{4,4,4,4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õÁTºŠlÜ*;~.KÇkAuAù ‹`¸õ–껯ñVZ¢¦ó÷KOîò 3 7globe GIFfGIF89a ¢¶˜kHDD½¦Šȱ‘mma!ÿ NETSCAPE2.0!þ©right 2000 by ADI Associates, Inc.!ù , #xgdêˆ0B Œ:(åi£¨5]‚áUn!91¸’!ù , !xgdêˆ0FbpÇf×paè¥%7’³aø( !ù , xgdêc@am/ã[`ÜÕ@Q¡…D Ñ÷( !ù ,  xgdêˆê(‹¶Ê®–Žc@`($ŽBÄ8Б!ù , "xgdêˆ*(+m ¡V%8aÅF¤CcA#ã@G!ù , #xgdêˆF+k €gCÐx€@$Àœd`x ™–'Dë£$!ù , $xgdêˆ((+Ô@`äè”äIÀø¤€… °!DŒ !ù , $xgdêˆè(kÐ:  u!%¨¦aah©ˆ N*DŒ !ù , &xgdêˆè(˽ áTâˆÀÐŒ@ëⷘح1¯’!ù , &xgdêˆAG( 8li]Ð…fP¡&®ªÛ˜ ÝBÄ8Б!ù , %xgdêˆaÀe  EthAé¤#ù A»e7 ã@G!ù , &xgdêa…ÑÀñY^PXA7lͰ’…a¹°äuBÄ8Б;ol1;GIFfGIF89a ñ1ÿÿÿÞÞÞ­­­!ù, „©Ëíc+;ol2DGIFfGIF89a ‘ÞÞÞ­­­ÿÿÿ!ù, ”©Ë¢”Îx,EzAT;ol3IGIFfGIF89a ñ1ÿÿÿÞÞÞ!ù, „© kÒŒiÒc/›¡ÂG;ol4PGIFfGIF89a ÷1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿÎÎÿ!ù, )Hà¿‚ÿU9XPa•…Jdø¯âÄŠ '6Ôñ!Ä1 ;ol5›GIFfGIF89aó1ÿÿÿÿÿÌÌÿÿÌÌÌfffÝÝÝ»»»ˆˆˆUUUDDD!ù,DÈI«½ÖƒåùàW’ ExxGA;|‹xI¯À—\ ±c% @Á±©õZ„À•20Y-Šæ|ªB°xl‰;ol6=GIFfGIF89aô1ÿÿÿ÷÷÷ïïïçççÞÞÞÖÖÖÎÎÎÆÆÆ½½½µµµ­­­¥¥¥œœœ”””ŒŒŒ{{{BBB!!!!þMSOFTWARE: QuickTime 6.0.2 DATE: 2002:10:31 15:12:14 HOST: Mac OS X 10.1.5 !ù,e`aJr @ª¦GQ,¡«Ç s Ä„ƒ¡V'Báx4…Z’L(é`ÁX(F „T` \bìh<¥bL  Âh¿vsHD…†‚6‹Œb>‘’+!;ol7ìGIFfGIF89aó1ÿÿÿïïïÖÖÖÎÎÎ¥¥¥œœœBBB!!!!þMSOFTWARE: QuickTime 6.0.2 DATE: 2002:10:31 15:12:14 HOST: Mac OS X 10.1.5 !ù,DÈI«½8k<ˆùÅp Fw¤H¥ÁAJ¡A@œuG7:˜žë0@ ††]ïLNh6\Œ°*µ^±REPZj-!T‰; €'^l"žGeneva€'žFFFF000000060001001777AA000000000065000000001001710000001-7FFF6FBE1800000‚‚4800480613200-1‚0Â6‚13222FFFF0‚‚10‚‚3‚1E00001000000320000000102A40840‚‚6‚13222038E0006‚13E2000020000002F000000002A,{activeRendererSuite.bookmarks.initPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚132226‚13222000B00000005000000020Â000C00000015000000011E15‚D720A0‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,D(€4,D(€4,4,D(€4,D)4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹’mê¹£õ—*z² žåFFFF000000060001001777AA000000000071000000001001710000001-7EFB6FBE1800000‚‚480048062D200-1‚264826480Â6‚2D222FFFF0‚‚10‚‚3‚4400001000000350000000104440840‚‚6‚2D22244038E0002062D600002000000490000000044,#title "Bookmarks" {activeRendererSuite.bookmarks.editBookmarks ()} 00040000000900000002046000050000000F0000000301440460000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚00070000002F000000020‚20Â180‚Á‚Á‚10Â160‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚10C2703‚10C270000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C00000015000000014433E‚B57320‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿÿ4,D@4,ÿÿ4,4,ÿÿ4,DÀ00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹ŠâXº‰œ}D µ?8aå€]þ•–8¹$@ý»—ê  + 5A H editPrefsP+registerP » regWindowP˜QupdateP¹{bãb'€ž€¨÷H‹Geneva ¹4ê¹’ªØK-èiLANDÿÿÿÿÿÿmac on editPath () local pta = html.getpageTableAddress () argList = string.parseHttpArgs ( pta^.searchArgs ) path = argList[4] Frontier.bringToFront () if file.isFolder ( path ) file.getFolderDialog ( "locate the Favorites folder", @path ) else file.getFileDialog ( "locate the Bookmarks file", @path, 0 ) webserver.util.setCookie ( pta, "RSLite", path ) webbrowser.bringtofront () €€€€€€€€€€€€K€Â¨÷~¶Ò²¬»—ê )1 <Z e† ¦®P³ ½Á ÈÞ â autobackupdbnameactiveRenderer.rootdialogs infomethodtoolsupdate.askUpdateParts lastupdateThu, 14 Nov 2002 21:13:35 GMTmethodtoolsupdate.getUpdateopenLogport serialNumserverupdates.xml-rpc.itURLVGeneva ý¿A(\6‡€ÀY/ý+`¸ô§ »—ê #0>KY d˜ ¥ alphaServerpºp autoUpdate autoUpstream displayLatest outlineItems outlineWeblog regPageUrl0http://register.xml-rpc.it/itstories/story$num=3 stableServerp9nVGeneva gÉ2@xÖo€W´ý+$ºJBZºJêJ  port80serverupdates.xml-rpc.itT€WTý+$¸€|»—ê s znotRegisteredAlert\You need to register this tool in order to download updates. Do you want to register it now?regMsgbactiveRenderer is free. To receive updates, you need to register your copy, a 3 mn process.VGeneva ”n2@xGÚ€b€U滄V·Íœ»—ê  $0 ;G P\ gs |ˆ • editBookmarksPrº editPrefsPSA jsRendererP»„popUnderPJV registeredPDlrendererP7l unRegisteredP<VGeneva 4‡228–SU€T…»„®Geneva »—ê»—ê'Å;LANDÿÿÿÿÿÿmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: registration

If you do not have a serial number, proceed straight to the registration site.

Enter your activeRenderer serial number :   

##regMsg##

##result##

€€€ÀL¶»„TGeneva »—ê»—êGÑà,LANDÿÿÿÿÿÿmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: registration

This copy of activeRenderer is registered. Serial number: ##serial##.
€€€€ÞßFFFF000000060001001777AA000000000078000000001001710000001-7FFB6FBE1800000‚‚48004806242200-1‚49549E49549E0Â6‚242222FFFF0‚‚10‚‚3‚446000010000003B00000001044640840‚‚6‚24222243D038E000235624234000020000044C00000000446,00040000000A000000020448000050000000A0000000204480000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚16A1E63‚16A1E6000A00000017000000026‚2422226‚242222000B00000005000000020Â000C0000001700000001446E2‚656772E‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,ÿ4,IGxv4,J3Bv4,ZXIg4,cj154,ZXIg00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹=Åu¹ègD F,0©)[€ÉmZ›Geneva »—ê»—ê,þ÷aLANDÿÿÿÿÿÿmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: default settings

Outline publication dates.
> Adds an active outline wedge to every date title on your weblog's home page.
Outline individual posts.
> Adds an active outline wedge to every post title on your weblog's home page.
Display 'Latest' widget.
This widget expands and collapses posts in your weblog's home page according to which date you click.

> You may customize your own versions of the outline style templates using any text editor.

Update activeRenderer automatically at startup.
Upstream instant outline at startup, duplicate and upstream outlines when saved under www/gems.

After saving activeRenderer's preferences, re-publish your weblog's home page using Radio's Publish / Weblog Home Page menu.

€€€€.B€hÒ²¸íGeneva »—ê»—ê,W}LANDÿÿÿÿÿÿmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: bookmarks

Browser identification:

> Path to the source bookmarks file or folder:
>  Retrieve bookmarks from Yahoo instead.
myYahoo user id:   password:
> Path to the destination OPML outline:
     Update in the background when Radio starts.
 

Click Save to modify settings 

€€€€?Ò²000000060001001777AA00000000006F000000001001710000001-€]þö0NGeneva »¯ñ»¯ñ'ïLANDÿÿÿÿÿÿmac on cleanup () Information 1/21/03; 4:55:24 PM by MB Created. Delete all trace of activeRenderer in the scratchpad if defined ( user.tools.callbacks.afterUninstall.activeRenderer ) delete ( @user.tools.callbacks.afterUninstall.activeRenderer ) if defined ( scratchpad.activeRenderer ) delete ( @scratchpad.activeRenderer ) €„„€€€€öZB Geneva »¯ñ»¯ñÄ‘•LANDÿÿÿÿÿÿmac on startup () Information 22.10.02; 20:25:19 Uhr by AR/MB Code review with Andre Radke disabled this callback, using activeRendererThread instead bundle // disabled code if ! defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.instal = activeRendererSuite.instal thread.easyCall ( "system.temp.activeRenderer.instal", {} ) return false €„„€Z€§¨÷5 Lucida Grande ºIÿ"ºJJE)'ïLANDÿÿÿÿÿÿmac activeRendererSuite.utils.setUpdateServer ("stable") €2940840‚‚6‚13222038E000׀Ĩ÷ ZGeneva Tº‰b÷º‰c'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/" ) webbrowser.bringtofront () €€Þ€Ú¨÷ ^Geneva T¹7e¹7e#L'ïLANDÿÿÿÿÿÿmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/help" ) webbrowser.bringtofront () €€â€ì¨÷<8Geneva »—ê»—ê'‰íLANDÿÿÿÿÿÿmac on regWindow () local s = "" if !activeRendererSuite.utils.serialOk() s = string ( activeRendererData.guichuncks.objects.popUnder ) s = string.replace ( s, "##url##", "http://127.0.0.1:5335/activeRenderer/register/" ) return s bundle // test code scratchpad.js = regWindow () edit ( @scratchpad.js ) €€€€€€€€€€€§ éGeneva »¯ñ»¯ñ<\>:LANDÿÿÿÿÿÿmac on yahooImport ( login, passwd ) Information 11/1/02; 7:29:32 PM by MM (Mikel Maron) Return Yahoo bookmarks in an HTML string on error ( s ) return "Error: " + s local args header server path adrCookiesTable httpResult bookmarks matchstring if ( tcp.isOffline () ) return error ( "TCP is Offline" ) bundle //get Yahoo Cookies try new ( tabletype, @args ); args.login = login; args.passwd = passwd new ( tabletype,@header ); header.["User-Agent"] = "Mozilla/5.001 (windows; U; NT4.0; en-us) Gecko/25250101" server = "login.yahoo.com"; path="/config/login"; adrCookiesTable = @user.webBrowser.cookies httpResult = tcp.httpClient ( method:"POST",server:server,path:path,data:webserver.encodeargs(@args),datatype:"application/x-www-form-urlencoded",cookiesOn:true,adrHdrTable:@header ) else return error ( "Could not connect to Yahoo to retrieve Cookies" ) bundle //reparse Cookies try delete ( @adrCookiesTable^.[".yahoo.com"].["/"].["Y"] ) //delete the bad Y Cookie activeRendererSuite.utils.parseCookies ( httpResult, server, path, adrCookiesTable ) //cookie parsing is broken in radio, do it right here if not defined (adrCookiesTable^.[".yahoo.com"].["/"].["Y"]) return error ( "Yahoo Cookie not set. Probably incorrect Yahoo ID/Password" ) bundle //get the Bookmarks try path = "/config/export_bookmark"; server = "e.my.yahoo.com" new ( tabletype,@args ); args.[".commit"] = "1" httpResult = tcp.httpClient ( method:"POST",server:server,path:path,data:webserver.encodeargs(@args),datatype:"application/x-www-form-urlencoded",cookiesOn:true,adrHdrTable:@header ) bookmarks = string.httpResultSplit ( httpResult ) else return error ( "Could not connect to Yahoo to retrieve Bookmarks" ) matchstring = "" if ( matchstring != string.mid ( bookmarks, 1, string.length ( matchstring ) ) ) return error ( "Improper Bookmark format returned" ) return bookmarks bundle // test code yahooImport ( "yid", "pw" ) €„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€0060001001777AA0 pöGeneva »¯ñ»¯ñ.¼ÿGLANDÿÿÿÿÿÿmac on updateBookmarks () Information 11/3/02; 8:20:14 PM by MB Added support for Yahoo bookmarks local pta = html.getpageTableAddress () argList = string.parseHttpArgs ( pta^.searchArgs ) pathList = argList[4] delimiter = string.patternMatch ( "__", pathList ) src = string.mid ( pathList, 1, delimiter - 1 ) dst = string.mid ( pathList, delimiter + 2, string.length ( pathList ) - delimiter + 1 ) result = "" delimiter = string.patternMatch ( "--", src ) if delimiter > 0 local bookmarks = "" userId = string.mid ( src, 1, delimiter - 1 ) password = string.mid ( src, delimiter + 2, string.length ( src ) - delimiter + 1 ) startTime = clock.ticks() if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix name for Windows systems src = file.getSpecialFolderPath ("", "Temp", true) + "bookmarks.html" else src = file.getSpecialFolderPath ("", "Temporary Items", true) + "bookmarks.html" radio.log.add( "activeRenderer", "Retrieving Yahoo bookmarks.", startTime ) bookmarks = activeRendererSuite.bookmarks.yahooImport ( userId, password ) // retrieve bookmarks from Yahoo if regex.easyMatch ( "^Error", bookmarks ) radio.log.add( "activeRenderer", bookmarks, startTime ) if file.exists ( src ) radio.log.add( "activeRenderer", "Using local cached bookmarks found at " + src, startTime ) else result = bookmarks else radio.log.add( "activeRenderer", "Saving bookmarks to " + src, startTime ) file.writeWholeFile ( src, bookmarks ) if ! result // if result is still empty if activeRendererSuite.bookmarks.update ( src, dst ) result = "Synchronization complete." else result = "synchronization failed." webserver.util.setCookie ( pta, "RSLite", result + "; path=/;" ) webbrowser.bringtofront () €„€€€€€€€€€€€€€€€€€pjº8Geneva »¯ñ»¯ñ'5øLANDÿÿÿÿÿÿmac on synchBookmarks () Information 11/2/02; 7:28:13 PM by MB Added support for Yahoo bookmarks local adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs src = adrPrefs^.activeRenderer.bookmarksPath startTime = clock.ticks() if adrPrefs^.activeRenderer.useYahoo local bookmarks = "" if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix name for Windows systems src = file.getSpecialFolderPath ("", "Temp", true) + "bookmarks.html" else src = file.getSpecialFolderPath ("", "Temporary Items", true) + "bookmarks.html" radio.log.add( "activeRenderer", "Retrieving Yahoo bookmarks.", startTime ) bookmarks = activeRendererSuite.bookmarks.yahooImport ( adrPrefs^.activeRenderer.myYahoo.userId, adrPrefs^.activeRenderer.myYahoo.password ) // retrieve bookmarks from Yahoo if regex.easyMatch ( "^Error", bookmarks ) radio.log.add( "activeRenderer", bookmarks, startTime ) if file.exists ( src ) radio.log.add( "activeRenderer", "Using local cached bookmarks found at " + src, startTime ) else return false else radio.log.add( "activeRenderer", "Saving bookmarks to " + src, startTime ) file.writeWholeFile ( src, bookmarks ) activeRendererSuite.bookmarks.update ( src, adrPrefs^.activeRenderer.outlinePath ) return true bundle // Test code synchBookmarks () €„€€€€€€€€jÈFFFF000000060001001777AA000000000079000000001001710000001-7FFB6FBE1800000‚‚4800480691D200-1‚1701731701730Â6‚91D222FFFF0‚‚10‚‚3‚19DA000010000007C000000020A2340840‚‚6‚31F2229E903CC000312631F1330A2319DA40840‚‚31F691D222FA6038E000910691D590000200000A2900000000A23, http://radio.weblogs.com/0104487/gems/activeRenderer/ol1.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol4.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol5.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol6.gif <xsl:value-of select="head/title" /> generated by activeRenderer for XSL vs 1.3.1 - HTML outline structure copyright 2002-03 Precision IT Management, Inc. 000200000FBD00000A23FB7, javascript:void(null) 00040000000B00000002019DC000050000000B00000002019DC0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 50ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚2A52D83‚2A52D8000A00000017000000026‚91D2226‚91D222000B00000005000000020Â000C0000000E000000010‚‚F80‚‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,acti4,à‹4,084,4824,4E04,@00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹Ì¾8ºQšÚ,äüDÈ€+¶ÂD*¸Geneva ¹ˆ¹ˆ'ïLANDÿÿÿÿÿÿmac on openUrl (theUrl) try webbrowser.openurl (theUrl) else if !system.environment.isMac or !(tryError contains "Mac OS Error") scritpError(tryerror) webbrowser.bringtofront () €€€€€€€Z€ÓÂD> ßGeneva »—ê»—êù¢(LANDÿÿÿÿÿÿmac on checkPrefs ( startTime = clock.ticks() ) Information 10/29/02; 5:35:20 PM by MB Provided multiple backups, so as not to overwrite the original backup 23.10.02; 0:07:30 Uhr by AR/MB Code review with Andre Radke Got rid of all wp object processing Simplified the file end of line cleanup sequence 7/31/02; 8:26:16 AM by MB Used a regex for trailing end of lines removal, to allow for inconsistent EOL encoding. 7/25/02; 5:15:14 PM by MB Remove all trailing end of line markers in #prefs.txt before inserting a single one. 7/12/02; 10:47:51 AM by MB Added local definition of startTime, thanks Jerry. 7/9/02; 6:20:00 PM by MB Update #Prefs.txt file when necessary local basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" prefPath = user.radio.prefs.wwwfolder + "#prefs.txt" prefs = file.readWholeFile ( prefPath ) flOverwriteTemplateFile = false // No file overwrite by default bundle // Fix any broken #Prefs.txt file regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "nodeClass", prefs ) == 0 // Insert nodeClass directive if missing prefs = prefs + cr + "#nodeClass \"expanded\"" // Add a new line marker and the nodeClass directive flOverwriteTemplateFile = true // Request file overwrite if string.patternMatch ( "wedgeImg", prefs ) == 0 // Insert wedgeImg directive if missing prefs = prefs + cr + "#wedgeImg \"" + radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif\"" flOverwriteTemplateFile = true if string.patternMatch ( "wedgeTitle", prefs ) == 0 // Insert wedgeTitle directive if missing prefs = prefs + cr + "#wedgeTitle \"collapse\"" flOverwriteTemplateFile = true if string.patternMatch ( "titleWeight", prefs ) == 0 // Insert titleWeight directive if missing prefs = prefs + cr + "#titleWeight \"bold\"" flOverwriteTemplateFile = true if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems prefs = string.replaceAll ( prefs, "\r", "\r\n" ) if flOverwriteTemplateFile // If file overwrite was requested local archivePath = backupPath + file.getPathChar() + "#Prefs.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( prefPath, archivePath ) // Backup current prefs file radio.log.add ( "activeRenderer", prefPath + " backed up to " + archivePath + ".", startTime ) file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy bundle // test code checkPrefs() €„„€€€€€€„„„€€€€€€€€€ •€2ÂDœGeneva ¸å˜À¸å¬'ïLANDÿÿÿÿÿÿmac on buildPostArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.requestBody, theTableAdr ) €€€€€€2ô<@Geneva »—ë»—ë'ïLANDÿÿÿÿÿÿmac on buildPathArgs (theTableAdr) local pta=html.getpageTableAddress() rq = pta^.request p = string.patternMatch ( "?", rq ) rq = string.mid (rq, p + 1, string.length ( rq ) ) p = string.patternMatch ( " ", rq ) rq = string.mid (rq, 1, p ) new ( tableType, theTableAdr ) webserver.parseArgs ( rq, theTableAdr ) €€€€€€€€9€Q(l"žGeneva »—ê»—êiDGÖLANDÿÿÿÿÿÿmac on update( procID = 0 ) Information 1/28/03; 10:33:50 PM by MB Added fixing of end of lines for Windows systems 1/15/03; 7:11:36 PM by MB Update external elements right after Frontier database update Do not wait for next Radio restart. 11/15/02; 2:25:22 PM by MB Only test system.temp.activeRenderer.instal' modification date if it is defined Set an updating semaphore in system.temp.activeRenderer before update, reset it when finished 11/14/02; 3:36:27 PM by MB Terminate calling thread before starting a new instance of the instal script 11/4/02; 3:11:46 PM by MB Corrected a bug in the calling thread waking process, reported by Doug Baron 22.10.02; 21:15:39 Uhr by AR/MB Code review with Andre Radke Suppressed the use of a scratchpad subtable Relaunch installation if instal script was updated 9/23/02; 2:30:40 PM by MB Removed call to Frontier.bringToFront 7/4/02; 1:51:55 PM by MB Added support for logging failure 6/29/02; 7:56:54 PM by MB Added support for installation thread wake up 6/28/02; 7:17:32 PM by MB Add logging with number of downloaded parts. local startTime = clock.ticks() // initialize time stamp ctParts = 0 // number of updated parts basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" modCSS = timeModified ( @activeRendererData.texts.css ) modJavascript = timeModified ( @activeRendererData.texts.javascript ) modXslHtml = timeModified ( @activeRendererData.texts.xsl_html ) modXslJs = timeModified ( @activeRendererData.texts.xsl_js ) modRsLite = timeModified ( @activeRendererData.texts.rslite ) modPrefs = timeModified ( @activeRendererData.texts.prefs ) modTemplate = timeModified ( @activeRendererData.texts.template ) on getVersion ( txt ) // Returns a version number from the parameter string local matchList = {} pattern = "version[: ]+([0-9\.a-zA-Z]+)" version = "" regex.extract ( pattern, @txt, @matchList, {1} ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on eolFix ( txt ) // Fixes end of line marker according to operating system regex.subst ( "[\r\n]+", "\r", @txt ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems txt = string.replaceAll ( txt, "\r", "\r\n" ) return txt if ! defined ( system.temp.activeRenderer ) // create temporary table if needed new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.updating = true // set updating semaphore radio.log.add ( "activeRenderer", "Checking \"" + user.rootUpdates.servers.activeRenderer.server + "\" for updates.", startTime ) window.about() // Bring Radio status window to the front try rootUpdates.update (@activeRendererSuite, true, @ctParts ) // check for updates if ctParts > 0 // if some parts were downloaded radio.log.add( "activeRenderer", ctParts +" new part(s) loaded from \"" + user.rootUpdates.servers.activeRenderer.server + "\".", startTime ) else // no available parts radio.log.add( "activeRenderer", "No new part(s) found on \"" + user.rootUpdates.servers.activeRenderer.server + "\".", startTime ) else // catch update errors msg ( tryError ) radio.log.add ( "activeRenderer", "Update failed: " + tryError, startTime ) if defined ( system.temp.activeRenderer.instal ) && timeModified ( @activeRendererSuite.instal ) > timeModified ( @system.temp.activeRenderer.instal ) // if update was launch at startup (autoupdate true) and the instal code was modified during update radio.log.add( "activeRenderer", "activeRendererSuite.instal was updated, re-launching installation.", startTime ) if procID > 0 && thread.exists ( procID ) // if called from a waiting parent thread thread.kill ( procID ) // terminate the calling thread before starting a new one. system.temp.activeRenderer.instal = activeRendererSuite.instal thread.callScript ( @system.temp.activeRenderer.instal, {} ) // Relaunch installation code in a separate thread else // no modification of instal code, check external elements instead if timeModified ( @activeRendererData.texts.css ) > modCSS // css stylesheet was modified local cssPath = basePath + file.getPathChar() + "outliner.css" currentVersion = getVersion ( file.readWholeFile ( cssPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.css ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file updated.", startTime ) if timeModified ( @activeRendererData.texts.javascript ) > modJavascript // javascript code was modified local jsPath = basePath + file.getPathChar() + "outliner.txt" js = eolFix ( string ( activeRendererData.texts.javascript ) ) currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) js = string.replaceAll ( js, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code updated.", startTime ) if timeModified ( @activeRendererData.texts.xsl_html ) > modXslHtml // xsl/html renderer was modified local xslPath = basePath + file.getPathChar() + "outliner_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_html ) ) currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code updated.", startTime ) if timeModified ( @activeRendererData.texts.xsl_js ) > modXslJs // xsl/javascript renderer was modified local xslPath = basePath + file.getPathChar() + "outliner_js_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_js ) ) currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code updated.", startTime ) if timeModified ( @activeRendererData.texts.rslite ) > modRsLite // rsLite code was modified local jsPath = basePath + file.getPathChar() + "rslite.txt" js = eolFix ( string ( activeRendererData.texts.rslite ) ) currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code updated.", startTime ) basePath = user.radio.prefs.wwwfolder + "outlines" if timeModified ( @activeRendererData.texts.prefs ) > modPrefs // #prefs.txt was modified local prefPath = basePath + file.getPathChar() + "#prefs.txt" prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge true" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add ( "activeRenderer", "#prefs.txt file updated in outlines folder.", startTime ) if timeModified ( @activeRendererData.texts.template ) > modTemplate // #template.txt was modified local templatePath = basePath + file.getPathChar() + "#template.txt" currentVersion = getVersion ( file.readWholeFile ( templatePath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.template ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "#template.txt file updated in outlines folder.", startTime ) if procID > 0 // If a a calling process id was passed along if thread.exists ( procID ) and thread.isSleeping ( procID ) // if the process is still there and paused thread.wake ( procID ) // Wake up the dozing thread system.temp.activeRenderer.updating = false // reset updating semaphore return true bundle // test code update () €„„€„„„€„€„„„€€€€€€€€€€€€€€€&‚€*u("ºGeneva »—껗ꢠ@ 0 version = matchList[1] return version on setArchive () // create uninstal folders file.sureFolder ( arPath ) file.sureFolder ( wwwPath ) file.sureFolder ( gemsPath ) on restoreTemplates () // Restore regular outline templates if possible local homeTemplateBackup dayTemplate dayTemplateBackup itemTemplateBackup setArchive () if adrPrefs^.activeRenderer.outlineWeblog // if outline style is currently turned on if file.exists ( backupPath + "#homeTemplate.txt" ) // if the original home template was properly backed up homeTemplateBackup = file.readWholeFile ( backupPath + "#homeTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "activeRenderer", homeTemplateBackup ) || string.patternMatch ( "daySwitch", homeTemplateBackup ) // if there is a trace of activeRenderer induced modification in the backed up home template radio.log.add( "activeRenderer", "Warning: backed up home template appears to have been modified with activeRenderer macros.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#homeTemplate.txt", wwwPath + "#homeTemplate.txt" ) // archive current version file.copy ( backupPath + "#homeTemplate.txt", user.radio.prefs.wwwfolder + "#homeTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original home template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the home template in " + backupPath + ".", startTime ) if file.exists ( backupPath + "#dayTemplate.txt" ) // if the original day template was properly backed up dayTemplateBackup = file.readWholeFile ( backupPath + "#dayTemplate.txt" )// retrieve the template's content if string.patternMatch ( "dayTemplate", dayTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up day template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#dayTemplate.txt", wwwPath + "#dayTemplate.txt" ) // archive current version file.copy ( backupPath + "#dayTemplate.txt", user.radio.prefs.wwwfolder + "#dayTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original day template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the day template in " + backupPath + ".", startTime ) if adrPrefs^.activeRenderer.outlineItems // if outline items style is currently on if file.exists ( backupPath + "#itemTemplate.txt" ) // if the original item template was properly backed up itemTemplateBackup = file.readWholeFile ( backupPath + "#itemTemplate.txt" ) // retrieve the template's content if string.patternMatch ( "itemTemplate", itemTemplateBackup ) // if there is a trace of activeRenderer induced modification radio.log.add( "activeRenderer", "Warning: backed up item template appears to have been modified for use with activeRenderer.", startTime ) file.copy ( user.radio.prefs.wwwfolder + "#itemTemplate.txt", wwwPath + "#itemTemplate.txt" ) // archive current version file.copy ( backupPath + "#itemTemplate.txt", user.radio.prefs.wwwfolder + "#itemTemplate.txt" ) // restore backed up version radio.log.add( "activeRenderer", "Original item template restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the item template in " + backupPath + ".", startTime ) adrPrefs^.activeRenderer.outlineItems = false // turn off item outlining preference adrPrefs^.activeRenderer.outlineWeblog = false // turn off day outlining preference fileMenu.saveMyRoot ( adrPrefs ) // save preferences if f beginsWith "[" // clean up pathname if necessary f = string.mid ( f, 3, string.length ( f ) - 4 ) if string.patternMatch ( "activeRenderer.root", f ) // if we are indeed talking about aR if file.exists ( toolsPath + "activeRenderer.root" ) // if activeRenderer.root is still in the Tools folder if defined ( temp.Frontier.tools.activeRenderer ) // if activeRenderer has been installed during this Radio session if ! defined ( temp.Frontier.tools.activeRenderer.url ) // if activeRenderer was deactivated radio.log.add( "activeRenderer", "Deactivation requested.", startTime ) restoreTemplates () radio.log.add ( "activeRenderer", "Tool was deactivated.", startTime ) else // activeRenderer is not in the Tools folder any more. radio.log.add( "activeRenderer", "Uninstallation requested.", startTime ) restoreTemplates () bundle // Restore #prefs.txt file if file.exists ( backupPath + "#prefs.txt" ) // if the original prefs file was properly backed up file.copy ( user.radio.prefs.wwwfolder + "#prefs.txt", wwwPath + "#prefs.txt" ) // archive current prefs file.copy ( backupPath + "#prefs.txt", user.radio.prefs.wwwfolder + "#prefs.txt" ) // restore prefs radio.log.add( "activeRenderer", "Original preferences restored.", startTime ) else // else log warning radio.log.add( "activeRenderer", "Warning: unable to locate a backed up copy of the prefs file in " + backupPath + ".", startTime ) bundle // Remove activeRenderer folder from gems try gemsPath = gemsPath + "activeRenderer" + file.getPathChar () file.sureFolder ( gemsPath ) file.copy ( basePath, gemsPath ) file.deleteFolder ( basePath ) radio.log.add ( "activeRenderer", "activeRenderer folder moved from " + user.radio.prefs.wwwfolder + "gems to " + file.folderFromPath ( gemsPath ), startTime ) else radio.log.add ( "activeRenderer", "Warning: could not delete activeRenderer folder from " + user.radio.prefs.wwwfolder + "gems.", startTime ) bundle // Unlink aR macros if ( defined ( user.html.macros.opmlRender ) ) delete ( @user.html.macros.opmlRender ) if ( defined( user.html.macros.daySwitch ) ) delete ( @user.html.macros.daySwitch ) if ( defined( user.html.macros.nodeState ) ) delete ( @user.html.macros.nodeState ) if ( defined( user.html.macros.nodeFormat ) ) delete ( @user.html.macros.nodeFormat ) if ( defined( user.html.macros.storyBox ) ) delete ( @user.html.macros.storyBox ) if ( defined( user.html.macros.espressoCup ) ) delete ( @user.html.macros.espressoCup ) if ( defined( user.html.macros.activeRoll ) ) delete ( @user.html.macros.activeRoll ) if ( defined( user.html.macros.activeRendererFunctions ) ) delete ( @user.html.macros.activeRendererFunctions ) if ( defined( user.html.macros.activeRendererHeader ) ) delete ( @user.html.macros.activeRendererHeader ) bundle // Unlink rendering code if defined ( user.html.renderers.activeRenderer ) delete ( @user.html.renderers.activeRenderer ) bundle // Remove update table if defined ( user.rootUpdates.servers.activeRenderer ) delete ( @user.rootUpdates.servers.activeRenderer ) bundle // Remove preferences table if defined ( adrPrefs^.activeRenderer ) delete ( @adrPrefs^.activeRenderer ) radio.log.add( "activeRenderer", "Tool was completely removed.", startTime ) bundle // Remove uninstallation code if defined ( scratchpad.activeRenderer.cleanup ) // just in case it's gone for some reason if ! defined ( temp.activeRenderer ) new ( tabletype, @temp.activeRenderer ) temp.activeRenderer.cleanup = scratchpad.activeRenderer.cleanup // duplicate the cleanup script thread.callScript ( @temp.activeRenderer.cleanup, {} ) // launch the copy in another thread return true €„€€€€€€€€€€€€€€€€€€€€€€€€€€€&J€(`GGeneva »—ê»—êÎW LANDÿÿÿÿÿÿmac Information 10/29/02; 3:21:59 PM by MB Only display 'update' link if auto update is disabled. This script returns a string which appears in the Status Center on the Radio UserLand home page. local s = activeRendererInfo.description //displayed string adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs s = s + ( " vs: " + activeRendererInfo.version + ".
" ); if activeRendererSuite.utils.serialOk() // if aR is registered if ! adrPrefs^.activeRenderer.autoUpdate // and auto-update is disabled s = s + "** update **" else // if aR is not registered s = s + "** register **" s = s + activeRendererSuite.gui.regWindow () // this is js code that pops under a window if aR is unregistered return s „€€„€€€€€€€€€€€€€bH€Ébà‘¬.9Geneva »—ë»—ëž%ïLANDÿÿÿÿÿÿmac on rssRenderer ( rss = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, flIncludeChannelTitle = false, flCollapseChannelTitle = false, itemCnt = 0, expandedCnt = 0, titleWordCnt = 8, flCreateHeader = false ) Information 3/3/03; 4:36:30 PM by MB Corrected bug in items handling, allow for items without descriptions 2/27/03; 3:56:33 PM by MB Completed HTML generation 2/25/03; 9:29:57 PM by MB Added meaningful tags content retrieval logics 2/22/03; 6:09:59 PM by MB Added comments and main tags detection logics 2/19/03; 6:41:06 PM by MB Created from scratch local html = "\r\r" // whole outline's rendered HTML string noSubsImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol1.gif" ) expandedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif" ) collapsedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol3.gif" ) beginTag = 0 // start of current tag position endTag = 0 // end of current tag position flHeader = false // header mode flag nodeCnt = 0 // node counter level = 0 // current outline level offset = 0 // start of line offset based on current level title = "" // current channel or item title header = "" // current item generated header node if necessary link = "" // current channel or item link description = "" // current channel or item description guid = "" // current item guid pubDate = "" // current item publication date item = 0 // items counter on processHeader () // skip all information before the first tag rss = string.delete ( rss, 1, string.patternMatch ( "" ); // root div html = html + "
"; // single row table + left cell if hasChildren // if the node has children html = html + ( "" ); // link for active expand/collapse wedge if isExpanded // if the node is expanded wedgeImg = expandedImg wedgeTitle = "collapse" else // if the node is collapsed wedgeImg = collapsedImg wedgeTitle = "expand" else // if the node is childless wedgeImg = noSubsImg wedgeTitle = "" html = html + ( "\"wedge\"" ); // wedge image if hasChildren // if the node has children html = html + "" // close link html = html + ""; // close left cell, open right cell if l // add a link if it was passed along html = html + ( "" ); html = html + s; // node text inside span if l // close the link if it was passed along html = html + "" html = html + "
"; // close span, cell, row and table if hasChildren // if the node has children if isExpanded // set class attribute according to expansion state activeClass = "expanded" else activeClass = "collapsed" offset++ html = html + ( "\r" + string.filledstring ("\t", level + offset ) + "
\r" ); // embedding div for children nodes else // if the node is childless html = html + "
\r"; // close div on flushNode () // close the current node in the HTML outline html = html + ( string.filledstring ("\t", level + --offset ) + "
\r" ); html = html + ( string.filledstring ("\t", --level + offset ) + "\r" ); on getTagContent () // Get content between opening and closing XML tags local ( content = "" ) rss = string.delete ( rss, 1, endTag ) // strip current tag from body beginTag = string.patternMatch ( " 0 local ( before = string.mid ( s, 1, string.patternMatch ( "<", s ) - 1 ) ) local ( after = string.mid ( s, string.patternMatch ( ">", s ) + 4, string.length ( s ) - ( string.patternMatch ( ">", s ) + 3 ) ) ) s = before + after return s on cleanHtmlTags ( s, t, r = "" ) // Cleanup HTML tags in s, replacing t by r local p = string.patternMatch ( "<" + string.lower ( t ), s ) before if p == 0 p = string.patternMatch ( "<" + string.upper ( t ), s ) while p > 0 before = string.mid ( s, 1, p -1 ) s = string.mid ( s, p, string.length ( s ) ) p = string.patternMatch ( ">", s ) + 3 s = before + r + string.mid ( s, p + 1, string.length ( s ) ) p = string.patternMatch ( "<" + string.lower ( t ), s ) if p == 0 p = string.patternMatch ( "<" + string.upper ( t ), s ) return s on processTag ( s ) // process XML tags as they come along local tag = string.firstWord ( s ) // current tag's token, devoid of attributes hasChildren = false // true if the current node has children isExpanded = false // true if the current node is visible and its visible node count is included in the expansionString case tag "/rss" // tag, time to bail out of the calling loop if flIncludeChannelTitle // flush channel title node if necessary flushNode () return false "channel" // tag, set header mode flHeader = true "item" // tag, reset header mode, build a node for the channel title if flIncludeChannelTitle is true and first occurence of tag item++ // increment items counter if flHeader if flIncludeChannelTitle hasChildren = true if ! flCollapseChannelTitle isExpanded = true addNode ( title, link ) level++ flHeader = false title = "" link = "" description = "" pubDate = "" "title" // tag, retrieve title's content title = getTagContent () "link" // <link> tag, retrieve link's content link = getTagContent () "description" // <description> tag, retrieve descriptions' content description = getTagContent () "guid" // <guid> tag, retrieve guid's content guid = getTagContent () "pubDate" // <pubDate> tag, retrieve date's content local d = date ( getTagContent () ) t = date.timeString ( d ) pubDate = date.shortString ( d ) + " - " + string.mid ( t, 1, string.length ( t ) - 6 ) + string.lower ( string.mid ( t, string.length ( t ) - 2, 3 ) ) + " GMT" "dc:date" // <dc:date> tag, retrieve date's content pubDate = getTagContent () "/item" // </item> tag, build an item note in the HTML outline if itemCnt == 0 || item <= itemCnt // if we are within item display range local ( additionalData = "" ) if ! title // If title is missing, try to create one from description local ( p = string.patternMatch ( ". ", description ) ) if p > 0 title = string.mid ( description, 1, p ) else title = description if title endsWith "." title = string.mid ( title, 1, string.length ( title ) - 1 ) local ( t = stripHtmlTags ( title ) ) // strip all HTML tags from title if string.countWords ( t ) > titleWordCnt // truncate title if necessary local pivot = string.nthWord ( t, titleWordCnt + 1 ) support = string.nthWord ( t, titleWordCnt + 2 ) if support pivot = pivot + " " + support p = string.patternMatch ( pivot, t ) t = string.mid ( t, 1, p - 1 ) + "..." if guid || ( ! guid && link ) // insert link in last word if permalink to the post appears to be defined local permalink = guid p = string.patternMatch ( string.lastWord ( t ), t ) if ! permalink permalink = link t = string.mid ( t, 1, p - 1) + "<a href=\"" + permalink + "\" target=\"_blank\">" + string.mid ( t, p, string.length ( t ) ) hasChildren = true if expandedCnt > 0 && item <= expandedCnt // set title expansion state isExpanded = true else isExpanded = false addNode ( t ) // output title if flCreateHeader // if item header node creation requested local ( p = string.patternMatch ( ". ", description ) ) if p > 0 header = cleanHtmlTags ( string.mid ( description, 1, p ), "img", "[img] " ) // retrieve first sentence, cleaning up IMG tags header = cleanHtmlTags ( header, "p" ) // clean up P tags header = cleanHtmlTags ( header, "/p" ) header = cleanHtmlTags ( header, "blockquote" ) // clean up BLOCKQUOTE tags header = cleanHtmlTags ( header, "/blockquote" ) header = cleanHtmlTags ( header, "br" ) // clean up BR tags header = cleanHtmlTags ( header, "hr" ) // clean up HR tags description = string.mid ( description, p + 2, string.length ( description ) - ( p + 1 ) ) // remove header from description level++ // if description hasChildren = true else hasChildren = false isExpanded = false addNode ( header ) isExpanded = false hasChildren = false level++ if description addNode ( description ) if pubDate additionalData = additionalData + pubDate if link if pubDate additionalData = additionalData + " - " additionalData = additionalData + "[<a href=\"" + link + "\">link</a>]" if guid if pubDate || link additionalData = additionalData + " - " additionalData = additionalData + "[<a href=\"" + guid + "\">guid</a>]" addNode ( additionalData ) if flCreateHeader && header && description flushNode () flushNode () title = "" header = "" link = "" description = "" guid = "" pubDate = "" return true // stay in the calling loop until </rss> is detected if ! uniqId // assign a unique node id prefix if none is specified in parameters uniqId = string ( random ( 1, 9 ) ) processHeader () // jump to starting point in rss source string while true // loop for all tags after <rss> beginTag = string.patternMatch ( "<", rss ) // locate start of tag position endTag = string.patternMatch ( ">", rss ) // locate end of tag position if ! processTag ( string.mid ( rss, beginTag +1, endTag - beginTag -1 ) ) // process current tag, stop when false is returned break rss = string.delete ( rss, beginTag, endTag - beginTag + 1 ) // strip current tag from body html= string.multipleReplaceAll ( html, @activeRendererData.entities, false ) // convert entity encoded characters html = html + "<!-- end of rendered news feed -->\r"; return html bundle // test code local ( x, w, start, stop, s ) file.getFileDialog ("Pick a file, any file", @x, 0) s = file.readWholeFile ( x ) start = clock.ticks () w = rssRenderer ( rss:s, flIncludeChannelTitle:true, flCollapseChannelTitle:true, flCreateHeader:true ) z = string.replaceAll ( w, "'", "\\'" ) z = string.replaceAll ( z, "\r", "'\r+ '" ) z = "retrieveHtml ('" + z + "');" stop = clock.ticks () dialog.alert ( stop - start ) wp.newTextObject ( z, @temp.test ) edit ( @temp.test ) €�����„�����„�����€�����„�����������„�����������€�����������€�����������€�����������������������������������������������������������������������������������������������������������€�����������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������€�����������������������������������������������€�����������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������€�����€�����������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������4]€�”ù�����à‘��B���Geneva���������������������������� ��������������»—ë»—ë������,�ͱLANDÿÿÿÿÿÿ������mac ������������on render () Information 2/28/03; 11:19:12 AM by MB Created from scratch on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" on buildImgCache ( s ) // Adds HTML for image inclusion cache s = s + "\r<!-- Image inclusion cache -->\r" s = s + "\t<img id=\"hiddenImg\" style=\"position:absolute; top:0px; left:0px; visibility:hidden\" src=\"\" alt=\"noseeum\">\r" s = s + "<script type=\"text/javascript\"><!--\r" s = s + "\t\tvar cachedImg = document.getElementById('hiddenImg');\r" s = s + "\t\t//--></script>\r" s = s + "<!-- End of cache -->\r" return s local s = string ( activeRendererData.guichuncks.objects.renderer ) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction getargs argTable wedge = "../../images/help.gif" defKeepSynched = "" defUseYahoo = "" adrBlog = radio.weblog.init () demoUrl = "http://www.scripting.com/rss.xml" url urlList outlineString = "" itemCnt = 0 expandedCnt = 0 titleWordCnt = 8 flIncludeChannelTitle = false flCollapseChannelTitle = false flCreateHeader = false cssClassName = "active" cssClassLevel = 0 linkAttribute = "url" flDisplayHTMLWedge = false targetFrame = "" flDisplayDirectives = false uniqId = "" opmlCall = "transclude" flDoClick = false flRoll = false activeRendererSuite.utils.buildPathArgs ( @getargs ) // Parses get args to getargs table if defined ( getargs.action ) // a GET request has been issued, process it if defined ( getargs.src ) url = getargs.src urlList = string.urlSplit ( url ) if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file if ( system.environment.isMac ) regex.subst ( "file:///volumes", "file://", @url ) // clean up url on MacOS systems outlineString = file.readWholeFile ( file.urlToFile ( url ) ) // retrieve from filesystem else if string.lower ( urlList[1] ) beginsWith "http:" // if it's a bona fide http url if string.countFields ( urlList[2], ":" ) == 2 // if a port is specified server = string.nthField ( urlList[2], ":", 1 ) port = string.nthField ( urlList[2], ":", 2 ) else server = urlList[2] port = "80" outlineString = tcp.examples.httpGet ( server, urlList[3], port ) // retrieve via http else s = "exotic url schemes are not rendered for now. Check: " + url if outlineString // if an actual string was retrieved local isXml = string.patternMatch ( "<?xml", outlineString ) isOpml = string.patternMatch ( "<opml", outlineString ) isRss = string.patternMatch ( "<rss", outlineString ) if isXml // is the retrieved content XML ? if defined ( getargs.uniqId ) uniqId = number ( string.trimWhiteSpace ( getargs.uniqId ) ) if defined ( getargs.cssClassName ) cssClassName = string.trimWhiteSpace ( getargs.cssClassName ) if defined ( getargs.cssClassLevel ) cssClassLevel = number ( string.trimWhiteSpace ( getargs.cssClassLevel ) ) if isOpml // well, is it OPML ? if defined ( getargs.linkAttribute ) linkAttribute = string.trimWhiteSpace ( getargs.linkAttribute ) if defined ( getargs.opmlCall ) opmlCall = string.trimWhiteSpace ( getargs.opmlCall ) if defined ( getargs.targetFrame ) targetFrame = number ( string.trimWhiteSpace ( getargs.targetFrame ) ) flDisplayHTMLWedge = defined ( getargs.flDisplayHTMLWedge ) flDisplayDirectives = defined ( getargs.flDisplayDirectives ) flDoClick = defined ( getargs.flDoClick ) flRoll = defined ( getargs.flRoll ) s = activeRendererSuite.activeRenderer ( opml:outlineString, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, link:linkAttribute, opmlCall:opmlCall, targetFrame:targetFrame, flDisplayHTMLWedge:flDisplayHTMLWedge, flDoClick:flDoClick, flDisplayDirectives:flDisplayDirectives, flRoll:flRoll ) else if isRss // or is it RSS ? if defined ( getargs.itemCnt ) itemCnt = number ( string.trimWhiteSpace ( getargs.itemCnt ) ) if defined ( getargs.expandedCnt ) expandedCnt = number ( string.trimWhiteSpace ( getargs.expandedCnt ) ) if defined ( getargs.titleWordCnt ) titleWordCnt = number ( string.trimWhiteSpace ( getargs.titleWordCnt ) ) flIncludeChannelTitle = defined ( getargs.flIncludeChannelTitle ) flCollapseChannelTitle = defined ( getargs.flCollapseChannelTitle ) flCreateHeader = defined ( getargs.flCreateHeader ) s = activeRendererSuite.rssRenderer ( rss:outlineString, uniqId:uniqId, cssClassName:cssClassName, cssClassLevel:cssClassLevel, flIncludeChannelTitle:flIncludeChannelTitle, flCollapseChannelTitle:flCollapseChannelTitle, itemCnt:itemCnt, expandedCnt:expandedCnt, titleWordCnt:titleWordCnt, flCreateHeader:flCreateHeader ) else s = " The XML content at this address does not appear to be valid OPML or RSS. Check " + url s = buildImgCache ( s ) // add HTML for image inclusion cache else s = "The content at this address does not appear to be valid XML. Check " + url return s if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + 5335 tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/render/" s = string.replaceAll ( s, "##action##", tAction ) s = string.replaceAll ( s, "##aRversion##", activeRendererInfo.version ) s = string.replaceAll ( s, "##url##", demoUrl ) s = string.replaceAll ( s, "##itemCnt##", itemCnt ) s = string.replaceAll ( s, "##expandedCnt##", expandedCnt ) s = string.replaceAll ( s, "##titleWordCnt##", titleWordCnt ) s = string.replaceAll ( s, "##flIncludeChannelTitle##", checked ( flIncludeChannelTitle ) ) s = string.replaceAll ( s, "##flCollapseChannelTitle##", checked ( flCollapseChannelTitle ) ) s = string.replaceAll ( s, "##flCreateHeader##", checked ( flCreateHeader ) ) s = string.replaceAll ( s, "##cssClassName##", cssClassName ) s = string.replaceAll ( s, "##cssClassLevel##", cssClassLevel ) s = string.replaceAll ( s, "##linkAttribute##", linkAttribute ) s = string.replaceAll ( s, "##flDisplayHTMLWedge##", checked ( flDisplayHTMLWedge ) ) s = string.replaceAll ( s, "##flRoll##", checked ( flRoll ) ) s = string.replaceAll ( s, "##flDisplayDirectives##", checked ( flDisplayDirectives ) ) s = string.replaceAll ( s, "##mySubscriptions##", string.urlEncode ( file.fileToURL ( radio.file.getSubFolder ( "gems" ) + "mySubscriptions.opml" ) ) ) s = string.replaceAll ( s, "##myOutlines##", string.urlEncode ( file.fileToURL ( radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" ) ) ) return s €�����„�����€�����€�����€�����������������������������€�����������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������Ì€�w!�����à‘�<��ü���Geneva���������������������������� ��������������»—ê»—ê������ª°»vLANDÿÿÿÿÿÿ������mac ������������on displayServerName ( name ) Information 1/14/03; 11:23:14 PM by MB Derived from webEdit suite and liveTopics 17/09/02; 22:21:01 by MM According to Jake menu's can be a bit dodgy, the (indirect) call to radio.weblog.init() via getPrefs() may be occurring before the OS is ready to load weblogData.root => MB's crash. Now we guard it for the startup period and if defined ( weblogData ) if name == activeRendererSuite.utils.getPrefs ()^.updateServer return ( "!" + name ) return ( name ) €�����„�����€�����€�����€�����������€�����€�����€�����€�����€�°€�te�����3$�¾������Geneva���������������������������� ��������������¸ô§ º‰›��Æ��'ï�LANDÿÿÿÿÿÿ������mac ������������activeRenderer About Help... - Browser... Preferences... Bookmarks... Register... - Set Update Server =activeRendererSuite.menuItems.displayServerName("alpha") =activeRendererSuite.menuItems.displayServerName("stable") Update... - Uninstal... €�����€���� ���áR����€���� ���—c����€�����€���� ���–y����€���� ���¸†����€���� ���]½����€���� ���~Å����€�����€���������� ���à‘��������� ���•–����€���� ���|����€�����€���� ���]������9€�r �����3$D��ç���Geneva���������������������������� ��������������»—ê»—ê�����TŒÒ¯LANDÿÿÿÿÿÿ������mac ������������on opmlRender ( url, cssClassName = "l", flExpand = false, depth = 0, length = 0 ) header comments 6/26/02; 7:27:24 PM by MB Removed class in a tag attribute when rendering link attributes. vs 1.0.2 - last updated 6/18/02 by MB optimized code to use one global string instead of modifying the outline on the fly. local urlList opmlText ol level = 0 node = 0 s tst urlList = string.urlSplit (url) // parse url if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file opmlText = file.readWholeFile ( file.urlToFile ( url ) ) else // otherwise it must be http opmlText = string.httpResultSplit ( tcp.httpClient ( server:urlList [2], path:urlList [3], flAcceptOpml:true ) ) if system.environment.isMac // take care of Mac encoding opmlText = latinToMac.convert ( opmlText ) op.xmlToOutline ( opmlText, @ol, true ) // parse xml to an outline object target.set ( @ol ) op.firstSummit () // start at the top if flExpand // expand all nodes if required op.fullExpand () on visit () // render one outline node loop local u hasSubs = op.countSubs ( 1 ) > 0 // does the node have children hasUrl = op.attributes.getOne ( "url", @u ) // does the node have a link attribute if length == 0 or node < length if depth == 0 or level < depth s = s + ( "<p class=\"" + cssClassName + ( level + 1 ) + "\">" ); if hasUrl s = s + ( "<a href=\"" + u + "\">" ); s = s + op.getLineText (); if hasUrl s = s + "</a>"; s = s + "</p>"; if hasSubs if op.go ( right, 1 ) level++ visit () level-- op.go ( left, 1 ) if ( not op.go ( down, 1 ) ) break else if level == 0 node++ visit () // get going with the root node return ( s ) €�����„�����„�����€�����€�����������€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�£€�iq�����Æf Š��_<����Geneva���������������������������� ��������������»—ê»—ê������.�nÉhLANDÿÿÿÿÿÿ������mac ������������on instal () Information 3/3/03; 2:47:09 PM by MB Added update of myOutlines.opml outline 2/7/03; 4:04:38 PM by MB Updated installation of activeRendererFunctions and storyBox macros 1/28/03; 5:49:56 PM by MB Added fixing of end of lines in text files for Windows systems 1/21/03; 4:40:47 PM by MB Added installation of uninstal code 1/17/03; 4:45:37 PM by MB Modified installation of activeRoll macro. 1/14/03; 10:45:59 PM by MB Added updateServer pref, defaults to stable 11/14/02; 3:11:51 PM by MB Modified installation of outlines/#prefs.txt for the flDisplayHTMLWedge directive Fix liveTopics preferences if liveTopics is installed. 11/10/02; 7:34:40 PM by MB Modified installation of activeRendererFunctions macro. 11/1/02; 5:58:55 PM by MB Added Yahoo bookmarks preferences Updated bookmarks synchronization for Yahoo bookmarks 10/29/02; 7:05:08 PM by MB Provided multiple backups when day and item templates are updated 22.10.02; 21:47:26 Uhr by AR/MB Code review with Andre Radke Renounced deleting anything in the user table Given up on all wp object processing Cleaned up update launch if auto-update is enabled 10/11/02; 6:07:28 PM by MB Added xsl stylesheets installation in www/gems/activeRenderer 9/10/02; 7:01:01 PM by MB Added bookmark synchronization if pref is checked Added bookmarks preferences initialization Added rslite javascript code installation 7/31/02; 9:05:29 PM by MB Added activeRoll macro installation 7/31/02; 9:10:03 AM by MB Modified to fix multiple end of lines in the middle of #Prefs.txt if it ever occurs when outline-style weblog presentation is checked 7/16/02; 1:54:12 PM by MB Modified to add displayLatest user preference, defaults to true. 7/12/02; 10:30:14 AM by MB Added logging of installation start. Modified call to daySwitch macro 7/10/02; 4:25:43 PM by MB Added startTime parameter passing to checkHomeTemplate, thanks Brian. 7/9/02; 5:56:35 PM by MB inserted a newLine before #nodeClass in www/#prefs.txt when missing from the file's last line. Added autoUpstream user preference, true by default. Do not touch #homeTemplate.txt and #prefs.txt in www if outlineWeblog pref is not checked 7/4/02; 1:47:16 PM by MB Perform auto-update only if the tool is registered. 7/1/02; 11:18:50 AM by MB Corrected wedge image instal logging. 6/29/02; 10:15:16 AM by MB Added logging to Radio events log. Added synchronization with update thread. 6/28/02; 11:36:47 PM by MB Added installation of autoUpdate preference. Update activeRenderer at startup if true. 6/26/02; 8:17:29 PM by MB Corrected bug in auto update table installation. Was resetting serial number everytime radio was started. Added nodeFormat macro installation 6/25/02; 12:21:49 PM by MB Created local user preferences table if needed. Modified url of javascript gifs with address of current weblog, not slam. Modified Macros folder cleanup to account for Windows systems on getVersion ( txt ) // Returns a version number from the parameter string local matchList = {} pattern = "version[: ]+([0-9\.a-zA-Z]+)" version = "" regex.extract ( pattern, @txt, @matchList, {1} ) if sizeOf ( matchList ) > 0 version = matchList[1] return version on getNewLineMarker () // Returns end of line sequence according to system local ( s = "\r" ) if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" s = s + "\n"; return s on touchOPML ( path ) // Touch path if it's an opml file if regex.easyMatch ( ".*\\.opml$", path ) file.touchPath ( path ) on eolFix ( txt ) // Fixes end of line marker according to operating system regex.subst ( "[\r\n]+", "\r", @txt ) // Remove any \n marker and multiple \r markers if string.lower ( string.mid ( sys.os (), 1, 3 ) ) == "win" // Fix eol markers for Windows systems txt = string.replaceAll ( txt, "\r", "\r\n" ) return txt local adrBlog = radio.weblog.init () adrPrefs = @adrBlog^.prefs startTime = clock.ticks() radio.log.add( "activeRenderer", "Beginning installation.", startTime ) bundle // Instal user preferences table if ! defined ( adrPrefs^.activeRenderer ) new ( tabletype, @adrPrefs^.activeRenderer ) table.copycontents ( @activeRendererData.prefs, @adrPrefs^.activeRenderer ) radio.log.add( "activeRenderer", "Default preferences table installed.", startTime ) if ! defined ( adrPrefs^.activeRenderer.autoUpdate ) adrPrefs^.activeRenderer.autoUpdate = activeRendererData.prefs.autoUpdate if ! defined ( adrPrefs^.activeRenderer.autoUpstream ) adrPrefs^.activeRenderer.autoUpstream = activeRendererData.prefs.autoUpstream if ! defined ( adrPrefs^.activeRenderer.displayLatest ) adrPrefs^.activeRenderer.displayLatest = activeRendererData.prefs.displayLatest if ! defined ( adrPrefs^.activeRenderer.bookmarksPath ) adrPrefs^.activeRenderer.bookmarksPath = "" if ! defined ( adrPrefs^.activeRenderer.outlinePath ) adrPrefs^.activeRenderer.outlinePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "bookmarks.opml" if ! defined ( adrPrefs^.activeRenderer.keepSynched ) adrPrefs^.activeRenderer.keepSynched = false if ! defined ( adrPrefs^.activeRenderer.useYahoo ) adrPrefs^.activeRenderer.useYahoo = false if ! defined ( adrPrefs^.activeRenderer.myYahoo ) new ( tabletype, @adrPrefs^.activeRenderer.myYahoo ) adrPrefs^.activeRenderer.myYahoo.userId = "" adrPrefs^.activeRenderer.myYahoo.password = "" if ! defined ( adrPrefs^.activeRenderer.updateServer ) adrPrefs^.activeRenderer.updateServer = "stable" bundle // Instal update table if ! defined ( user.rootUpdates.servers.activeRenderer ) new ( tabletype, @user.rootUpdates.servers.activeRenderer ) table.copycontents ( @activeRendererData.rootupdatetable, @user.rootUpdates.servers.activeRenderer ) radio.log.add( "activeRenderer", "Default update table installed.", startTime ) if adrPrefs^.activeRenderer.updateServer == "alpha" user.rootUpdates.servers.activeRenderer.server = activeRendererData.prefs.alphaServer.server user.rootUpdates.servers.activeRenderer.port = activeRendererData.prefs.alphaServer.port bundle // Update tool if auto update enabled and tool registered if adrPrefs^.activeRenderer.autoUpdate and activeRendererSuite.utils.serialOk () if !defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.update = activeRendererSuite.update // Run a copy of the update code in a separate thread thread.callScript ("system.temp.activeRenderer.update", { thread.getCurrentID () } ) thread.sleepFor ( 30 ) // sleep for the next 30 seconds, or a wake-up from the update code newLine = getNewLineMarker () // Get proper new line sequence bundle // Instal rendering code if ( ! defined ( user.html.renderers.activeRenderer ) ) script.newScriptObject ("on activeRenderer ( ol ) { activeRendererSuite.activeRenderer ( ol ) }", @user.html.renderers.activeRenderer ) script.compile ( @user.html.renderers.activeRenderer ) bundle // Clean-up Macros folder macrosPath = Frontier.getProgramPath () regex.subst ("[^:\\\\]+$", "", @macrosPath) // Strip everything after last path separator macrosPath = macrosPath + "Macros" + file.getPathChar() if file.exists ( macrosPath + "activeRendererHeader.txt" ) // Those 4 macros... file.delete ( macrosPath + "activeRendererHeader.txt" ) if file.exists ( macrosPath + "activeRendererFunctions.txt" ) // ...may have existed... file.delete ( macrosPath + "activeRendererFunctions.txt" ) if file.exists ( macrosPath + "espressoCup.txt" ) // ...in separate text files... file.delete ( macrosPath + "espressoCup.txt" ) if file.exists ( macrosPath + "storyBox.txt" ) // ...before aR release. file.delete ( macrosPath + "storyBox.txt" ) bundle // Instal activeRendererHeader macro if ( defined ( user.html.macros.activeRendererHeader ) ) delete ( @user.html.macros.activeRendererHeader ) script.newScriptObject ("on activeRendererHeader () { activeRendererSuite.macros.activeRendererHeader () }", @user.html.macros.activeRendererHeader ) script.compile ( @user.html.macros.activeRendererHeader ) bundle // Instal activeRendererFunctions macro if ( defined ( user.html.macros.activeRendererFunctions ) ) delete ( @user.html.macros.activeRendererFunctions ) script.newScriptObject ("on activeRendererFunctions ( titleText = \"outline\", titleClass = \"active\", flIncludeLinks = true, linkClass = \"active\", nodeClass = \"active\", helpText = \"how this works\", helpClass = \"help\", flImageCache = true, flVertical = true ) { activeRendererSuite.macros.activeRendererFunctions ( titleText, titleClass, flIncludeLinks, linkClass, nodeClass, helpText, helpClass, flImageCache, flVertical ) }", @user.html.macros.activeRendererFunctions ) script.compile ( @user.html.macros.activeRendererFunctions ) bundle // Instal espressoCup macro if ( ! defined ( user.html.macros.espressoCup ) ) script.newScriptObject ("on espressoCup ( flag ) { activeRendererSuite.macros.espressoCup ( flag ) }", @user.html.macros.espressoCup ) script.compile ( @user.html.macros.espressoCup ) bundle // Instal storyBox macro if ( defined ( user.html.macros.storyBox ) ) delete ( @user.html.macros.storyBox ) script.newScriptObject ("on storyBox ( class = \"storybox\", type = \"opml 1.0\", updated = \"last updated\" ) { activeRendererSuite.macros.storyBox ( class, type, updated ) }", @user.html.macros.storyBox ) script.compile ( @user.html.macros.storyBox ) bundle // Instal nodeFormat macro if ( ! defined ( user.html.macros.nodeFormat ) ) script.newScriptObject ("on nodeFormat ( num, flag=true ) { activeRendererSuite.macros.nodeFormat ( num, flag ) }", @user.html.macros.nodeFormat ) script.compile ( @user.html.macros.nodeFormat ) bundle // Instal nodeState macro if ( ! defined ( user.html.macros.nodeState ) ) script.newScriptObject ("on nodeState ( day, tpl=\"\" ) { activeRendererSuite.macros.nodeState ( day, tpl ) }", @user.html.macros.nodeState ) script.compile ( @user.html.macros.nodeState ) bundle // Instal daySwitch macro if ( ! defined (user.html.macros.daySwitch ) ) script.newScriptObject ("on daySwitch ( daysPerLine = 7 ) { activeRendererSuite.macros.daySwitch ( daysPerLine ) }", @user.html.macros.daySwitch ) script.compile ( @user.html.macros.daySwitch ) bundle // Instal opmlRender macro if ( ! defined ( user.html.macros.opmlRender ) ) script.newScriptObject ("on opmlRender ( url, cssName = \"l\", flExpand = false, depth = 0, length = 0 ) { activeRendererSuite.macros.opmlRender ( url, cssName, flExpand, depth, length ) }", @user.html.macros.opmlRender ) script.compile ( @user.html.macros.opmlRender ) bundle // Instal activeRoll macro if defined ( user.html.macros.activeRoll ) // temporary for replacement delete ( @user.html.macros.activeRoll ) if ! defined ( user.html.macros.activeRoll ) script.newScriptObject ("on activeRoll ( url, class=\"roll\", target=\"_new\", title = \"\", flRoll = true, action = \"transclude\" ) { activeRendererSuite.macros.activeRoll ( url, class, target, title, flRoll, action ) }", @user.html.macros.activeRoll ) script.compile ( @user.html.macros.opmlRender ) bundle // Create activeRenderer folder in www/gems if non existent basePath = user.radio.prefs.wwwfolder + "gems" basePath = basePath + file.getPathChar() + "activeRenderer" file.sureFolder ( basePath ) bundle // Create or update CSS file if non existent or earlier version local cssPath = basePath + file.getPathChar() + "outliner.css" if ! file.exists ( cssPath ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( cssPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.css ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( cssPath, eolFix ( string ( activeRendererData.texts.css ) ) ) radio.log.add ( "activeRenderer", "CSS file updated.", startTime ) bundle // Create or update outliner Javascript file if non existent or earlier version local jsPath = basePath + file.getPathChar() + "outliner.txt" js = eolFix ( string ( activeRendererData.texts.javascript ) ) js = string.replaceAll ( js, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if ! file.exists ( jsPath ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "outliner JavaScript code updated.", startTime ) bundle // Create or update outliner xsl/html file if non existent or earlier version local xslPath = basePath + file.getPathChar() + "outliner_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_html ) ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if ! file.exists ( xslPath ) file.writeWholeFile ( xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add ( "activeRenderer", "outliner xsl/html code updated.", startTime ) bundle // Create or update outliner xsl/js file if non existent or earlier version local xslPath = basePath + file.getPathChar() + "outliner_js_xsl.txt" xsl = eolFix ( string ( activeRendererData.texts.xsl_js ) ) xsl = string.replaceAll ( xsl, "http://radio.weblogs.com/0104487/", radio.weblog.getUrl () ) if ( ! file.exists ( xslPath ) ) file.writeWholeFile ( xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( xslPath ) ) updateVersion = getVersion ( xsl ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile (xslPath, xsl ) radio.log.add( "activeRenderer", "outliner xsl/js code updated.", startTime ) bundle // Create or update rslite Javascript file if non existent or earlier version local jsPath = basePath + file.getPathChar() + "rslite.txt" js = eolFix ( string ( activeRendererData.texts.rslite ) ) if ! file.exists ( jsPath ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( jsPath ) ) updateVersion = getVersion ( js ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( jsPath, js ) radio.log.add ( "activeRenderer", "rslite JavaScript code updated.", startTime ) bundle // Create wedge images if needed for gifAdr in @activeRendererData.images local ( gifPath = basePath + file.getPathChar() + nameOf ( gifAdr^ ) + ".gif" ) if ! file.exists ( gifPath ) file.writeWholeFile ( gifPath, gifAdr^ ) radio.log.add ( "activeRenderer", nameOf ( gifAdr^ ) + " wedge image installed.", startTime ) bundle // Create outlines folder in www if non existent basePath = user.radio.prefs.wwwfolder + "outlines" file.sureFolder ( basePath ) bundle // Create or update #prefs.txt in www/outlines if non existent or earlier version local ( prefPath = basePath + file.getPathChar() + "#prefs.txt" ) if ! file.exists ( prefPath ) file.writeWholeFile ( prefPath, eolFix ( string ( activeRendererData.texts.prefs ) ) ) radio.log.add ( "activeRenderer", "default #prefs.txt file installed in outlines folder.", startTime ) else local prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge true" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add ( "activeRenderer", "#prefs.txt file updated in outlines folder.", startTime ) bundle // Create or update #template.txt in www/outlines if non existent or earlier version local ( templatePath = basePath + file.getPathChar() + "#template.txt" ) if ( ! file.exists ( templatePath ) ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "default #templates.txt file installed in outlines folder.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( templatePath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.template ) ) if date.versionLessThan ( currentVersion, updateVersion ) file.writeWholeFile ( templatePath, eolFix ( string ( activeRendererData.texts.template ) ) ) radio.log.add ( "activeRenderer", "#template.txt file updated in outlines folder.", startTime ) bundle // Render instant outline opml file if it exists and if auto upstream pref is checked local ( ioPath = user.radio.prefs.wwwfolder + "instantOutliner" ) if file.exists ( ioPath ) and adrPrefs^.activeRenderer.autoUpstream local srcPath = ioPath + file.getPathChar() + string.innerCaseName (user.prefs.name) + ".opml" dstPath = basePath + file.getPathChar() + string.innerCaseName (user.prefs.name) + ".opml" if file.exists ( srcPath ) file.copy ( srcPath, dstPath ) else radio.log.add ( "activeRenderer", "instant outline file " + srcPath +" not found.", startTime ) bundle // Instal outline-style weblog presentation local basePath = user.radio.prefs.wwwfolder + "gems" + file.getPathChar() + "activeRenderer" + file.getPathChar() backupPath = basePath + "backup" customPath = backupPath + file.getPathChar () + "custom" file.sureFolder ( backupPath ) // create backup folder if non existent file.sureFolder ( customPath ) // create custom versions backup folder if non existent if adrPrefs^.activeRenderer.outlineWeblog // if outlined weblog style is requested activeRendererSuite.utils.checkHomeTemplate ( startTime ) // Update #homeTemplate.txt in www when necessary activeRendererSuite.utils.checkPrefs ( startTime ) // Update #Prefs.txt file when necessary bundle // Update #dayTemplate.txt if non existent or earlier version local dayPath = user.radio.prefs.wwwfolder + "#dayTemplate.txt" if ! file.exists ( dayPath ) file.writeWholeFile ( dayPath, string ( activeRendererData.texts.dayTemplate ) ) radio.log.add ( "activeRenderer", dayPath + " outline style template installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( dayPath ) ) updateVersion = getVersion ( string ( activeRendererData.texts.dayTemplate ) ) if date.versionLessThan ( currentVersion, updateVersion ) and currentVersion != "" // If a newer version is available and days are outlined local archivePath = backupPath + file.getPathChar() + "#dayTemplate.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( dayPath, archivePath ) // Backup current day template to aR's backup folder file.writeWholeFile ( dayPath, string ( activeRendererData.texts.dayTemplate ) ) radio.log.add ( "activeRenderer", dayPath + " outline style template updated.", startTime ) bundle // Update #itemTemplate.txt if non existent or earlier version local itemPath = user.radio.prefs.wwwfolder + "#itemTemplate.txt" if ! file.exists ( itemPath ) file.writeWholeFile ( itemPath, string ( activeRendererData.texts.itemTemplate ) ) radio.log.add ( "activeRenderer", itemPath + " outline style template installed.", startTime ) else local currentVersion = getVersion ( file.readWholeFile ( itemPath ) ) updateVersion = getVersion (string ( activeRendererData.texts.itemTemplate ) ) if date.versionLessThan ( currentVersion, updateVersion ) and currentVersion != "" // If a newer version is available and items are outlined local archivePath = backupPath + file.getPathChar() + "#itemTemplate.txt" targetPath = archivePath idx = 0 while file.exists ( archivePath ) idx = idx + 1 // Increment archive index archivePath = targetPath + "." + idx file.copy ( itemPath, archivePath ) // Backup current item template to aR's backup folder file.writeWholeFile ( itemPath, string ( activeRendererData.texts.itemTemplate ) ) radio.log.add ( "activeRenderer", itemPath + " outline style template updated.", startTime ) bundle // Synchronize bookmarks outline if needed if defined ( adrPrefs^.activeRenderer.keepSynched ) if adrPrefs^.activeRenderer.keepSynched if ( adrPrefs^.activeRenderer.bookmarksPath || adrPrefs^.activeRenderer.useYahoo ) && adrPrefs^.activeRenderer.outlinePath thread.callScript ("activeRendererSuite.bookmarks.synchBookmarks", {} ) // Launch in a separate thread bundle // Create or updates myOutlines outline local ( dirPath = radio.file.getSubFolder ( "gems" ) + "myOutlines.opml" ) file.writeWholeFile ( dirPath, activeRendererSuite.utils.folderToOpml ( radio.file.getSubFolder ( "outlines" ) ) ) bundle // Instal uninstallation code if ! defined ( scratchpad.activeRenderer ) // create activeRenderer section in scratchpad if needed new ( tabletype, @scratchpad.activeRenderer ) if ! defined ( scratchpad.activeRenderer.version ) || date.versionLessThan ( scratchpad.activeRenderer.version, activeRendererInfo.version ) // if no verion yet or earlier aR version scratchpad.activeRenderer.version = activeRendererInfo.version // update version number if defined ( scratchpad.activeRenderer.uninstal ) // delete any existing code delete ( @scratchpad.activeRenderer.uninstal ) if defined ( scratchpad.activeRenderer.cleanup ) delete ( @scratchpad.activeRenderer.cleanup ) scratchpad.activeRenderer.uninstal = activeRendererSuite.uninstal // instal uninstal code scratchpad.activeRenderer.cleanup = activeRendererSuite.cleanup // instal cleanup code radio.log.add( "activeRenderer", "Updated uninstal code.", startTime ) if ! defined ( user.tools.callbacks.afterUninstall.activeRenderer ) // instal uninstal callback user.tools.callbacks.afterUninstall.activeRenderer = @scratchpad.activeRenderer.uninstal radio.log.add( "activeRenderer", "Installation complete.", startTime ) bundle // Fix liveTopics if need be if defined ( liveTopicsInfo.version ) // if liveTopics is installed local prefPath = user.radio.prefs.wwwfolder + "outlines" + file.getPathChar() + "topics" + file.getPathChar() + "#prefs.txt" if file.exists ( prefPath ) local prefs = file.readWholeFile ( prefPath ) // get current content bundle // Fix any broken end of file, just in case regex.subst ( "[\r\n]+", "\r", @prefs ) // Remove any \n marker and multiple \r markers regex.subst ( "\r+\\Z", "", @prefs ) // Remove any trailing end of line markers if string.patternMatch ( "flDisplayHTMLWedge", prefs ) == 0 prefs = prefs + cr + "#flDisplayHTMLWedge false" // Add a new line marker and the flDisplayHTMLWedge directive file.writeWholeFile ( prefPath, prefs ) // Replace with updated copy radio.log.add( "activeRenderer", "Fixed liveTopics prefs in " + file.folderFromPath ( prefPath ) + ".", startTime ) file.visitFolder ( file.folderFromPath ( prefPath ), 1, @touchOPML ) instal() // Test code €�����„�����„�����€�����„�����������„�����������„�����������„�����������„�����������„�����������������„�����������„�����������������„�����������„�����������������������������€�����������€�����������������������„�����������„�����������������„�����������„�����������������„�����������„�����������������������„�����������„�����������„�����������������„�����������������„�����������������������„�����������������������€�����������������������������������������������������€�����������������������������€�����������������€�����������������������������€�����������������������€�����€�����������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������������������������������€�����������������������������������������€�����€�����������������������€�����������������������������������������������������������������������€�����������������������������€�����������������������������€�����������������������€�����������������������������€�����������������������€�����������������������€�����������������������€�����������������������€�����������������������������������€�����������������������€�����������������������������������������������������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������������������€�����������������������������������€�����������������€�����������������������������������������������������������������������������������������€�����������������������������������������������������������������������€�����������������������������������������������������������€�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������€�����������������������������€�����������������€�����������������������������������������������������������������������������������€�����€�����������������������������������������������������������������������������������������€�������i>€��'�����Æf���.���¸ô§ »—����������������€+¶���T�������P���.���¸ô§ »¯ñ����������������������� ����ctenabledscript������æ!���T��C������?���j���¹£óñ�������� ������� ����#���/ ����7���C ����L���X ����c���o ����~���Š ����‘��� ����­���¹ ����Å editBookmarks����p�ž editPath����p� �ögetOpml����p�ÿ initPath����p�—� restoreUrl����p�çsynchBookmarks����p�¬Rupdate����p� P:updateBookmarks����p�£Ö yahooImport����p�šI��C��Ý��������6��/���Geneva���������������������������� ��������������»¯ñ»¯ñ������-�èiLANDÿÿÿÿÿÿ������mac ������������on getOPML () local pta = html.getpageTableAddress () argList = string.parseHttpArgs ( pta^.searchArgs ) path = argList[4] Frontier.bringToFront () file.putFileDialog ( "locate the destination outline file", @path ) webserver.util.setCookie ( pta, "RSLite", path ) webbrowser.bringtofront () €�����€�����€�����€�����€�����€�����€�����€�����€�������Ý��K��������H��‹���Geneva���������������������������� ��������������¹4ê¹’ªØ���K���-�èiLANDÿÿÿÿÿÿ������mac ������������on editPath () local pta = html.getpageTableAddress () argList = string.parseHttpArgs ( pta^.searchArgs ) path = argList[4] Frontier.bringToFront () if file.isFolder ( path ) file.getFolderDialog ( "locate the Favorites folder", @path ) else file.getFileDialog ( "locate the Bookmarks file", @path, 0 ) webserver.util.setCookie ( pta, "RSLite", path ) webbrowser.bringtofront () €�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�����€�������K�� B����FFFF000000060001001777AA000000000078000000001001710000001-7EFB6FBE1800000‚‚48004806394200-1‚3FE4063FE4060Â6‚394222FFFF0‚‚10‚‚3‚7A7000010000003A0000000107A740840‚‚6‚3942227A7038E0003876394600002000007AD00000000�7A7,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- Template version: 1.0.1 --> <html> <head> <META HTTP-EQUIV="Expires" CONTENT="Mon, 01 Jan 1990 01:00:00 GMT"> <%activeRendererHeader () %> <title><%title%>
<%storyBox () %>

<%title%>

home

<%activeRendererFunctions () %>

<%bodytext%> <%espressoCup ( true ) %>
<%radio.macros.editThisPageButton ()%>
<%radio.macros.staticSiteStatsImage ()%> 00040000000A0000000207A9000050000000A0000000207A90000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 40ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚2403BB3‚2403BB000A00000017000000026‚3942226‚394222000B00000005000000020Â000C0000001A000000017A7450‚1EC11D1330‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,Cý€4,4,Cþ€4,5{4,5{4,5{00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õ»½¹XÈ'§5²ˆ€ ¾ B âFFFF000000060001001777AA000000000068000000001001710000001-7EFB6FBE1800000‚‚48004806276200-1‚0Â6‚276222FFFF0‚‚10‚‚3‚13E000010000003A00000001053B40840‚‚6‚27622253B038E0002696276600002000005410000000053B,/* RSLite - Simple non-concurrent remote scripting calls. send one string, receive one string created by Brent Ashley version: 1.01 last modified 9/10/02 - Marc Barrot Specify path attribute in cookie, for Mozilla's sake. You may use and distribute this code freely, just keep this header information intact. */ function RSLiteObject(){ this.interval = 500; this.attempts = 3; this.i = new Image(); this.call = function ( page, parm ){ parm = (parm != null)? parm : ''; var d = new Date(); document.cookie = 'RSLite=x; expires=Fri, 31 Dec 1999 23:59:59 GMT; path=/;'; this.i.src = page + '?u=' + d.getTime() + '&p=' + parm; setTimeout( "RSLite.receive(1);", this.interval ); } this.receive = function ( attempt ){ var response = null; var aCookie = document.cookie.split("; "); for (var i=0; i < aCookie.length; i++){ var aCrumb = aCookie[i].split("="); if (aCrumb[0] == 'RSLite') response = aCrumb[1]; } if ( response != null ){ this.callback( unescape(response.replace(/\+/g,' ')) ); } else { if (attempt < this.attempts){ setTimeout( "RSLite.receive( " + (attempt+1) +" );",this.interval); } else { this.failure(); } } } this.callback = function( response ){ alert(response); } this.failure = function(){ alert( "RSLite timed out"); } } var RSLite; 00040000000A00000002053D0000500000015000000040E4113E053D0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚00070000002F000000020‚30Â180‚Á‚Á‚10Â170‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚29B2E03‚29B2E0000A00000017000000026‚2762226‚276222000B00000005000000020Â000C000000150000000113EE4‚6A7110‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,D(€4,D(€4,4,D(€4,D)4, Use00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹¤~¹¤³;/$Ý ^ âÎFFFF000000060001001777AA000000000065000000001001710000001-7FFB6FBE1800000‚‚480048062D200-1‚0Â6‚2D222FFFF0‚‚10‚‚3‚5400001000000360000000105440840‚‚6‚2D2223C038E0002062D8E00002000000590000000054,#flDisplayCup "regular" #renderOutlineWith "activeRenderer" #flDisplayHTMLWedge true000400000009000000020560000500000009000000020560000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 20ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000015000000023‚9C17D3‚9C17D000A00000015000000026‚2D2226‚2D222000B00000005000000020Â000C0000001700000001543B‚1F221288‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,>P4,]¬4,] 4,k¬064,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õŇ¹ùiXT3xâJÎ \FFFF000000060001001777AA000000000077000000001001710000001-7FFF6FBE1800000‚‚4800480621B200-1‚15F16515F1650Â6‚21B222FFFF0‚‚10‚‚3‚1F000010000003B0000000104C640840‚‚6‚21B2224C2038E00020E621B2500002000004CC000000004C6,
> <%nodeFormat ( <%itemNum%> )%>
<%nodeFormat ( <%itemNum%>, false )%>
<%enclosure%>
00040000000A0000000204C8000050000000A0000000204C80000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚1F32AB3‚1F32AB000A00000017000000026‚21B2226‚21B222000B00000005000000020Â000C00000015000000011F1E‚CA309E‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,4,Ùèë4,/RPC4,èû4,Óu›00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹¶I¹J € ÆOÿU½Ø \3FFFF000000060001001777AA000000000079000000001001710000001-7EFF6FBE1800000‚‚48004806D13200-1‚CB9CBDCB9CBD0Â6‚D13222FFFF0‚‚10‚‚3‚103A000010000007B00000002061640840‚‚6‚48B22260503C800047E1848B6E0616103A40840‚‚48B6D13222A24038E000D066D136000020000061C00000000616,/* version: 1.0.4 last modified 13-Oct-2002 created by Marc Barrot copyright 2002 by Precision IT Management,Inc You may use and distribute this code freely, just keep this header information intact. */ .sitename { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 48px; font-weight: bold; margin-bottom: -7px; } .description { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; } .activeTitle { margin-top: 12px; margin-bottom: 0px; font-family: Helvetica Neue Black Condensed, Impact, Arial, sans-serif; font-size: 24px; color: black; } .active { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-top: 0px; margin-bottom: 0px; } .active A:link { text-decoration: none; color: #606060; } .active A:visited { text-decoration: none; color: #606060; } .active A:active { text-decoration: none; color: #606060; } .active A:hover { text-decoration: none; color: white; background: #FF6600; } .expanded { visibility: visible; display: block; } .collapsed { visibility: hidden; display: none; } .active1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-top: 15px; margin-bottom: 5px; } .active2 { margin-top: 5px; margin-left: 15px; } .active3 { margin-top: 5px; margin-left: 15px; } .active4 { margin-top: 5px; margin-left: 15px; } .active5 { color: #606060; margin-top: 5px; margin-left: 15px; } .active6 { margin-top: 5px; margin-left: 15px; } .active7 { margin-top: 5px; margin-left: 15px; } .active8 { margin-top: 5px; 000200000A2A00000616A24, margin-left: 15px; } .active9 { margin-top: 5px; margin-left: 15px; } .storybox { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-top: 0px; margin-bottom: 0px; } .help { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9px; margin-top: 4px; } .help A:link { text-decoration: none; color: #606060; } .help A:visited { text-decoration: none; color: #606060; } .help A:hover { text-decoration: none; color: white; background: #FF6600; } .copyright { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9px; } .wedge { width: 15px; } .para { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; } .para A:link { text-decoration: none; } .para A:visited { text-decoration: none; } .para A:hover { text-decoration: underline; color: black; } .titleLink A:link { text-decoration: none; color: black; } .titleLink A:visited { text-decoration: none; color: black; } .latest { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9px; margin-top: 0px; margin-bottom: 0px; } .latest A:link { text-decoration: none; color: #606060; } .latest A:visited { text-decoration: none; color: #606060; } .latest A:hover { text-decoration: none; color: white; background: #FF6600; } .roll { margin-left: 0px; margin-right: 0px; margin-top: 0px; margin-bottom: 0px; border: 1px solid silver; padding: 4px; } .rollTitle { font-weight: bold; color: black; margin-left: 0px; margin-right: 0px; margin-top: 8x; margin-bottom: 2px; } .roll1 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-top: 0x; margin-bottom: 0px; } .roll2 { margin-top: 0px; margin-left: 15px; } .roll3 { margin-top: 0px; margin-left: 15px; } .roll4 { margin-top: 0px; margin-left: 15px; } .rollHelp { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9px; margin-top: 2px; text-align: center; } .rollHelp A:link { text-decoration: none; color: #606060; } .rollHelp A:visited { text-decoration: none; color: #606060; } .rollHelp A:hover { text-decoration: none; color: white; background: #FF6600; } .inline1 { margin-top: 5px; margin-left: 0px; } .inline2 { margin-top: 5px; margin-left: 15px; } .inline3 { margin-top: 5px; margin-left: 15px; } .inline4 { margin-top: 5px; margin-left: 15px; } .inline5 { margin-top: 5px; margin-left: 15px; } .inline6 { margin-top: 5px; margin-left: 15px; } .inline7 { margin-top: 5px; margin-left: 15px; } .inline8 { margin-top: 5px; margin-left: 15px; } .inline9 { margin-top: 5px; margin-left: 15px; } 00040000000B000000020103C000050000000B000000020103C0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 30ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚26B2533‚26B253000A00000017000000026‚D132226‚D13222000B00000005000000020Â000C0000001A00000001103AE70‚B37431030‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,Cý€4,Cý€4,4,Cý€4,Cþ€4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õÁ ¹Ð’|:,ÿýªc¯3)Vð$îGeneva »¯ñ»¯ñZ9¬ÓLANDÿÿÿÿÿÿmac
Select list:
Select outline:
OPML outline or RSS news feed url:
Rendered outline:
€€€€€)V€Ä7ÐìÞ¨Geneva ¹4ê¹’§\e-èqLANDÿÿÿÿÿÿmac on initPath () local pta = html.getpageTableAddress () agent = pta^.requestHeaders.["User-Agent"] path = "" slt = "" on getSltFolder ( f ) if string.patternMatch ( "slt", f ) slt = file.FileFromPath ( f ) return false else return true if string.patternMatch ( "Mac", agent ) // if system is MacOS if string.patternMatch ( "MSIE", agent ) // if browser is MSIE path = file.getSpecialFolderPath ( "", "Preferences", false ) path = path + "explorer:Favorites.html" else // assume browser is Mozilla path = file.folderFromPath ( file.getSpecialFolderPath ( "", "Preferences", false ) ) path = path + "Mozilla:Profiles:default" file.visitFolder ( path, 1, @getSltFolder ) if slt path = path + ":" + slt path = path + "bookmarks.html" else // assume system is Windows if string.patternMatch ( "MSIE", agent ) // if browser is MSIE path = file.folderFromPath ( file.getSpecialFolderPath ( "", "Desktop", false ) ) path = path + "Favorites" else // assume browser is Mozilla path = file.folderFromPath ( file.getSpecialFolderPath ( "", "Desktop", false ) ) path = path + "Application Data\\Mozilla\\Profiles\\default\\" file.visitFolder ( path, 1, @getSltFolder ) if slt path = path + slt path = path + "bookmarks.html" if ! file.exists ( path ) path = "Could not suggest any bookmarks file - try browsing manually." webserver.util.setCookie ( pta, "RSLite", path ) €€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€þ á& CGeneva »—ê»—ê,.ÄLANDÿÿÿÿÿÿmac on editBookmarks () Information 11/1/02; 5:44:55 PM by MB Added support for Yahoo bookmarks. 8/22/02; 6:54:31 PM by MB Derived from editPrefs. on checked ( fl ) // Returns "checked" string if fl is true if fl return "checked" else return "" local s = string ( activeRendererData.guichuncks.objects.editBookmarks ) tlocalserverhost = "http://127.0.0.1" tlocalserverport = "" tAction postargs argTable wedge = "../../images/help.gif" defKeepSynched = "" defUseYahoo = "" adrBlog = radio.weblog.init () activeRendererSuite.utils.buildPostArgs ( @postargs )// Parses posted args to postargs table if defined ( postargs.action ) // A post has been issued => process it adrBlog^.prefs.activeRenderer.bookmarksPath = postArgs.bookmarksPath adrBlog^.prefs.activeRenderer.outlinePath = postArgs.outlinePath adrBlog^.prefs.activeRenderer.keepSynched = defined ( postArgs.flKeepSynched ) adrBlog^.prefs.activeRenderer.useYahoo = defined ( postArgs.fluseYahoo ) adrBlog^.prefs.activeRenderer.myYahoo.userId = postArgs.userId adrBlog^.prefs.activeRenderer.myYahoo.password = postArgs.password fileMenu.saveMyRoot ( @adrBlog^.prefs ) if user.inetd.config.http.port != 80 // If local site doesn't use port 80 for http tlocalserverport = ":" + user.inetd.config.http.port tAction = tlocalserverhost + tlocalserverport + "/activeRenderer/bookmarks/" s = string.replaceAll ( s, "##action##", tAction ) s = string.replaceAll ( s, "##wedge##", wedge ) s = string.replaceAll ( s, "##bookmarksPath##", adrBlog^.prefs.activeRenderer.bookmarksPath ) s = string.replaceAll ( s, "##outlinePath##", adrBlog^.prefs.activeRenderer.outlinePath ) if adrBlog^.prefs.activeRenderer.keepSynched defKeepSynched = "checked=\"checked\"" s = string.replaceAll ( s, "##defKeepSynched##", defKeepSynched ) s = string.replaceAll ( s, "##keepSynched##", checked ( adrBlog^.prefs.activeRenderer.keepSynched ) ) if adrBlog^.prefs.activeRenderer.useYahoo defUseYahoo = "checked=\"checked\"" s = string.replaceAll ( s, "##defUseYahoo##", defUseYahoo ) s = string.replaceAll ( s, "##useYahoo##", checked ( adrBlog^.prefs.activeRenderer.useYahoo ) ) s = string.replaceAll ( s, "##userId##", adrBlog^.prefs.activeRenderer.myYahoo.userId ) s = string.replaceAll ( s, "##password##", adrBlog^.prefs.activeRenderer.myYahoo.password ) return s €„€€„€€€€€€€€€€€€€€€€€€€€ë€p;¸bF£Geneva »—ê»—ê(Ó7LANDÿÿÿÿÿÿmac on activeRenderer ( ol = nil, opml = "", uniqId = "", cssClassName = "active", cssClassLevel = 0, link = "url", opmlCall = "transclude", pta = nil, targetFrame = "", flDisplayHTMLWedge = false, flDoClick = false, flDisplayDirectives = false, flRoll = false ) Information 3/3/03; 2:37:31 PM by MB Modified detection of rss link attributes. 2/25/03; 10:59:25 AM by MB Replaced target="_new" by target="_blank" for HTML link attachments, as suggested by Sjoerd Visscher. 1/24/03; 12:15:52 AM by MB Added support for Flash or Quicktime node links 1/18/03; 11:09:59 AM by MB Added passing along of roll context for webOutliner transcluded links Added initial css class level parameter, defaults to 0 1/15/03; 5:39:29 PM by MB Optimized translation of XML entities using activeRendererData.entities table 1/8/03; 12:00:42 PM by MB Complete rewrite using strings and no recursion for speed optimisation Added flDisplayDirectives parameter, true if #directive nodes are rendered in the HTML output 1/7/03; 5:42:01 PM by MB Removed the onclick="doClick (this)" attribute to the text span in the node when flDoclick is specified. Using the class="clickable" attribute instead. 1/2/03; 8:00:37 PM by MB Simplified the rendering of the closing tags for embedded nodes New code is far faster and corrects 2 bugs in the rendering: The first reported by Jon Udell and Marc Canter A macro error involving an lst list now gone for good The other reported by Rick Olson in July and more recently by Luc Vanden Abeele In some cases, there were 2 additional generated for no good reason I can think of 12/31/02; 7:30:00 PM by MB Simplified node id computing, dropped the 'tree' notation in favor of a simple node counter. 12/20/02; 11:06:38 PM by MB Added a 'clickable' class attribute to node spans when #flDoClick or flDoClick is true Corrected a bug in rendering of node links, as evidenced by Thomas Burg and Marc Canter 12/16/02; 9:29:19 PM by MB Corrected a bug in the end of node detection 12/9/02; 1:14:05 PM by MB Corrected 2 bugs in the rendering of HTML linked nodes. 12/8/02; 5:44:10 AM by MB Use the cssClassName parameter instead of the 'active' constant for the name of child nodes embedding div, expand all/collapse all javascript functions now only act on the main outline in the page Added flDisplayHTMLWedge parameter, defaults to false, to complement the flDisplayHTMLWedge directive. 12/5/02; 12:14:55 PM by MB Added the flDoClick parameter, defaults to false, includes onClick property to node span if true (complements the flDoClick directive). 12/4/02; 10:29:18 AM by MB Added the page table address as an optional parameter, defaults to nil, for webOutliner support. Save and restore previous outline obect 'target', to walk on the safe side, as suggested by Doug Baron. 11/22/02; 3:47:19 PM by MB Fixed a bug reported by Peter Chapman, target was not initialized properly when the flDisplayHTMLWedge directive was undefined or set to false. 11/21/02; 5:39:18 PM by MB Added a opmlCall parameter to provide the name of the Javascript function in charge of OPML transclusion Added an onClick event to each node's span if the flDoClick directive is set to true Do not render nodes starting with '#'. 11/13/02; 6:32:15 PM by MB Modified rss attribute detection. Renders HTML attributes according to the flDisplayHTMLWedge directive 10/31/02; 2:39:24 PM by MB Added a link parameter, defaults to htmlUrl, for checking extra url attributes Added an flRoll parameter, defaults to false, set to true if called from a blogroll Detect pictures (jpg/gif/png), regular html and rss for transclusion. 10/14/02; 3:26:35 PM by MB Corrected a bug in the .opml detection, reported by Bryce 10/10/02; 7:08:13 PM by MB Added an additional uniqId optional parameter at Mikel's request Added transclusion support for OPML links 9/15/02; 4:04:35 PM by MB Restored the htmlUrl attribute testing which disappeared for some reason during August. 7/31/02; 6:47:51 PM by MB Changed cssClassName to parameter, still defaults to active. Added targetFrame parameter, empty by default, to specify a target window or frame for link attributes. All modifications consistent with the call of activeRenderer from the new activeRoll macro. 6/26/02; 7:09:48 PM by MB Removed class in a tag attribute when rendering link attributes 6/25/02; 2:09:08 PM by MB Align wedge img to the top, not the middle of a line. vs 1.0 beta 3 - last updated 6/21/02 by MB Added title identifications with t + tree and nodeTitle name attribute vs 1.0 beta 2 - last updated 6/14/02 by MB Use '>' instead of 'wedge' as an alt attribute for wedge images local html = "\r\r" // whole outline's rendered HTML string beginTag = 0 // start of current tag position endTag = 0 // end of current tag position level = 0 // current outline level offset = 0 // start of line offset based on current level expansionString = "" // list of expanded nodes, as a string nodeCnt = 0 // node counter isVisible = true // false for nodes embedded in a collapsed node visNodeCnt = 0 // visible node counter, for expanded nodes checking visLevel = 0 // level of the last visible node noSubsImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol1.gif" ) expandedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol2.gif" ) collapsedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol3.gif" ) linkedImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol4.gif" ) imgImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol5.gif" ) pageImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol6.gif" ) mmImg = ( radio.weblog.getUrl () + "gems/activeRenderer/ol7.gif" ) wedgeImg = noSubsImg wedgeTitle = "" rssCall = opmlCall on getText ( str ) // returns the text attribute of an tag local l = 0 t = "" l = sizeOf ( str ) t = string.mid ( str, string.patternMatch ( "text=", str ) + 6, l ) t = string.delete ( t, string.patternMatch ( "\"", t ), l ) if t beginsWith "#" and ! flDisplayDirectives t = "" return t on getLink ( str ) // returns the link attributes' of an tag if any, determine link type local l = 0 beginUrl = 0 beginType = 0 u = "" t = "" l = sizeOf ( str ) beginUrl = string.patternMatch ( link + "=", str ) // check if there is an attribute specified in the 'link' parameter if beginUrl // if so retrieve it u = string.mid ( str, beginUrl + sizeOf ( link ) + 2, l ) u = string.delete ( u, string.patternMatch ( "\"", u ), l ) beginType = string.patternMatch ( "type=", str ) // check if there is a type attribute specified if beginType // if so check for rss t = string.mid ( str, beginType + 6, l ) t = string.delete ( t, string.patternMatch ( "\"", t ), l ) if u // if a link attribute was retrieved if string.hasSuffix ( ".opml", u ) && string.patternMatch ( "?", u ) == 0 // true if the url ends with opml and is not a GET argument isOPML = true else if string.hasSuffix (".jpg", u ) || string.hasSuffix (".gif", u ) || string.hasSuffix (".png", u ) isPICT = true else if t == "rss" || string.hasSuffix (".rss", u ) || string.hasSuffix ("rss.xml", u ) || string.patternMatch ( "?rss", u ) > 0 isRSS = true else if string.hasSuffix (".swf", u ) || string.hasSuffix (".mov", u ) isMM = true else isHTML = true return u // return the link attribute, or an empty string on addNode () // format and adds the current node to the HTML output local target = "" // link target classLevel = 0 if text // if there is some content in the node html = html + ( string.filledstring ("\t", level + offset ) + "
" ); // root div html = html + "
"; // single row table + left cell if hasChildren // if the node has children html = html + ( "" ); // link for active expand/collapse wedge if isExpanded // if the node is expanded wedgeImg = expandedImg wedgeTitle = "collapse" else // if the node is collapsed wedgeImg = collapsedImg wedgeTitle = "expand" else // if the node is childless if url // if a link attribute was defined if isOPML // if it's an OPML link wedgeImg = linkedImg wedgeTitle = "expand linked outline" html = html + ( "" else if isPICT // if it's an image link wedgeImg = imgImg wedgeTitle = "expand image" html = html + ( "" ); // link for image inclusion wedge else if isRSS // if it's an RSS link wedgeImg = linkedImg wedgeTitle = "expand linked rss feed" html = html + ( "" ); // link for RSS inclusion wedge html = html + ( "" else if isMM // if it's a Flash or Quicktime link wedgeImg = mmImg wedgeTitle = "expand movie" html = html + ( "" ); // link for movie inclusion wedge else // assume it's HTML if ( ( defined ( pta^.flDisplayHTMLWedge ) && pta^.flDisplayHTMLWedge) || flDisplayHTMLWedge ) && ! flRoll // if the flDisplayHTMLWedge directive or parameter are defined true wedgeImg = pageImg wedgeTitle = "open linked page" if targetFrame // if a destination is specified target = targetFrame else if ( defined ( pta^.flDisplayHTMLWedge ) && pta^.flDisplayHTMLWedge ) || flDisplayHTMLWedge // if we are rendering 'page' wedges target = "_blank" else target = "" // regular links, stay in the same window html = html + ( "" ); // link for HTML 'page' wedge else // no directive, or directive is false, or in a roll wedgeImg = noSubsImg wedgeTitle = "" if targetFrame // if a destination is specified target = targetFrame else // if no link attribute detected wedgeImg = noSubsImg wedgeTitle = "" html = html + ( "\"wedge\"" ); // wedge image if hasChildren || ( url && ( isOPML || isPICT || isRSS || isMM || ( isHTML && ( ( defined ( pta^.flDisplayHTMLWedge ) && pta^.flDisplayHTMLWedge ) || flDisplayHTMLWedge ) && ! flRoll) ) ) html = html + "" // close link if necessary html = html + ""; // close span tag if url && isHTML && ( ( defined ( pta^.flDisplayHTMLWedge ) && ! pta^.flDisplayHTMLWedge ) || ( ! defined ( pta^.flDisplayHTMLWedge ) && ! flDisplayHTMLWedge ) || flRoll ) html = html + ( ""; // close link html = html + text; // node text inside span if url && isHTML && ( ( defined ( pta^.flDisplayHTMLWedge ) && ! pta^.flDisplayHTMLWedge ) || ( ! defined ( pta^.flDisplayHTMLWedge ) && ! flDisplayHTMLWedge ) || flRoll ) html = html + ""; // end of link tag if necessary html = html + "
"; // close span, cell, row and table if hasChildren // if the node has children if isExpanded // set class attribute according to expansion state activeClass = "expanded" else activeClass = "collapsed" offset++ html = html + ( "\r" + string.filledstring ("\t", level + offset ) + "
\r" ); // embedding div for children nodes else // if the node is childless html = html + "
\r"; // close div on closeNode () // close child node divs in HTML output html = html + ( string.filledstring ("\t", level -1 + offset ) + "
\r" ); // close embedding div offset-- html = html + ( string.filledstring ("\t", level - 1 + offset ) + "\r" ); // close parent node div on processTag ( s ) // process a single XML tag local tag = string.firstWord ( s ) // current tag's token, devoid of attributes text = "" // current tag's text attribute url = "" // current tag's link attribute isOPML = false // true if link attribute points to an OPML resource isPICT = false // true if link attribute points to an image resource isRSS = false // true if link attribute points to an RSS resource isMM = false // true if link attribute points to a multimedia resource isHTML = false // true if none of the above are true nodeId = uniqId + string ( nodeCnt ) // current node id hasChildren = false // true if the current node has children isExpanded = false // true if the current node is visible and its visible node count is included in the expansionString case tag "/body" // tag, time to bail out of the calling loop return false "outline" // tag, we found another node nodeCnt++ // increment node counter hasChildren = string.mid ( s, sizeOf ( s ), 1 ) != "/"// true if the current node has children if isVisible // if we are not inside a collapsed node visNodeCnt++ // increment visible nodes counter if hasChildren // if the current node has children isExpanded = string.patternMatch ( " " + string ( visNodeCnt ) + ",", expansionString ) // non 0 if the visible node count is included in the expansionString text = getText ( s ) // get the text attribute content url = getLink ( s ) // get the link attributes content, nil if not present addNode () // format the node and add it to the output string if hasChildren // if the current node has children if isVisible // if it is not inside a collapsed node if ! isExpanded // if the node is collapsed isVisible = false // stop counting visible nodes visLevel = level // save the current level level++ // increment current outline level "/outline" // tag, up one outline level closeNode () // output closing divs level-- // decrement current outline level if level == visLevel // if we are now out of a collapsed node isVisible = true // restart counting visible nodes return true // stay in the calling loop on processHeader () // process all tags up to local start = 0 stop = 0 x = "" start = string.patternMatch ( "", opml ) + 16 stop = string.patternMatch ( "", opml ) if start x = string.mid ( opml, start, stop - start ) if x x = " " + ( x + "," ); opml = string.delete ( opml, 1, string.patternMatch ( " beginTag = string.patternMatch ( "<", opml ) // locate start of tag position endTag = string.patternMatch ( ">", opml ) // locate end of tag position if ! processTag ( string.mid ( opml, beginTag +1, endTag - beginTag -1 ) ) // process current tag, stop when false is returned break opml = string.delete ( opml, beginTag, endTag - beginTag + 1 ) // strip current tag from body html= string.multipleReplaceAll ( html, @activeRendererData.entities, false ) html = html + "\r"; return html // returned the rendered HTML string bundle // test code local ( x, w, start, stop, s ) file.getFileDialog ("Pick a file, any file", @x, 0) s = file.readWholeFile ( x ) op.xmlToOutline ( s, @temp.outline ) s = "" start = clock.ticks () w = activeRenderer ( ol:@temp.outline, opml:s, flDisplayDirectives:true ) stop = clock.ticks () dialog.alert ( stop - start ) wp.newTextObject ( w, @temp.test ) edit ( @temp.test ) €„„€„„„„„„„„„„„„€€„„„€€€€„„„€€€€€€€€€€€€€€€€€€€N}€!²¸000000060001001777AA000000000069000000001001710000001-7FFF6FBE1800000‚‚480048069E0200-1‚0Â6‚9E0222FFFF0‚‚10‚‚3‚1C7900001000000BD00000003068140840‚‚6‚20122267403C80001F4302016B0681EC040840‚‚201648B22281E03C800047E7848B1180EC01C7940840‚‚48B69E0222DA8038E0009D369E059000020000068700000000681, http://radio.weblogs.com/0104487/gems/activeRenderer/ol1.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol4.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol5.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol6.gif retrieveHtml ( 'generated by activeRenderer for XSL vs 1.3.1 - HTML outline structure copyright 2002-03 Precision IT Management, Inc. ' ); 0002000008450000068183F, javascript:void(null) + ' ' ' \' 00040000000B0000000201C7B000050000000B0000000201C7B0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 60ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚2A026E3‚2A026E000A00000017000000026‚9E02226‚9E0222000B00000005000000020Â000C0000000E000000010‚‚C60‚‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,,NK4,4,1004,96B4,‚1900130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹Ì½¦ºQšÂyCžö!.€‚2AùFFFF000000060001001777AA00000000007B000000001001710000001-7FFB6FBE1800000‚‚4800480618A7200-1‚7C67C77C67C70Â6‚18A7222FFFF0‚‚10‚‚3‚3B7E000010000019000000006092240840‚‚6‚49822290003CE00048B6498B40922123640840‚‚498699F2228C403C80009923099F1AC012361B8A40840‚‚99F6D4722293503C8000D3A18D47A001B8A278D40840‚‚D476117E222BB003CE00011716117E1870278D2F1640840‚‚117E613EE22277903C800013E119813EE1E502F163B7E40840‚‚13EE618A7222C67038E000189A618A7B000020000092800000000922,/* Outliner functions version: 1.4 last modified 4-Mar-2003 created by Marc Barrot, with help from Aaron Straup Cope, DJ Adams, Sjoerd Visscher and Danny Goodman copyright 2002 by Precision IT Management,Inc. You may use and distribute this code freely, just keep this header information intact. */ var img_expanded = 'http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif'; var img_collapsed = 'http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif'; var img_rotating = 'http://radio.weblogs.com/0104487/gems/activeRenderer/globe.gif'; (new Image(15,15)).src = img_expanded; // caching (new Image(15,15)).src = img_collapsed; // caching (new Image(15,15)).src = img_rotating; // caching function expand(ioNode) { ioWedge = "i" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_collapsed; document.getElementById(ioWedge).title='collapse'; document.getElementById(ioNode).className='expanded'; } } function collapse(ioNode) { ioWedge = "i" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_expanded; document.getElementById(ioWedge).title='expand'; document.getElementById(ioNode).className='collapsed'; } } function ioSwitch(ioNode) { if (document.getElementById && document.getElementById(ioNode) != null) { nodeState = document.getElementById(ioNode).className; } if (nodeState == 'collapsed') { expand(ioNode); } else { collapse(ioNode); } } function expandAll(divName) { if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('div'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == divName) { expand(nodeList.item(i).id); } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function collapseAll(divName) { if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('div'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == divName) { collapse(nodeList.item(i).id); } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function normalizeAll(spanName) { 00020000091A00000922914, if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('span'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == spanName) { nodeList.item(i).style.fontWeight = 'normal'; } } } else { alert ("Sorry, don't know how to make this run in your browser."); } } function expandBold(ioNode) { ioWedge = "i" + ioNode.substr(1); ioTitle = "t" + ioNode.substr(1); if (document.getElementById && document.getElementById(ioNode) != null) { document.getElementById(ioWedge).src=img_collapsed; document.getElementById(ioWedge).title='collapse'; document.getElementById(ioNode).className='expanded'; document.getElementById(ioTitle).style.fontWeight = 'bold'; } } function expandByDate(n) { if (n.nodeType == 1) { if (n.tagName.toLowerCase() == 'div') { if (n.getAttribute('name') == 'item') { expandBold(n.id); } } } var children = n.childNodes; for (var i=0; i < children.length; i++ ) { expandByDate(children[i]); } } function daySwitch(postDate) { var hasItems = 0; if (document.getElementsByTagName) { nodeList = document.getElementsByTagName('span'); for (var i = 0; i < nodeList.length; i++) { if (nodeList.item(i).getAttribute('name') == 'itemTitle') { hasItems = 1; break; } } } if (hasItems) { collapseAll('item'); normalizeAll('itemTitle'); if (document.getElementById) { expandByDate(document.getElementById(postDate)); } } else { collapseAll('day'); ioSwitch(postDate); } } var targetNode; var targetRoot; function transclude(ioNode, url) { var serverUrl = 'http://www.w3.org/2000/06/webdata/xslt'; var xsltUrl = 'http://radio.weblogs.com/0104487/gems/activeRenderer/outliner_js_xsl.txt'; var xsltUrl2 = 'http://radio.weblogs.com/0104487/gems/activeRenderer/outliner_xsl.txt'; var renderRequest = serverUrl + '?xslfile=' + xsltUrl + '&xmlfile=' + url + '&transform=Submit'; var renderRequest2 = serverUrl + '?xslfile=' + xsltUrl2 + '&xmlfile=' + url + '&transform=Submit'; var ioWedge = "i" + ioNode.substr(1); var ioRoot = "r" + ioNode.substr(1); var ioTitle = "t" + ioNode.substr(1); if (document.getElementById) { // create buffer if needed if (! document.getElementById ('buffer')) { // if buffer does not already exist 00020000095A00001236954, var buffer = document.createElement('div'); buffer.setAttribute ('id', 'buffer'); document.body.appendChild (buffer); // add buffer as last element of body } // test for Mac MSIE var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1; if (macMSIE) { // open new window for transcluded content var xAnchor = screen.width - (640 + 20); var yAnchor = 5; var xWidth = 640; var yHeight = 400; window.open (renderRequest2, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor); } else { // expand node var imgNode = document.getElementById (ioWedge); // wedge image node var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var title = spanNode.firstChild.data; var newTitle = document.createTextNode (title); // create new heading container var expandedNode = document.createElement ('div'); // create embedding element expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', ioNode); expandedNode.style.marginLeft = '15px'; imgNode.src = img_rotating; // update wedge's image imgNode.title = 'loading'; imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')'); spanNode.removeChild (spanNode.firstChild); // replace heading spanNode.appendChild (newTitle); rootNode.appendChild (expandedNode); // insert embedding element targetNode = expandedNode; targetRoot = imgNode; // load buffer with rendered outline script var theEl=document.createElement('script'); theEl.src = renderRequest; document.getElementById('buffer').appendChild(theEl); } } } function retrieveHtml(s) { // clean-up entity encoded HTML s = s.replace (/</g, '<'); s = s.replace (/>/g, '>'); s = s.replace (/&/g, '&'); // generate random key var rnd = Math.random(); var rnd_key = String (rnd).substr(1,6); s = s.replace (/(id="[rpti][^"][^"]*)/g, '$1' + rnd_key); // update all div node ids s = s.replace (/(\('p[^'][^']*)/g, '$1' + rnd_key); // update headings ids // insert transcluded HTML targetNode.innerHTML = s; targetRoot.src = img_collapsed; // update wedge image targetRoot.title = 'collapse'; 000200000C0900001B8AC03,} function imgLoad(ioNode, url) { // load image at url into browser cache // ioNode : expanding node identifier (string), stored in a custom property // url : web address of the included image (string) var ioWedge = "i" + ioNode.substr(1); if (document.getElementById) { var imgNode = document.getElementById (ioWedge); // wedge image node imgNode.src = img_rotating; // update wedge's image imgNode.title = 'loading'; } cachedImg.ioNode = ioNode; cachedImg.onload = imgTakeABreath; cachedImg.src = url; } function imgTakeABreath() { // allow for Mac MSIE and Mozilla to catch up setTimeout("imgSwitch()", 0); // ugh! } function imgSwitch() { // actual image transclusion starts here var ioWedge = "i" + cachedImg.ioNode.substr(1); var ioRoot = "r" + cachedImg.ioNode.substr(1); var ioTitle = "t" + cachedImg.ioNode.substr(1); if (document.getElementById) { var imgNode = document.getElementById (ioWedge); // wedge image node var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var expandedNode = document.createElement ('div'); expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', cachedImg.ioNode); expandedNode.style.marginLeft = '15px'; rootNode.appendChild (expandedNode); // insert embedding element var expandedWidth; if (rootNode.currentStyle) { // get embedding element's width expandedWidth = parseInt (rootNode.offsetWidth) - (15 + 4); } else { expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue('width')); } var includedLink = document.createElement ('a'); // create a link for the included image includedLink.setAttribute ('href', cachedImg.src); includedLink.setAttribute ('target', '_new'); includedLink.setAttribute ('title', 'view full size'); var includedImg = document.createElement ('img'); // create the included image includedImg.setAttribute ('border', 0); includedImg.setAttribute ('hspace', 0); includedImg.setAttribute ('vspace', 8); includedImg.setAttribute ('alt', 'included image'); includedImg.src = cachedImg.src; // set the image's url if (expandedWidth < cachedImg.width) { // adjust size if greater than embedding element includedImg.width = expandedWidth; includedImg.height = (cachedImg.height / cachedImg.width) * expandedWidth; } expandedNode.appendChild (includedLink); // insert link includedLink.appendChild (includedImg); // insert image imgNode.src = img_collapsed; // update wedge imgNode.title = 'collapse'; imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + cachedImg.ioNode + '\')'); } } function mmLoad(ioNode, url) { // load multimedia object at url into browser cache // ioNode : expanding node identifier (string), stored in a custom property 00020000078F0000278D789, // url : web address of the included object (string) var ioWedge = "i" + ioNode.substr(1); var ioRoot = "r" + ioNode.substr(1); var ioTitle = "t" + ioNode.substr(1); var ioObject = "f" + ioNode.substr(1); var urlType = 'application/x-shockwave-flash'; var isWin = navigator.appVersion.indexOf("Win") != -1; // true if Windows, false if MacOS var isIE = navigator.appName.indexOf("Microsoft") != -1; // true if MSIE, false if other browser if (url.substring (url.length - 3, url.length) == 'mov') { urlType = 'video/quicktime'; } if (document.getElementById) { var mmNode = document.getElementById (ioWedge); // wedge image element var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var expandedNode = document.createElement ('div'); expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', ioNode); expandedNode.style.textAlign = 'left'; expandedNode.style.marginLeft = '15px'; if (!isWin && isIE) { // use top margin if Mac MSIE expandedNode.style.marginTop = '4px'; } else { expandedNode.style.marginTop = '0px'; } rootNode.appendChild (expandedNode); // insert embedding element var expandedWidth; if (rootNode.currentStyle) { // get embedding element's width IE style var border = isWin ? (15 + 4) : 4; expandedWidth = parseInt (rootNode.offsetWidth) - border; } else { // or get it a la Mozilla expandedWidth = parseInt (document.defaultView.getComputedStyle (expandedNode, '').getPropertyValue('width')); } var embeddedstring = ''; expandedNode.innerHTML = embeddedstring; mmNode.src = img_collapsed; // update wedge 000200000C6E00002F16C68, mmNode.title = 'collapse'; mmNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')'); } } function rssclude(ioNode, url) { var ioWedge = "i" + ioNode.substr(1); var ioRoot = "r" + ioNode.substr(1); var ioTitle = "t" + ioNode.substr(1); if (document.getElementById) { // create buffer if needed if (! document.getElementById ('buffer')) { // if buffer does not already exist var buffer = document.createElement('div'); buffer.setAttribute ('id', 'buffer'); document.body.appendChild (buffer); // add buffer as last element of body } // locate relevant info in DOM tree var imgNode = document.getElementById (ioWedge); // wedge image node var rootNode = document.getElementById (ioRoot); // embedding div node var spanNode = document.getElementById (ioTitle); // title span node var rootClass = rootNode.className; // class of root node // create request elements var serverUrl = 'http://services.activerenderer.com/activeRenderer/'; var cssClassLevel = rootClass.replace (/[a-z]+/gi, ''); // root node outline level var cssClassName = rootClass.replace (/[0-9]+/gi, ''); // root node class radix var uniqId = String (Math.random ()).substr(2,5); url = escape (url).replace (/\//g, "%2F"); // test for Mac MSIE var macMSIE = navigator.userAgent.search (/MSIE.*Mac/i) + 1; var safari = navigator.userAgent.search (/safari/i) + 1; if (macMSIE) { // open new window for transcluded content var xAnchor = screen.width - (640 + 20); var yAnchor = 5; var xWidth = 640; var yHeight = 400; var renderRequest = serverUrl + 'render?src=' + url + '&action=submit'; var w = window.open (renderRequest, 'Related', 'width=' + xWidth + ', left=' + xAnchor + ', height=' + yHeight + ', top=' + yAnchor); } else { /* expand node var title = spanNode.firstChild.data; var newTitle = document.createTextNode (title); // create new heading container var expandedNode = document.createElement ('div'); // create embedding element expandedNode.setAttribute ('name', 'active'); expandedNode.setAttribute ('class', 'expanded'); expandedNode.setAttribute ('id', ioNode); expandedNode.style.marginLeft = '15px'; imgNode.src = img_rotating; // update wedge's image imgNode.title = 'loading'; imgNode.parentNode.setAttribute ('href', 'javascript:ioSwitch(\'' + ioNode + '\')'); spanNode.removeChild (spanNode.firstChild); // replace heading spanNode.appendChild (newTitle); rootNode.appendChild (expandedNode); // insert embedding element targetNode = expandedNode; targetRoot = imgNode; // load buffer with rendered outline script var theEl=document.createElement('script'); var renderRequest = serverUrl + 'jsrender?src=' + url + '&action=submit'; theEl.src = renderRequest; document.getElementById('buffer').appendChild(theEl); */ alert ('RSS inclusion will be here shortly, keep faith :-)'); } } } function includeHtml(s) { // insert transcluded HTML targetNode.innerHTML = s; targetRoot.src = img_collapsed; // update wedge image targetRoot.title = 'collapse'; }00040000000B0000000203B80000050000000B0000000203B800000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 F0ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚28630D3‚28630D000A00000019000000026‚18A72226‚18A7222000B00000005000000020Â000C0000001B000000013B7E2E0‚F01D21275‚0000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,5{4,4,4,4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¸õÁTºŠlÜ*;~.KÇkAu€Ä7~*P$º„ô8º‰GÖ   #templatePUindexPýïLANDÿÿÿÿÿÿmac on bui~ÌÈL¹Žü™»¯ñ  * 2> DP Ye l #templatePe(getOpmlP`ugetPathPÁ¼indexP.3initPathP)‰updateP#M̰<üGeneva »¯ñ»¯ñª°»vLANDÿÿÿÿÿÿmac on displayServerName ( name ) Information 1/14/03; 11:23:14 PM by MB Derived from webEdit suite and liveTopics 17/09/02; 22:21:01 by MM According to Jake menu's can be a bit dodgy, the (indirect) call to radio.weblog.init() via getPrefs() may be occurring before the OS is ready to load weblogData.root => MB's crash. Now we guard it for the startup period and if defined ( weblogData ) if name == activeRendererSuite.utils.getPrefs ()^.updateServer return ( "!" + name ) return ( name ) €„€€€€€€€°9¾Geneva ¸ô§ º‰›Æ'ïLANDÿÿÿÿÿÿmac activeRenderer About Help... - Browser... Preferences... Bookmarks... Register... - Set Update Server =activeRendererSuite.menuItems.displayServerName("alpha") =activeRendererSuite.menuItems.displayServerName("stable") Update... - Uninstal... €€ € ù€€ çç€ æß€ Éf€ Ò÷€€ `Î ¼»€ 1€€ šÞ9¥<ñGeneva T·Wˬ¹´×¤?áÀLANDÿÿÿÿÿÿmac if activeRendererSuite.utils.serialOk () if dialog.confirm ( "Update activeRenderer now ?" ) if !defined ( system.temp.activeRenderer ) new ( tabletype, @system.temp.activeRenderer ) system.temp.activeRenderer.update = activeRendererSuite.update thread.easyCall ("system.temp.activeRenderer.update", {}) else if dialog.YesNo ( activeRendererData.guichuncks.texts.notRegisteredAlert ) webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/register" ) webbrowser.bringtofront () €€€€€€€€€€¥£DçGeneva »¯ñ»¯ñTŒÒ¯LANDÿÿÿÿÿÿmac on opmlRender ( url, cssClassName = "l", flExpand = false, depth = 0, length = 0 ) header comments 6/26/02; 7:27:24 PM by MB Removed class in a tag attribute when rendering link attributes. vs 1.0.2 - last updated 6/18/02 by MB optimized code to use one global string instead of modifying the outline on the fly. local urlList opmlText ol level = 0 node = 0 s tst urlList = string.urlSplit (url) // parse url if string.lower ( urlList[1] ) beginsWith "file:" // if it's a local file opmlText = file.readWholeFile ( file.urlToFile ( url ) ) else // otherwise it must be http opmlText = string.httpResultSplit ( tcp.httpClient ( server:urlList [2], path:urlList [3], flAcceptOpml:true ) ) if system.environment.isMac // take care of Mac encoding opmlText = latinToMac.convert ( opmlText ) op.xmlToOutline ( opmlText, @ol, true ) // parse xml to an outline object target.set ( @ol ) op.firstSummit () // start at the top if flExpand // expand all nodes if required op.fullExpand () on visit () // render one outline node loop local u hasSubs = op.countSubs ( 1 ) > 0 // does the node have children hasUrl = op.attributes.getOne ( "url", @u ) // does the node have a link attribute if length == 0 or node < length if depth == 0 or level < depth s = s + ( "

" ); if hasUrl s = s + ( "" ); s = s + op.getLineText (); if hasUrl s = s + ""; s = s + "

"; if hasSubs if op.go ( right, 1 ) level++ visit () level-- op.go ( left, 1 ) if ( not op.go ( down, 1 ) ) break else if level == 0 node++ visit () // get going with the root node return ( s ) €„„€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€£ÆÌ‚Geneva »¯ñ»¯ñŒ?<2LANDÿÿÿÿÿÿmac on nodeState ( day, tpl = "" ) header comments 6/28/02; 11:54:00 AM by MB Modified to take categories into account. 6/25/02; 1:02:22 PM by MB vs 1.03 local imgPath = radio.weblog.getUrl () + "gems/activeRenderer/" adrBlog = radio.weblog.init () wedgeImg = imgPath + "ol2.gif" wedgeTitle = "collapse" nodeClass = "expanded" titleWeight = "bold" if !flArchivePage and ( ( tpl == "day" and !adrBlog^.prefs.activeRenderer.outlineItems ) or ( tpl == "item" ) ) local adrBlog = radio.weblog.init () adrPosts = @adrBlog^.posts i, t, d for i = sizeOf ( adrPosts^ ) downto 1 // locate the most recent relevant post local ( adr = @adrposts^ [ i ] ) t = adr^ if defined ( categoryName ) // is this a category home page ? if defined ( t.categories [ categoryName ] ) // is the current post included in this category ? break else // this is the main home page then. if !t.flNotOnHomePage // does this post belong to it ? break d = date.shortString ( t.when ) if ( d != day ) wedgeImg = imgPath + "ol3.gif" wedgeTitle = "expand" nodeClass = "collapsed" titleWeight = "normal" return "" €„„€„€€€€€€€€€€€€€€€€€€€€€€€€€€€€Æ ê’ à Geneva »¯ñ»¯ñGË„PLANDÿÿÿÿÿÿmac on daySwitch ( daysPerLine = 7 ) Information 2/6/03; 11:42:57 AM by MB Added 'latestTitle' class attribute to widget's title 8/1/02; 3:31:48 PM by MB Removed comment in rendered HTML, initialize output to empty string. 7/25/02; 3:29:49 PM by MB Modified collapse / expand all javascript call to handle both outline day and outline post preferences. Added a comment tag with version number in the output. 7/16/02; 4:54:25 PM by MB Links are now in the latest class instead of active class. Added display of version at tooltip in browser when hovering 'how this works'. 7/12/02; 11:27:42 AM by MB Added maximum number of days per line parameter, defaults to 7. Formatted days on 2 digits, left padded with zero. 6/29/02; 10:10:03 AM by MB Added how this works link 6/28/02; 12:13:45 PM by MB Modified to take categories into account. local s = "" version = "1.0.2" if !flArchivePage // are we rendering a home page ? s = s + "\n"; s = s + "\n"; s = s + "\n"; s = s + "\n"; s = s + ""; s = s + "
Latest
"; local adrBlog = radio.weblog.init () adrPosts = @adrBlog^.posts adrPrefs = @adrBlog^.prefs days = adrPrefs^.ctDaysToDisplay previousDate nodeId i if adrPrefs^.activeRenderer.outlineItems nodeId = "item" else nodeId = "day" for i = sizeOf ( adrPosts^ ) downto 1 local adr = @adrPosts^ [i] t = adr^ d = date.shortString ( t.when ) flInclude = false if defined ( categoryName ) // are we rendering a category home page ? if defined ( t.categories [ categoryName ] ) // is the current post included in this category ? flInclude = true else // we are rendering the main home page if !t.flNotOnHomePage // does this post belong to the main home page ? flInclude = true if d != previousDate and flInclude if days != adrPrefs^.ctDaysToDisplay and ( ( adrPrefs^.ctDaysToDisplay - days ) % daysPerLine ) == 0 // skip a line every daysPerLine dates. s = s + "
"; s = s + ( "" + string.padWithZeros ( date.day ( t.when ), 2 ) + "   " ); previousDate = d days = days - 1 if days == 0 break s = s + "
expand / collapse all posts
how this works
"; return s bundle //test code flArchivePage = false wp.newtextobject ( daySwitch (), @scratchpad.daySwitch ) edit ( @scratchpad.daySwitch ) €„„€„€„„„„€€€€€€€€€€€€€€€€€€ ê!zP²Geneva »¯ñ»¯ñ3O}LANDÿÿÿÿÿÿmac on update ( src, dst ) Information 10/10/02; 10:33:54 PM by MB Corrected a bug reported by Donovan Watts Mac MSIE's Descriptions were not appended to their bookmark but shifted to the next one. Descriptions are now attached to the proper node in the outline. 10/3/02; 10:45:45 PM by MB Added a type attribute with 'link' value for each href Corrected a bug in url extraction from href when source is a file 9/15/02; 11:18:18 AM by MB Corrected a bug in getUrl, which was creating broken links starting by URL= with some bookmarks in MSIE6/Win. Corrected a bug in addPath: handle string of nested subfolders correctly 9/13/02; 12:10:14 PM by MB Corrected a bug when loading the old version of the bookmarks outline file. 9/12/02; 3:19:15 PM by MB Corrected a bug in comment properties (
) rendering. 9/10/02; 1:17:12 PM by MB Synchronizes Mozilla or MSIE bookmarks (src) with an OPML outline (dst) local direction = "down" newOutline oldOutline buffer = "" oldPath = "" startTime = clock.ticks() on addPath ( path ) local parent = "" flag = 0 diffPath = "" field = 0 on getUrl ( path ) local s = "" l s = file.readWholeFile ( path ) l = regex.grep ( "^[Uu][Rr][Ll]=", @s ) s = l[1] regex.subst ( "^\n", "", @s ) s = string.mid ( s, 5, string.length ( s ) - 4 ) return s on getName ( path ) local s = "" s = file.fileFromPath ( path ) regex.subst ( ".url$", "", @s ) return s parent = file.folderFromPath ( path ) if ! file.isFolder ( path ) // if it's a file if string.hasSuffix ( ".url", path ) regex.subst ( "[:\\\\]$", "", @parent ) if parent == oldPath // if it belongs to the same folder as the previous file op.insert ( getName ( path ), direction ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) else // it belongs to a different folder if string.patternMatch ( parent, oldPath ) // if the previous file belongs to a subfolder of the current file's folder op.insert ( getName ( path ), direction ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) while ( oldPath != parent ) flag = flag + 1 oldPath = file.folderFromPath ( oldPath ) regex.subst ( "[:\\\\]$", "", @oldPath ) if flag > 1 op.reorg ( "left", flag - 1 ) flag = 0 else if string.patternMatch ( oldPath, parent ) // if it belongs to a subfolder of the previous file's folder diffPath = string.mid ( parent, string.length ( oldPath ) + 2, string.length ( parent ) - string.length ( oldPath ) ) for field = 1 to string.countFields ( diffPath, file.getPathChar () ) op.insert ( string.nthField ( diffPath, file.getPathChar (), field ), direction ) direction = "right" op.insert ( getName ( path ), direction ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) else // it belongs to a folder which has a common ancestor with the previous file's folder local folderList = {} commonAncestor = parent i = 0 j = 0 while ! string.patternMatch ( commonAncestor, oldPath ) i = i + 1 folderList [i] = file.fileFromPath ( commonAncestor ) commonAncestor = file.folderFromPath ( commonAncestor ) regex.subst ( "[:\\\\]$", "", @commonAncestor ) op.insert ( folderList [i], direction ) if i > 1 for j = i - 1 to 1 op.insert ( folderList [j], "right" ) op.insert ( getName ( path ), right ) op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", getUrl ( path ) ) oldPath = parent direction = "down" else // it's a folder regex.subst ( "[:\\\\]$", "", @path ) // remove trailing path separator if string.patternMatch ( path, oldPath) // if folder isn't empty direction = "left" return true radio.log.add( "activeRenderer", "Starting bookmarks synchronization.", startTime ) if ! file.exists ( src ) // fail if source file or folder if missing radio.log.add( "activeRenderer", "Bookmarks synchronization error, missing : " + src + ".", startTime ) return false file.sureFilePath ( dst ) // path for destination outline if file.exists ( dst ) new ( outlineType, @scratchpad.old ) op.xmlToOutline ( file.readWholeFile ( dst ), @scratchpad.old ) new ( outlineType, @newOutline ) // create a new empty outline target.set ( @newOutline ) if ! file.isFolder ( src ) // if source is a file try local start, end cnt = 0 // Count number of
tags flag = 0 // Count number of consecutive
tags file.open ( src ) // Open source Bookmarls file while ! file.endOfFile ( src ) // Loop through all source lines local buffer = file.readLine ( src ) // Read next source line url = "" matchList = {} if buffer // if not an empty line if string.patternMatch ( "/DL", buffer ) direction = "left" flag = flag + 1 if string.patternMatch ( "([^<]+)", @buffer, @matchList, {1} ) regex.subst ( "^[ \t]+", "", @buffer ) // Remove any whitespace header regex.subst ( "
.*", "", @buffer ) regex.subst ( "<[^<>]+>", "", @buffer ) op.insert ( matchList [1], "right" ) // insert the description as a child of the current node op.go ( "left", 1 ) // move the current node pointer back to the parent node if string.patternMatch ( "DT", buffer ) // Title node or link node if string.patternMatch ( "HREF", buffer ) // If link node, get url local matchList = {} pattern = "HREF=\"([^\"]+*)\"[ 0-9a-zA-Z]+*" regex.extract ( pattern, @buffer, @matchList, {1}, true ) url = matchList[1] regex.subst ( "^[ \t]+", "", @buffer ) local ( s = buffer ) regex.subst ( "^
[^<]+", "", @s ) regex.subst ( "<[^<>]+>", "", @s ) op.insert ( s, direction ) if url op.attributes.setOne ( "type", "link" ) op.attributes.setOne ( "url", url ) if flag > 1 op.reorg ( "left", flag - 1 ) direction = "down" flag = 0 file.close ( src ) // Close source bookmarks file else // Source is a folder oldPath = src regex.subst ( "[:\\\\]$", "", @oldPath ) file.visitFolder ( src, infinity, @addPath ) op.firstSummit () // Delete empty first node op.deleteLine () scratchpad.new = newOutline if file.exists ( dst ) op.visitAll ( @newOutline, @activeRendererSuite.bookmarks.restoreUrl ) target.set ( @scratchpad.new ) op.firstSummit () loop // Collapse all summits if op.countSubs ( 1 ) > 0 op.collapse () if ( ! op.go ( down, 1 ) ) break file.writeWholeFile ( dst, op.outlineToXml ( @scratchpad.new ) ) target.clear () radio.log.add( "activeRenderer", "Bookmarks synchronization complete.", startTime ) return true bundle // test code if update ( "Macintosh HD:Users:marc:Desktop:Favorites.html", "Macintosh HD:Users:marc:Desktop:result.opml" ) dialog.alert ( "Done." ) else dialog.alert ( "Failed." ) €„€€€€€€€€„€€€€€€€€€€€€€€€€€€€€€€!z!²FFFF000000060001001777AA000000000069000000001001710000001-7FFF6FBE1800000‚‚480048069E0200-1‚0Â6‚9E0222FFFF0‚‚10‚‚3‚1C7900001000000BD00000003068140840‚‚6‚20122267403C80001F4302016B0681EC040840‚‚201648B22281E03C800047E7848B1180EC01C7940840‚‚48B69E0222DA8038E0009D369E059000020000068700000000681, http://radio.weblogs.com/0104487/gems/activeRenderer/ol1.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol3.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol2.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol4.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol5.gif http://radio.weblogs.com/0104487/gems/activeRenderer/ol6.gif retrieveHtml ( 'generated by activeRenderer for XSL vs 1.3.1 - HTML outline structure copyright 2002-03 Precision IT Management, Inc. ' ); 0002000008450000068183F, javascript:void(null) + ' ' ' \' 00040000000B0000000201C7B000050000000B0000000201C7B0000600000032000000010ÁA210‚‚ÁFFFF0‚A00000 60ÂÁ ‚‚Á‚000700000019000000010‚20Â180‚Á‚0008000000970000000140,Geneva40,4030 10000900000017000000023‚2A026E3‚2A026E000A00000017000000026‚9E02226‚9E0222000B00000005000000020Â000C0000000E000000010‚‚C60‚‚000F0000005200000000400 10 ‚ÂÁÂÁ‚‚ÁÂ4,77A4,4,,NK4,4,1004,96B4,‚1900130000007E00000000DA91F8CE1C1D1E1F7F1B044,-.¦¹°­­.'"ÔÕÒÓÉÉFFFF0FFFF0FFFE000000060001001777AA¹Ì½¦ºQšÂyCžö!.!²