Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.theme.create.images
on images (adrTheme) {
<<Changes
<<1/24/02; 5:10:50 PM by JES
<<Add images referenced by imageRef macros, used in the day- and item-level permalinks, and the source and enclosure image prefs.
<<12/31/01; 7:26:34 PM by JES
<<Set pagetable.processMacrosInHtmlTags to true, so we pick up images referenced by URL inside the tags.
<<12/30/01; 5:50:38 PM by JES
<<Simulate rendering of the templates stored in adrTheme, in order to get a table of all the image files, and then load the image files into the Theme table at adrTheme.
<<Call this script after calling radio.theme.loadTextFiles.
local (adrImages = @adrTheme^.images);
new (tableType, adrImages);
local (pc = file.getPathChar (), imageFileList = {});
on getImagePathsFromTemplate (adrTemplate) {
local (s = string (adrTemplate^));
local (pagetable); new (tableType, @pageTable);
bundle { //process macros in the template to get the image file paths
pagetable.macroStartCharacters = "<%";
pagetable.macroEndCharacters = "%>";
pagetable.processMacrosInHtmlTags = true;
pagetable.adrObject = @radio.data.website.default;
new (tableType, @pagetable.radioResponder);
pagetable.radioResponder.flImagePatching = true;
pagetable.radioResponder.flSameMachine = true;
local (oldPta);
try {
oldPta = html.getPageTableAddress ()};
html.setPageTableAddress (@pageTable);
s = html.processMacros (s, true, @pagetable);
html.deletePageTableAddress ();
if oldPta != nil {
html.setPageTableAddress (oldPta)}};
local (systemFolderRelPath = radio.data.folderNames.wwwSystemSubfolderName + pc);
if defined (pagetable.radioResponder.imageFiles) {
local (adrfile);
for adrfile in @pagetable.radioResponder.imageFiles {
local (relpath = nameOf (adrfile^));
if not (relpath beginsWith systemFolderRelPath) {
if not (imageFileList contains relpath) {
imageFileList = imageFileList + relpath}}}};
return (imageFileList)};
local (adrTemplate, adrTemplates = @adrTheme^.textFiles);
for adrTemplate in adrTemplates {
getImagePathsFromTemplate (adrTemplate)};
bundle { //get images referenced in weblogData.prefs
local (adrblog = radio.weblog.init ());
getImagePathsFromTemplate (@adrblog^.prefs.archiveLinkImgTag);
getImagePathsFromTemplate (@adrblog^.prefs.itemPermaLinkImgTag);
getImagePathsFromTemplate (@adrblog^.prefs.enclosureImgTag);
getImagePathsFromTemplate (@adrblog^.prefs.sourceImgTag)};
local (relpath);
for relpath in imageFileList {
local (f = user.radio.prefs.wwwFolder + relPath);
local (slashDelimitedPath = string.replaceAll (relPath, pc, "/"));
local (adrimage = @adrImages^.[slashDelimitedPath]);
new (tableType, adrimage);
adrimage^.bits = file.readWholeFile (f);
adrimage^.timeCreated = file.created (f);
adrimage^.timeModified = file.modified (f)};
return (true)};
bundle { //test code
local (adrTheme = @scratchpad.testTheme);
images (adrTheme);
edit (adrTheme)}
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.