].X;AeGeneva/Vjn*  " .: GS ^j p| abouthcssh dayTemplateh itemTemplatehe javascripthprefsh+qtemplateh* kFFFF000000060001001777AA000000000068000000001001710000001-7FFB6FBE180000048004806117200-106117222FFFF0103283000010000003B0000000104B44084061172224AE038E00010A61172500002000004BA000000004B4,#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.

00040000000A0000000204B6000050000000F0000000301014B60000600000032000000010A210FFFF0A00000 30 00070000002F00000002020180101600008000000970000000140,Geneva40,4030 1000090000001700000002314E28C314E28C000A000000170000000261172226117222000B00000005000000020000C00000015000000012831F6757E0000F0000005200000000400 10 4,77A4,x4,m4,{4,t`k4,/RPC4,s00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA=%޹Ij3x\D .*\ACGol1;GIFfGIF89a 1ޭ!, c+;ol2DGIFfGIF89a ޭ!, ˝x,EzAT;ol3FGIFfGIF89a !, boJnȗKI;JnȗKI; t tҲR3 )1 <] dz XtGeneva *\=*\=TCOLANDmac 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 GMT000000060001001777AA000000000068000000001001710000001-7FFF6FBE18000004800480613E200-10613E222FFFF01031E0000010000003B0000000102D840840613E2222AE038E000131613E250000200&DHC Geneva y" LANDmac 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 iDGLANDmac 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 () ;_.LPol2DGIFfGIF89a ޭ!, ˝x,EzAT;ol3FGIFfGIF89a !, boJnȗKI;space/GIFfGIF89a!,D;VArial _B  * 0< LX ^ guichuncks imagesprefsrootupdatetableԯtextsv6V %  "4 @Y e  author Marc Barrot authorEmailmba%Geneva Tǵ"0,'LANDmac activeRendererSuite.utils.register()    VGeneva 'LANDmac 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 (; FFFF00000006Se~Ҳ-= )1 <Z e P autobackupdbnameactiveRenderer.rootdialogs infomethodtoolsupdate.askUpdateParts lastupdateTue, 04 Jun 2002 14:54:02 GMTmethodtoolsupdate.updateopenLogport serialNumserverupdates.xml-rpc.itURLVGeneva A(\6T;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 cRL|*\ ~  &  @ JaskReZ ZGeneva T$B6 'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/" ) webbrowser.bringtofront () ހ~ Geneva =cA=cA?<2LANDmac 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-7FFB6FBE180000048004806200-10620222FFFF0103F000010000003500000001033408406202228038E00013620B600002000000380000000033,#title "update" {activeRendererSuite.gui.update ()}00040000000900000002035000050000000E000000030101350000600000032000000010A210FFFF0A00000 20 00070000002F00000002020180101600008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002620222620222000B00000005000000020000C0000001300000001FEA5C04A0000F0000005200000000400 10 4,77A4,4,4,D@4,D@4,4,D@00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA 33x< cGeneva 'LANDmac This script runs every hour. Geneva 'LANDmac This script runs every minute. X]Geneva ##KR/e Home@4VArial {w. *\'  ". 9 everyHourN^ everyMinuteO everyNightR{)Geneva T R'LANDmac edit ( @activeRendererData.texts.about ) local ( adr = window.frontmost () ) ]Geneva *\'*\'_LANDmac This script runs every night. window.about() rootUpdates.update (@activeRendererSuite, true) @Q(NzGeneva+f`f`6dyGeneva (E6pEf` ZGeneva T$B<L͜Zd  *6 ?K Vb my editPrefsUjsRegistrationAlertpopUnder5 registered} saveSerial unRegisteredVGeneva 4228S@3/  save03 ,Geneva c}BgLANDmac on startup () activeRendererSuite.instal() 62  startup006RN$  fileMenuxU@userxV;R$|5Geneva ;Z*Geneva 'LANDmac on openUrl (theUrl) try webbrowser.openurl (theUrl) else if !system.environment.isMac or !(tryError contains "Mac OS Error") scritpError(tryerror) webbrowser.bringtofront ()  ( +Geneva 9n9n(_LANDmac 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'eLANDmac 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'&LANDmac on activeRendererHeader() local ( s = "" ) local ( packageRoot = radio.weblog.getUrl () + "gems/activeRenderer/" ) s = s + ( "\n" ); s = s + ( "" ); return ( s ) Ѐ-oGenevar`  #/ 7C LX co ~ editBookmarks9editPath9UgetOpml9dinitPath9 restoreUrl9usynchBookmarks9update9updateBookmarks9!hr`j[  " .: GS ^j p| about9OTcss9 dayTemplate9 itemTemplate9e javascript9prefs9+qrslite9template9 PrfGeneva 88' <7[  * 4@ HT [g q}   !#filterss#ftpSiteR #glossary##images;#prefs #template9!#toolsz bookmarksXhelpDindexprefsregister saveSerialthanks/uupdateVVerdana ??81 L<V͜캈  $0 DP Ye p| editBookmarksc8 editPrefsUjsRegistrationAlertpopUnder[ registered} saveSerial unRegisteredVGeneva 4228S`<<Geneva *oULANDmac 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] factiveRendererFunctionsxgactiveRenderer26bArial TWˬ",I?LANDmac 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 <'LANDmac 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 backgroundP callbacksV}instal֥macrosmenustatusCenterMessagewGeneva 'LANDmac 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] ctenabledscriptz$tArial FF2LANDmac on finalFilter (pta) pta^.renderedText = string.replace (pta^.renderedText, "[[title]]", "") return (true) ����������������������������� ���-����Geneva���������������������������� ��������������Eu`Q�������2LAND������mac ������������on firstFilter (adrPageTable) return (true) �����������������������*��[����Geneva���������������������������� ��������������Eu7a���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���.���EF�������� ���� ��� ����$���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��������������������*���@�������<������JT3�������� ����displayServerName�����€��v����������� ���^����Geneva���������������������������� ����������T��7e7e#���L��'�LAND������mac ������������webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/help" ) webbrowser.bringtofront () �����������d���n�����������������8>������VArial����������������������������� ������������������������������������������������n� ������000000060001001777AA00000000005A0000000010017101904900218000006000600329200-1032921FFFFF010E0000100000031000000010E84032921FE048E000163293000020000001200000000�E,#title "Home" 000400000009000000020100000500000009000000020100000600000032000000010F310FFFF0C00000 20 000700000019000000010201E00008000000A900000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������10A0304E44000101000090000001500000002096177096177000A000000150000000232921F32921F000B00000005000000020000C0000001200000001E369AF10000F0000005200000000400 10 �4,appn�4,send�4,8�4,&����4,8�4,3�4,800130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�Pĵ7�����������������������������������������������������}�5#��������������������������������������������������������������Q���������`���7F�������� ���� ��� �������* ����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 ()) ������������������������������������������������������������� ��������@xChicago��������������������������?� ��������������� Lucida Grande���������������������� �����������������A��Geneva����������������������������� ����������������^}Chicago��������������������������?� ����������������mnChicago��������������������������?� ���������������� Lucida Grande���������������������� ���������������������������������������������������������������������������������������V��z�0��Geneva���������������������������� �������������p�l?������D�KLAND������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���������������������������� ��������������*\*\������WLAND������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-7EFF6FBE180000048004806715200-17C67C77C67C706715222FFFF01031040000100000038000000010CC68406715222CC6038E000708671560000200000CCC00000000�CC6,/* Outliner functions version: 1.0b1 last�� ���������L���j9n�������� ������� ����(���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-7EFB6FBE18000004800480673C200-17C67C77C67C70673C222FFFF01033B0000100000038000000010CC6840673C222CC6038E00072F673C60000200000CCC00000000�CC6,/* Outliner functions ver�������FFFF000000060001001777AA000000000066000000001001710000001-7FFB6FBE180000048004806FD200-106FD222FFFF010325F00001000000380000000103E2408406FD2223DC038E000F06FD2500002000003E800000000�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>00040000000A0000000203E4000050000000F0000000301013E40000600000032000000010A210FFFF0A00000 20 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002314E28C314E28C000A00000015000000026FD2226FD222000B00000005000000020000C000000180000000125F1F47535D830000F0000005200000000400 10 �4,77A�4,x���4,m�4,�{�4,t`k�4,/RPC�4,�s00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�=%޹=(���������������������������������������������������3x�����������������������������������������������������������������FFFF000000060001001777AA000000000071000000001001710000001-7FFE6FBE18000004800480623200-1314A314A0623222FFFF01031E00001000000360000000103E408406232221C038E00016623AF000020000004300000000�3E,#title "Save serial number" {activeRendererSuite.saveSerial()}00040000000F00000003011C0400000500000009000000020400000600000061000000020A210FFFF0A00000 30 C310FFFF0C00000 40 0007000000190000000102018000080000009C00000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������403030100009000000150000000239C17D39C17D000A0000001500000002623222623222000B00000005000000020000C00000012000000011E1DB141000F0000005200000000400 10 �4,77A�4,D2@��4,D2@��4,�����4,D2@��4,D2��4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA� "������������������������������������������>�����������#v������u������������������������������������������������������� ������D000000060001001777AA000000000076000000001001710000001-7FFB6FBE18000004800480695200-118618A18618A0695222FFFF01031E7000010000003800000001023940840695222210038E00088695BF000020000023F00000000�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-7FFB6FBE180000048004806131200-106131222FFFF0103548000010000003B000000010548408406131222542038E000124613125000020000054E00000000�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>00040000000A00000002054A000050000000F00000003010154A0000600000032000000010A210FFFF0A00000 40 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002314E28C314E28C000A000000170000000261312226131222000B00000005000000020000C00000018000000015481F6757251F0000F0000005200000000400 10 �4,77A�4,x���4,m�4,�{�4,t`k�4,/RPC�4,�s00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�=%޹��� ��������������������������������������H����������3x������ i����������������������������������������������������� ������FFFF000000060001001777AA00000000006F000000001001710000001-7FFF6FBE1800000480048061E200-1816816061E222FFFF01033B00001000000360000000103B4084061E22215028E0001261EB2000020000004000000000�3B,#title "Preferences" {activeRendererSuite.gui.editPrefs ()}00040000000A00000002013D100050000000A00000002013D00006000000620000000210A210FFFF0A00000 20 A20FFFF0900000 20 00070000002F000000020101801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000150000000239C17D39C17D000A000000150000000261E22261E222000B00000005000000020000C00000012000000013B071AC0000F0000005200000000400 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������BpLAND������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-7FFF6FBE18000004800480647200-10647222FFFF0103680000100000036000000010774084064722268038E0003A64734000020000007C00000000�77,<script for=window event=onload> if ( confirm( "##text##" ) ) { window.open( "##url##" , "regWindow" ); } </script>000400000009000000020790000500000009000000020790000600000032000000010A210FFFF0A00000 20 0007000000190000000102018000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000150000000239C17D39C17D000A0000001500000002647222647222000B00000005000000020000C0000001600000001686727FD5D10000F0000005200000000400 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��228S����������������������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���������������������������� ������������qN������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������7J�������� ���� ��� �������* ����4���@ ����H���T ����[���g ����q���} ������� ������� ������� ������� ������� ������� ����#filters����8��s#ftpSite����8��R #glossary����8�##images����8��;#prefs����8�� #template�����8��9!#tools����8��zhelp����8�Findex����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���������������������������� ��������������������hdLAND������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@������KJLAND������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-7FFB6FBE180000048004806200-10620222FFFF0103F000010000003500000001033408406202228038E00013620B6000020000003800000000�33,#title "update" {activeRendererSuite.g�n�� ����FFFF000000060001001777AA000000000068000000001001710000001-7FFB6FBE180000048004806131200-106131222FFFF0103548000010000003B000000010548408406131222542038E000124613125000020000054E00000000�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>00040000000A00000002054A000050000000F00000003010154A0000600000032000000010A210FFFF0A00000 40 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002314E28C314E28C000A000000170000000261312226131222000B00000005000000020000C00000018000000015481F6757251F0000F0000005200000000400 10 �4,77A�4,x���4,m�4,�{�4,t`k�4,/RPC�4,�s00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�=%޹��� ��������������������������������������H����������3x������ i������������������������������������������������������ ������FFFF000000060001001777AA00000000006E000000001001710000001-7EFF6FBE1800000480048062D200-1811811062D222FFFF010390000100000035000000010464084062D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000900000002048000050000000F0000000301460480000600000032000000010A210FFFF0A00000 40 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002310C270310C270000A000000150000000262D22262D222000B00000005000000020000C000000130000000198A2E02D0000F0000005200000000400 10 �4,77A�4,�4,D@��4,�4,�����4,�4,D�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�X ������������������������������������������F���������� ?8������^���������������������������������������������������������������z������Geneva���������������������������� ��������������������hdLAND������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-7EFB6FBE1800000480048065DD200-11FA2051FA205065DD222FFFF01031795000010000007C0000000209344084062352228D003C80002282C235209093417954084023565DD222E61038E0005D065DD6000020000093A00000000�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> 00040000000B0000000201797000050000000C000000020117970000600000032000000010A210FFFF0A00000 50 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002316B2F9316B2F9000A000000170000000265DD22265DD222000B00000005000000020000C000000170000000117951F4756F40000F0000005200000000400 10 �4,77A�4,�4,�4,D��4,D��4,�����4,D�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�6K���A�������������������������������������������������Rgs�������������������������������������������������������������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� 7update����p�  updateBookmarks����p� yahooImport����p� )��C� �����r000000060001001777AA000000000068000000001001710000001-7EFB6FBE180000048004806276200-106276222FFFF010313E000010000003A00000001053B40840627622253B038E00026962766000020000054100000000�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; 00040000000A00000002053D0000500000015000000040E4113E053D0000600000032000000010A210FFFF0A00000 20 00070000002F000000020301801017000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002329B2E0329B2E0000A000000170000000262762226276222000B00000005000000020000C000000150000000113EE46A7110000F0000005200000000400 10 �4,77A�4,D(��4,D(��4,�����4,D(��4,D)���4, Use00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�~�����������������������������������������;�����������/$������ ^�����������������������������������������������������M��A����FFFF000000060001001777AA00000000007B000000001001710000001-7FFB6FBE18000004800480618A7200-17C67C77C67C70618A7222FFFF01033B7E000010000019000000006092240840649822290003CE00048B6498B40922123640840498699F2228C403C80009923099F1AC012361B8A4084099F6D4722293503C8000D3A18D47A001B8A278D40840D476117E222BB003CE00011716117E1870278D2F1640840117E613EE22277903C800013E119813EE1E502F163B7E4084013EE618A7222C67038E000189A618A7B000020000092800000000�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-7FFB6FBE180000048004806131200-106131222FFFF0103548000010000003B000000010548408406131222542038E000124613125000020000054E00000000�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-7FFB6FBE180000048004806200-10620222FFFF0103F000010000003500000001033408406202228038E00013620B6000020000003800000000�33,#title "update" {activeRendererSuite.gui.update ()}00040000000900000002035000050000000E000000030101350000600000032000000010A210FFFF0A00000 20 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000150000000239C17D39C17D000A0000001500000002620222620222000B00000005000000020000C0000001300000001FEA5C04A0000F0000005200000000400 10 �4,77A�4,�4,�4,D@��4,D@��4,�����4,D@�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA� �������������������������������������������3����������3x������<��������������������������������������������������������&�������l��"���Geneva���������������������������� ��������������������iDGLAND������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�����%���$���JBZJB�������� ������� ����port���5336server��� 64.81.223.180���Q������/u000000060001001777AA000000000079000000001001710000001-7EFF6FBE180000048004806D13200-1CB9CBDCB9CBD06D13222FFFF0103103A0000100000077000000020616840648B22260503C800047E1848B6E0616103A84048B6D13222A24038E000D066D136000020000061C00000000�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���������������������������� ��������������������hdLAND������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���������������������������� ��������������������.�nhLAND������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���������������������������� ��������������껗�����'5LAND������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-7FFF6FBE18000004800480613E200-10613E222FFFF01031D000010000003B0000000102F340840613E2222EF038E000131613E2500002000002F900000000�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>00040000000A0000000202F5000050000000A0000000202F50000600000032000000010A210FFFF0A00000 40 0007000000190000000102018000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000170000000231822FB31822FB000A0000001700000002613E222613E222000B00000005000000020000C00000013000000011DA9B0950000F0000005200000000400 10 �4,77A�4,r���4,r���4,r$�4,�����4,r4>�4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�J h����������������������������������������������������N�������������������������������������������������������������w��p����������V���Geneva���������������������������� ��������������������vJ9LAND������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���$���B3QB3Q�������� ���� ��� ����linetext���Registerpath��� register.wsf���V���V�������R���$���B3pB3p�������� ���� ��� ����linetext��� Preferencespath��� index.wsf���V�������,�������Geneva������������������������-�'O�����$000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480613200-10613222FFFF01031E00001000000330000000103140840613222038E00061310F000020000003600000000�31,{active�2�5:�����.v��"���Geneva���������������������������� ��������������33�������@<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-7FFE6FBE180000048004806200-118618A18618A0620222FFFF0103370000100000036000000010374084062022212038E00013620BF000020000003C00000000�37,#title "Register" {activeRendererSuite.gui.register ()}00040000000900000002039000050000000A0000000201390000600000032000000010A210FFFF0A00000 60 00070000002F000000020101801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002316E230316E230000A0000001500000002620222620222000B00000005000000020000C0000001600000001371625861B90000F0000005200000000400 10 �4,77A�4,t�4,subs�4,sub�4,j�4,User�4,iub00130000007E00000000DA91F8CE1C1D1E1F7F1B0�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-7FFF6FBE18000004800480613E200-10613E222FFFF01031D000010000003B0000000102F340840613E2222EF038E000131613E2500002000002F900000000�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>00040000000A0000000202F5000050000000A0000000202F50000600000032000000010A210FFFF0A00000 40 0007000000190000000102018000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000170000000231822FB31822FB000A0000001700000002613E222613E222000B00000005000000020000C00000013000000011DA9B0950000F0000005200000000400 10 �4,77A�4,r���4,r���4,r$�4,�����4,r4>�4,����00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�J h����������������������������������������������������N�������������������������������������������������������������w�)V�������$����Geneva���������������������������� ��������������껗������Z�9LAND������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���������������������������� ��������������������-�rlLAND������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���������������������������� ��������������FH������|�0QLAND������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 껗 QLANDmac 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 껗LANDmac 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'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/bookmarks/" ) webbrowser.bringtofront () EES'OI'LAND =Geneva -cLANDmac 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 TCOLANDmac 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)'LANDmac activeRendererSuite.utils.setUpdateServer ("alpha") nde{)Geneva T Ry'LANDmac edit ( @activeRendererData.texts.about ) {000000060001001777AA000000000065000000001001710000001-7FFB6FBE1800000480048062D200-1062D222FFFF0103540000100000036000000010544084062D2223C038E0002062D8E00002000000590000000054,#flDisplayCup "regular" #renderOutlineWith "activeRenderer" #flDisplayHTMLWedge true000400000009000000020560000500000009000000020560000600000032000000010A210FFFF0A00000 20 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A000000150000000262D22262D222000B00000005000000020000C0000001700000001543B1F2212880000F0000005200000000400 10 4,77A4,4,>P4,]4,]4,k064,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAŇiXT3xJB eGeneva $Bbb'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/preferences" ) webbrowser.bringtofront () ath = argList[4] F ZGeneva Tbc'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/" ) webbrowser.bringtofront () {CV   2> Vb z activeRendererDataTactiveRendererInfoCactiveRendererNodeTypes>activeRendererResponder@activeRendererSuiteactiveRendererThread^activeRendererWebsiteV Lucida Grande226(Geneva / ч'LANDmac 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 iipppppppiii$$$ddii {G.vL  * 2> DP Ye l #templategetOpmlgetPathindex~initPathupdate ̀oeGeneva J'LANDmac GHDtj  " .: GS ^j p| aboutp Ncssp ' dayTemplatep itemTemplatep c javascriptpܶprefsp rslitep templatep Mxsl_htmlpxsl_jsp qH X8VZglobe GIFfGIF89a kHDDȱmma! NETSCAPE2.0!©right 20 V Geneva -rlLANDmac on activeRendererFunctions ( titleText = "outline", titleClass = "active", flIncludeLinks = true, linkClass = "active", nodeClass = "active", helpText = "how this works", helpClass = "help", flImageCache = true =0000000600010017 FFFF000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000480048062D200-1062D222FFFF01031500001000000350000000103C4084062D2223C038E0002062D60000200000041000000003C,#title "Preferences" {activeRendererSuite.gui.editPrefs ()} 00040000000A00000002013E10005000000090000000203E00006000000630000000210C310FFFF0C00000 20 A210FFFF0A00000 20 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002311327B311327B000A000000150000000262D22262D222000B00000005000000020000C0000001100000001151B610000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĺ_-<ImFFFF000000060001001777AA00000000006D000000001001710000001-7EFB6FBE180000048004806200-18118110620222FFFF01031800001000000330000000102284062022222038E00013620600002000000270000000022,{activeRendererSuite.jsRender ()} 00040000000900000002024000050000000F0000000301220240000600000032000000010A210FFFF0A00000 50 00070000002F00000002020180101600008000000970000000140,Geneva40,4030 1000090000001700000002310C270310C270000A0000001500000002620222620222000B00000005000000020000C0000001500000001181597007C0000F0000005200000000400 10 4,77A4,4,D@4,4,4,4,D00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAXH'" ?89 U$8G   #templateP{indexPGQLANDmac u  Geneva EES'OI'LANDmac if dialog.confirm ( "Deactivate activeRenderer tool ?" ) Frontier.tools.uninstall ( window.getFile ( parentOf ( activeRendererInfo ) ) )  . Geneva 껗TCOLANDmac 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 stableServerpVGeneva g2@xche 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,LANDmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: registration

This copy of activeRenderer is registered. Serial number: ##serial##.
FFFF000000060001001777AA000000000078000000001001710000001-7FFB6FBE180000048004806242200-149549E49549E06242222FFFF0103446000010000003B00000001044640840624222243D038E000235624234000020000044C00000000446,00040000000A000000020448000050000000A0000000204480000600000032000000010A210FFFF0A00000 30 000700000019000000010201800008000000970000000140,Geneva40,4030 1000090000001700000002316A1E6316A1E6000A000000170000000262422226242222000B00000005000000020000C0000001700000001446E2656772E0000F0000005200000000400 10 4,77A4,4,IGxv4,J3Bv4,ZXIg4,cj154,ZXIg00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA=ugD F,0)[?Geneva 7\LANDmac Please provide at least an 'src' argument in your GET request. }BKHKH   ! &+ 2&&''>><<""UQj뻯 $ 9E P\ fr ~ activeRendererFunctionsdactiveRendererHeadera 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 껗'LANDmac 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 )  BGeneva 껗LANDmac 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'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/bookmarks/" ) webbrowser.bringtofront () on initPath () local p ,5 BGeneva LANDmac 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-7FFB6FBE18000004800480613200-11201200613222FFFF01031E00001000000320000000102940840613222038E000613E1000020000002E0000000029,{activeRendererSuite.bookmarks.getOpml()}0004000000090000000202B00005000000090000000202B0000600000032000000010A210FFFF0A00000 30 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C00000015000000011E15E700A00000F0000005200000000400 10 4,77A4,D@4,D@4,4,D@4,D4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAm깣)z #4 Geneva gYLANDmac {title} {metaTags ()} {bodytext} BGeneva ,LANDmac 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 8tj  (4 FR ]i v buildPathArgs buildPostArgsߣcheckHomeTemplate@ checkPrefs folderToOpmlDgetPrefsbopenUrlќ 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]HGeneva oLANDmac {title} {metaTags ()} {bodyTag ()} {bodytext} Geneva]Geneva }^LANDmac 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���$���8G�������� ���� ��� ���� #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���������������������������� ��������������껗������jLAND������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���������������������������� ��������������껗������-�rlLAND������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���������������������������� ��������������껗������-cLAND������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���������������������������� ��������������껗������,XLAND������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-7FFB6FBE18000004800480691D200-11701731701730691D222FFFF010319DA000010000007C000000020A2340840631F2229E903CC000312631F1330A2319DA4084031F691D222FA6038E000910691D590000200000A2900000000�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) 00040000000B00000002019DC000050000000B00000002019DC0000600000032000000010A210FFFF0A00000 50 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000170000000232A52D832A52D8000A0000001700000002691D222691D222000B00000005000000020000C0000000E000000010F80000F0000005200000000400 10 4,77A4,acti4,4,084,4824,4E04,@00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA̾8Q,DȀ!+000000060001001777AA000000000078000000001001710000001-7EFB6FBE180000048004806394200-13FE4063FE40606394222FFFF01037A7000010000003A0000000107A74084063942227A7038E0003876394600002000007AD000000007A7, <%activeRendererHeader () %> <%title%>
<%storyBox () %>

<%title%>

home

<%activeRendererFunctions () %>

<%bodytext%> <%espressoCup ( true ) %>
<%radio.macros.editThisPageButton ()%>
<%radio.macros.staticSiteStatsImage ()%> 00040000000A0000000207A9000050000000A0000000207A90000600000032000000010A210FFFF0A00000 40 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000170000000232403BB32403BB000A000000170000000263942226394222000B00000005000000020000C0000001A000000017A74501EC11D1330000F0000005200000000400 10 4,77A4,C4,4,C4,5{4,5{4,5{00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAX'5 B5_000000060001001777AA000000000068000000001001710000001-7EFB6FBE180000048004806276200-106276222FFFF010313E000010000003A00000001053B40840627622253B038E0002696276600002000005410000000053B,/* 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; 00040000000A00000002053D0000500000015000000040E4113E053D0000600000032000000010A210FFFF0A00000 20 00070000002F00000002030180101700008000000970000000140,Geneva40,4030 1000090000001700000002329B2E0329B2E0000A000000170000000262762226276222000B00000005000000020000C000000150000000113EE46A7110000F0000005200000000400 10 4,77A4,D(4,D(4,4,D(4,D)4, Use00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA~;/$ ^ G_000000060001001777AA000000000077000000001001710000001-7FFF6FBE18000004800480621B200-115F16515F1650621B222FFFF01031F000010000003B0000000104C640840621B2224C2038E00020E621B2500002000004CC000000004C6,
> <%nodeFormat ( <%itemNum%> )%>
<%nodeFormat ( <%itemNum%>, false )%>
<%enclosure%>
00040000000A0000000204C8000050000000A0000000204C80000600000032000000010A210FFFF0A00000 30 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000170000000231F32AB31F32AB000A0000001700000002621B222621B222000B00000005000000020000C00000015000000011F1ECA309E0000F0000005200000000400 10 4,77A4,4,4,4,/RPC4,4,u00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAIJ OU \_4 Geneva B]B U%>B{B(J$t fl7a'Z3$] 8 ќ+D#-3>p^f X dw9)V'^ XG.v3W%,navdx D cR@Q( Mҏ" U+OX;Ae< V$TP$8G   #templatePindexPT:BGeneva F?|0QLANDmac {title} {bodytext} :\T Geneva  QLANDmac 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 LANDmac 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 (LANDmac 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 displayServerName1FFF6FBE18000004800480613200-i)y eGeneva $Bbb'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/preferences" ) webbrowser.bringtofront () 4yZbGeneva 껗e/LANDmac 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)'LANDmac activeRendererSuite.utils.setUpdateServer ("stable") 1 <ZGeneva ULANDmac 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 뻗(wLANDmac 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 ) pGeneva 껗}^LANDmac 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���$���JBZJJ�������� ������� ����port���80server���updates.xml-rpc.it���T�+�����p���$���JBZJB�������� ������� ����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���������������������������� ��������������������,XLAND������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������Dindex������Cjsrender������ * preferences������prefs�������register������(render������^ saveSerial�������thanks�������update��������VVerdana��������������������������� ������������??8������������������������������000000060001001777AA00000000006E000000001001710000001-7EFF6FBE1800000480048062D200-1811811062D222FFFF010390000100000035000000010464084062D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000900000002048000050000000F0000000301460480000600000032000000010A210FFFF0A00000 40 00070000002F000�������FFFF000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000480048062D200-1062D222FFFF0103460000100000035000000010464084062D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000A00000002014810005000000090000000204800006000000630000000210C310FFFF0C00000 20 A210FFFF0A00000 30 000700000019000000010201600008000000A500000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������1040304E40101000090000001700000002311327B311327B000A000000150000000262D22262D222000B00000005000000020000C0000001400000001461AC65620000F0000005200000000400 10 �4,appn�4,send�4,8�4,&����4,8�4,3�4,800130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�Pĺ������������������������������������������F�����������I������z������������������������������������������������������������FFFF000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480613200-10613222FFFF01031E00001000000330000000103140840613222038E00061310F000020000003600000000�31,{activeRendererSuite.bookmarks.updateBookmarks()}000400000009000000020330000500000009000000020330000600000032000000010A210FFFF0A00000 30 0007000000190000000102018000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C00000016000000011E1510720A00000F0000005200000000400 10 �4,77A�4,D@��4,�[�4,H�4, �4,�����4,00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�m깣������������������������������������������1����������8T������#�������������������������������������������������������J$�����000000060001001777AA000000000062000000001001710000001-7FFB6FBE180000048004806200-10620222FFFF0103F000010000003500000001033408406202228038E00013620B6000020000003800000000�33,#title "update" {activeRendererSuite.gui.update ()}00040000000900000002035000050000000E000000030101350000600000032000000010A210FFFF0A00000 20 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 100009000000150000000239C17D39C17D000A0000001500000002620222620222000B00000005000000020000C0000001300000001FEA5C04A0000F0000005200000000400 10 �4,77A�4,�4,�4,D@��4,D@��4,�����4,D@�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA� �������������������������������������������3����������3x������<������������������������������������������������������� �����000000060001001777AA000000000068000000001001710000001-7FFB6FBE180000048004806131200-106131222FFFF0103548000010000003B000000010548408406131222542038E000124613125000020000054E00000000�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>00040000000A00000002054A000050000000F00000003010154A0000600000032000000010A210FFFF0A00000 40 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002314E28C314E28C000A000000170000000261312226131222000B00000005000000020000C00000018000000015481F6757251F0000F0000005200000000400 10 �4,77A�4,x���4,m�4,�{�4,t`k�4,/RPC�4,�s00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�=%޹��� ��������������������������������������H����������3x������ i������������������������������������������������������;_�����t000000060001001777AA00000000006E000000001001710000001-7EFF6FBE1800000480048062D200-1811811062D222FFFF010390000100000035000000010464084062D22246038E0002062D6000020000004B00000000�46,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000900000002048000050000000F0000000301460480000600000032000000010A210FFFF0A00000 40 00070000002F000000020201801016000080000009700000001�40,Geneva����������������������������������������������������������40,����������������������������������������������������������������4030 1000090000001700000002310C270310C270000A000000150000000262D22262D222000B00000005000000020000C000000130000000198A2E02D0000F0000005200000000400 10 �4,77A�4,�4,D@��4,�4,�����4,�4,D�00130000007E00000000DA91F8CE1C1D1E1F7F1B0�44,-��.��������������.��'��"��������������FFFF0FFFF0FFFE000000060001001777AA�X ������������������������������������������F���������� ?8������^�������������������������������������������������������6q�����t�B������Geneva���������������������������� ��������������F?������|�0QLAND������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-7FFE6FBE180000048004806200-118618A18618A0620222FFFF0103370000100000036000000010374084062022212038E00013620BF000020000003C0000000037,#title "Register" {activeRendererSuite.gui.register ()}00040000000900000002039000050000000A0000000201390000600000032000000010A210FFFF0A00000 60 00070000002F00000002010180101600008000000970000000140,Geneva40,4030 1000090000001700000002316E230316E230000A0000001500000002620222620222000B00000005000000020000C0000001600000001371625861B90000F0000005200000000400 10 4,77A4,t4,subs4,sub4,j4,User4,iub00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA:j 7EQS׀/Ht000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000480048062D200-1062D222FFFF01031500001000000350000000103C4084062D2223C038E0002062D60000200000041000000003C,#title "Preferences" {activeRendererSuite.gui.editPrefs ()} 00040000000A00000002013E10005000000090000000203E00006000000630000000210C310FFFF0C00000 20 A210FFFF0A00000 20 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002311327B311327B000A000000150000000262D22262D222000B00000005000000020000C0000001100000001151B610000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĺ_-<Im*Kt000000060001001777AA00000000006D000000001001710000001-7EFB6FBE180000048004806200-18118110620222FFFF01031800001000000330000000102284062022222038E00013620600002000000270000000022,{activeRendererSuite.jsRender ()} 00040000000900000002024000050000000F0000000301220240000600000032000000010A210FFFF0A00000 50 00070000002F00000002020180101600008000000970000000140,Geneva40,4030 1000090000001700000002310C270310C270000A0000001500000002620222620222000B00000005000000020000C0000001500000001181597007C0000F0000005200000000400 10 4,77A4,4,D@4,4,4,4,D00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAXH'" ?89%t000000060001001777AA000000000065000000001001710000001-76FB6FFE1800000480048062D200-1062D222FFFF0103460000100000035000000010464084062D22246038E0002062D6000020000004B0000000046,#title "Rendered with activeRenderer" {activeRendererSuite.render ()} 00040000000A00000002014810005000000090000000204800006000000630000000210C310FFFF0C00000 20 A210FFFF0A00000 30 000700000019000000010201600008000000A50000000140,Geneva40,1040304E40101000090000001700000002311327B311327B000A000000150000000262D22262D222000B00000005000000020000C0000001400000001461AC65620000F0000005200000000400 10 4,appn4,send4,84,&4,84,34,800130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAPĺFIz xt000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480613200-10613222FFFF01031E00001000000330000000103140840613222038E00061310F00002000000360000000031,{activeRendererSuite.bookmarks.updateBookmarks()}000400000009000000020330000500000009000000020330000600000032000000010A210FFFF0A00000 30 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C00000016000000011E1510720A00000F0000005200000000400 10 4,77A4,D@4,[4,H4, 4,4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAm깣18T#t000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480613200-10613222FFFF01031E00001000000320000000102A40840613222038E000613E2000020000002F000000002A,{activeRendererSuite.bookmarks.initPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010A210FFFF0A00000 30 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C00000015000000011E15D720A00000F0000005200000000400 10 4,77A4,D(4,D(4,4,D(4,D)4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAm깣*z ]H000000060001001777AA000000000071000000001001710000001-7EFB6FBE1800000480048062D200-126482648062D222FFFF0103440000100000035000000010444084062D22244038E0002062D600002000000490000000044,#title "Bookmarks" {activeRendererSuite.bookmarks.editBookmarks ()} 00040000000900000002046000050000000F0000000301440460000600000032000000010A210FFFF0A00000 50 00070000002F00000002020180101600008000000970000000140,Geneva40,4030 1000090000001700000002310C270310C270000A000000150000000262D22262D222000B00000005000000020000C00000015000000014433EB57320000F0000005200000000400 10 4,77A4,4,D@4,4,4,4,D00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAX}D ?8a*]HzGeneva 껗hdLANDmac 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 editPrefsPregisterPc regWindowP`updateP 1/ -MGeneva ';LANDmac
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 'LANDmac on buildPostArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.requestBody, theTableAdr ) PgetPathP2iT Geneva EES'OI'LANDmac if dialog.confirm ( "Deactivate activeRenderer tool ?" ) Frontier.tools.uninstall ( window.getFile ( parentOf ( activeRendererInfo ) ) ) ^Geneva jLANDmac 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 ,LANDmac 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   activeRendererE backgroundP bookmarks callbacksV}cleanup.gui#instal:jsRenderb jsRenderOpmlr jsRenderRsso<macros-menu menuItemsrenderl rssRenderer saveSerialstatusCenterMessageuninstal2updateutilsr09)V000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480613200-10613222FFFF01031E00001000000320000000102A40840613222038E000613Ӏ000000060001001777AA0000000MZ000000060001001777AA00000000006F000000001001710000001-7FFB6FBE18000004800480613200-11201200613222FFFF01031E0000100(000000060001001777AA000000000065000000001001710000001-7FFB6FBE18000004800480613200-10613222FFFF9FFFF000000060001001777AA000000000065000000001001710000001-7FFB6FBE18000004800480613200-10613222FFFF01031E00001000000320000000102A40840613222038E000613E2000020000002F000000002A,{activeRendererSuite.bookmarks.editPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010A210FFFF0A00000 20 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C00000015000000011E15D720A00000F0000005200000000400 10 4,77A4,4,D@4,D@4,4,D@4,D00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA4m*3x X000000060001001777AA000000000065000000001001710000001-7FFB6FBE18000004800480613200-10613222FFFF01031E00001000000320000000102A40840613222038E000613E2000020000002F000000002A,{activeRendererSuite.bookmarks.editPath()}0004000000090000000202C00005000000090000000202C0000600000032000000010A210FFFF0A00000 20 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C00000015000000011E15D720A00000F0000005200000000400 10 4,77A4,4,D@4,D@4,4,D@4,D00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA4m*3x 4 Geneva 껗gYLANDmac {title} {metaTags ()} {bodytext} 9 *Geneva  bGeneva Tǵ>'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/register" ) webbrowser.bringtofront () kGeneva ,HLANDmac 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" ) ) AFFFF000000060001001777AA00000000007B000000001001710000001-7FFB6FBE18000004800480618A7200-17C67C77C67C70618A7222FFFF01033B7E000010000019000000006092240840649822290003CE00048B6498B40922123640840498699F2228C403C80009923099F1AC012361B8A4084099F6D4722293503C8000D3A18D47A001B8A278D40840D476117E222BB003CE00011716117E1870278D2F1640840117E613EE22277903C800013E119813EE1E502F163B7E4084013EE618A7222C67038E000189A618A7B000020000092800000000922,/* 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'; }00040000000B0000000203B80000050000000B0000000203B800000600000032000000010A210FFFF0A00000 F0 000700000019000000010201800008000000970000000140,Geneva40,4030 1000090000001700000002328630D328630D000A0000001900000002618A7222618A7222000B00000005000000020000C0000001B000000013B7E2E0F01D212750000F0000005200000000400 10 4,77A4,4,5{4,4,4,4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AATl*;~.KkAuA `껯VZKO 3 7globe GIFfGIF89a kHDDȱmma! NETSCAPE2.0!©right 2000 by ADI Associates, Inc.! , #xgd0B :(i5]Un!91! , !xgd0Fbpfpa聥%7a( ! , xgdc@am/[`Ր@QD ( ! ,  xgd(ʮc@`($B8Б! , "xgd*(+m V%8aFCcA#@G! , #xgdF+k gCx@$d`x 'D$! , $xgd((+@`I !D ! , $xgd(k: u!%aah N*D ! , &xgd(ˍ TЌ@ح1! , &xgdAG( 8li]fP&B8Б! , %xgdae  EthA# Ae7 @G! , &xgdaY^PXA7lͰauB8Б;ol1;GIFfGIF89a 1ޭ!, c+;ol2DGIFfGIF89a ޭ!, ˝x,EzAT;ol3IGIFfGIF89a 1!,  kic/G;ol4PGIFfGIF89a 1!, )H࿂U9XPaJdĊ '6!Ä1 ;ol5GIFfGIF89a1fffݻUUUDDD!,DIW ExxGA;|xI\ c% @Z20Y-|Bxl;ol6=GIFfGIF89a1ƽ{{{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'Bx4ZL(`X(F T` \bh<bL  hvsHD6b>+!;ol7GIFfGIF89a1ΥBBB!!!!MSOFTWARE: QuickTime 6.0.2 DATE: 2002:10:31 15:12:14 HOST: Mac OS X 10.1.5 !,DI8k

KY d alphaServerpp autoUpdate autoUpstream displayLatest outlineItems outlineWeblog regPageUrl0http://register.xml-rpc.it/itstories/story$num=3 stableServerp9nVGeneva g2@xoW+$JBZJJ  port80serverupdates.xml-rpc.itTWT+$| 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@xGbUV͜  $0 ;G P\ gs | editBookmarksPr editPrefsPSA jsRendererPpopUnderPJV registeredPDlrendererP7l unRegisteredP<VGeneva 4228SUTGeneva 껗';LANDmac

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##

ÀLTGeneva 껗G,LANDmac
Home Browser Preferences Bookmarks Register Help Faq

activeRenderer: registration

This copy of activeRenderer is registered. Serial number: ##serial##.
FFFF000000060001001777AA000000000078000000001001710000001-7FFB6FBE180000048004806242200-149549E49549E06242222FFFF0103446000010000003B00000001044640840624222243D038E000235624234000020000044C00000000446,00040000000A000000020448000050000000A0000000204480000600000032000000010A210FFFF0A00000 30 000700000019000000010201800008000000970000000140,Geneva40,4030 1000090000001700000002316A1E6316A1E6000A000000170000000262422226242222000B00000005000000020000C0000001700000001446E2656772E0000F0000005200000000400 10 4,77A4,4,IGxv4,J3Bv4,ZXIg4,cj154,ZXIg00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA=ugD F,0)[mZGeneva 껗,aLANDmac
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.

.BhҲGeneva 껗,W}LANDmac
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 'LANDmac 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 ) ZBGeneva LANDmac 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 Z5 Lucida Grande I"JJE)'LANDmac activeRendererSuite.utils.setUpdateServer ("stable") 2940840613222038E000׀ ZGeneva Tbc'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/" ) webbrowser.bringtofront () ހ ^Geneva T7e7e#L'LANDmac webbrowser.openURL ( "http://127.0.0.1:5335/activeRenderer/help" ) webbrowser.bringtofront () <8Geneva 껗'LANDmac 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 <\>:LANDmac 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 pGeneva .GLANDmac 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 () pj8Geneva '5LANDmac 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 () jFFFF000000060001001777AA000000000079000000001001710000001-7FFB6FBE18000004800480691D200-11701731701730691D222FFFF010319DA000010000007C000000020A2340840631F2229E903CC000312631F1330A2319DA4084031F691D222FA6038E000910691D590000200000A2900000000A23, 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) 00040000000B00000002019DC000050000000B00000002019DC0000600000032000000010A210FFFF0A00000 50 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000170000000232A52D832A52D8000A0000001700000002691D222691D222000B00000005000000020000C0000000E000000010F80000F0000005200000000400 10 4,77A4,acti4,4,084,4824,4E04,@00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA̾8Q,DȀ+D*Geneva 'LANDmac on openUrl (theUrl) try webbrowser.openurl (theUrl) else if !system.environment.isMac or !(tryError contains "Mac OS Error") scritpError(tryerror) webbrowser.bringtofront () ZD> Geneva 껗(LANDmac 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() 2DGeneva 'LANDmac on buildPostArgs (theTableAdr) local pta=html.getpageTableAddress() new( tableType, theTableAdr ) webserver.parseArgs( pta^.requestBody, theTableAdr ) 2<@Geneva 뻗'LANDmac 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 ) 9Q(l"Geneva 껗iDGLANDmac 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 (