E3FX].BU#displayAllChannelsdisplayNewFirstenabledVGeneva ^w0 r prefsXVGeneva 2VH!FFFF000000060001001777AA000000000063000000001001710000001-7FFF6FBE180000048004806200-10620222FFFF0103AE0000100000037000000010AE408406202226D038C0001362013F00002000000B300000000AE,A slightly different news display page which shows your channels in the order they were last modified, along with the number of unread stories and a link to read the channel.000400000009000000020B00000500000009000000020B00000600000032000000010A210FFFF0A00000 20 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002620222620222000B00000005000000020000C0000001100000001AE011390000F0000005200000000400 10 4,77A4,4,4,C"]4, 4,pmEx4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAMUSbH!FFFF000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480613200-10613222FFFF01032000001000000320000000102040840613222038E000613A200002000000250000000020,A fast, compact news status page000400000009000000020220000500000009000000020220000600000032000000010A210FFFF0A00000 20 000700000019000000010201800008000000970000000140,Geneva40,4030 100009000000150000000239C17D39C17D000A0000001500000002613222613222000B00000005000000020000C0000000F000000012009C0000F0000005200000000400 10 4,77A4,4,4,C"]4, 4,pmEx4,00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AAMUꅇ bH FFFF000000060001001777AA000000000065000000001001710000001-7FFF6FBE18000004800480626200-10626222FFFF01039B0000100000037000000010A1408406262225A048C000166261B900002000000A600000000A1,The following table lists the XML news feeds you've subscribed to with the site URL, time or date last modified, a news link and the number of unread news items.00040000000A0000000201A31000500000009000000020A300006000000630000000210A210FFFF0A00000 20 C310FFFF0C00000 20 000700000019000000010201800008000000970000000140,Geneva40,4030 1000090000001500000002351224351224000A0000001500000002626222626222000B00000005000000020000C00000018000000019B8F1F143118D0000F0000002100000000400 10 00130000007E00000000DA91F8CE1C1D1E1F7F1B044,-..'"FFFF0FFFF0FFFE000000060001001777AA멽YZj q  0 <H Ye q q authorDave Ely authorEmail ely@dijas.com descriptiondescriptionSmall homePageUrl0http://radio.weblogs.com/0100683/gems/zNews.rootnamezNewspageDescription x releaseDateversion1.0b1VGeneva Q  VGeneva o@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. any2. 8@ H condition*(string.lower (path) beginsWith "/znews/")enabledmethods   Geneva o@LANDmac This script runs every hour. Geneva o@LANDmac This script runs every minute. Geneva o@LANDmac This script runs every night. {w.  ". 9 everyHour everyMinute everyNightl{   RN$  fileMenuxuserxR)<uGeneva Pʸg[o@LANDmac do whatever needs doing at init time bundle //prefs if not defined (zNewsData.prefs) new (tabletype, @zNewsData.prefs) if not defined (zNewsData.prefs.enabled) zNews.prefs.enabled = true if not defined (zNewsData.prefs.displayAllChannels) zNews.prefs.displayAllChannels = true if not defined (zNewsData.prefs.displayNewFirst) zNews.prefs.displayNewFirst = true ) AGeneva ByQo@LANDmac zNewsSuite.init() dialog.notify(string( zNewsInfo.description ))  ,Geneva xxo@LANDmac zNewsSuite.init() edit ( @zNewsData.prefs ) &Geneva By+Ho@LANDmac ZNews About Preferences  Wp`\Geneva  p  Geneva W몳%LANDmac on showNews() local( pta = html.getpagetableaddress()) pta^.title = zNewsInfo.name local( adrdata = xml.aggregator.init()) local( htmltext = "", indentlevel = 0 ) on add( s ) htmltext = htmltext + string.filledstring( "\t", indentlevel ) + s + "\r\n" local( errorstring = "", initialurl = "http://", adrnewservice = nil ) local( sortedAggrTable ) local( storyCountTable ) build a table of date sorted agregation channels name=date in number format value=channel XML address (the index for aggregatorData.services) bundle local( adrsort ) new( tabletype, @sortedAggrTable ) for ( adr in @adrdata^.services ) if ( defined( adr^.timeLastChange )) adrsort = @sortedAggrTable.[ number( adr^.timeLastChange ) ] if ( defined( adrsort^ )) //collision local( counter = 1 ) loop adrsort = @sortedAggrTable.[ number( adr^.timeLastChange ) + counter++ ] if ( not defined( adrsort^ )) break adrsort^ = nameof( adr^ ) build a table of stories name=channel XML address (the index for aggregatorData.services) value=story count bundle local( tablePtr ) new( tabletype, @storyCountTable ) for ( aStory in @adrdata^.stories ) local( storyCount = 1 ) tablePtr = @storyCountTable.[ aStory^.url ] if ( defined( tablePtr^ )) storyCount = tablePtr^ storyCount++ tablePtr^ = storyCount bundle add( "

" ) add( string( zNewsInfo.pageDescription ) + " " ) add( "

" ) add( "" ); indentlevel++ add( "" ); indentlevel-- add( "
" ); indentlevel++ bundle //add subscription table add( "
" ); indentlevel++ add( "" ); indentlevel++ add( "" ); indentlevel++ add( "" ) add( "" ) add( "" ) add( "" ) add( "" ); indentlevel-- local( i, adrsort, adr, adrsource ) for adrsort in @sortedAggrTable adr = @adrdata^.services.[adrsort^] if defined( adr^.compilation ) if sizeof( adr^.compilation ) > 0 local( title = adr^.compilation.channeltitle ) local( channeldescription = "", channellink = "" ) if defined( adr^.compilation.channeldescription ) channeldescription = radio.string.decodeEntities( adr^.compilation.channeldescription ) if defined( adr^.compilation.channellink ) channellink = adr^.compilation.channellink add( "" ); indentlevel++ if ( sizeof( title ) > 50 ) title = string.mid( title, 1, 50 ) + ".." add( "" ) add( "" ) bundle //load up the read link with some HTML local ( readLink, url, args ) new ( tabletype, @args ) args.xmlUrl = nameof( adr^ ) // adritem^.url; if ( defined (pta^.radioResponder.getArgs.menu )) args.menu = pta^.radioResponder.getArgs.menu url = "../system/pages/news?" + webserver.encodeArgs( @args ) readLink = " " + "Read" + "" add( "" ) bundle // display count of unread items... local( storyCount = 0, storyIndex = nameof( adr^ ), tablePtr ) tablePtr = @storyCountTable.[ storyIndex ] if ( defined( tablePtr^ )) storyCount = tablePtr^ add( "" ) add( "" ); indentlevel-- add( "
" + "Subscription Name" + "" + "Date
Modified" + "
" + "Link" + "" + "Unread" + "
" + radio.string.decodeEntities( title ) + "" + radio.string.getDateString( adr^.timeLastChange, false ) + "" + readLink + "" + string( storyCount ) + "
" ); indentlevel-- add( "
" ); indentlevel-- add( "
" ); indentlevel-- add( "
" ) indentlevel-- return( htmltext ) bundle { // testing html.setpagetableaddress( @scratchpad.params ) showNews()  7 Geneva Bg LANDmac This script returns a string which appears in the Status Center on the Radio UserLand home page. return( string( zNewsInfo.descriptionSmall ) + " (v" + zNewsInfo.version + ")." ) 7BGeneva @nOvLANDmac Setup the release datestamp zNewsInfo.releaseDate = clock.now(); OV 뫋  !- 2> CO Xd x backgroundH callbacksHinitHQmenuHshowNewsHSstatusCenterMessageH2h zDateStampH3VGeneva FGO?Geneva o@LANDmac This script runs in its own thread. printOutlineThread.enabled = false printOutlineSuite.commands.cleanUp() filemenu.savemyroot (this) //save this root never run again! ?P.  ctenabledscriptH5VGeneva 5VHtArial 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����(��7 firstFilter����(��8 pagefilter����(��9��VGeneva���������������������������� �����������P�E��$����������������������������A�������=������7 �������� ����url���http://127.0.0.1/zNews/���A���n�����������������8H������VArial����������������������������� ������������������������������������������������n����������W����������������������space���/GIFfGIF89a�������!����,�������D�;��VArial����������������������������� ������������������������������������������������������������V��������������� ������� �������"�������+ ����0���: ����C���L ����Q���[ ����aalink���008000bgcolor���FFFFFFflRenderlink���0000FFspaceGif���spacetext���000000vlink���800080��VArial����������������������������� ��������������������������������������������������n�����������������8>������VArial����������������������������� ������������������������������������������������n����������� ���O����Geneva���������������������������� ��������������Yh�����o@LAND������mac ������������html.setpagetableaddress( @scratchpad.params ) return( zNewsSuite.showNews() ) ���������������d��������<��������Arial����������������������������� ��������������FF�������LAND������mac ������������<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>{title} {metaTags ()} {bodyTag ()} {bodytext} db`7  * 4@ HT [g nz #filtersH;#ftpSiteH< #glossaryH<#imagesH=U#prefsH>#toolsH?=indexH? x-#templateH@VGeneva 9=?8b  ~ Y  )5 DP _k | #enabled zNewsData zNewsInfozNewsNodeTypesbzNewsResponder.zNewsRpcHandlerszNewsSoapHandlers zNewsSuite4 zNewsThread7) zNewsWebsiteBzNewsWindowTypesCtVGeneva :2CVHChicago? Lucida Grande =Geneva 8CChicago? )RChicago? Lucida Grande