Monday, November 08, 2010 at 12:00 AM.
scripting2Suite.server.getStoryText
on getStoryText (adrstory, flExpanded=true, flComments=false) {
<<Changes
<<7/7/10; 12:00:37 PM by DW
<<Instead of using the class "show" to display non-hidden text, use a special class for non-hidden text on an index page, "showForIndexPage." It has left indentation set to zero, because we're only displaying two-level hierarchy. If this were to change we'd have to change the class definition in the stylesheet.
<<7/4/10; 5:48:56 PM by DW
<<Add optional parameter, flComments.
<<6/7/10; 7:32:55 AM by DW
<<Add optional parameter, flExpanded.
<<6/6/10; 9:11:11 AM by DW
<<Common code for building the aggregate pages: the home page, daily pages and month pages. We return the text for a single story.
local (adrcache = @adrstory^.textCache);
bundle { //see if you can get it from the cache
if defined (adrcache^) {
if adrcache^.flExpanded == flExpanded {
if adrcache^.whenLastBuild >= adrstory^.whenLastSave {
adrcache^.ctrefs++;
adrcache^.whenLastRef = clock.now ();
return (adrcache^.htmltext)}}}};
local (htmltext = "\r\r", indentlevel = 0, idstory, icon);
local (permalinkImg = string (scripting2Suite.data.html.sharpPermalinkImg));
on add (s) {
htmltext = htmltext + string.filledstring ("\t", indentlevel) + s + "\r\n"};
on decode (s) {
return (xml.entitydecode (s, true))};
bundle { //set idStory
idstory = string.lastfield (adrstory^.url, "/");
idstory = string.nthfield (idstory, ".", 1)};
bundle { //set icon
local (iconname);
if flExpanded {
iconname = "minus"}
else {
iconname = "plus"};
<<icon = "<a href=\"javascript:expandCollapse('" + idstory + "');\"><img border=\"0\" align=\"left\" id=\"img_" + idstory + "\" src=\"http://www.scripting.com/mktree/" + iconname + ".gif\"></a> "
icon = scripting2Suite.server.getExpandCollapseIcon (idstory, flExpanded, "showForIndexPage")};
bundle { //add the story title
local (permalink = "<a href=\"" + adrstory^.url + "\">" + string (scripting2Suite.data.html.arrowPermalinkImg) + "</a>");
add ("<h4 class=\"expandableHeadline\">" + icon + adrstory^.title + " " + permalink + "</h4>")};
bundle { //add the <div> for expand/collapse
local (classname);
if flExpanded {
classname = "showForIndexPage"}
else {
classname = "hide"};
add ("<div class=\"" + classname + "\" id=\"" + idstory + "\" name=\"" + idstory + "\">"); indentlevel++};
local (adrsummit = scripting2Suite.server.getStorySummit (adrstory), adr);
for adr in adrsummit {
if nameof (adr^) endswith "outline" {
add ("<p class=\"storyText\">" + decode (xml.getattributevalue (adr, "text")) + scripting2Suite.server.getLinkHtml (adr) + "</p>")}};
bundle { //add timestamp, permalink, comment link
local (permalink, commentlink);
bundle { //set permalink
permalink = "<a href=\"" + adrstory^.url + "\">" + permalinkImg + "</a> "};
bundle { //set comment javascript
if flComments and (adrstory^.postdate >= date ("11/3/2007")) {
commentlink = " <a href=\"" + adrstory^.url + "#disqus_thread\"></a>."}
else {
commentlink = ""}};
add ("<p class=\"storyTimeStamp\">" + permalink + adrstory^.postdate + ". " + commentlink + "</p>")};
bundle { //add the closing </div>
add ("</div>"); indentlevel--};
bundle { //manage cache
if not defined (adrcache^) {
new (tabletype, adrcache);
adrcache^.htmltext = htmltext;
adrcache^.whenLastBuild = clock.now ();
adrcache^.flExpanded = flExpanded;
adrcache^.ctrefs = 0}};
return (htmltext)};
bundle { //test code
script.startprofile (true);
s = getStoryText (@config.scripting2.server.users.davewiner.calendar.["2010"].["05"].["12"].["03059"]);
script.stopprofile (@scratchpad.storytextprofile);
edit (@scratchpad.storytextprofile);
webbrowser.displaytext (s)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.