Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.data.standardMacros.embedStyleSheet
on embedStyleSheet (sheetName="default", adrPageTable=nil) {
<<Embed a style sheet in the <head> of a page.
<<Call this macro from within your #pageHeader attribute.
<<This macro renders the style sheet and returns the text.
<<Style sheets are stored in a #styleSheets table.
<<You can have multiple, named style sheets.
<<The #styleSheets are searched hierarchically.
<<Thu, May 14, 1998 at 4:08:22 PM by PBS
local (nomad, adrStyleSheet, s);
if adrPageTable == nil {
adrPageTable = html.getPageTableAddress ()};
nomad = adrPageTable^.adrObject;
loop { //search for the named style sheet object
nomad = parentOf (nomad^);
if nomad == nil or nomad == @root {
break};
if defined (nomad^.["#styleSheets"].[sheetName]) {
adrStyleSheet = @nomad^.["#styleSheets"].[sheetName];
break};
if defined (nomad^.["#prefs"].styleSheets.[sheetName]) {
adrStyleSheet = @nomad^.["#prefs"].styleSheets.[sheetName];
break};
if defined (nomad^.["#prefs"].["#styleSheets"].[sheetName]) {
adrStyleSheet = @nomad^.["#prefs"].["#styleSheets"].[sheetName];
break}};
if adrStyleSheet == nil { //Didn't find it
scriptError ("Can't embed style sheet \"" + sheetName + "\" because it wasn't found.")};
bundle { //render the style sheet object
case typeOf (adrStyleSheet^) {
outlineType {
<<We cache rendered sheets based on modification dates.
local (adrCache = @temp.renderedStyleSheets);
local (adrCachedSheet);
if not defined (adrCache^) {
new (tableType, adrCache)};
adrCachedSheet = @adrCache^.[adrStyleSheet];
if defined (adrCachedSheet^) {
local (modDateSheet = timeModified (adrStyleSheet));
local (modDateCache = timeModified (adrCachedSheet));
if modDateSheet < modDateCache {
s = string (adrCachedSheet^)}};
if s == "" {
s = html.utilities.renderStyleSheet (adrStyleSheet);
wp.newTextObject (s, adrCachedSheet)}};
scriptType {
s = adrStyleSheet^ ()}}
else {
s = string (adrStyleSheet^)}};
<<Build the html.
s = "<style type=\"text/css\">\r<!--\r" + s + "\r-->\r</style>";
s = string.replaceAll (s, "\r", "\r\t");
return (s)} //return the style sheet
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.