#Content can be of any mime type\n##The mime type shall be determined contextually.\n#Content that can't be typed in a form can be uploaded from a file using the html upload form.\n##The html upload form ~POSTs the blob to the blob service\n##The filename shall be temporarily inserted in the link field inserted with the blob\n##Content that can't be typed in a form can only be inserted or deleted with the whole entry\n##entries with no title and only a link shall be periodically deleted.\n#blobs can be retrieved using GET on the blob service\n##a hash and a title in the url describe the blob to be retrieved.
#CSS shall be as in the templates from <html><a href="http://www.oswd.org" target="_blank">OSWD</a></html>. \n##Additional css shall be included to deal with <divs> of class feed-name \n##Additional css shall be included to format <spans> of class field-name
#The underlying database is sqlite3\n##There shall be a separate database for each site\n##There shall be a central database for spam and pen names\n#The database shall have 4 entyrypoints\n##[[getUserName]]\n##[[do]]\n##[[doAuth]]\n##[[getNonce]]\n#These entrypoints shall all make use of <html><a href="http://www.sqlite.org/capi3ref.html#sqlite3_set_authorizer" target="_blank"> sqlite3_set_authorizer</a></html> before any sql is executed.\n##all selects shall be allowed\n##before an insert to the entry table is authorized it shall be checked against the centralized spam feed\n###it shall also be checked by other tbd spam filtering algorithms.\n###if an entry has a link and a blob but no title, one update shall be permitted to insert a title and description with it (that passes the spam filtering rules above).\n####if an update of a blob with a description fails the spam filtering rules the blob shall also be deleted.\n####on a successful update of title and description the link field shall be changed to reflect the normal (hash-title) style link. \n##before an update, delete or insert to the feed table can be authorized a nonce must be requested\n###the sha1 of the nonce must be sent with sha1 of the login plus the sha1 of the password plus the pen name using the doAuth method for the above operations to complete successfully.
#Feeds shall be a xml rpc rss aggregator service.\n##It shall not be possible to use /feeds as an indiscriminate forward proxy.\n##When content is retrieved from other hosts it shall be cached, using a decorated uri as the filename.\n##parameters shall take a list of URIS, \n###an entry to extract default all\n###a field to extract default all\n###a label for translating links from xml to html anchor tags default "read more..."\n###age of oldest feed to use from cache default 30 minutes\n#feeds shall be sorted by recency\n#feeds shall be wrapped in a top level div tag with class of feed\n##entries in feeds can come from more than one rss feed\n#entrys in feeds shall be wrapped in html div tags\n##the class for entries shall be the URI normalized title of the feed\n##the id shall be the xml id from the entry\n#fields in entries shall be wrapped in html span tags\n##the class for fields shall be the name of the field eg "content"\n##the id field shall be only the id attribute of the entry div and not repeated as a separate span\n#The aggregator shall check to make sure that it's input is rss/atom before html-izing\n##empty content shall be returned if non atom/rss content is requested.\n#if a get request is made in feeds the local content shall be returned as atom\n#local content shall not be cached.
#An images directory shall be required to support static images in templates from <html><a href="http://www.oswd.org" target="_blank">OSWD</a></html>
#A javascript library shall be created to include the sha1 functionality\n#A javascript library shall also be required to wrap the db functionality\n##it shall be developed to hide the [[getNonce]] functionality\n##The javascript library shall maintain state (the server is stateless)\n#innerHTML shall be used to replace divs and spans in the html with the dynamic content\n##The static content shall be structured to describe that more is available with Javascript but could also include basic content\n#The java script shall be unobtrusive.\n##A page will have the following structure with respect to Javascript \n{{{\n <script type="text/javascript" src="syndicateme.js"></script>\n <script type="text/javascript" src="loadcontent.js"></script>\n</head>\n<body onLoad="loadContent()">\n}}}\n
# My family wouldn't blog. My family sends lots of emails though, some of which I pasted into the blog.\n# The template won't pass through html tidy. This is probably petty, but it would be nice to be able to use this tool when your template is all marked up to make sure that you didn't make any dumb mistakes, like forgetting a closing quote or something.\n# While the blogosphere is supposed to be a virtual conversation each blog is kind of isolated from the others. When I made the family blog my vision was that we would all post to it, and that would be another communication avenue. This is probably easier now that blogger's identity is gmail based, but it would have been cooler if people could have just made an article, that I could have approved or something.\n!what I would like to do about my beefs\n# Make the blog email based. At least my family seems more comfortable about email.\n# Use existing html tags rather than new tags.\n#Allow 1 blog to present data from multiple sources
The syndicateme aggregator engine is an interpreter like perl that runs as a single executable. It processes stdin to stdout.\n\n#the interpreter shall start by reading from stdin as input to expat, output to stdout\n#the interpreter shall also be embedded in a mod-syndicateme.so apache module.\n##as an apache module it shall execute xml in the body of http put or post requests (from xmlhttprequests).\n##for get requests it shall execute the name-value query parameters as though they were attributes of an xsl script tag.\n#when the interpreter comes across the start of an element it shall create a stlmap of the attributes.\n#if the element is script and there is a type="text/syndicateme" name-value pair then the interpreter shall call a factory method and create a class from the class="classname" name-value pair\n##it will pass the attributes to the constructor\n##it will then call the execute method with the attributes that the current instance of the interpreter was constructed with.\n##when data is encountered during the parsing of a syndicateme script element it shall be buffered\n##when the end of a syndicateme script element is encountered it shall be interpreted using the interpreter specified by the language attribute. \n##the server side script shall have access to at least the parameters, and ideally the classes\n##initially javascript shall be allowed as the language ... interpreted by the spider monkey interpreter\n##ideally sql shall also be supported ... interpreted by the sqlite3 interpreter, using the sqlite3_set_authorizer to prevent unauthorized access.\n\nIt is anticipated that the interpreter will be started with a file something like this:\n\n{{{\n<script type="text/syndicateme" class="SyndicateMe" infile="./templates/index.html" outfile="/var/www/html/index.html"/>\n<script type="text/syndicateme" class="SyndicateMe" infile="./templates/queenst.html" outfile="/var/www/html/queenst.html"/>\n}}}\n\nThe interpreter shall initially offer a few different classes to produce the online sample newspapers.\n#~SyndicateMe - calls another interpreter\n#~XsltProc - calls xsltproc from libxml in the context of the existing interpreter\n#~CopyProc - copies from infile to outfile\n#~UnEscape - changes {{{&lt;&gt;}}} to <>\n#~KeywordProc - produces a google base feed based on the most frequently occurring words\n#~SPopC - accesses the messages matching the addressee pattern from a pop mailbox, generating a docbook xml article for each of them.\n##as messages are parsed aggregate syndication files, with names based on the addressee, shall be updated with the new articles\n##special subject lines shall trigger updates to the "static content," articles like the contact/about/home/plan ....\n##a frequency count shall be performed on the words in the article and a google groups rss feed created, based on the most frequently occurring words \n#classes shall treat the interpreter's attributes like local variables ... one script tag can affect a local variable for use of the next script tag.
I have been using blogger since 2004. I have often thought that it would be good as a communication vehicle for a npo or consulting business. I set up the <html><a href="http://houseofpeaceindia.blogspot.com/" target="_blank">house of peace</a></html> with blogger when I was in India. It seems to have fallen into disrepair though. I think that part of the reason that the house of peace blog fell apart was that someone bought them a domain. Blogger supports pushing content on to your own domain, though. Another reason that the house of peace couldn't just use blogger for their web site was a lot of static information like contact information, a donate now button ....\n\nThis is one way to set up blogger for a pamphlet plus articles, kind of offering. \n#This approach [[starts with a template]] from <html><a href="http://oswd.org" target="_blank">oswd</a></html>. I chose to not use one of the blogger supplied templates, because I thought that it would be more instructive, and to show, just how customizable the look and feel can be for this approach.\n#It adds the bare minimum [[tags for blogger]].\n#[[Static content]] is created.\n#An [[external blog]] is created, using the new template with static content.\nBlogger has been one of the main pushes behind the Atom 1.0 syndication format, on which our offering shall also be based. They also have a lot to offer from the perspective of how to organize pushed content generation. See the following article for my [[3 beefs about blogger]] and how I will change the template language and the engine to resolve them.
[[Purpose]]\n[[TOC]]
A point of getting the word out is to build your identity. How do readers know whether to believe things written under a pen name that may or may not be the author's real name.\nReally, users belief or suspension of disbelief comes the same way that it has from the beginning of the written word. Consistency, evidence of research and connection with the reader are the tools that writers have always used to establish their credibility with their readers.
<html><a href="http://sourceforge.net/project/showfiles.php?group_id=184708" target="_blank">Download</a><br/>\n<a href="http://syndicateme.svn.sourceforge.net/viewvc/syndicateme/" target="_blank">Repository</a>\n</html>\n[[Writers]]
The point of syndication is to get the word out through as many avenues as possible. It should not be possible to use the author's words to steal his or her identity.\n\nPrivacy is created by allowing users to create an identity without storing any personal information about them. At sign up time the user enters their login, password (twice) and pen name. The login and password are immediately changed to sha1 digests by javascript running on the client. Only the pen name is known to the server.
A publish now widget could be applied to the gmail for domains homepage for the editor. It could also be part of the website itself. When the editor finished reading a lot of mail, he could click the publish now widget, and it would go then and get all of the articles he had just read. This would be the only mechanism, for publishing from the inbox, so that content wouldn't be inadvertently sent while still being read. The publish now widget would accept the pop password, and encrypt it using javascript on the browser so that the pop password could be "unknown" to us.
#To build an Atom 1.0 syndication community \n##initially along Queen Street in Toronto, Ontario, Canada. \n##secondly along King Street in Waterloo, Ontario, Canada\n#To effectively host the syndication community on the internet.\n##To provide http://QueenStNews.ca mash-up as well as http://KingStNews.ca.\n#To make the software supporting this syndication engine meet acceptable privacy standards, and be freely available.\n!Be like Amazon! Make it easy for customers and stakeholders to build community writing advertorials.
<<tabs txtMainTab Timeline Timeline TabTimeline All 'All tiddlers' TabAll Tags 'All tags' TabTags More 'More lists' TabMore>>\n<html><a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=184708&amp;type=4" width="125" height="37" border="0" alt="SourceForge.net Logo" /></a></html>
<html><img src="sf.jpg" alt="SourceForge.net Logo" /></html> ... an Ajax Atom 1.0 syndication engine
~SyndicateMe.
Some static content was required to set-up the articles on the blog, outlining the theme of the blog. As well we added contact, about information and put our business plan online as static information. To do this we removed the sidebar from the index page, and added in our menu options like so:\n{{{\n <div id="menu">\n <form id="search" class="show", method="get" action="http://www.google.com/search">\n <a href="/">home</a>&nbsp;\n <a href="/about.html">about</a>&nbsp;\n <a href="/plan.html">business plan</a>&nbsp;\n <a href="/contact.html">contact</a>&nbsp;\n <input type="text" name="q" size="15" maxlength="255" value="" />\n <input type="submit" value=">>" class="button"/>&nbsp;\n <input type="hidden" name="sitesearch" value="http://manyhands.biz"/>\n </form>\n\n </div>\n <!-- ..:: end of menu ::.. -->\n\n}}}\nYou may also notice that we added a google site search to the menu. For this to look correct, we also needed to remove some css for the form element. Once we had the static content page the way that we wanted it with respect to the menu, we copied it to all of the filenames in the menu and edited in the real content.
/***\n!Colors Used\n*@@bgcolor(#8cf): #8cf - Background blue@@\n*@@bgcolor(#18f): #18f - Top blue@@\n*@@bgcolor(#04b): #04b - Mid blue@@\n*@@bgcolor(#014):color(#fff): #014 - Bottom blue@@\n*@@bgcolor(#ffc): #ffc - Bright yellow@@\n*@@bgcolor(#fe8): #fe8 - Highlight yellow@@\n*@@bgcolor(#db4): #db4 - Background yellow@@\n*@@bgcolor(#841): #841 - Border yellow@@\n*@@bgcolor(#703):color(#fff): #703 - Title red@@\n*@@bgcolor(#866): #866 - Subtitle grey@@\n!Generic Rules /%==============================================%/\n***/\n/*{{{*/\nbody {\n background: #fff;\n color: #000;\n}\n\na{\n color: #04b;\n}\n\na:hover{\n background: #04b;\n color: #fff;\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: #703;\n background: #8cf;\n}\n\n.button {\n color: #014;\n border: 1px solid #fff;\n}\n\n.button:hover {\n color: #014;\n background: #fe8;\n border-color: #db4;\n}\n\n.button:active {\n color: #fff;\n background: #db4;\n border: 1px solid #841;\n}\n\n/*}}}*/\n/***\n!Header /%==================================================%/\n***/\n/*{{{*/\n.header {\n background: #00468b;\n}\n\n.headerShadow {\n color: #000;\n}\n\n.headerShadow a {\n font-weight: normal;\n color: #000;\n}\n\n.headerForeground {\n color: #fff;\n}\n\n.headerForeground a {\n font-weight: normal;\n color: #8cf;\n}\n\n/*}}}*/\n/***\n!General tabs /%=================================================%/\n***/\n/*{{{*/\n\n.tabSelected{\n color: #014;\n background: #eee;\n border-left: 1px solid #ccc;\n border-top: 1px solid #ccc;\n border-right: 1px solid #ccc;\n}\n\n.tabUnselected {\n color: #fff;\n background: #999;\n}\n\n.tabContents {\n color: #014;\n background: #eee;\n border: 1px solid #ccc;\n}\n\n.tabContents .button {\n border: 0;}\n\n/*}}}*/\n/***\n!Sidebar options /%=================================================%/\n~TiddlyLinks and buttons are treated identically in the sidebar and slider panel\n***/\n/*{{{*/\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid #04b;\n}\n\n#sidebarOptions .sliderPanel {\n background: #8cf;\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: #04b;\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: #fff;\n background: #04b;\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: #04b;\n background: #fff;\n}\n/*}}}*/\n/***\n!Message Area /%=================================================%/\n***/\n/*{{{*/\n#messageArea {\n border: 1px solid #841;\n background: #db4;\n color: #014;\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: #014;\n background: #fff;\n}\n\n/*}}}*/\n/***\n!Popup /%=================================================%/\n***/\n/*{{{*/\n.popup {\n background: #18f;\n border: 1px solid #04b;\n}\n\n.popup hr {\n color: #014;\n background: #014;\n border-bottom: 1px;\n}\n\n.popup li.disabled {\n color: #04b;\n}\n\n.popup li a, .popup li a:visited {\n color: #eee;\n border: none;\n}\n\n.popup li a:hover {\n background: #014;\n color: #fff;\n border: none;\n}\n/*}}}*/\n/***\n!Tiddler Display /%=================================================%/\n***/\n/*{{{*/\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: #866;\n}\n\n.title {\n color: #703;\n}\n\n.subtitle {\n color: #866;\n}\n\n.toolbar {\n color: #04b;\n}\n\n.tagging, .tagged {\n border: 1px solid #eee;\n background-color: #eee;\n}\n\n.selected .tagging, .selected .tagged {\n background-color: #ddd;\n border: 1px solid #bbb;\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: #014;\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: #ddd;\n}\n\n.selected .footer {\n color: #888;\n}\n\n.sparkline {\n background: #8cf;\n border: 0;\n}\n\n.sparktick {\n background: #014;\n}\n\n.errorButton {\n color: #ff0;\n background: #f00;\n}\n\n.cascade {\n background: #eef;\n color: #aac;\n border: 1px solid #aac;\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n/*}}}*/\n/***\n''The viewer is where the tiddler content is displayed'' /%------------------------------------------------%/\n***/\n/*{{{*/\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid #db4;\n}\n\n.viewer blockquote {\n border-left: 3px solid #666;\n}\n\n.viewer table {\n border: 2px solid #333;\n}\n\n.viewer th, thead td {\n background: #db4;\n border: 1px solid #666;\n color: #fff;\n}\n\n.viewer td, .viewer tr {\n border: 1px solid #666;\n}\n\n.viewer pre {\n border: 1px solid #fe8;\n background: #ffc;\n}\n\n.viewer code {\n color: #703;\n}\n\n.viewer hr {\n border: 0;\n border-top: dashed 1px #666;\n color: #666;\n}\n\n.highlight, .marked {\n background: #fe8;\n}\n/*}}}*/\n/***\n''The editor replaces the viewer in the tiddler'' /%------------------------------------------------%/\n***/\n/*{{{*/\n.editor input {\n border: 1px solid #04b;\n}\n\n.editor textarea {\n border: 1px solid #04b;\n width: 100%;\n}\n\n.editorFooter {\n color: #aaa;\n}\n\n/*}}}*/
It would be very neat to be able to send content to your favorite online publication from anywhere on the internet. Blogger has a blog this button, and we would like to have a syndicateme button that could be dragged from one of the publications in to your browser toolbar. It would then remember which publication it came from and send stories to that publication. I think that it is just some javascript on top of the talkback widget previously described.
A wizard to allow a newly signed-up user to select an oswd template, set a pop mailbox to use ....
#[[Blogger Syndication Engine]]\n#[[3 beefs about blogger]]\n#[[syndicateme template changes]]\n#[[Aggregator engine]]\n#[[SyndicateMe ajax wizard]]\n#[[Talkback Ajax widget]]\n#[[Syndicate this Ajax widget]]\n#[[Publish now Ajax widget]]
The syndicateme engine shall also be a libsyndicateme apache module. It will then be usable by javascript xmlhttprequest script tags. This feature will be useful for ajax access to the classes contained within the syndicateme engine.\n#A smtpproc class shall be created to let users send in stories directly from the online newspaper.
#The system must be highly responsive.\n##There shall be a minimum of transformations of the data\n##Client code shall be javascript\n##server code shall be C\n#Sign-up and entry/article writing and maintenance must be completely self serve\n#Presentation of information shall be standards based\n##xhtml and css shall be used\n##Atom 1.0 syndication shall be used\n##The published database format shall be a relational view of the atom scheme with feed and entry tables.\n##Entry records shall have a foreign key constraint with the feed table.\n#The system shall support upload of content with different mime times\n#Insertion of content that cannot be typed into a form shall be a 2 stage process mediated by a filename temporarily stored in the link field.\n#The server shall be stateless
#Templates shall be of the type found at <html><a href="http://www.oswd.org" target="_blank">OSWD</a></html>. \n#They shall be made up of xhtml, css and javascript only.\n#xhtml templates shall include the required css and javascript from another file.\n#While the page is being rendered initial dynamic content shall be document.written from a script element.
<div class='toolbar' macro='toolbar -closeTiddler closeOthers +editTiddler permalink references jump'></div>\n<div class='title' macro='view title'></div>\n<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date [[DD MMM YYYY]]'></span> (created <span macro='view created date [[DD MMM YYYY]]'></span>)</div>\n<div class='viewer' macro='view text wikified'></div>\n<div class='tagClear'></div>
If you are interested in this project and think that you can contribute in a meaningful way you can contact me, rhildred, at users.sourceforge.net. We think that the first thing that we can really use is someone to translate the meaning of content into all of the languages spoken along Queen Street in Toronto (or French, Spanish, Portuguese, Italian, Hindi, Mandarin, Cantonese .... ). We will also be very interested in css/html unobtrusive javascript designers to help us make mashups. We will also need aspiring writers to create sample content in areas of their interest, especially if these interests would be shared by people with an interest in one of the initial syndication communities.
#Development environment shall be set up on a machine on the internet to be accessed by developers using ssh.\n#The repository shall be svn \n##Subversion Server: https://syndicateme.svn.sourceforge.net\n##Path to Repository: /svnroot/syndicateme\n##Access Instructions: https://sourceforge.net/docs/E09\n#Apache mod-gsoap, expat, sqlite, and wget shall be the library set on the server \n#Automated server unit tests shall be written in perl using a make test perl module created especially for the task\n#css, xhtml, and unobtrusive Javascript shall be the environment on the client\n#client unit tests shall be constructed using html and a loadcontent.js script that loads content into a page and then posts the page dom back to the server for verification.\n#Not sure if it is also possible to use JavaScriptCore to do javascript tests on the server.\n#3 step build\n##make\n##make test\n##load a web page on a browser to test the javascript
When I was done with the template, I created my blog using blogger, and posted this as the template. I also set up my blog to be on my own host, and created a special login for blogger to use on the web server, and changed the ownership of the domain www root to be this special user. I had to get it to not use a clearall div or something in the publishing section, because the text wasn't flowing correctly around my sidebar.
The template that I chose to use is called the orchard. A template consists of html and css in a zip file. This is the orchard template html:\n\n{{{\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"\n "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\n\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n <meta name="generator" content=\n "HTML Tidy for Windows (vers 14 February 2006), see www.w3.org" />\n <meta http-equiv="Content-Type" content=\n "text/html; charset=us-ascii" />\n <!-- ..:: your title goes here ::.. -->\n\n <title>The Orchard</title>\n <link rel="stylesheet" type="text/css" href="/css/style.css" />\n</head>\n\n<body>\n <div id="header">\n <!-- ..:: your title goes here ::.. -->\n\n <div id="title">\n The Orchard\n </div>\n </div>\n\n <div id="left">\n <!-- ..:: your menu links go here ::.. -->\n\n <div id="menu">\n <a href="#">home</a>&nbsp; <a href="#">about</a>&nbsp;\n <a href="#">news</a>&nbsp; <a href="#">projects</a>&nbsp;\n <a href="#">gallery</a>&nbsp; <a href="#">links</a>&nbsp;\n <a href="#">contact</a>&nbsp;\n </div><!-- ..:: end of menu ::.. -->\n <!-- ..:: beginning of content ::.. -->\n\n <div id="content">\n <!-- ..:: beginning of sidebar ::.. -->\n\n <div id="sidebar">\n <h3>Sidebar Stuff...</h3>\n\n <p>blah blah blah blah blah blah blah blah ...blah?</p>\n </div><!-- ..:: end of sidebar ::.. -->\n\n <h2>Welcome...</h2>\n\n <p>Hola! This is my first design - it's pretty simple, me\n thinks. I'm still learning css, so *helpful* criticism would\n be much appreciated. (^_^) Oh, and instead of just filler\n text - you know, lorem ipsum and blah blah *yawn* blah - I'll\n bore you with some of my ramblings instead.</p>\n </div><!-- ..:: end of content ::.. -->\n\n <div id="footer">\n <a href="mailto:la.senorita.maria@gmail.com">design by\n maria</a> | <a href=\n "http://validator.w3.org/check?uri=referer">xhtml</a> |\n <a href=\n "http://jigsaw.w3.org/css-validator/check/referer">css</a>\n </div>\n </div>\n\n <div id="center"></div>\n</body>\n</html>\n}}}\n\nBlogger puts individual articles in year/month subdirectories, so I put the css and the images in their own directories and put in a link from the root, so they can be found from the articles. Other than the only change that I made was to remove some of the content, for this example. Once I had my template, I posted it and the css and image subdirectories to my webserver. When I surfed to the root of my web domain I could see the web page.
There is already a standard way to add behavior to xhtml and xsl. That is the script tag. By treating the xhtml as a script and using expat as the tokenizer, syndicateme can interpret xhtml, inserting the behaviour specified by the script tags, and passing through the other elements.\n\n#"run" xhtml as a syndicateme script\n#the syndicateme interpreter shall be recursive\n#pass through all elements but script elements to stdout\n#follow relative xi:include elements from the namespace http://www.w3.org/2001/XInclude\n#use script elements with type=text/syndicateme to instantiate a class within the syndicateme interpreter.\n##use the class attribute to specify the class name\n##run the body text() of the script element on the server using the xsl:script@language attribute\n#supply the rest of the attributes as stl map parameters to the constructor of the class. \n#the class shall implement a constructor, destructor and execute method\n#the execute method shall be supplied with a stl map of the attributes with which this interpreter was started\n\nFor data flow a data island approach is convenient. In the data island, it is useful to embed behavior that is executed on return to the server. Because of the way the dom doesn't parse script tags another approach is required to be able to edit xml using the dom and then pass it back for behavior from the server. For this reason div tags shall also be checked for syndicateme classes and executed as appropriate.
A blogger template is usually all in one file, with the css in-line. We will also have static content so, we will just post the html part onto blogger as our template. For blogger to insert dynamic content (articles) some special tags have to be added to our template. As well, I want to hide the static content from everything but the home page, which will be a mix of static and dynamic content. To do this I put a <div> tag with an id of boilerplate around my static content, and added a javascript file.\n\nThis is the little bit of javascript that I included in loadcontent.js\n\n{{{\nfunction loadContent()\n{\n if(window.location.pathname != '/')\n {\n document.getElementById("boilerplate").className="hide";\n }\n}\n}}}\n\nI also had to add a little something to the css.\n\n{{{\n.hide{\n position:absolute;\n top:-999px;\n left:-9999px;\n}\n}}}\n\nThis is the change that I made to the html.\n\n{{{\n...\n <script src="/javascript/loadcontent.js" type="text/javascript">\n</script>\n</head>\n\n<body onload="loadContent()">\n...\n<div class="show" id="boilerplate">\n....\n}}}\n\nThese are the blogger specific bits that I added. For the sidebar:\n\n{{{\n <!-- ..:: beginning of sidebar ::.. -->\n\n <div id="sidebar">\n <h3>Articles:</h3>\n\n <BloggerPreviousItems>\n <p><a href="<$BlogItemPermalinkURL$>"><$BlogPreviousItemTitle$></a></p>\n </BloggerPreviousItems>\n\n <h3>Archives:</h3>\n\n <BloggerArchives>\n <p><a href="<$BlogArchiveURL$>"><$BlogArchiveName$></a></p>\n </BloggerArchives>\n \n </div><!-- ..:: end of sidebar ::.. -->\n}}}\n\nAnd to display one dynamic article under my boilerplate:\n\n{{{\n <Blogger>\n <h2><a href="<$BlogItemUrl$>" title="external link"><$BlogItemTitle$></a>\n </h2>\n <$BlogItemBody$>\n </Blogger>\n}}}\n